diff --git a/Android.mk b/Android.mk
index a03d671..1c3fae9 100644
--- a/Android.mk
+++ b/Android.mk
@@ -12,7 +12,7 @@
 endif
 
 src_dirs := src src-bind $(phone_common_dir)/src
-res_dirs := res res-aosp res-icons $(phone_common_dir)/res
+res_dirs := res $(phone_common_dir)/res
 asset_dirs := assets
 
 LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
@@ -23,9 +23,6 @@
     $(support_library_root_dir)/v7/recyclerview/res
 LOCAL_ASSET_DIR := $(addprefix $(LOCAL_PATH)/, $(asset_dirs))
 
-LOCAL_FULL_MANIFEST_FILE := $(LOCAL_PATH)/AndroidManifest.xml
-LOCAL_FULL_LIBS_MANIFEST_FILES := $(LOCAL_PATH)/AndroidManifest_common.xml
-
 LOCAL_AAPT_FLAGS := \
     --auto-add-overlay \
     --extra-packages com.android.contacts.common \
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a1092c0..f76f836 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -15,24 +15,582 @@
 -->
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.contacts"
-    android:versionCode="10618"
-    android:versionName="1.6.18">
+          package="com.android.contacts"
+          android:versionCode="10700"
+          android:versionName="1.7.0">
 
-    <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="25" />
+    <uses-sdk
+        android:minSdkVersion="21"
+        android:targetSdkVersion="25"/>
 
-    <original-package android:name="com.android.contacts" />
+    <original-package android:name="com.android.contacts"/>
 
     <!-- Contacts permission listed first because order determines
          order that permissions are requested with some OEMs -->
+    <uses-permission android:name="android.permission.READ_CONTACTS"/>
+    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
+    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
+    <uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED"/>
+    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+    <uses-permission android:name="android.permission.CALL_PHONE"/>
+    <uses-permission android:name="android.permission.READ_PROFILE"/>
+    <uses-permission android:name="android.permission.WRITE_PROFILE"/>
+    <uses-permission android:name="android.permission.INTERNET"/>
+    <uses-permission android:name="android.permission.NFC"/>
+    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+    <uses-permission android:name="android.permission.WAKE_LOCK"/>
+    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
+    <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+    <uses-permission android:name="android.permission.VIBRATE"/>
+    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+    <!-- Following used for QuickContacts -->
+    <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"/>
+    <!-- Following used for Contact metadata syncing -->
+    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
+    <!-- Following used for getting the status of the contacts sync adapter -->
+    <uses-permission android:name="android.permission.READ_SYNC_STATS"/>
+
+    <uses-feature
+        android:name="android.hardware.telephony"
+        android:required="false"/>
 
     <application
         android:name="com.android.contacts.ContactsApplication"
-        android:label="@string/applicationLabel"
-        android:icon="@mipmap/ic_contacts_launcher"
-        android:taskAffinity="android.task.contacts"
         android:hardwareAccelerated="true"
+        android:icon="@mipmap/ic_contacts_launcher"
+        android:label="@string/applicationLabel"
         android:supportsRtl="true"
-        android:usesCleartextTraffic="false"
-    />
+        android:taskAffinity="android.task.contacts"
+        android:usesCleartextTraffic="false">
+        <!-- The main Contacts activity with the contact list, favorites, and groups. -->
+        <activity
+            android:name=".activities.PeopleActivity"
+            android:alwaysRetainTaskState="true"
+            android:launchMode="singleTop"
+            android:resizeableActivity="true"
+            android:theme="@style/PeopleActivityTheme"
+            >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+                <category android:name="android.intent.category.BROWSABLE"/>
+                <category android:name="android.intent.category.APP_CONTACTS"/>
+            </intent-filter>
+            <intent-filter>
+                <action android:name="com.android.contacts.action.LIST_DEFAULT"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.TAB"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="com.android.contacts.action.LIST_CONTACTS"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.TAB"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="com.android.contacts.action.LIST_ALL_CONTACTS"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.TAB"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="com.android.contacts.action.LIST_CONTACTS_WITH_PHONES"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.TAB"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="com.android.contacts.action.LIST_STARRED"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.TAB"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="com.android.contacts.action.LIST_FREQUENT"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.TAB"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="com.android.contacts.action.LIST_STREQUENT"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.TAB"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="android.intent.action.SEARCH"/>
+                <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.SEARCH"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </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"/>
+                <data android:mimeType="vnd.android.cursor.dir/contact"/>
+                <data android:mimeType="vnd.android.cursor.item/group"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="android.intent.action.EDIT"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+                <data android:mimeType="vnd.android.cursor.item/group"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="android.intent.action.INSERT"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+                <data android:mimeType="vnd.android.cursor.dir/group"/>
+            </intent-filter>
+
+            <meta-data
+                android:name="android.app.searchable"
+                android:resource="@xml/searchable"
+                />
+
+            <meta-data
+                android:name="android.app.shortcuts"
+                android:resource="@xml/shortcuts"
+                />
+
+        </activity>
+
+        <activity
+            android:name=".activities.ContactSelectionActivity"
+            android:clearTaskOnLaunch="true"
+            android:launchMode="singleTop"
+            android:theme="@style/ContactPickerTheme"
+            android:uiOptions="splitActionBarWhenNarrow"
+            android:windowSoftInputMode="adjustResize">
+            <intent-filter>
+                <action android:name="android.intent.action.INSERT_OR_EDIT"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+
+                <data android:mimeType="vnd.android.cursor.item/person"/>
+                <data android:mimeType="vnd.android.cursor.item/contact"/>
+                <data android:mimeType="vnd.android.cursor.item/raw_contact"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="android.intent.action.PICK"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+
+                <data android:mimeType="vnd.android.cursor.dir/contact"/>
+                <data android:mimeType="vnd.android.cursor.dir/person"/>
+                <data android:mimeType="vnd.android.cursor.dir/phone_v2"/>
+                <data android:mimeType="vnd.android.cursor.dir/phone"/>
+                <data android:mimeType="vnd.android.cursor.dir/postal-address_v2"/>
+                <data android:mimeType="vnd.android.cursor.dir/postal-address"/>
+                <data android:mimeType="vnd.android.cursor.dir/email_v2"/>
+                <data android:mimeType="vnd.android.cursor.dir/group"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="android.intent.action.GET_CONTENT"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+
+                <data android:mimeType="vnd.android.cursor.item/contact"/>
+                <data android:mimeType="vnd.android.cursor.item/person"/>
+                <data android:mimeType="vnd.android.cursor.item/phone_v2"/>
+                <data android:mimeType="vnd.android.cursor.item/phone"/>
+                <data android:mimeType="vnd.android.cursor.item/postal-address_v2"/>
+                <data android:mimeType="vnd.android.cursor.item/postal-address"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="com.android.contacts.action.JOIN_CONTACT"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+        </activity>
+
+        <!-- Backwards compatibility: somebody may have hard coded this activity name -->
+        <activity-alias
+            android:name="ContactsListActivity"
+            android:targetActivity=".activities.PeopleActivity"
+            />
+
+        <!-- Backwards compatibility: "Contacts" from Honeycomb -->
+        <activity-alias
+            android:name=".activities.ContactsFrontDoor"
+            android:exported="true"
+            android:targetActivity=".activities.PeopleActivity"
+            />
+
+        <!-- Backwards compatibility: "Contacts" from Gingerbread and earlier -->
+        <activity-alias
+            android:name="DialtactsContactsEntryActivity"
+            android:exported="true"
+            android:targetActivity=".activities.PeopleActivity"
+            />
+
+        <!-- Used to set options -->
+        <activity
+            android:name=".preference.ContactsPreferenceActivity"
+            android:exported="false"
+            android:label="@string/activity_title_settings"
+            android:launchMode="singleTop"
+            android:theme="@style/ContactsPreferencesTheme"/>
+
+        <activity
+            android:name=".activities.LicenseActivity"
+            android:exported="true"
+            android:label="@string/activity_title_licenses"
+            android:theme="@style/ContactsPreferencesTheme"/>
+
+        <!-- Used to filter contacts list by account -->
+        <activity
+            android:name=".list.AccountFilterActivity"
+            android:label="@string/activity_title_contacts_filter"
+            android:theme="@style/ContactListFilterTheme"/>
+
+        <!-- Used to select display and sync groups -->
+        <activity
+            android:name=".list.CustomContactListFilterActivity"
+            android:label="@string/custom_list_filter"
+            android:theme="@style/ContactListFilterTheme"/>
+
+        <activity
+            android:name=".activities.RequestPermissionsActivity"
+            android:exported="false"
+            android:theme="@style/PeopleTheme"/>
+
+        <activity
+            android:name=".activities.RequestDesiredPermissionsActivity"
+            android:exported="false"
+            android:theme="@style/PeopleTheme"/>
+
+        <activity
+            android:name=".activities.RequestImportVCardPermissionsActivity"
+            android:exported="false"
+            android:theme="@style/PeopleTheme"/>
+
+        <activity
+            android:name=".activities.ShowOrCreateActivity"
+            android:theme="@android:style/Theme.Material.Light.Dialog.NoActionBar">
+
+            <intent-filter>
+                <action android:name="com.android.contacts.action.SHOW_OR_CREATE_CONTACT"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+
+                <data android:scheme="mailto"/>
+                <data android:scheme="tel"/>
+            </intent-filter>
+        </activity>
+
+        <activity
+            android:name=".quickcontact.QuickContactActivity"
+            android:excludeFromRecents="true"
+            android:launchMode="singleTop"
+            android:taskAffinity=""
+            android:theme="@style/Theme.QuickContact"
+            android:windowSoftInputMode="stateUnchanged">
+
+            <intent-filter>
+                <action android:name="com.android.contacts.action.QUICK_CONTACT"/>
+                <action android:name="android.provider.action.QUICK_CONTACT"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+
+                <data android:mimeType="vnd.android.cursor.item/contact"/>
+                <data android:mimeType="vnd.android.cursor.item/person"/>
+            </intent-filter>
+
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW"/>
+                <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>
+        </activity>
+
+        <receiver
+            android:name=".quickcontact.QuickContactBroadcastReceiver"
+            android:exported="false"/>
+
+        <activity-alias
+            android:name="ContactShortcut"
+            android:icon="@drawable/logo_quick_contacts_color_44in48dp"
+            android:label="@string/shortcutContact"
+            android:targetActivity=".activities.ContactSelectionActivity">
+
+            <intent-filter>
+                <action android:name="android.intent.action.CREATE_SHORTCUT"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+
+        </activity-alias>
+
+        <activity-alias
+            android:name="alias.DialShortcut"
+            android:icon="@drawable/logo_quick_contacts_dialer_color_44in48dp"
+            android:label="@string/shortcutDialContact"
+            android:targetActivity=".activities.ContactSelectionActivity">
+
+            <intent-filter>
+                <action android:name="android.intent.action.CREATE_SHORTCUT"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.CAR_MODE"/>
+            </intent-filter>
+
+        </activity-alias>
+
+        <activity-alias
+            android:name="alias.MessageShortcut"
+            android:icon="@drawable/logo_quick_contacts_mail_color_44in48dp"
+            android:label="@string/shortcutMessageContact"
+            android:targetActivity=".activities.ContactSelectionActivity">
+
+            <intent-filter>
+                <action android:name="android.intent.action.CREATE_SHORTCUT"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+
+        </activity-alias>
+
+        <!-- Accounts changed prompt that can appear when creating a new contact. -->
+        <activity
+            android:name=".activities.ContactEditorAccountsChangedActivity"
+            android:exported="false"
+            android:theme="@style/ContactEditorAccountsChangedActivityTheme"
+            android:windowSoftInputMode="adjustResize"/>
+
+        <!-- Edit or create a contact with only the most important fields displayed initially. -->
+        <activity
+            android:name=".activities.ContactEditorActivity"
+            android:theme="@style/EditorActivityTheme"
+            android:windowSoftInputMode="stateHidden|adjustResize">
+
+            <intent-filter>
+                <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>
+
+        <!-- Keep support for apps that expect the Compact editor -->
+        <activity-alias
+            android:name="com.android.contacts.activities.CompactContactEditorActivity"
+            android:exported="true"
+            android:targetActivity=".activities.ContactEditorActivity">
+            <intent-filter android:priority="-1">
+                <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-alias>
+
+        <activity
+            android:name=".activities.ContactEditorSpringBoardActivity"
+            android:theme="@style/TransparentThemeAppCompat">
+
+            <intent-filter>
+                <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>
+        </activity>
+
+        <activity android:name=".test.FragmentTestActivity">
+            <intent-filter>
+                <category android:name="android.intent.category.TEST"/>
+            </intent-filter>
+        </activity>
+
+        <!-- Stub service used to keep our process alive long enough for
+             background threads to finish their operations. -->
+        <service
+            android:name=".util.EmptyService"
+            android:exported="false"/>
+
+        <!-- Service to save a contact -->
+        <service
+            android:name=".ContactSaveService"
+            android:exported="false"/>
+
+        <!-- Service to import contacts from the SIM card -->
+        <service
+            android:name=".SimImportService"
+            android:exported="false"/>
+
+        <!-- Attaches a photo to a contact. Started from external applications -->
+        <activity
+            android:name=".activities.AttachPhotoActivity"
+            android:label="@string/attach_photo_dialog_title"
+            android:taskAffinity="">
+            <intent-filter>
+                <action android:name="android.intent.action.ATTACH_DATA"/>
+                <data android:mimeType="image/*"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+        </activity>
+
+        <!-- vCard related -->
+        <activity
+            android:name=".vcard.ImportVCardActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:theme="@style/BackgroundOnlyTheme">
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW"/>
+
+                <data android:mimeType="text/directory"/>
+                <data android:mimeType="text/vcard"/>
+                <data android:mimeType="text/x-vcard"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+        </activity>
+
+        <activity
+            android:name=".vcard.NfcImportVCardActivity"
+            android:configChanges="orientation|screenSize|keyboardHidden"
+            android:theme="@style/BackgroundOnlyTheme">
+            <intent-filter>
+                <action android:name="android.nfc.action.NDEF_DISCOVERED"/>
+
+                <data android:mimeType="text/vcard"/>
+                <data android:mimeType="text/x-vcard"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+            </intent-filter>
+        </activity>
+
+        <activity
+            android:name=".vcard.CancelActivity"
+            android:theme="@style/BackgroundOnlyTheme"/>
+
+        <activity
+            android:name=".vcard.SelectAccountActivity"
+            android:theme="@style/BackgroundOnlyTheme"/>
+
+        <activity
+            android:name=".vcard.ExportVCardActivity"
+            android:theme="@style/BackgroundOnlyTheme"/>
+
+        <activity
+            android:name=".vcard.ShareVCardActivity"
+            android:theme="@style/BackgroundOnlyTheme"/>
+
+        <activity
+            android:name=".activities.SimImportActivity"
+            android:label="@string/sim_import_title"
+            android:theme="@style/PeopleThemeAppCompat.FullScreenDialog.SimImportActivity"/>
+
+
+        <service
+            android:name=".vcard.VCardService"
+            android:exported="false"/>
+        <!-- end vCard related -->
+
+        <!-- Intercept Dialer Intents for devices without a phone.
+             This activity should have the same intent filters as the DialtactsActivity,
+             so that its capturing the same events. Omit android.intent.category.LAUNCHER, because
+             we don't want this to show up in the Launcher. The priorities of the intent-filters
+             are set lower, so that the user does not see a disambig dialog -->
+        <activity
+            android:name="com.android.contacts.NonPhoneActivity"
+            android:theme="@style/NonPhoneActivityTheme">
+            <intent-filter android:priority="-1">
+                <action android:name="android.intent.action.MAIN"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.BROWSABLE"/>
+            </intent-filter>
+            <intent-filter android:priority="-1">
+                <action android:name="android.intent.action.VIEW"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.BROWSABLE"/>
+
+                <data android:scheme="tel"/>
+            </intent-filter>
+            <intent-filter android:priority="-1">
+                <action android:name="android.intent.action.VIEW"/>
+
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.BROWSABLE"/>
+
+                <data android:mimeType="vnd.android.cursor.dir/calls"/>
+            </intent-filter>
+        </activity>
+
+        <activity
+            android:name="com.android.contacts.dialog.CallSubjectDialog"
+            android:theme="@style/Theme.CallSubjectDialogTheme"
+            android:windowSoftInputMode="stateVisible|adjustResize">
+            <intent-filter>
+                <action android:name="android.intent.action.VIEW"/>
+            </intent-filter>
+        </activity>
+
+        <!-- Service that is exclusively for the Phone application that sends out a view
+             notification. This service might be removed in future versions of the app.
+
+             This is called explicitly by the phone app via package name and class.
+             (PhoneUtils.sendViewNotificationAsync()).  If this service moves, then phone
+             needs to be changed as well.
+        -->
+        <service
+            android:name=".ViewNotificationService"
+            android:exported="true"
+            android:permission="android.permission.WRITE_CONTACTS">
+            <intent-filter>
+                <action android:name="com.android.contacts.VIEW_NOTIFICATION"/>
+                <data android:mimeType="vnd.android.cursor.item/contact"/>
+            </intent-filter>
+        </service>
+
+        <!-- Service used to run JobScheduler jobs -->
+        <service
+            android:name="com.android.contacts.ContactsJobService"
+            android:permission="android.permission.BIND_JOB_SERVICE"/>
+
+        <provider
+            android:name="android.support.v4.content.FileProvider"
+            android:authorities="@string/contacts_file_provider_authority"
+            android:exported="false"
+            android:grantUriPermissions="true">
+            <meta-data
+                android:name="android.support.FILE_PROVIDER_PATHS"
+                android:resource="@xml/file_paths"/>
+        </provider>
+
+        <meta-data
+            android:name="android.nfc.disable_beam_default"
+            android:value="true"/>
+
+    </application>
 </manifest>
diff --git a/AndroidManifest_common.xml b/AndroidManifest_common.xml
deleted file mode 100644
index b2a3c88..0000000
--- a/AndroidManifest_common.xml
+++ /dev/null
@@ -1,522 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.contacts">
-
-    <original-package android:name="com.android.contacts" />
-
-    <!-- Contacts permission listed first because order determines
-         order that permissions are requested with some OEMs -->
-    <uses-permission android:name="android.permission.READ_CONTACTS" />
-    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
-    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
-    <uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED" />
-    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-    <uses-permission android:name="android.permission.CALL_PHONE" />
-    <uses-permission android:name="android.permission.READ_PROFILE" />
-    <uses-permission android:name="android.permission.WRITE_PROFILE" />
-    <uses-permission android:name="android.permission.INTERNET" />
-    <uses-permission android:name="android.permission.NFC" />
-    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
-    <uses-permission android:name="android.permission.WAKE_LOCK" />
-    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
-    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
-    <uses-permission android:name="android.permission.VIBRATE" />
-    <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
-    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
-    <!-- Following used for QuickContacts -->
-    <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" />
-    <!-- Following used for Contact metadata syncing -->
-    <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
-    <!-- Following used for getting the status of the contacts sync adapter -->
-    <uses-permission android:name="android.permission.READ_SYNC_STATS" />
-
-    <uses-feature android:name="android.hardware.telephony" android:required="false"/>
-
-     <application>
-     <!-- The main Contacts activity with the contact list, favorites, and groups. -->
-        <activity android:name=".activities.PeopleActivity"
-            android:theme="@style/PeopleActivityTheme"
-            android:alwaysRetainTaskState="true"
-            android:launchMode="singleTop"
-            android:resizeableActivity="true"
-        >
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.LAUNCHER" />
-                <category android:name="android.intent.category.BROWSABLE" />
-                <category android:name="android.intent.category.APP_CONTACTS" />
-            </intent-filter>
-            <intent-filter>
-                <action android:name="com.android.contacts.action.LIST_DEFAULT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.TAB" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="com.android.contacts.action.LIST_CONTACTS" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.TAB" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="com.android.contacts.action.LIST_ALL_CONTACTS" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.TAB" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="com.android.contacts.action.LIST_CONTACTS_WITH_PHONES" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.TAB" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="com.android.contacts.action.LIST_STARRED" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.TAB" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="com.android.contacts.action.LIST_FREQUENT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.TAB" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="com.android.contacts.action.LIST_STREQUENT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.TAB" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="android.intent.action.SEARCH" />
-                <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.SEARCH" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </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" />
-                <data android:mimeType="vnd.android.cursor.dir/contact" />
-                <data android:mimeType="vnd.android.cursor.item/group" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="android.intent.action.EDIT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.item/group" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="android.intent.action.INSERT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.dir/group" />
-            </intent-filter>
-
-            <meta-data android:name="android.app.searchable"
-                android:resource="@xml/searchable"
-            />
-
-           <meta-data android:name="android.app.shortcuts"
-                android:resource="@xml/shortcuts"
-            />
-
-        </activity>
-
-        <activity android:name=".activities.ContactSelectionActivity"
-            android:theme="@style/ContactPickerTheme"
-            android:launchMode="singleTop"
-            android:clearTaskOnLaunch="true"
-            android:uiOptions="splitActionBarWhenNarrow"
-            android:windowSoftInputMode="adjustResize">
-            <intent-filter>
-                <action android:name="android.intent.action.INSERT_OR_EDIT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.item/person" />
-                <data android:mimeType="vnd.android.cursor.item/contact" />
-                <data android:mimeType="vnd.android.cursor.item/raw_contact" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="android.intent.action.PICK" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.dir/contact" />
-                <data android:mimeType="vnd.android.cursor.dir/person" />
-                <data android:mimeType="vnd.android.cursor.dir/phone_v2" />
-                <data android:mimeType="vnd.android.cursor.dir/phone" />
-                <data android:mimeType="vnd.android.cursor.dir/postal-address_v2" />
-                <data android:mimeType="vnd.android.cursor.dir/postal-address" />
-                <data android:mimeType="vnd.android.cursor.dir/email_v2" />
-                <data android:mimeType="vnd.android.cursor.dir/group"/>
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="android.intent.action.GET_CONTENT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.item/contact" />
-                <data android:mimeType="vnd.android.cursor.item/person" />
-                <data android:mimeType="vnd.android.cursor.item/phone_v2" />
-                <data android:mimeType="vnd.android.cursor.item/phone" />
-                <data android:mimeType="vnd.android.cursor.item/postal-address_v2" />
-                <data android:mimeType="vnd.android.cursor.item/postal-address" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="com.android.contacts.action.JOIN_CONTACT" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-        </activity>
-
-        <!-- Backwards compatibility: somebody may have hard coded this activity name -->
-        <activity-alias android:name="ContactsListActivity"
-            android:targetActivity=".activities.PeopleActivity"
-        />
-
-        <!-- Backwards compatibility: "Contacts" from Honeycomb -->
-        <activity-alias android:name=".activities.ContactsFrontDoor"
-            android:targetActivity=".activities.PeopleActivity"
-            android:exported="true"
-        />
-
-        <!-- Backwards compatibility: "Contacts" from Gingerbread and earlier -->
-        <activity-alias android:name="DialtactsContactsEntryActivity"
-            android:targetActivity=".activities.PeopleActivity"
-            android:exported="true"
-        />
-
-        <!-- Used to set options -->
-        <activity
-            android:name=".common.preference.ContactsPreferenceActivity"
-            android:label="@string/activity_title_settings"
-            android:theme="@style/ContactsPreferencesTheme"
-            android:launchMode="singleTop"
-            android:exported="false"/>
-
-        <activity android:name=".common.activity.LicenseActivity"
-            android:label="@string/activity_title_licenses"
-            android:theme="@style/ContactsPreferencesTheme"
-            android:exported="true" />
-
-        <!-- Used to filter contacts list by account -->
-        <activity
-            android:name=".common.list.AccountFilterActivity"
-            android:label="@string/activity_title_contacts_filter"
-            android:theme="@style/ContactListFilterTheme" />
-
-        <!-- Used to select display and sync groups -->
-        <activity
-            android:name=".common.list.CustomContactListFilterActivity"
-            android:label="@string/custom_list_filter"
-            android:theme="@style/ContactListFilterTheme" />
-
-        <activity
-            android:name=".common.activity.RequestPermissionsActivity"
-            android:theme="@style/PeopleTheme"
-            android:exported="false"/>
-
-        <activity
-            android:name=".common.activity.RequestDesiredPermissionsActivity"
-            android:theme="@style/PeopleTheme"
-            android:exported="false"/>
-
-        <activity
-            android:name=".common.activity.RequestImportVCardPermissionsActivity"
-            android:theme="@style/PeopleTheme"
-            android:exported="false"/>
-
-        <activity
-            android:name=".activities.ShowOrCreateActivity"
-            android:theme="@android:style/Theme.Material.Light.Dialog.NoActionBar">
-
-            <intent-filter>
-                <action android:name="com.android.contacts.action.SHOW_OR_CREATE_CONTACT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:scheme="mailto" />
-                <data android:scheme="tel" />
-            </intent-filter>
-        </activity>
-
-        <activity
-            android:name=".quickcontact.QuickContactActivity"
-            android:theme="@style/Theme.QuickContact"
-            android:launchMode="singleTop"
-            android:excludeFromRecents="true"
-            android:taskAffinity=""
-            android:windowSoftInputMode="stateUnchanged">
-
-            <intent-filter>
-                <action android:name="com.android.contacts.action.QUICK_CONTACT" />
-                <action android:name="android.provider.action.QUICK_CONTACT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <data android:mimeType="vnd.android.cursor.item/contact" />
-                <data android:mimeType="vnd.android.cursor.item/person" />
-            </intent-filter>
-
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-                <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>
-        </activity>
-
-        <receiver
-            android:name=".quickcontact.QuickContactBroadcastReceiver"
-            android:exported="false" />
-
-        <activity-alias android:name="ContactShortcut"
-            android:targetActivity=".activities.ContactSelectionActivity"
-            android:label="@string/shortcutContact"
-            android:icon="@drawable/logo_quick_contacts_color_44in48dp">
-
-            <intent-filter>
-                <action android:name="android.intent.action.CREATE_SHORTCUT" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-
-        </activity-alias>
-
-        <activity-alias android:name="alias.DialShortcut"
-            android:targetActivity=".activities.ContactSelectionActivity"
-            android:label="@string/shortcutDialContact"
-            android:icon="@drawable/logo_quick_contacts_dialer_color_44in48dp">
-
-            <intent-filter>
-                <action android:name="android.intent.action.CREATE_SHORTCUT" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.CAR_MODE" />
-            </intent-filter>
-
-        </activity-alias>
-
-        <activity-alias android:name="alias.MessageShortcut"
-            android:targetActivity=".activities.ContactSelectionActivity"
-            android:label="@string/shortcutMessageContact"
-            android:icon="@drawable/logo_quick_contacts_mail_color_44in48dp">
-
-            <intent-filter>
-                <action android:name="android.intent.action.CREATE_SHORTCUT" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-
-        </activity-alias>
-
-        <!-- Accounts changed prompt that can appear when creating a new contact. -->
-        <activity
-            android:name=".activities.ContactEditorAccountsChangedActivity"
-            android:theme="@style/ContactEditorAccountsChangedActivityTheme"
-            android:windowSoftInputMode="adjustResize"
-            android:exported="false"/>
-
-        <!-- Edit or create a contact with only the most important fields displayed initially. -->
-        <activity
-            android:name=".activities.ContactEditorActivity"
-            android:theme="@style/EditorActivityTheme"
-            android:windowSoftInputMode="stateHidden|adjustResize">
-
-            <intent-filter>
-                <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>
-
-         <!-- Keep support for apps that expect the Compact editor -->
-         <activity-alias android:name="com.android.contacts.activities.CompactContactEditorActivity"
-             android:exported="true"
-             android:targetActivity=".activities.ContactEditorActivity">
-             <intent-filter android:priority="-1">
-                 <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-alias>
-
-         <activity
-            android:name=".activities.ContactEditorSpringBoardActivity"
-            android:theme="@style/TransparentThemeAppCompat">
-
-             <intent-filter>
-                <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>
-        </activity>
-
-        <activity android:name=".common.test.FragmentTestActivity">
-            <intent-filter>
-                <category android:name="android.intent.category.TEST" />
-            </intent-filter>
-        </activity>
-
-        <!-- Stub service used to keep our process alive long enough for
-             background threads to finish their operations. -->
-        <service
-            android:name=".common.util.EmptyService"
-            android:exported="false" />
-
-        <!-- Service to save a contact -->
-        <service
-            android:name=".ContactSaveService"
-            android:exported="false" />
-
-        <!-- Attaches a photo to a contact. Started from external applications -->
-        <activity android:name=".activities.AttachPhotoActivity"
-            android:label="@string/attach_photo_dialog_title"
-            android:taskAffinity="">
-            <intent-filter>
-                <action android:name="android.intent.action.ATTACH_DATA" />
-                <data android:mimeType="image/*" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-        </activity>
-
-        <!-- vCard related -->
-        <activity android:name=".common.vcard.ImportVCardActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:theme="@style/BackgroundOnlyTheme">
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW" />
-                <data android:mimeType="text/directory" />
-                <data android:mimeType="text/vcard" />
-                <data android:mimeType="text/x-vcard" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".common.vcard.NfcImportVCardActivity"
-            android:configChanges="orientation|screenSize|keyboardHidden"
-            android:theme="@style/BackgroundOnlyTheme">
-            <intent-filter>
-                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
-                <data android:mimeType="text/vcard" />
-                <data android:mimeType="text/x-vcard" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-        </activity>
-
-        <activity android:name=".common.vcard.CancelActivity"
-            android:theme="@style/BackgroundOnlyTheme" />
-
-        <activity android:name=".common.vcard.SelectAccountActivity"
-            android:theme="@style/BackgroundOnlyTheme" />
-
-        <activity android:name=".common.vcard.ExportVCardActivity"
-            android:theme="@style/BackgroundOnlyTheme" />
-
-        <activity android:name=".common.vcard.ShareVCardActivity"
-                  android:theme="@style/BackgroundOnlyTheme" />
-
-         <activity android:name=".activities.SimImportActivity"
-             android:theme="@style/PeopleThemeAppCompat.FullScreenDialog.SimImportActivity"
-             android:label="@string/sim_import_title" />
-
-
-        <service
-            android:name=".common.vcard.VCardService"
-            android:exported="false" />
-        <!-- end vCard related -->
-
-        <!-- Intercept Dialer Intents for devices without a phone.
-             This activity should have the same intent filters as the DialtactsActivity,
-             so that its capturing the same events. Omit android.intent.category.LAUNCHER, because
-             we don't want this to show up in the Launcher. The priorities of the intent-filters
-             are set lower, so that the user does not see a disambig dialog -->
-        <activity
-            android:name="com.android.contacts.NonPhoneActivity"
-            android:theme="@style/NonPhoneActivityTheme">
-            <intent-filter android:priority="-1">
-                <action android:name="android.intent.action.MAIN"/>
-                <category android:name="android.intent.category.DEFAULT"/>
-                <category android:name="android.intent.category.BROWSABLE"/>
-            </intent-filter>
-            <intent-filter android:priority="-1">
-                <action android:name="android.intent.action.VIEW"/>
-                <category android:name="android.intent.category.DEFAULT"/>
-                <category android:name="android.intent.category.BROWSABLE"/>
-                <data android:scheme="tel"/>
-            </intent-filter>
-            <intent-filter android:priority="-1">
-                <action android:name="android.intent.action.VIEW"/>
-                <category android:name="android.intent.category.DEFAULT"/>
-                <category android:name="android.intent.category.BROWSABLE"/>
-                <data android:mimeType="vnd.android.cursor.dir/calls"/>
-            </intent-filter>
-        </activity>
-
-        <activity android:name="com.android.contacts.common.dialog.CallSubjectDialog"
-                  android:theme="@style/Theme.CallSubjectDialogTheme"
-                  android:windowSoftInputMode="stateVisible|adjustResize">
-            <intent-filter>
-                <action android:name="android.intent.action.VIEW"/>
-            </intent-filter>
-        </activity>
-
-        <!-- Service that is exclusively for the Phone application that sends out a view
-             notification. This service might be removed in future versions of the app.
-
-             This is called explicitly by the phone app via package name and class.
-             (PhoneUtils.sendViewNotificationAsync()).  If this service moves, then phone
-             needs to be changed as well.
-        -->
-        <service android:name=".ViewNotificationService"
-                 android:permission="android.permission.WRITE_CONTACTS"
-                 android:exported="true">
-            <intent-filter>
-                <action android:name="com.android.contacts.VIEW_NOTIFICATION"/>
-                <data android:mimeType="vnd.android.cursor.item/contact"/>
-            </intent-filter>
-        </service>
-
-        <!-- Service used to run JobScheduler jobs -->
-        <service android:name="com.android.contacts.ContactsJobService"
-            android:permission="android.permission.BIND_JOB_SERVICE" />
-
-        <provider
-            android:name="android.support.v4.content.FileProvider"
-            android:authorities="@string/contacts_file_provider_authority"
-            android:grantUriPermissions="true"
-            android:exported="false">
-            <meta-data
-                android:name="android.support.FILE_PROVIDER_PATHS"
-                android:resource="@xml/file_paths" />
-        </provider>
-
-        <meta-data android:name="android.nfc.disable_beam_default" android:value="true" />
-
-    </application>
-</manifest>
diff --git a/proguard.flags b/proguard.flags
index e918c62..a4282bf 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -13,85 +13,92 @@
 -keep class com.google.android.libraries.material.featurehighlight.** { *; }
 
 # Needed for tests
--keep class com.android.contacts.common.compat.CompatUtils { *; }
--keep class com.android.contacts.common.Collapser { *; }
--keep class com.android.contacts.common.ContactPhotoManager { *; }
--keep class com.android.contacts.common.ContactsUtils { *; }
--keep class com.android.contacts.common.database.NoNullCursorAsyncQueryHandler { *; }
--keep class com.android.contacts.common.database.SimContactDao { *; }
--keep class com.android.contacts.common.database.SimContactDao$* { *; }
--keep class com.android.contacts.common.format.FormatUtils { *; }
--keep class com.android.contacts.common.format.TextHighlighter { *; }
--keep class com.android.contacts.common.list.ContactListItemView { *; }
--keep class com.android.contacts.common.list.ContactsSectionIndexer { *; }
--keep class com.android.contacts.common.location.CountryDetector { *; }
--keep class com.android.contacts.common.model.account.AccountDisplayInfo { *; }
--keep class com.android.contacts.common.model.account.AccountDisplayInfoFactory { *; }
--keep class com.android.contacts.common.model.account.AccountType { *; }
--keep class com.android.contacts.common.model.account.AccountType$* { *; }
--keep class com.android.contacts.common.model.account.AccountTypeWithDataSet { *; }
--keep class com.android.contacts.common.model.account.AccountWithDataSet { *; }
--keep class com.android.contacts.common.model.account.BaseAccountType { *; }
--keep class com.android.contacts.common.model.account.BaseAccountType$* { *; }
--keep class com.android.contacts.common.model.account.DeviceLocalAccountType { *; }
--keep class com.android.contacts.common.model.account.ExchangeAccountType { *; }
--keep class com.android.contacts.common.model.account.ExternalAccountType { *; }
--keep class com.android.contacts.common.model.account.FallbackAccountType { *; }
--keep class com.android.contacts.common.model.account.GoogleAccountType { *; }
--keep class com.android.contacts.common.model.account.SimAccountType { *; }
--keep class com.android.contacts.common.model.AccountTypeManager { *; }
--keep class com.android.contacts.common.model.AccountTypeManagerImpl { *; }
--keep class com.android.contacts.common.model.BuilderWrapper { *; }
--keep class com.android.contacts.common.model.Contact { *; }
--keep class com.android.contacts.common.model.ContactLoader { *; }
--keep class com.android.contacts.common.model.Cp2DeviceLocalAccountLocator { *; }
--keep class com.android.contacts.common.model.CPOWrapper { *; }
--keep class com.android.contacts.common.model.dataitem.DataItem { *; }
--keep class com.android.contacts.common.model.dataitem.DataKind { *; }
--keep class com.android.contacts.common.model.dataitem.EmailDataItem { *; }
--keep class com.android.contacts.common.model.dataitem.EventDataItem { *; }
--keep class com.android.contacts.common.model.dataitem.ImDataItem { *; }
--keep class com.android.contacts.common.model.dataitem.NicknameDataItem { *; }
--keep class com.android.contacts.common.model.dataitem.NoteDataItem { *; }
--keep class com.android.contacts.common.model.dataitem.OrganizationDataItem { *; }
--keep class com.android.contacts.common.model.dataitem.PhoneDataItem { *; }
--keep class com.android.contacts.common.model.dataitem.RelationDataItem { *; }
--keep class com.android.contacts.common.model.dataitem.SipAddressDataItem { *; }
--keep class com.android.contacts.common.model.dataitem.StructuredNameDataItem { *; }
--keep class com.android.contacts.common.model.dataitem.StructuredPostalDataItem { *; }
--keep class com.android.contacts.common.model.dataitem.WebsiteDataItem { *; }
--keep class com.android.contacts.common.model.DeviceLocalAccountLocator { *; }
--keep class com.android.contacts.common.model.RawContact { *; }
--keep class com.android.contacts.common.model.RawContactDelta { *; }
--keep class com.android.contacts.common.model.RawContactDeltaList { *; }
--keep class com.android.contacts.common.model.RawContactModifier { *; }
--keep class com.android.contacts.common.model.ValuesDelta { *; }
--keep class com.android.contacts.common.MoreContactUtils { *; }
--keep class com.android.contacts.common.preference.ContactsPreferences { *; }
--keep class com.android.contacts.common.test.mocks.MockContactPhotoManager { *; }
--keep class com.android.contacts.common.testing.InjectedServices { *; }
--keep class com.android.contacts.common.util.BitmapUtil { *; }
--keep class com.android.contacts.common.util.ContactDisplayUtils { *; }
--keep class com.android.contacts.common.util.DateUtils { *; }
--keep class com.android.contacts.common.util.DeviceLocalAccountTypeFactory { *; }
--keep class com.android.contacts.common.util.DeviceLocalAccountTypeFactory$* { *; }
--keep class com.android.contacts.common.util.NameConverter { *; }
--keep class com.android.contacts.common.util.PermissionsUtil { *; }
--keep class com.android.contacts.common.util.SearchUtil { *; }
--keep class com.android.contacts.common.util.SearchUtil$* { *; }
+-keep class com.android.contacts.compat.CompatUtils { *; }
+-keep class com.android.contacts.Collapser { *; }
+-keep class com.android.contacts.ContactPhotoManager { *; }
 -keep class com.android.contacts.ContactsApplication { *; }
+-keep class com.android.contacts.ContactsUtils { *; }
 -keep class com.android.contacts.ContactSaveService { *; }
 -keep class com.android.contacts.ContactSaveService$* { *; }
+-keep class com.android.contacts.database.NoNullCursorAsyncQueryHandler { *; }
+-keep class com.android.contacts.database.SimContactDao { *; }
+-keep class com.android.contacts.database.SimContactDao$* { *; }
+-keep class com.android.contacts.database.SimContactDaoImpl { *; }
 -keep class com.android.contacts.DynamicShortcuts { *; }
 -keep class com.android.contacts.editor.ContactEditorUtils { *; }
 -keep class com.android.contacts.editor.EditorUiUtils { *; }
+-keep class com.android.contacts.format.FormatUtils { *; }
+-keep class com.android.contacts.format.TextHighlighter { *; }
 -keep class com.android.contacts.group.GroupUtil { *; }
 -keep class com.android.contacts.interactions.CallLogInteraction { *; }
 -keep class com.android.contacts.interactions.CallLogInteractionsLoader { *; }
 -keep class com.android.contacts.interactions.ContactDeletionInteraction { *; }
 -keep class com.android.contacts.interactions.ContactInteractionUtil { *; }
+-keep class com.android.contacts.list.ContactListItemView { *; }
+-keep class com.android.contacts.list.ContactsSectionIndexer { *; }
+-keep class com.android.contacts.location.CountryDetector { *; }
+-keep class com.android.contacts.model.account.AccountDisplayInfo { *; }
+-keep class com.android.contacts.model.account.AccountDisplayInfoFactory { *; }
+-keep class com.android.contacts.model.account.AccountType { *; }
+-keep class com.android.contacts.model.account.AccountType$* { *; }
+-keep class com.android.contacts.model.account.AccountTypeWithDataSet { *; }
+-keep class com.android.contacts.model.account.AccountWithDataSet { *; }
+-keep class com.android.contacts.model.account.BaseAccountType { *; }
+-keep class com.android.contacts.model.account.BaseAccountType$* { *; }
+-keep class com.android.contacts.model.account.DeviceLocalAccountType { *; }
+-keep class com.android.contacts.model.account.ExchangeAccountType { *; }
+-keep class com.android.contacts.model.account.ExternalAccountType { *; }
+-keep class com.android.contacts.model.account.FallbackAccountType { *; }
+-keep class com.android.contacts.model.account.GoogleAccountType { *; }
+-keep class com.android.contacts.model.account.SimAccountType { *; }
+-keep class com.android.contacts.model.AccountTypeManager { *; }
+-keep class com.android.contacts.model.AccountTypeManagerImpl { *; }
+-keep class com.android.contacts.model.BuilderWrapper { *; }
+-keep class com.android.contacts.model.Contact { *; }
+-keep class com.android.contacts.model.ContactLoader { *; }
+-keep class com.android.contacts.model.Cp2DeviceLocalAccountLocator { *; }
+-keep class com.android.contacts.model.CPOWrapper { *; }
+-keep class com.android.contacts.model.dataitem.DataItem { *; }
+-keep class com.android.contacts.model.dataitem.DataKind { *; }
+-keep class com.android.contacts.model.dataitem.EmailDataItem { *; }
+-keep class com.android.contacts.model.dataitem.EventDataItem { *; }
+-keep class com.android.contacts.model.dataitem.ImDataItem { *; }
+-keep class com.android.contacts.model.dataitem.NicknameDataItem { *; }
+-keep class com.android.contacts.model.dataitem.NoteDataItem { *; }
+-keep class com.android.contacts.model.dataitem.OrganizationDataItem { *; }
+-keep class com.android.contacts.model.dataitem.PhoneDataItem { *; }
+-keep class com.android.contacts.model.dataitem.RelationDataItem { *; }
+-keep class com.android.contacts.model.dataitem.SipAddressDataItem { *; }
+-keep class com.android.contacts.model.dataitem.StructuredNameDataItem { *; }
+-keep class com.android.contacts.model.dataitem.StructuredPostalDataItem { *; }
+-keep class com.android.contacts.model.dataitem.WebsiteDataItem { *; }
+-keep class com.android.contacts.model.DeviceLocalAccountLocator { *; }
+-keep class com.android.contacts.model.RawContact { *; }
+-keep class com.android.contacts.model.RawContactDelta { *; }
+-keep class com.android.contacts.model.RawContactDeltaList { *; }
+-keep class com.android.contacts.model.RawContactModifier { *; }
+-keep class com.android.contacts.model.SimCard { *; }
+-keep class com.android.contacts.model.SimContact { *; }
+-keep class com.android.contacts.model.ValuesDelta { *; }
+-keep class com.android.contacts.MoreContactUtils { *; }
+-keep class com.android.contacts.preference.ContactsPreferences { *; }
+-keep class com.android.contacts.SimImportService { *; }
+-keep class com.android.contacts.SimImportService$* { *; }
+-keep class com.android.contacts.test.mocks.MockContactPhotoManager { *; }
+-keep class com.android.contacts.testing.InjectedServices { *; }
+-keep class com.android.contacts.util.BitmapUtil { *; }
+-keep class com.android.contacts.util.ContactDisplayUtils { *; }
+-keep class com.android.contacts.util.DateUtils { *; }
+-keep class com.android.contacts.util.DeviceLocalAccountTypeFactory { *; }
+-keep class com.android.contacts.util.DeviceLocalAccountTypeFactory$* { *; }
+-keep class com.android.contacts.util.NameConverter { *; }
+-keep class com.android.contacts.util.PermissionsUtil { *; }
+-keep class com.android.contacts.util.SearchUtil { *; }
+-keep class com.android.contacts.util.SearchUtil$* { *; }
 -keep class com.android.contacts.util.SyncUtil { *; }
 -keep class com.android.contacts.widget.CompositeListAdapter { *; }
+-keep class com.google.common.base.Function { *; }
+-keep class com.google.common.base.Functions { *; }
 -keep class com.google.common.base.Objects { *; }
 -keep class com.google.common.base.Preconditions { *; }
 -keep class com.google.common.collect.ImmutableMap { *; }
diff --git a/res-aosp/xml/shortcuts.xml b/res-aosp/xml/shortcuts.xml
deleted file mode 100644
index f28da68..0000000
--- a/res-aosp/xml/shortcuts.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
-    <shortcut
-        android:enabled="true"
-        android:icon="@drawable/ic_add_circle_24dp"
-        android:shortcutId="shortcut-add-contact"
-        android:shortcutShortLabel="@string/menu_new_contact_action_bar">
-        <intent
-            android:action="android.intent.action.INSERT"
-            android:data="content://com.android.contacts/contacts"
-            android:targetPackage="com.android.contacts"
-            android:targetClass="com.android.contacts.activities.ContactEditorActivity"/>
-    </shortcut>
-</shortcuts>
diff --git a/res/color/popup_menu_color.xml b/res/color/popup_menu_color.xml
deleted file mode 100644
index 15588c2..0000000
--- a/res/color/popup_menu_color.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_enabled="false" android:alpha="0.5" android:color="#ff000000"/>
-    <item android:color="#ff000000"/>
-</selector>
\ No newline at end of file
diff --git a/res/drawable-hdpi/ab_solid_custom_blue_inverse_holo.9.png b/res/drawable-hdpi/ab_solid_custom_blue_inverse_holo.9.png
deleted file mode 100644
index 956d61b..0000000
--- a/res/drawable-hdpi/ab_solid_custom_blue_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ab_stacked_solid_inverse_holo.9.png b/res/drawable-hdpi/ab_stacked_solid_inverse_holo.9.png
deleted file mode 100644
index 42528b1..0000000
--- a/res/drawable-hdpi/ab_stacked_solid_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/aggregation_suggestions_bg.9.png b/res/drawable-hdpi/aggregation_suggestions_bg.9.png
deleted file mode 100644
index d279fb1..0000000
--- a/res/drawable-hdpi/aggregation_suggestions_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/aggregation_suggestions_bg_light_holo.9.png b/res/drawable-hdpi/aggregation_suggestions_bg_light_holo.9.png
deleted file mode 100644
index da1fe94..0000000
--- a/res/drawable-hdpi/aggregation_suggestions_bg_light_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_star_off_normal_holo_light.png b/res/drawable-hdpi/btn_star_off_normal_holo_light.png
deleted file mode 100644
index e285c66..0000000
--- a/res/drawable-hdpi/btn_star_off_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_star_on_normal_holo_light.png b/res/drawable-hdpi/btn_star_on_normal_holo_light.png
deleted file mode 100644
index 4b34e57..0000000
--- a/res/drawable-hdpi/btn_star_on_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/expanding_entry_card_expand_white_24.png b/res/drawable-hdpi/expanding_entry_card_expand_white_24.png
deleted file mode 100644
index 50ebbc5..0000000
--- a/res/drawable-hdpi/expanding_entry_card_expand_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_ab_search.png b/res/drawable-hdpi/ic_ab_search.png
deleted file mode 100644
index d86b219..0000000
--- a/res/drawable-hdpi/ic_ab_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_account_circle_black_24dp.png b/res/drawable-hdpi/ic_account_circle_black_24dp.png
deleted file mode 100644
index ba5a509..0000000
--- a/res/drawable-hdpi/ic_account_circle_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_add_contact_holo_light.png b/res/drawable-hdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index 5229623..0000000
--- a/res/drawable-hdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_add_group_holo_dark.png b/res/drawable-hdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index 6d46ccf..0000000
--- a/res/drawable-hdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_arrow_back_24dp.png b/res/drawable-hdpi/ic_arrow_back_24dp.png
deleted file mode 100644
index ddbb2c4..0000000
--- a/res/drawable-hdpi/ic_arrow_back_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_business_black_24dp.png b/res/drawable-hdpi/ic_business_black_24dp.png
deleted file mode 100644
index fa069ab..0000000
--- a/res/drawable-hdpi/ic_business_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_24dp.png b/res/drawable-hdpi/ic_call_24dp.png
deleted file mode 100644
index 4dc5065..0000000
--- a/res/drawable-hdpi/ic_call_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_note_white_24dp.png b/res/drawable-hdpi/ic_call_note_white_24dp.png
deleted file mode 100644
index 503e58e..0000000
--- a/res/drawable-hdpi/ic_call_note_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_voicemail_holo_dark.png b/res/drawable-hdpi/ic_call_voicemail_holo_dark.png
deleted file mode 100644
index 6d64a36..0000000
--- a/res/drawable-hdpi/ic_call_voicemail_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_camera_alt_black_24dp.png b/res/drawable-hdpi/ic_camera_alt_black_24dp.png
deleted file mode 100644
index 4978a3a..0000000
--- a/res/drawable-hdpi/ic_camera_alt_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_circles_extended_black_24dp.png b/res/drawable-hdpi/ic_circles_extended_black_24dp.png
deleted file mode 100644
index 8973e89..0000000
--- a/res/drawable-hdpi/ic_circles_extended_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_close_dk.png b/res/drawable-hdpi/ic_close_dk.png
deleted file mode 100644
index 9695529..0000000
--- a/res/drawable-hdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_create_24dp.png b/res/drawable-hdpi/ic_create_24dp.png
deleted file mode 100644
index 540ab4d..0000000
--- a/res/drawable-hdpi/ic_create_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_dialer_sip_black_24dp.png b/res/drawable-hdpi/ic_dialer_sip_black_24dp.png
deleted file mode 100644
index 37dabfc..0000000
--- a/res/drawable-hdpi/ic_dialer_sip_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_directions_24dp.png b/res/drawable-hdpi/ic_directions_24dp.png
deleted file mode 100644
index c378972..0000000
--- a/res/drawable-hdpi/ic_directions_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_done_wht_24dp.png b/res/drawable-hdpi/ic_done_wht_24dp.png
deleted file mode 100644
index 12ce8e0..0000000
--- a/res/drawable-hdpi/ic_done_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_email_24dp.png b/res/drawable-hdpi/ic_email_24dp.png
deleted file mode 100644
index 231b141..0000000
--- a/res/drawable-hdpi/ic_email_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_event_24dp.png b/res/drawable-hdpi/ic_event_24dp.png
deleted file mode 100644
index 023695a..0000000
--- a/res/drawable-hdpi/ic_event_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_group_white_24dp.png b/res/drawable-hdpi/ic_group_white_24dp.png
deleted file mode 100644
index 017e4bb..0000000
--- a/res/drawable-hdpi/ic_group_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_hangout_24dp.png b/res/drawable-hdpi/ic_hangout_24dp.png
deleted file mode 100644
index 496a2a0..0000000
--- a/res/drawable-hdpi/ic_hangout_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_hangout_video_24dp.png b/res/drawable-hdpi/ic_hangout_video_24dp.png
deleted file mode 100644
index 0825a15..0000000
--- a/res/drawable-hdpi/ic_hangout_video_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_history_white_drawable_24dp.png b/res/drawable-hdpi/ic_history_white_drawable_24dp.png
deleted file mode 100644
index 703d30b..0000000
--- a/res/drawable-hdpi/ic_history_white_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_info_outline_24dp.png b/res/drawable-hdpi/ic_info_outline_24dp.png
deleted file mode 100644
index c7b1113..0000000
--- a/res/drawable-hdpi/ic_info_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_insert_comment_black_24dp.png b/res/drawable-hdpi/ic_insert_comment_black_24dp.png
deleted file mode 100644
index d472658..0000000
--- a/res/drawable-hdpi/ic_insert_comment_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_expander_maximized_holo_light.png b/res/drawable-hdpi/ic_menu_expander_maximized_holo_light.png
deleted file mode 100644
index 41c6eda..0000000
--- a/res/drawable-hdpi/ic_menu_expander_maximized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_expander_minimized_holo_light.png b/res/drawable-hdpi/ic_menu_expander_minimized_holo_light.png
deleted file mode 100644
index a3b22bc..0000000
--- a/res/drawable-hdpi/ic_menu_expander_minimized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_remove_field_holo_light.png b/res/drawable-hdpi/ic_menu_remove_field_holo_light.png
deleted file mode 100644
index 03fd2fb..0000000
--- a/res/drawable-hdpi/ic_menu_remove_field_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_message_24dp.png b/res/drawable-hdpi/ic_message_24dp.png
deleted file mode 100644
index 57177b7..0000000
--- a/res/drawable-hdpi/ic_message_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_person_24dp.png b/res/drawable-hdpi/ic_person_24dp.png
deleted file mode 100644
index 56708b0..0000000
--- a/res/drawable-hdpi/ic_person_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_person_add_24dp.png b/res/drawable-hdpi/ic_person_add_24dp.png
deleted file mode 100644
index 10ae5a7..0000000
--- a/res/drawable-hdpi/ic_person_add_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_person_black_24dp.png b/res/drawable-hdpi/ic_person_black_24dp.png
deleted file mode 100644
index 2eeb7c6..0000000
--- a/res/drawable-hdpi/ic_person_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_person_white_120dp.png b/res/drawable-hdpi/ic_person_white_120dp.png
deleted file mode 100644
index 69e6f98..0000000
--- a/res/drawable-hdpi/ic_person_white_120dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_phone_24dp.png b/res/drawable-hdpi/ic_phone_24dp.png
deleted file mode 100644
index a6a6448..0000000
--- a/res/drawable-hdpi/ic_phone_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
deleted file mode 100644
index 497c88c..0000000
--- a/res/drawable-hdpi/ic_photo_camera_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_place_24dp.png b/res/drawable-hdpi/ic_place_24dp.png
deleted file mode 100644
index 8e21320..0000000
--- a/res/drawable-hdpi/ic_place_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_public_black_24dp.png b/res/drawable-hdpi/ic_public_black_24dp.png
deleted file mode 100644
index e3cdeb4..0000000
--- a/res/drawable-hdpi/ic_public_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_star_24dp.png b/res/drawable-hdpi/ic_star_24dp.png
deleted file mode 100644
index b3d2f44..0000000
--- a/res/drawable-hdpi/ic_star_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_star_outline_24dp.png b/res/drawable-hdpi/ic_star_outline_24dp.png
deleted file mode 100644
index 4d4b7c1..0000000
--- a/res/drawable-hdpi/ic_star_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_videocam.png b/res/drawable-hdpi/ic_videocam.png
deleted file mode 100644
index 97905c9..0000000
--- a/res/drawable-hdpi/ic_videocam.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/list_activated_holo.9.png b/res/drawable-hdpi/list_activated_holo.9.png
deleted file mode 100644
index 4ea7afa..0000000
--- a/res/drawable-hdpi/list_activated_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/list_background_holo.9.png b/res/drawable-hdpi/list_background_holo.9.png
deleted file mode 100644
index cddf9be..0000000
--- a/res/drawable-hdpi/list_background_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/list_focused_holo.9.png b/res/drawable-hdpi/list_focused_holo.9.png
deleted file mode 100644
index 86578be..0000000
--- a/res/drawable-hdpi/list_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/list_longpressed_holo_light.9.png b/res/drawable-hdpi/list_longpressed_holo_light.9.png
deleted file mode 100644
index e9afcc9..0000000
--- a/res/drawable-hdpi/list_longpressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/list_pressed_holo_light.9.png b/res/drawable-hdpi/list_pressed_holo_light.9.png
deleted file mode 100644
index 2054530..0000000
--- a/res/drawable-hdpi/list_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/list_title_holo.9.png b/res/drawable-hdpi/list_title_holo.9.png
deleted file mode 100644
index ae93717..0000000
--- a/res/drawable-hdpi/list_title_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/panel_content.9.png b/res/drawable-hdpi/panel_content.9.png
deleted file mode 100644
index 5c3090d..0000000
--- a/res/drawable-hdpi/panel_content.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-hdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f..0000000
--- a/res/drawable-hdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/quickcontact_badge_overlay_normal_light.9.png b/res/drawable-hdpi/quickcontact_badge_overlay_normal_light.9.png
deleted file mode 100644
index db4ce80..0000000
--- a/res/drawable-hdpi/quickcontact_badge_overlay_normal_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index 169cd4e..0000000
--- a/res/drawable-hdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/sym_action_audiochat_holo_light.png b/res/drawable-hdpi/sym_action_audiochat_holo_light.png
deleted file mode 100644
index 8bea3ec..0000000
--- a/res/drawable-hdpi/sym_action_audiochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/sym_action_videochat_holo_light.png b/res/drawable-hdpi/sym_action_videochat_holo_light.png
deleted file mode 100644
index b86c435..0000000
--- a/res/drawable-hdpi/sym_action_videochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_add_contact_holo_light.png b/res/drawable-ldrtl-hdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index 4cf24e2..0000000
--- a/res/drawable-ldrtl-hdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_add_group_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index 54f247a..0000000
--- a/res/drawable-ldrtl-hdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/list_background_holo.9.png b/res/drawable-ldrtl-hdpi/list_background_holo.9.png
deleted file mode 100644
index 0d80482..0000000
--- a/res/drawable-ldrtl-hdpi/list_background_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/list_focused_holo.9.png b/res/drawable-ldrtl-hdpi/list_focused_holo.9.png
deleted file mode 100644
index 4139942..0000000
--- a/res/drawable-ldrtl-hdpi/list_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/list_title_holo.9.png b/res/drawable-ldrtl-hdpi/list_title_holo.9.png
deleted file mode 100644
index 5ec4c96..0000000
--- a/res/drawable-ldrtl-hdpi/list_title_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/panel_content.9.png b/res/drawable-ldrtl-hdpi/panel_content.9.png
deleted file mode 100644
index 1ab1f12..0000000
--- a/res/drawable-ldrtl-hdpi/panel_content.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-ldrtl-hdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f..0000000
--- a/res/drawable-ldrtl-hdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_normal_light.9.png b/res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_normal_light.9.png
deleted file mode 100644
index 1f833d3..0000000
--- a/res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_normal_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index 3adbc84..0000000
--- a/res/drawable-ldrtl-hdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_add_contact_holo_light.png b/res/drawable-ldrtl-mdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index 5c0f756..0000000
--- a/res/drawable-ldrtl-mdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_add_group_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index a984b56..0000000
--- a/res/drawable-ldrtl-mdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/list_background_holo.9.png b/res/drawable-ldrtl-mdpi/list_background_holo.9.png
deleted file mode 100644
index d86d611..0000000
--- a/res/drawable-ldrtl-mdpi/list_background_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/list_focused_holo.9.png b/res/drawable-ldrtl-mdpi/list_focused_holo.9.png
deleted file mode 100644
index 4139942..0000000
--- a/res/drawable-ldrtl-mdpi/list_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/list_title_holo.9.png b/res/drawable-ldrtl-mdpi/list_title_holo.9.png
deleted file mode 100644
index 013d5e7..0000000
--- a/res/drawable-ldrtl-mdpi/list_title_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/panel_content.9.png b/res/drawable-ldrtl-mdpi/panel_content.9.png
deleted file mode 100644
index b157502..0000000
--- a/res/drawable-ldrtl-mdpi/panel_content.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-ldrtl-mdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f..0000000
--- a/res/drawable-ldrtl-mdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_normal_light.9.png b/res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_normal_light.9.png
deleted file mode 100644
index 1b0905a..0000000
--- a/res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_normal_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index 179644c..0000000
--- a/res/drawable-ldrtl-mdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-sw600dp-hdpi/list_activated_holo.9.png b/res/drawable-ldrtl-sw600dp-hdpi/list_activated_holo.9.png
deleted file mode 100644
index 947f03c..0000000
--- a/res/drawable-ldrtl-sw600dp-hdpi/list_activated_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-sw600dp-mdpi/list_activated_holo.9.png b/res/drawable-ldrtl-sw600dp-mdpi/list_activated_holo.9.png
deleted file mode 100644
index 6d09d72..0000000
--- a/res/drawable-ldrtl-sw600dp-mdpi/list_activated_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-sw600dp-xhdpi/list_activated_holo.9.png b/res/drawable-ldrtl-sw600dp-xhdpi/list_activated_holo.9.png
deleted file mode 100644
index 63c7456..0000000
--- a/res/drawable-ldrtl-sw600dp-xhdpi/list_activated_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_add_contact_holo_light.png b/res/drawable-ldrtl-xhdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index 2bd27c7..0000000
--- a/res/drawable-ldrtl-xhdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_add_group_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index 3688e46..0000000
--- a/res/drawable-ldrtl-xhdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/list_background_holo.9.png b/res/drawable-ldrtl-xhdpi/list_background_holo.9.png
deleted file mode 100644
index f709f2c..0000000
--- a/res/drawable-ldrtl-xhdpi/list_background_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/list_focused_holo.9.png b/res/drawable-ldrtl-xhdpi/list_focused_holo.9.png
deleted file mode 100644
index 4139942..0000000
--- a/res/drawable-ldrtl-xhdpi/list_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/list_title_holo.9.png b/res/drawable-ldrtl-xhdpi/list_title_holo.9.png
deleted file mode 100644
index cb801ac..0000000
--- a/res/drawable-ldrtl-xhdpi/list_title_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/panel_content.9.png b/res/drawable-ldrtl-xhdpi/panel_content.9.png
deleted file mode 100644
index eb0e2d7..0000000
--- a/res/drawable-ldrtl-xhdpi/panel_content.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-ldrtl-xhdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f..0000000
--- a/res/drawable-ldrtl-xhdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_normal_light.9.png b/res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_normal_light.9.png
deleted file mode 100644
index 6b22d44..0000000
--- a/res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_normal_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index 2a1d508..0000000
--- a/res/drawable-ldrtl-xhdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ab_solid_custom_blue_inverse_holo.9.png b/res/drawable-mdpi/ab_solid_custom_blue_inverse_holo.9.png
deleted file mode 100644
index 3e9f167..0000000
--- a/res/drawable-mdpi/ab_solid_custom_blue_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ab_stacked_solid_inverse_holo.9.png b/res/drawable-mdpi/ab_stacked_solid_inverse_holo.9.png
deleted file mode 100644
index a823841..0000000
--- a/res/drawable-mdpi/ab_stacked_solid_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/aggregation_suggestions_bg.9.png b/res/drawable-mdpi/aggregation_suggestions_bg.9.png
deleted file mode 100644
index 6cce274..0000000
--- a/res/drawable-mdpi/aggregation_suggestions_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/aggregation_suggestions_bg_light_holo.9.png b/res/drawable-mdpi/aggregation_suggestions_bg_light_holo.9.png
deleted file mode 100644
index 03e24c6..0000000
--- a/res/drawable-mdpi/aggregation_suggestions_bg_light_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_star_off_normal_holo_light.png b/res/drawable-mdpi/btn_star_off_normal_holo_light.png
deleted file mode 100644
index 3bb4154..0000000
--- a/res/drawable-mdpi/btn_star_off_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_star_on_normal_holo_light.png b/res/drawable-mdpi/btn_star_on_normal_holo_light.png
deleted file mode 100644
index 4da97e2..0000000
--- a/res/drawable-mdpi/btn_star_on_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/expanding_entry_card_expand_white_24.png b/res/drawable-mdpi/expanding_entry_card_expand_white_24.png
deleted file mode 100644
index a0d4063..0000000
--- a/res/drawable-mdpi/expanding_entry_card_expand_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_ab_search.png b/res/drawable-mdpi/ic_ab_search.png
deleted file mode 100644
index 2b23b1e..0000000
--- a/res/drawable-mdpi/ic_ab_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_account_circle_black_24dp.png b/res/drawable-mdpi/ic_account_circle_black_24dp.png
deleted file mode 100644
index 0c1202d..0000000
--- a/res/drawable-mdpi/ic_account_circle_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_add_contact_holo_light.png b/res/drawable-mdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index 06a43a2..0000000
--- a/res/drawable-mdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_add_group_holo_dark.png b/res/drawable-mdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index a676ab8..0000000
--- a/res/drawable-mdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_arrow_back_24dp.png b/res/drawable-mdpi/ic_arrow_back_24dp.png
deleted file mode 100644
index 1a21fb4..0000000
--- a/res/drawable-mdpi/ic_arrow_back_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_business_black_24dp.png b/res/drawable-mdpi/ic_business_black_24dp.png
deleted file mode 100644
index 1c54f8b..0000000
--- a/res/drawable-mdpi/ic_business_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_24dp.png b/res/drawable-mdpi/ic_call_24dp.png
deleted file mode 100644
index 77f9de5..0000000
--- a/res/drawable-mdpi/ic_call_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_note_white_24dp.png b/res/drawable-mdpi/ic_call_note_white_24dp.png
deleted file mode 100644
index 9d359db..0000000
--- a/res/drawable-mdpi/ic_call_note_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_voicemail_holo_dark.png b/res/drawable-mdpi/ic_call_voicemail_holo_dark.png
deleted file mode 100644
index bf6d006..0000000
--- a/res/drawable-mdpi/ic_call_voicemail_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_camera_alt_black_24dp.png b/res/drawable-mdpi/ic_camera_alt_black_24dp.png
deleted file mode 100644
index 90dd073..0000000
--- a/res/drawable-mdpi/ic_camera_alt_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_circles_extended_black_24dp.png b/res/drawable-mdpi/ic_circles_extended_black_24dp.png
deleted file mode 100644
index e851532..0000000
--- a/res/drawable-mdpi/ic_circles_extended_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_close_dk.png b/res/drawable-mdpi/ic_close_dk.png
deleted file mode 100644
index 590a728..0000000
--- a/res/drawable-mdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_create_24dp.png b/res/drawable-mdpi/ic_create_24dp.png
deleted file mode 100644
index 8a2df39..0000000
--- a/res/drawable-mdpi/ic_create_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_dialer_sip_black_24dp.png b/res/drawable-mdpi/ic_dialer_sip_black_24dp.png
deleted file mode 100644
index 51d5e13..0000000
--- a/res/drawable-mdpi/ic_dialer_sip_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_directions_24dp.png b/res/drawable-mdpi/ic_directions_24dp.png
deleted file mode 100644
index bd171d2..0000000
--- a/res/drawable-mdpi/ic_directions_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_done_wht_24dp.png b/res/drawable-mdpi/ic_done_wht_24dp.png
deleted file mode 100644
index 1032711..0000000
--- a/res/drawable-mdpi/ic_done_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_email_24dp.png b/res/drawable-mdpi/ic_email_24dp.png
deleted file mode 100644
index c32d03a..0000000
--- a/res/drawable-mdpi/ic_email_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_event_24dp.png b/res/drawable-mdpi/ic_event_24dp.png
deleted file mode 100644
index f5abeb7..0000000
--- a/res/drawable-mdpi/ic_event_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_group_white_24dp.png b/res/drawable-mdpi/ic_group_white_24dp.png
deleted file mode 100644
index ad268bf..0000000
--- a/res/drawable-mdpi/ic_group_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_hangout_24dp.png b/res/drawable-mdpi/ic_hangout_24dp.png
deleted file mode 100644
index 1b0acfd..0000000
--- a/res/drawable-mdpi/ic_hangout_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_hangout_video_24dp.png b/res/drawable-mdpi/ic_hangout_video_24dp.png
deleted file mode 100644
index b54b1cb..0000000
--- a/res/drawable-mdpi/ic_hangout_video_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_history_white_drawable_24dp.png b/res/drawable-mdpi/ic_history_white_drawable_24dp.png
deleted file mode 100644
index b3000d3..0000000
--- a/res/drawable-mdpi/ic_history_white_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_info_outline_24dp.png b/res/drawable-mdpi/ic_info_outline_24dp.png
deleted file mode 100644
index 353e064..0000000
--- a/res/drawable-mdpi/ic_info_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_insert_comment_black_24dp.png b/res/drawable-mdpi/ic_insert_comment_black_24dp.png
deleted file mode 100644
index 3a2bda7..0000000
--- a/res/drawable-mdpi/ic_insert_comment_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_expander_maximized_holo_light.png b/res/drawable-mdpi/ic_menu_expander_maximized_holo_light.png
deleted file mode 100644
index 342867c..0000000
--- a/res/drawable-mdpi/ic_menu_expander_maximized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_expander_minimized_holo_light.png b/res/drawable-mdpi/ic_menu_expander_minimized_holo_light.png
deleted file mode 100644
index f447069..0000000
--- a/res/drawable-mdpi/ic_menu_expander_minimized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_remove_field_holo_light.png b/res/drawable-mdpi/ic_menu_remove_field_holo_light.png
deleted file mode 100644
index 8c44e70..0000000
--- a/res/drawable-mdpi/ic_menu_remove_field_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_star_holo_light.png b/res/drawable-mdpi/ic_menu_star_holo_light.png
deleted file mode 100644
index 8263b27..0000000
--- a/res/drawable-mdpi/ic_menu_star_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_message_24dp.png b/res/drawable-mdpi/ic_message_24dp.png
deleted file mode 100644
index 3072b75..0000000
--- a/res/drawable-mdpi/ic_message_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_person_24dp.png b/res/drawable-mdpi/ic_person_24dp.png
deleted file mode 100644
index f0b1c72..0000000
--- a/res/drawable-mdpi/ic_person_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_person_add_24dp.png b/res/drawable-mdpi/ic_person_add_24dp.png
deleted file mode 100644
index 38e0a28..0000000
--- a/res/drawable-mdpi/ic_person_add_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_person_black_24dp.png b/res/drawable-mdpi/ic_person_black_24dp.png
deleted file mode 100644
index 8c415b9..0000000
--- a/res/drawable-mdpi/ic_person_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_person_white_120dp.png b/res/drawable-mdpi/ic_person_white_120dp.png
deleted file mode 100644
index 397d933..0000000
--- a/res/drawable-mdpi/ic_person_white_120dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_phone_24dp.png b/res/drawable-mdpi/ic_phone_24dp.png
deleted file mode 100644
index 2286bb4..0000000
--- a/res/drawable-mdpi/ic_phone_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
deleted file mode 100644
index e830522..0000000
--- a/res/drawable-mdpi/ic_photo_camera_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_place_24dp.png b/res/drawable-mdpi/ic_place_24dp.png
deleted file mode 100644
index 2ef1381..0000000
--- a/res/drawable-mdpi/ic_place_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_public_black_24dp.png b/res/drawable-mdpi/ic_public_black_24dp.png
deleted file mode 100644
index b18b4ec..0000000
--- a/res/drawable-mdpi/ic_public_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_star_24dp.png b/res/drawable-mdpi/ic_star_24dp.png
deleted file mode 100644
index b8f32f8..0000000
--- a/res/drawable-mdpi/ic_star_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_star_outline_24dp.png b/res/drawable-mdpi/ic_star_outline_24dp.png
deleted file mode 100644
index 22b4fb8..0000000
--- a/res/drawable-mdpi/ic_star_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_videocam.png b/res/drawable-mdpi/ic_videocam.png
deleted file mode 100644
index dc9655b..0000000
--- a/res/drawable-mdpi/ic_videocam.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/list_activated_holo.9.png b/res/drawable-mdpi/list_activated_holo.9.png
deleted file mode 100644
index 3bf8e03..0000000
--- a/res/drawable-mdpi/list_activated_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/list_background_holo.9.png b/res/drawable-mdpi/list_background_holo.9.png
deleted file mode 100644
index 7d5d66d..0000000
--- a/res/drawable-mdpi/list_background_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/list_focused_holo.9.png b/res/drawable-mdpi/list_focused_holo.9.png
deleted file mode 100644
index 86578be..0000000
--- a/res/drawable-mdpi/list_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/list_longpressed_holo_light.9.png b/res/drawable-mdpi/list_longpressed_holo_light.9.png
deleted file mode 100644
index 3226ab7..0000000
--- a/res/drawable-mdpi/list_longpressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/list_pressed_holo_light.9.png b/res/drawable-mdpi/list_pressed_holo_light.9.png
deleted file mode 100644
index 061904c..0000000
--- a/res/drawable-mdpi/list_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/list_title_holo.9.png b/res/drawable-mdpi/list_title_holo.9.png
deleted file mode 100644
index 64bd691..0000000
--- a/res/drawable-mdpi/list_title_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/panel_content.9.png b/res/drawable-mdpi/panel_content.9.png
deleted file mode 100644
index c5d2545..0000000
--- a/res/drawable-mdpi/panel_content.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-mdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f..0000000
--- a/res/drawable-mdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.png b/res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.png
deleted file mode 100644
index 886b044..0000000
--- a/res/drawable-mdpi/quickcontact_badge_overlay_normal_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-mdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index c714a3b..0000000
--- a/res/drawable-mdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/sym_action_audiochat_holo_light.png b/res/drawable-mdpi/sym_action_audiochat_holo_light.png
deleted file mode 100644
index 9e6e328..0000000
--- a/res/drawable-mdpi/sym_action_audiochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/sym_action_videochat_holo_light.png b/res/drawable-mdpi/sym_action_videochat_holo_light.png
deleted file mode 100644
index 0ef40f8..0000000
--- a/res/drawable-mdpi/sym_action_videochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-hdpi/list_activated_holo.9.png b/res/drawable-sw600dp-hdpi/list_activated_holo.9.png
deleted file mode 100644
index 046b24a..0000000
--- a/res/drawable-sw600dp-hdpi/list_activated_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-mdpi/list_activated_holo.9.png b/res/drawable-sw600dp-mdpi/list_activated_holo.9.png
deleted file mode 100644
index 1ff3373..0000000
--- a/res/drawable-sw600dp-mdpi/list_activated_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-sw600dp-xhdpi/list_activated_holo.9.png b/res/drawable-sw600dp-xhdpi/list_activated_holo.9.png
deleted file mode 100644
index 2eb7c7e..0000000
--- a/res/drawable-sw600dp-xhdpi/list_activated_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-v21/drawer_item_background.xml b/res/drawable-v21/drawer_item_background.xml
deleted file mode 100644
index cfc7761..0000000
--- a/res/drawable-v21/drawer_item_background.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-    android:color="@color/nav_item_selected_background">
-  <item>
-    <selector>
-      <item android:drawable="@color/nav_item_selected_background" android:state_checked="true"/>
-      <item android:drawable="@android:color/transparent"/>
-    </selector>
-  </item>
-</ripple>
\ No newline at end of file
diff --git a/res/drawable-v21/floating_action_button.xml b/res/drawable-v21/floating_action_button.xml
deleted file mode 100644
index 9a90112..0000000
--- a/res/drawable-v21/floating_action_button.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
-     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/drawable-xhdpi/ab_solid_custom_blue_inverse_holo.9.png b/res/drawable-xhdpi/ab_solid_custom_blue_inverse_holo.9.png
deleted file mode 100644
index 31fea59..0000000
--- a/res/drawable-xhdpi/ab_solid_custom_blue_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ab_stacked_solid_inverse_holo.9.png b/res/drawable-xhdpi/ab_stacked_solid_inverse_holo.9.png
deleted file mode 100644
index 16b9bef..0000000
--- a/res/drawable-xhdpi/ab_stacked_solid_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/aggregation_suggestions_bg.9.png b/res/drawable-xhdpi/aggregation_suggestions_bg.9.png
deleted file mode 100644
index 816cc0b..0000000
--- a/res/drawable-xhdpi/aggregation_suggestions_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/aggregation_suggestions_bg_light_holo.9.png b/res/drawable-xhdpi/aggregation_suggestions_bg_light_holo.9.png
deleted file mode 100644
index 94ae50a..0000000
--- a/res/drawable-xhdpi/aggregation_suggestions_bg_light_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_star_off_normal_holo_light.png b/res/drawable-xhdpi/btn_star_off_normal_holo_light.png
deleted file mode 100644
index e6048d9..0000000
--- a/res/drawable-xhdpi/btn_star_off_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_star_on_normal_holo_light.png b/res/drawable-xhdpi/btn_star_on_normal_holo_light.png
deleted file mode 100644
index 5588118..0000000
--- a/res/drawable-xhdpi/btn_star_on_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/expanding_entry_card_expand_white_24.png b/res/drawable-xhdpi/expanding_entry_card_expand_white_24.png
deleted file mode 100644
index 42e9f2c..0000000
--- a/res/drawable-xhdpi/expanding_entry_card_expand_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ab_search.png b/res/drawable-xhdpi/ic_ab_search.png
deleted file mode 100644
index 71f7827..0000000
--- a/res/drawable-xhdpi/ic_ab_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_account_circle_black_24dp.png b/res/drawable-xhdpi/ic_account_circle_black_24dp.png
deleted file mode 100644
index f26b201..0000000
--- a/res/drawable-xhdpi/ic_account_circle_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_add_contact_holo_light.png b/res/drawable-xhdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index 4fa8b94..0000000
--- a/res/drawable-xhdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_add_group_holo_dark.png b/res/drawable-xhdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index 85924ab..0000000
--- a/res/drawable-xhdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_arrow_back_24dp.png b/res/drawable-xhdpi/ic_arrow_back_24dp.png
deleted file mode 100644
index bb73272..0000000
--- a/res/drawable-xhdpi/ic_arrow_back_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_business_black_24dp.png b/res/drawable-xhdpi/ic_business_black_24dp.png
deleted file mode 100644
index 9e3b9b8..0000000
--- a/res/drawable-xhdpi/ic_business_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_call_24dp.png b/res/drawable-xhdpi/ic_call_24dp.png
deleted file mode 100644
index ef45e93..0000000
--- a/res/drawable-xhdpi/ic_call_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_call_note_white_24dp.png b/res/drawable-xhdpi/ic_call_note_white_24dp.png
deleted file mode 100644
index 40eed1d..0000000
--- a/res/drawable-xhdpi/ic_call_note_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_call_voicemail_holo_dark.png b/res/drawable-xhdpi/ic_call_voicemail_holo_dark.png
deleted file mode 100644
index d9684d1..0000000
--- a/res/drawable-xhdpi/ic_call_voicemail_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_camera_alt_black_24dp.png b/res/drawable-xhdpi/ic_camera_alt_black_24dp.png
deleted file mode 100644
index 8522251..0000000
--- a/res/drawable-xhdpi/ic_camera_alt_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_circles_extended_black_24dp.png b/res/drawable-xhdpi/ic_circles_extended_black_24dp.png
deleted file mode 100644
index e87e928..0000000
--- a/res/drawable-xhdpi/ic_circles_extended_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_close_dk.png b/res/drawable-xhdpi/ic_close_dk.png
deleted file mode 100644
index 5769f11..0000000
--- a/res/drawable-xhdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_create_24dp.png b/res/drawable-xhdpi/ic_create_24dp.png
deleted file mode 100644
index 48e75be..0000000
--- a/res/drawable-xhdpi/ic_create_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialer_sip_black_24dp.png b/res/drawable-xhdpi/ic_dialer_sip_black_24dp.png
deleted file mode 100644
index 619a79f..0000000
--- a/res/drawable-xhdpi/ic_dialer_sip_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_directions_24dp.png b/res/drawable-xhdpi/ic_directions_24dp.png
deleted file mode 100644
index 99cde4a..0000000
--- a/res/drawable-xhdpi/ic_directions_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_done_wht_24dp.png b/res/drawable-xhdpi/ic_done_wht_24dp.png
deleted file mode 100644
index e34b73e..0000000
--- a/res/drawable-xhdpi/ic_done_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_email_24dp.png b/res/drawable-xhdpi/ic_email_24dp.png
deleted file mode 100644
index adf14ef..0000000
--- a/res/drawable-xhdpi/ic_email_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_event_24dp.png b/res/drawable-xhdpi/ic_event_24dp.png
deleted file mode 100644
index a2bd4b2..0000000
--- a/res/drawable-xhdpi/ic_event_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_group_white_24dp.png b/res/drawable-xhdpi/ic_group_white_24dp.png
deleted file mode 100644
index 09c0e3e..0000000
--- a/res/drawable-xhdpi/ic_group_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hangout_24dp.png b/res/drawable-xhdpi/ic_hangout_24dp.png
deleted file mode 100644
index 0cd7795..0000000
--- a/res/drawable-xhdpi/ic_hangout_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hangout_video_24dp.png b/res/drawable-xhdpi/ic_hangout_video_24dp.png
deleted file mode 100644
index 97b984c..0000000
--- a/res/drawable-xhdpi/ic_hangout_video_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_history_white_drawable_24dp.png b/res/drawable-xhdpi/ic_history_white_drawable_24dp.png
deleted file mode 100644
index e188d4a..0000000
--- a/res/drawable-xhdpi/ic_history_white_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_info_outline_24dp.png b/res/drawable-xhdpi/ic_info_outline_24dp.png
deleted file mode 100644
index c571b2e..0000000
--- a/res/drawable-xhdpi/ic_info_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_insert_comment_black_24dp.png b/res/drawable-xhdpi/ic_insert_comment_black_24dp.png
deleted file mode 100644
index 3ddd56b..0000000
--- a/res/drawable-xhdpi/ic_insert_comment_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_expander_maximized_holo_light.png b/res/drawable-xhdpi/ic_menu_expander_maximized_holo_light.png
deleted file mode 100644
index 6a5ef9b..0000000
--- a/res/drawable-xhdpi/ic_menu_expander_maximized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_expander_minimized_holo_light.png b/res/drawable-xhdpi/ic_menu_expander_minimized_holo_light.png
deleted file mode 100644
index cb53db8..0000000
--- a/res/drawable-xhdpi/ic_menu_expander_minimized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_remove_field_holo_light.png b/res/drawable-xhdpi/ic_menu_remove_field_holo_light.png
deleted file mode 100644
index 65a6b7b..0000000
--- a/res/drawable-xhdpi/ic_menu_remove_field_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_message_24dp.png b/res/drawable-xhdpi/ic_message_24dp.png
deleted file mode 100644
index 763767b..0000000
--- a/res/drawable-xhdpi/ic_message_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_person_24dp.png b/res/drawable-xhdpi/ic_person_24dp.png
deleted file mode 100644
index aea15f0..0000000
--- a/res/drawable-xhdpi/ic_person_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_person_add_24dp.png b/res/drawable-xhdpi/ic_person_add_24dp.png
deleted file mode 100644
index 7e7c289..0000000
--- a/res/drawable-xhdpi/ic_person_add_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_person_black_24dp.png b/res/drawable-xhdpi/ic_person_black_24dp.png
deleted file mode 100644
index ec56af9..0000000
--- a/res/drawable-xhdpi/ic_person_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_person_white_120dp.png b/res/drawable-xhdpi/ic_person_white_120dp.png
deleted file mode 100644
index 8d80a05..0000000
--- a/res/drawable-xhdpi/ic_person_white_120dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_phone_24dp.png b/res/drawable-xhdpi/ic_phone_24dp.png
deleted file mode 100644
index cd9ff60..0000000
--- a/res/drawable-xhdpi/ic_phone_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
deleted file mode 100644
index be9fb22..0000000
--- a/res/drawable-xhdpi/ic_photo_camera_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_place_24dp.png b/res/drawable-xhdpi/ic_place_24dp.png
deleted file mode 100644
index 0f8bc5b..0000000
--- a/res/drawable-xhdpi/ic_place_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_public_black_24dp.png b/res/drawable-xhdpi/ic_public_black_24dp.png
deleted file mode 100644
index a3ab24c..0000000
--- a/res/drawable-xhdpi/ic_public_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_star_24dp.png b/res/drawable-xhdpi/ic_star_24dp.png
deleted file mode 100644
index e1ae246..0000000
--- a/res/drawable-xhdpi/ic_star_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_star_outline_24dp.png b/res/drawable-xhdpi/ic_star_outline_24dp.png
deleted file mode 100644
index f7dacfd..0000000
--- a/res/drawable-xhdpi/ic_star_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_videocam.png b/res/drawable-xhdpi/ic_videocam.png
deleted file mode 100644
index c1783de..0000000
--- a/res/drawable-xhdpi/ic_videocam.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/list_activated_holo.9.png b/res/drawable-xhdpi/list_activated_holo.9.png
deleted file mode 100644
index eda10e6..0000000
--- a/res/drawable-xhdpi/list_activated_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/list_background_holo.9.png b/res/drawable-xhdpi/list_background_holo.9.png
deleted file mode 100644
index b652725..0000000
--- a/res/drawable-xhdpi/list_background_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/list_focused_holo.9.png b/res/drawable-xhdpi/list_focused_holo.9.png
deleted file mode 100644
index 86578be..0000000
--- a/res/drawable-xhdpi/list_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/list_longpressed_holo_light.9.png b/res/drawable-xhdpi/list_longpressed_holo_light.9.png
deleted file mode 100644
index 5532e88..0000000
--- a/res/drawable-xhdpi/list_longpressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/list_pressed_holo_light.9.png b/res/drawable-xhdpi/list_pressed_holo_light.9.png
deleted file mode 100644
index f4af926..0000000
--- a/res/drawable-xhdpi/list_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/list_title_holo.9.png b/res/drawable-xhdpi/list_title_holo.9.png
deleted file mode 100644
index f4f00ca..0000000
--- a/res/drawable-xhdpi/list_title_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/panel_content.9.png b/res/drawable-xhdpi/panel_content.9.png
deleted file mode 100644
index 6acbbb1..0000000
--- a/res/drawable-xhdpi/panel_content.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-xhdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f..0000000
--- a/res/drawable-xhdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/quickcontact_badge_overlay_normal_light.9.png b/res/drawable-xhdpi/quickcontact_badge_overlay_normal_light.9.png
deleted file mode 100644
index 2d3e5c8..0000000
--- a/res/drawable-xhdpi/quickcontact_badge_overlay_normal_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index b038621..0000000
--- a/res/drawable-xhdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/sym_action_audiochat_holo_light.png b/res/drawable-xhdpi/sym_action_audiochat_holo_light.png
deleted file mode 100644
index 163e632..0000000
--- a/res/drawable-xhdpi/sym_action_audiochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/sym_action_videochat_holo_light.png b/res/drawable-xhdpi/sym_action_videochat_holo_light.png
deleted file mode 100644
index 1ec2f63..0000000
--- a/res/drawable-xhdpi/sym_action_videochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ab_solid_custom_blue_inverse_holo.9.png b/res/drawable-xxhdpi/ab_solid_custom_blue_inverse_holo.9.png
deleted file mode 100644
index 24c267f..0000000
--- a/res/drawable-xxhdpi/ab_solid_custom_blue_inverse_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/btn_star_off_normal_holo_light.png b/res/drawable-xxhdpi/btn_star_off_normal_holo_light.png
deleted file mode 100644
index 4ebf2f6..0000000
--- a/res/drawable-xxhdpi/btn_star_off_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/btn_star_on_normal_holo_light.png b/res/drawable-xxhdpi/btn_star_on_normal_holo_light.png
deleted file mode 100644
index 9f07084..0000000
--- a/res/drawable-xxhdpi/btn_star_on_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/expanding_entry_card_expand_white_24.png b/res/drawable-xxhdpi/expanding_entry_card_expand_white_24.png
deleted file mode 100644
index af4d711..0000000
--- a/res/drawable-xxhdpi/expanding_entry_card_expand_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ab_search.png b/res/drawable-xxhdpi/ic_ab_search.png
deleted file mode 100644
index 142c545..0000000
--- a/res/drawable-xxhdpi/ic_ab_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_account_circle_black_24dp.png b/res/drawable-xxhdpi/ic_account_circle_black_24dp.png
deleted file mode 100644
index 3cc0a63..0000000
--- a/res/drawable-xxhdpi/ic_account_circle_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_add_contact_holo_light.png b/res/drawable-xxhdpi/ic_add_contact_holo_light.png
deleted file mode 100644
index b6d756d..0000000
--- a/res/drawable-xxhdpi/ic_add_contact_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_add_group_holo_dark.png b/res/drawable-xxhdpi/ic_add_group_holo_dark.png
deleted file mode 100644
index 44d8fe9..0000000
--- a/res/drawable-xxhdpi/ic_add_group_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_arrow_back_24dp.png b/res/drawable-xxhdpi/ic_arrow_back_24dp.png
deleted file mode 100644
index 72c51b0..0000000
--- a/res/drawable-xxhdpi/ic_arrow_back_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_business_black_24dp.png b/res/drawable-xxhdpi/ic_business_black_24dp.png
deleted file mode 100644
index 85ddede..0000000
--- a/res/drawable-xxhdpi/ic_business_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_call_24dp.png b/res/drawable-xxhdpi/ic_call_24dp.png
deleted file mode 100644
index 90ead2e..0000000
--- a/res/drawable-xxhdpi/ic_call_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_call_note_white_24dp.png b/res/drawable-xxhdpi/ic_call_note_white_24dp.png
deleted file mode 100644
index 2656cad..0000000
--- a/res/drawable-xxhdpi/ic_call_note_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_call_voicemail_holo_dark.png b/res/drawable-xxhdpi/ic_call_voicemail_holo_dark.png
deleted file mode 100644
index ac5b83b..0000000
--- a/res/drawable-xxhdpi/ic_call_voicemail_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_camera_alt_black_24dp.png b/res/drawable-xxhdpi/ic_camera_alt_black_24dp.png
deleted file mode 100644
index fe8974e..0000000
--- a/res/drawable-xxhdpi/ic_camera_alt_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_circles_extended_black_24dp.png b/res/drawable-xxhdpi/ic_circles_extended_black_24dp.png
deleted file mode 100644
index ec09d57..0000000
--- a/res/drawable-xxhdpi/ic_circles_extended_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_close_dk.png b/res/drawable-xxhdpi/ic_close_dk.png
deleted file mode 100644
index 670bf79..0000000
--- a/res/drawable-xxhdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_create_24dp.png b/res/drawable-xxhdpi/ic_create_24dp.png
deleted file mode 100644
index 24142c7..0000000
--- a/res/drawable-xxhdpi/ic_create_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dialer_sip_black_24dp.png b/res/drawable-xxhdpi/ic_dialer_sip_black_24dp.png
deleted file mode 100644
index f1466a1..0000000
--- a/res/drawable-xxhdpi/ic_dialer_sip_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_directions_24dp.png b/res/drawable-xxhdpi/ic_directions_24dp.png
deleted file mode 100644
index e0d53a3..0000000
--- a/res/drawable-xxhdpi/ic_directions_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_done_wht_24dp.png b/res/drawable-xxhdpi/ic_done_wht_24dp.png
deleted file mode 100644
index 4c6a653..0000000
--- a/res/drawable-xxhdpi/ic_done_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_email_24dp.png b/res/drawable-xxhdpi/ic_email_24dp.png
deleted file mode 100644
index d1fc5fc..0000000
--- a/res/drawable-xxhdpi/ic_email_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_event_24dp.png b/res/drawable-xxhdpi/ic_event_24dp.png
deleted file mode 100644
index f27a424..0000000
--- a/res/drawable-xxhdpi/ic_event_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_group_white_24dp.png b/res/drawable-xxhdpi/ic_group_white_24dp.png
deleted file mode 100644
index 03cad4c..0000000
--- a/res/drawable-xxhdpi/ic_group_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_hangout_24dp.png b/res/drawable-xxhdpi/ic_hangout_24dp.png
deleted file mode 100644
index 16858d1..0000000
--- a/res/drawable-xxhdpi/ic_hangout_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_hangout_video_24dp.png b/res/drawable-xxhdpi/ic_hangout_video_24dp.png
deleted file mode 100644
index 4183c76..0000000
--- a/res/drawable-xxhdpi/ic_hangout_video_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_history_white_drawable_24dp.png b/res/drawable-xxhdpi/ic_history_white_drawable_24dp.png
deleted file mode 100644
index f44df1a..0000000
--- a/res/drawable-xxhdpi/ic_history_white_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_info_outline_24dp.png b/res/drawable-xxhdpi/ic_info_outline_24dp.png
deleted file mode 100644
index c41a5fc..0000000
--- a/res/drawable-xxhdpi/ic_info_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_insert_comment_black_24dp.png b/res/drawable-xxhdpi/ic_insert_comment_black_24dp.png
deleted file mode 100644
index 3039cc1..0000000
--- a/res/drawable-xxhdpi/ic_insert_comment_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_expander_maximized_holo_light.png b/res/drawable-xxhdpi/ic_menu_expander_maximized_holo_light.png
deleted file mode 100644
index a42aec2..0000000
--- a/res/drawable-xxhdpi/ic_menu_expander_maximized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_expander_minimized_holo_light.png b/res/drawable-xxhdpi/ic_menu_expander_minimized_holo_light.png
deleted file mode 100644
index 1ca2e46..0000000
--- a/res/drawable-xxhdpi/ic_menu_expander_minimized_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_remove_field_holo_light.png b/res/drawable-xxhdpi/ic_menu_remove_field_holo_light.png
deleted file mode 100644
index 0fec2f2..0000000
--- a/res/drawable-xxhdpi/ic_menu_remove_field_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_message_24dp.png b/res/drawable-xxhdpi/ic_message_24dp.png
deleted file mode 100644
index 0a79824..0000000
--- a/res/drawable-xxhdpi/ic_message_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_person_24dp.png b/res/drawable-xxhdpi/ic_person_24dp.png
deleted file mode 100644
index 184f741..0000000
--- a/res/drawable-xxhdpi/ic_person_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_person_add_24dp.png b/res/drawable-xxhdpi/ic_person_add_24dp.png
deleted file mode 100644
index 8f744f0..0000000
--- a/res/drawable-xxhdpi/ic_person_add_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_person_black_24dp.png b/res/drawable-xxhdpi/ic_person_black_24dp.png
deleted file mode 100644
index 89e8264..0000000
--- a/res/drawable-xxhdpi/ic_person_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_person_white_120dp.png b/res/drawable-xxhdpi/ic_person_white_120dp.png
deleted file mode 100644
index b29df2f..0000000
--- a/res/drawable-xxhdpi/ic_person_white_120dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_phone_24dp.png b/res/drawable-xxhdpi/ic_phone_24dp.png
deleted file mode 100644
index ab538ff..0000000
--- a/res/drawable-xxhdpi/ic_phone_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
deleted file mode 100644
index c8e69dc..0000000
--- a/res/drawable-xxhdpi/ic_photo_camera_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_place_24dp.png b/res/drawable-xxhdpi/ic_place_24dp.png
deleted file mode 100644
index 8a37614..0000000
--- a/res/drawable-xxhdpi/ic_place_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_public_black_24dp.png b/res/drawable-xxhdpi/ic_public_black_24dp.png
deleted file mode 100644
index c7d17e3..0000000
--- a/res/drawable-xxhdpi/ic_public_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_star_24dp.png b/res/drawable-xxhdpi/ic_star_24dp.png
deleted file mode 100644
index 34e7c56..0000000
--- a/res/drawable-xxhdpi/ic_star_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_star_outline_24dp.png b/res/drawable-xxhdpi/ic_star_outline_24dp.png
deleted file mode 100644
index 2afcf04..0000000
--- a/res/drawable-xxhdpi/ic_star_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_videocam.png b/res/drawable-xxhdpi/ic_videocam.png
deleted file mode 100644
index 4ab5ad0..0000000
--- a/res/drawable-xxhdpi/ic_videocam.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/list_activated_holo.9.png b/res/drawable-xxhdpi/list_activated_holo.9.png
deleted file mode 100644
index 52c00dd..0000000
--- a/res/drawable-xxhdpi/list_activated_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/list_focused_holo.9.png b/res/drawable-xxhdpi/list_focused_holo.9.png
deleted file mode 100644
index 3e4ca68..0000000
--- a/res/drawable-xxhdpi/list_focused_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/list_longpressed_holo_light.9.png b/res/drawable-xxhdpi/list_longpressed_holo_light.9.png
deleted file mode 100644
index 230d649..0000000
--- a/res/drawable-xxhdpi/list_longpressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/list_pressed_holo_light.9.png b/res/drawable-xxhdpi/list_pressed_holo_light.9.png
deleted file mode 100644
index 1352a17..0000000
--- a/res/drawable-xxhdpi/list_pressed_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/list_title_holo.9.png b/res/drawable-xxhdpi/list_title_holo.9.png
deleted file mode 100644
index 7ddf14a..0000000
--- a/res/drawable-xxhdpi/list_title_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-xxhdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f..0000000
--- a/res/drawable-xxhdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/quickcontact_badge_overlay_pressed_light.9.png b/res/drawable-xxhdpi/quickcontact_badge_overlay_pressed_light.9.png
deleted file mode 100644
index a044697..0000000
--- a/res/drawable-xxhdpi/quickcontact_badge_overlay_pressed_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/sym_action_audiochat_holo_light.png b/res/drawable-xxhdpi/sym_action_audiochat_holo_light.png
deleted file mode 100644
index ee17752..0000000
--- a/res/drawable-xxhdpi/sym_action_audiochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/sym_action_videochat_holo_light.png b/res/drawable-xxhdpi/sym_action_videochat_holo_light.png
deleted file mode 100644
index ac3507c..0000000
--- a/res/drawable-xxhdpi/sym_action_videochat_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/expanding_entry_card_expand_white_24.png b/res/drawable-xxxhdpi/expanding_entry_card_expand_white_24.png
deleted file mode 100644
index b972190..0000000
--- a/res/drawable-xxxhdpi/expanding_entry_card_expand_white_24.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_ab_search.png b/res/drawable-xxxhdpi/ic_ab_search.png
deleted file mode 100644
index 2ffb2ec..0000000
--- a/res/drawable-xxxhdpi/ic_ab_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_account_circle_black_24dp.png b/res/drawable-xxxhdpi/ic_account_circle_black_24dp.png
deleted file mode 100644
index c6b56c3..0000000
--- a/res/drawable-xxxhdpi/ic_account_circle_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_arrow_back_24dp.png b/res/drawable-xxxhdpi/ic_arrow_back_24dp.png
deleted file mode 100644
index ae01a04..0000000
--- a/res/drawable-xxxhdpi/ic_arrow_back_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_business_black_24dp.png b/res/drawable-xxxhdpi/ic_business_black_24dp.png
deleted file mode 100644
index bc3b7bc..0000000
--- a/res/drawable-xxxhdpi/ic_business_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_call_24dp.png b/res/drawable-xxxhdpi/ic_call_24dp.png
deleted file mode 100644
index b0e0205..0000000
--- a/res/drawable-xxxhdpi/ic_call_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_call_note_white_24dp.png b/res/drawable-xxxhdpi/ic_call_note_white_24dp.png
deleted file mode 100644
index 903c162..0000000
--- a/res/drawable-xxxhdpi/ic_call_note_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_camera_alt_black_24dp.png b/res/drawable-xxxhdpi/ic_camera_alt_black_24dp.png
deleted file mode 100644
index bda927d..0000000
--- a/res/drawable-xxxhdpi/ic_camera_alt_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_circles_extended_black_24dp.png b/res/drawable-xxxhdpi/ic_circles_extended_black_24dp.png
deleted file mode 100644
index d994a32..0000000
--- a/res/drawable-xxxhdpi/ic_circles_extended_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_close_dk.png b/res/drawable-xxxhdpi/ic_close_dk.png
deleted file mode 100644
index 3a5540f..0000000
--- a/res/drawable-xxxhdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_create_24dp.png b/res/drawable-xxxhdpi/ic_create_24dp.png
deleted file mode 100644
index d3ff0ec..0000000
--- a/res/drawable-xxxhdpi/ic_create_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_dialer_sip_black_24dp.png b/res/drawable-xxxhdpi/ic_dialer_sip_black_24dp.png
deleted file mode 100644
index f812810..0000000
--- a/res/drawable-xxxhdpi/ic_dialer_sip_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_directions_24dp.png b/res/drawable-xxxhdpi/ic_directions_24dp.png
deleted file mode 100644
index b7e3377..0000000
--- a/res/drawable-xxxhdpi/ic_directions_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_done_wht_24dp.png b/res/drawable-xxxhdpi/ic_done_wht_24dp.png
deleted file mode 100644
index 2e36684..0000000
--- a/res/drawable-xxxhdpi/ic_done_wht_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_email_24dp.png b/res/drawable-xxxhdpi/ic_email_24dp.png
deleted file mode 100644
index 29ed46a..0000000
--- a/res/drawable-xxxhdpi/ic_email_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_event_24dp.png b/res/drawable-xxxhdpi/ic_event_24dp.png
deleted file mode 100644
index 07f2d82..0000000
--- a/res/drawable-xxxhdpi/ic_event_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_hangout_24dp.png b/res/drawable-xxxhdpi/ic_hangout_24dp.png
deleted file mode 100644
index 4bfdb0d..0000000
--- a/res/drawable-xxxhdpi/ic_hangout_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_hangout_video_24dp.png b/res/drawable-xxxhdpi/ic_hangout_video_24dp.png
deleted file mode 100644
index f1be2e7..0000000
--- a/res/drawable-xxxhdpi/ic_hangout_video_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_history_white_drawable_24dp.png b/res/drawable-xxxhdpi/ic_history_white_drawable_24dp.png
deleted file mode 100644
index 5b96af5..0000000
--- a/res/drawable-xxxhdpi/ic_history_white_drawable_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_info_outline_24dp.png b/res/drawable-xxxhdpi/ic_info_outline_24dp.png
deleted file mode 100644
index 3a82cab..0000000
--- a/res/drawable-xxxhdpi/ic_info_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_insert_comment_black_24dp.png b/res/drawable-xxxhdpi/ic_insert_comment_black_24dp.png
deleted file mode 100644
index 7e795f8..0000000
--- a/res/drawable-xxxhdpi/ic_insert_comment_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_message_24dp.png b/res/drawable-xxxhdpi/ic_message_24dp.png
deleted file mode 100644
index fa7c17a..0000000
--- a/res/drawable-xxxhdpi/ic_message_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_person_24dp.png b/res/drawable-xxxhdpi/ic_person_24dp.png
deleted file mode 100644
index 33d40d8..0000000
--- a/res/drawable-xxxhdpi/ic_person_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_person_add_24dp.png b/res/drawable-xxxhdpi/ic_person_add_24dp.png
deleted file mode 100644
index 2fa2cca..0000000
--- a/res/drawable-xxxhdpi/ic_person_add_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_person_black_24dp.png b/res/drawable-xxxhdpi/ic_person_black_24dp.png
deleted file mode 100644
index 3b55aa1..0000000
--- a/res/drawable-xxxhdpi/ic_person_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_person_white_120dp.png b/res/drawable-xxxhdpi/ic_person_white_120dp.png
deleted file mode 100644
index b53cc11..0000000
--- a/res/drawable-xxxhdpi/ic_person_white_120dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_phone_24dp.png b/res/drawable-xxxhdpi/ic_phone_24dp.png
deleted file mode 100644
index 1f12d8d..0000000
--- a/res/drawable-xxxhdpi/ic_phone_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
deleted file mode 100644
index 777658e..0000000
--- a/res/drawable-xxxhdpi/ic_photo_camera_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_place_24dp.png b/res/drawable-xxxhdpi/ic_place_24dp.png
deleted file mode 100644
index e3efd0c..0000000
--- a/res/drawable-xxxhdpi/ic_place_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_public_black_24dp.png b/res/drawable-xxxhdpi/ic_public_black_24dp.png
deleted file mode 100644
index 67aaffd..0000000
--- a/res/drawable-xxxhdpi/ic_public_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_star_24dp.png b/res/drawable-xxxhdpi/ic_star_24dp.png
deleted file mode 100644
index 7e6c8a9..0000000
--- a/res/drawable-xxxhdpi/ic_star_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_star_outline_24dp.png b/res/drawable-xxxhdpi/ic_star_outline_24dp.png
deleted file mode 100644
index e3a4362..0000000
--- a/res/drawable-xxxhdpi/ic_star_outline_24dp.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_videocam.png b/res/drawable-xxxhdpi/ic_videocam.png
deleted file mode 100644
index 0643ea5..0000000
--- a/res/drawable-xxxhdpi/ic_videocam.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/quantum_ic_assistant_grey600_48.png b/res/drawable-xxxhdpi/quantum_ic_assistant_grey600_48.png
deleted file mode 100644
index a3aa76f..0000000
--- a/res/drawable-xxxhdpi/quantum_ic_assistant_grey600_48.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/drawer_item_background.xml b/res/drawable/drawer_item_background.xml
index 3ffe041..88f6690 100644
--- a/res/drawable/drawer_item_background.xml
+++ b/res/drawable/drawer_item_background.xml
@@ -1,22 +1,25 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
 
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
+     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
 
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-        <item android:state_checked="true" android:drawable="@color/nav_item_selected_background"/>
-        <item android:drawable="@android:color/transparent" />
-</selector>
\ No newline at end of file
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+        android:color="@color/nav_item_selected_background">
+  <item>
+    <selector>
+      <item android:drawable="@color/nav_item_selected_background" android:state_checked="true"/>
+      <item android:drawable="@android:color/transparent"/>
+    </selector>
+  </item>
+</ripple>
\ No newline at end of file
diff --git a/res/drawable/floating_action_button.xml b/res/drawable/floating_action_button.xml
index 2ba237f..796920e 100644
--- a/res/drawable/floating_action_button.xml
+++ b/res/drawable/floating_action_button.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 The Android Open Source Project
+<!-- Copyright (C) 2016 The Android Open Source Project
 
      Licensed under the Apache License, Version 2.0 (the "License");
      you may not use this file except in compliance with the License.
@@ -15,10 +14,11 @@
      limitations under the License.
 -->
 
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-     <item android:state_pressed="true">
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+        android:color="@color/contacts_accent_color">
+     <item android:id="@android:id/mask">
           <shape android:shape="oval">
-               <solid android:color="@color/primary_color_dark" />
+               <solid android:color="@android:color/white" />
           </shape>
      </item>
-</selector>
\ No newline at end of file
+</ripple>
\ No newline at end of file
diff --git a/res/drawable/gray_action_bar_background.xml b/res/drawable/gray_action_bar_background.xml
deleted file mode 100644
index 4192313..0000000
--- a/res/drawable/gray_action_bar_background.xml
+++ /dev/null
@@ -1,22 +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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:state_pressed="true"
-        android:drawable="@drawable/ab_solid_custom_blue_inverse_holo"/>
-    <item android:drawable="@drawable/ab_stacked_solid_inverse_holo" />
-</selector>
diff --git a/res/drawable/ic_add.xml b/res/drawable/ic_add.xml
deleted file mode 100644
index 245b188..0000000
--- a/res/drawable/ic_add.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
-</vector>
diff --git a/res/drawable/ic_arrow_drop_down_black_24dp.xml b/res/drawable/ic_arrow_drop_down_black_24dp.xml
deleted file mode 100644
index ebf2123..0000000
--- a/res/drawable/ic_arrow_drop_down_black_24dp.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M7,10l5,5 5,-5z"/>
-</vector>
diff --git a/res/drawable/ic_assistant.xml b/res/drawable/ic_assistant.xml
deleted file mode 100644
index 3391beb..0000000
--- a/res/drawable/ic_assistant.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M19,2L5,2c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h4l3,3 3,-3h4c1.1,0 2,-0.9 2,-2L21,4c0,-1.1 -0.9,-2 -2,-2zM13.88,12.88L12,17l-1.88,-4.12L6,11l4.12,-1.88L12,5l1.88,4.12L18,11l-4.12,1.88z"/>
-</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_back_arrow.xml b/res/drawable/ic_back_arrow.xml
deleted file mode 100644
index 68a875d..0000000
--- a/res/drawable/ic_back_arrow.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2014 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_arrow_back_24dp"
-        android:autoMirrored="true"
-        android:tint="@color/actionbar_icon_color" />
\ No newline at end of file
diff --git a/res/drawable/ic_call.xml b/res/drawable/ic_call.xml
deleted file mode 100644
index e06317b..0000000
--- a/res/drawable/ic_call.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_call_24dp"
-        android:autoMirrored="true" />
diff --git a/res/drawable/ic_cancel_black_24dp.xml b/res/drawable/ic_cancel_black_24dp.xml
deleted file mode 100644
index e759083..0000000
--- a/res/drawable/ic_cancel_black_24dp.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="@color/actionbar_icon_color_grey"
-        android:pathData="M12,2C6.47,2 2,6.47 2,12s4.47,10 10,10 10,-4.47 10,-10S17.53,2 12,2zM17,15.59L15.59,17 12,13.41 8.41,17 7,15.59 10.59,12 7,8.41 8.41,7 12,10.59 15.59,7 17,8.41 13.41,12 17,15.59z"/>
-</vector>
diff --git a/res/drawable/ic_check_mark.xml b/res/drawable/ic_check_mark.xml
deleted file mode 100644
index 2e2c8ff..0000000
--- a/res/drawable/ic_check_mark.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z"/>
-</vector>
diff --git a/res/drawable/ic_close_24dp.xml b/res/drawable/ic_close_24dp.xml
deleted file mode 100644
index bcbb759..0000000
--- a/res/drawable/ic_close_24dp.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0" >
-    <path
-        android:fillColor="@android:color/white"
-        android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
-</vector>
diff --git a/res/drawable/ic_close_lt.xml b/res/drawable/ic_close_lt.xml
deleted file mode 100644
index 178b8a0..0000000
--- a/res/drawable/ic_close_lt.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2014 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-    android:src="@drawable/ic_close_dk"
-    android:autoMirrored="true"
-    android:tint="@android:color/black" />
\ No newline at end of file
diff --git a/res/drawable/ic_device.xml b/res/drawable/ic_device.xml
deleted file mode 100644
index ed05651..0000000
--- a/res/drawable/ic_device.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#7f7f7f"
-        android:pathData="M17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,19H7V5h10v14z"/>
-</vector>
diff --git a/res/drawable/ic_history_24dp.xml b/res/drawable/ic_history_24dp.xml
deleted file mode 100644
index f61afaa..0000000
--- a/res/drawable/ic_history_24dp.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="@android:color/white"
-        android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
-</vector>
diff --git a/res/drawable/ic_material_star.xml b/res/drawable/ic_material_star.xml
deleted file mode 100644
index 3b2d0c9..0000000
--- a/res/drawable/ic_material_star.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
-</vector>
diff --git a/res/drawable/ic_menu_delete.xml b/res/drawable/ic_menu_delete.xml
deleted file mode 100644
index 37b733e..0000000
--- a/res/drawable/ic_menu_delete.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="@color/actionbar_icon_color_grey"
-        android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
-</vector>
diff --git a/res/drawable/ic_menu_duplicates.xml b/res/drawable/ic_menu_duplicates.xml
deleted file mode 100644
index 59255d9..0000000
--- a/res/drawable/ic_menu_duplicates.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M16,1L4,1c-1.1,0 -2,0.9 -2,2v14h2L4,3h12L16,1zM19,5L8,5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h11c1.1,0 2,-0.9 2,-2L21,7c0,-1.1 -0.9,-2 -2,-2zM19,21L8,21L8,7h11v14z"/>
-</vector>
diff --git a/res/drawable/ic_menu_expand_maximized_24dp.xml b/res/drawable/ic_menu_expand_maximized_24dp.xml
deleted file mode 100644
index 9c626cc..0000000
--- a/res/drawable/ic_menu_expand_maximized_24dp.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path
-        android:fillColor="@android:color/white"
-        android:pathData="M7.41,15.41L12,10.83l4.59,4.58L18,14l-6,-6 -6,6z"/>
-</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_menu_expand_minimized_24dp.xml b/res/drawable/ic_menu_expand_minimized_24dp.xml
deleted file mode 100644
index 95a1bf7..0000000
--- a/res/drawable/ic_menu_expand_minimized_24dp.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path
-        android:fillColor="@android:color/white"
-        android:pathData="M7.41,7.84L12,12.42l4.59,-4.58L18,9.25l-6,6 -6,-6z"/>
-</vector>
\ No newline at end of file
diff --git a/res/drawable/ic_menu_filter.xml b/res/drawable/ic_menu_filter.xml
deleted file mode 100644
index b864bb0..0000000
--- a/res/drawable/ic_menu_filter.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/>
-</vector>
diff --git a/res/drawable/ic_menu_hamburger.xml b/res/drawable/ic_menu_hamburger.xml
deleted file mode 100644
index 440676d..0000000
--- a/res/drawable/ic_menu_hamburger.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z"/>
-</vector>
diff --git a/res/drawable/ic_menu_help.xml b/res/drawable/ic_menu_help.xml
deleted file mode 100644
index 52fcded..0000000
--- a/res/drawable/ic_menu_help.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,19h-2v-2h2v2zM15.07,11.25l-0.9,0.92C13.45,12.9 13,13.5 13,15h-2v-0.5c0,-1.1 0.45,-2.1 1.17,-2.83l1.24,-1.26c0.37,-0.36 0.59,-0.86 0.59,-1.41 0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2L8,9c0,-2.21 1.79,-4 4,-4s4,1.79 4,4c0,0.88 -0.36,1.68 -0.93,2.25z"/>
-</vector>
diff --git a/res/drawable/ic_menu_label.xml b/res/drawable/ic_menu_label.xml
deleted file mode 100644
index 95349c7..0000000
--- a/res/drawable/ic_menu_label.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M17.63,5.84C17.27,5.33 16.67,5 16,5L5,5.01C3.9,5.01 3,5.9 3,7v10c0,1.1 0.9,1.99 2,1.99L16,19c0.67,0 1.27,-0.33 1.63,-0.84L22,12l-4.37,-6.16z"/>
-</vector>
diff --git a/res/drawable/ic_menu_link.xml b/res/drawable/ic_menu_link.xml
deleted file mode 100644
index bc954c4..0000000
--- a/res/drawable/ic_menu_link.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="@color/actionbar_icon_color_grey"
-        android:pathData="M3.9,12c0,-1.71 1.39,-3.1 3.1,-3.1h4L11,7L7,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h4v-1.9L7,15.1c-1.71,0 -3.1,-1.39 -3.1,-3.1zM8,13h8v-2L8,11v2zM17,7h-4v1.9h4c1.71,0 3.1,1.39 3.1,3.1s-1.39,3.1 -3.1,3.1h-4L13,17h4c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5z"/>
-</vector>
diff --git a/res/drawable/ic_menu_settings.xml b/res/drawable/ic_menu_settings.xml
deleted file mode 100644
index f1c45fd..0000000
--- a/res/drawable/ic_menu_settings.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"/>
-</vector>
diff --git a/res/drawable/ic_menu_share.xml b/res/drawable/ic_menu_share.xml
deleted file mode 100644
index 23ab28b..0000000
--- a/res/drawable/ic_menu_share.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="@color/actionbar_icon_color_grey"
-        android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
-</vector>
diff --git a/res/drawable/ic_message_24dp_mirrored.xml b/res/drawable/ic_message_24dp_mirrored.xml
deleted file mode 100644
index b1bd743..0000000
--- a/res/drawable/ic_message_24dp_mirrored.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-    android:src="@drawable/ic_message_24dp"
-    android:autoMirrored="true" />
diff --git a/res/drawable/ic_more_vert.xml b/res/drawable/ic_more_vert.xml
deleted file mode 100644
index 007e2a1..0000000
--- a/res/drawable/ic_more_vert.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/>
-</vector>
diff --git a/res/drawable/ic_person_add_tinted_24dp.xml b/res/drawable/ic_person_add_tinted_24dp.xml
deleted file mode 100644
index fdbf4fa..0000000
--- a/res/drawable/ic_person_add_tinted_24dp.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2014 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-    android:src="@drawable/ic_person_add_24dp"
-    android:autoMirrored="true"/>
diff --git a/res/drawable/ic_search_add_contact.xml b/res/drawable/ic_search_add_contact.xml
deleted file mode 100644
index 9a313cd..0000000
--- a/res/drawable/ic_search_add_contact.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-    android:src="@drawable/ic_person_add_24dp"
-    android:autoMirrored="true" />
diff --git a/res/drawable/ic_search_video_call.xml b/res/drawable/ic_search_video_call.xml
deleted file mode 100644
index c2390e5..0000000
--- a/res/drawable/ic_search_video_call.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2015 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_videocam"
-        android:autoMirrored="true"
-        android:tint="@color/search_video_call_icon_tint" />
diff --git a/res/drawable/ic_sim_card_tinted_24dp.xml b/res/drawable/ic_sim_card_tinted_24dp.xml
deleted file mode 100644
index 9a20abf..0000000
--- a/res/drawable/ic_sim_card_tinted_24dp.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<!-- Material design SIM card icon https://design.google.com/icons/#ic_sim_card -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0"
-        android:tint="@color/device_account_tint_color">
-    <path
-        android:fillColor="#FF000000"
-        android:pathData="M19.99,4c0,-1.1 -0.89,-2 -1.99,-2h-8L4,8v12c0,1.1 0.9,2 2,2h12.01c1.1,0 1.99,-0.9 1.99,-2l-0.01,-16zM9,19L7,19v-2h2v2zM17,19h-2v-2h2v2zM9,15L7,15v-4h2v4zM13,19h-2v-4h2v4zM13,13h-2v-2h2v2zM17,15h-2v-4h2v4z"/>
-</vector>
diff --git a/res/drawable/list_item_activated_background.xml b/res/drawable/list_item_activated_background.xml
deleted file mode 100644
index a58577e..0000000
--- a/res/drawable/list_item_activated_background.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_activated="true" android:drawable="@drawable/list_activated_holo" />
-    <item android:drawable="@drawable/list_background_holo" />
-</selector>
diff --git a/res/drawable/quantum_ic_account_circle_vd_theme_24.xml b/res/drawable/quantum_ic_account_circle_vd_theme_24.xml
new file mode 100644
index 0000000..df2f6e7
--- /dev/null
+++ b/res/drawable/quantum_ic_account_circle_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_add_vd_theme_24.xml b/res/drawable/quantum_ic_add_vd_theme_24.xml
new file mode 100644
index 0000000..167dafe
--- /dev/null
+++ b/res/drawable/quantum_ic_add_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_arrow_back_vd_theme_24.xml b/res/drawable/quantum_ic_arrow_back_vd_theme_24.xml
new file mode 100644
index 0000000..174cf12
--- /dev/null
+++ b/res/drawable/quantum_ic_arrow_back_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_arrow_drop_down_vd_theme_24.xml b/res/drawable/quantum_ic_arrow_drop_down_vd_theme_24.xml
new file mode 100644
index 0000000..87c39de
--- /dev/null
+++ b/res/drawable/quantum_ic_arrow_drop_down_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M7,10l5,5 5,-5z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_assistant_vd_theme_24.xml b/res/drawable/quantum_ic_assistant_vd_theme_24.xml
new file mode 100644
index 0000000..2d5135b
--- /dev/null
+++ b/res/drawable/quantum_ic_assistant_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M19,2L5,2c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h4l3,3 3,-3h4c1.1,0 2,-0.9 2,-2L21,4c0,-1.1 -0.9,-2 -2,-2zM13.88,12.88L12,17l-1.88,-4.12L6,11l4.12,-1.88L12,5l1.88,4.12L18,11l-4.12,1.88z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_business_vd_theme_24.xml b/res/drawable/quantum_ic_business_vd_theme_24.xml
new file mode 100644
index 0000000..684265b
--- /dev/null
+++ b/res/drawable/quantum_ic_business_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,7L12,3L2,3v18h20L22,7L12,7zM6,19L4,19v-2h2v2zM6,15L4,15v-2h2v2zM6,11L4,11L4,9h2v2zM6,7L4,7L4,5h2v2zM10,19L8,19v-2h2v2zM10,15L8,15v-2h2v2zM10,11L8,11L8,9h2v2zM10,7L8,7L8,5h2v2zM20,19h-8v-2h2v-2h-2v-2h2v-2h-2L12,9h8v10zM18,11h-2v2h2v-2zM18,15h-2v2h2v-2z"/>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/quantum_ic_call_received_vd_theme_24.xml b/res/drawable/quantum_ic_call_received_vd_theme_24.xml
new file mode 100644
index 0000000..3793f74
--- /dev/null
+++ b/res/drawable/quantum_ic_call_received_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M20,5.41L18.59,4 7,15.59V9H5v10h10v-2H8.41z"/>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/quantum_ic_camera_alt_vd_theme_24.xml b/res/drawable/quantum_ic_camera_alt_vd_theme_24.xml
new file mode 100644
index 0000000..07ed76b
--- /dev/null
+++ b/res/drawable/quantum_ic_camera_alt_vd_theme_24.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,12m-3.2,0a3.2,3.2 0,1 1,6.4 0a3.2,3.2 0,1 1,-6.4 0"/>
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M9,2L7.17,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2h-3.17L15,2L9,2zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_cancel_vd_theme_24.xml b/res/drawable/quantum_ic_cancel_vd_theme_24.xml
new file mode 100644
index 0000000..409ba75
--- /dev/null
+++ b/res/drawable/quantum_ic_cancel_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,2C6.47,2 2,6.47 2,12s4.47,10 10,10 10,-4.47 10,-10S17.53,2 12,2zM17,15.59L15.59,17 12,13.41 8.41,17 7,15.59 10.59,12 7,8.41 8.41,7 12,10.59 15.59,7 17,8.41 13.41,12 17,15.59z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_circles_ext_vd_theme_24.xml b/res/drawable/quantum_ic_circles_ext_vd_theme_24.xml
new file mode 100644
index 0000000..73baff2
--- /dev/null
+++ b/res/drawable/quantum_ic_circles_ext_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,10c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,4c1.1,0 2,0.9 2,2s-0.9,2 -2,2 -2,-0.9 -2,-2 0.9,-2 2,-2zM6,13c-2.21,0 -4,1.79 -4,4s1.79,4 4,4 4,-1.79 4,-4 -1.79,-4 -4,-4zM6,19c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2zM12,11.1c-1.05,0 -1.9,0.85 -1.9,1.9s0.85,1.9 1.9,1.9c1.05,0 1.9,-0.85 1.9,-1.9s-0.85,-1.9 -1.9,-1.9zM18,13c-2.21,0 -4,1.79 -4,4s1.79,4 4,4 4,-1.79 4,-4 -1.79,-4 -4,-4zM18,19c-1.1,0 -2,-0.9 -2,-2s0.9,-2 2,-2 2,0.9 2,2 -0.9,2 -2,2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_close_vd_theme_24.xml b/res/drawable/quantum_ic_close_vd_theme_24.xml
new file mode 100644
index 0000000..0aafe4b
--- /dev/null
+++ b/res/drawable/quantum_ic_close_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_content_copy_vd_theme_24.xml b/res/drawable/quantum_ic_content_copy_vd_theme_24.xml
new file mode 100644
index 0000000..b43eb4a
--- /dev/null
+++ b/res/drawable/quantum_ic_content_copy_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M16,1L4,1c-1.1,0 -2,0.9 -2,2v14h2L4,3h12L16,1zM19,5L8,5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h11c1.1,0 2,-0.9 2,-2L21,7c0,-1.1 -0.9,-2 -2,-2zM19,21L8,21L8,7h11v14z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_create_vd_theme_24.xml b/res/drawable/quantum_ic_create_vd_theme_24.xml
new file mode 100644
index 0000000..8f161bc
--- /dev/null
+++ b/res/drawable/quantum_ic_create_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_delete_vd_theme_24.xml b/res/drawable/quantum_ic_delete_vd_theme_24.xml
new file mode 100644
index 0000000..698a0bc
--- /dev/null
+++ b/res/drawable/quantum_ic_delete_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_dialer_sip_vd_theme_24.xml b/res/drawable/quantum_ic_dialer_sip_vd_theme_24.xml
new file mode 100644
index 0000000..6ef33db
--- /dev/null
+++ b/res/drawable/quantum_ic_dialer_sip_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M17,3h-1v5h1L17,3zM15,5h-2L13,4h2L15,3h-3v3h2v1h-2v1h3L15,5zM18,3v5h1L19,6h2L21,3h-3zM20,5h-1L19,4h1v1zM20,15.5c-1.25,0 -2.45,-0.2 -3.57,-0.57 -0.35,-0.11 -0.74,-0.03 -1.01,0.24l-2.2,2.2c-2.83,-1.44 -5.15,-3.75 -6.59,-6.59l2.2,-2.21c0.27,-0.26 0.35,-0.65 0.24,-1C8.7,6.45 8.5,5.25 8.5,4c0,-0.55 -0.45,-1 -1,-1L4,3c-0.55,0 -1,0.45 -1,1 0,9.39 7.61,17 17,17 0.55,0 1,-0.45 1,-1v-3.5c0,-0.55 -0.45,-1 -1,-1z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_directions_vd_theme_24.xml b/res/drawable/quantum_ic_directions_vd_theme_24.xml
new file mode 100644
index 0000000..7da99e0
--- /dev/null
+++ b/res/drawable/quantum_ic_directions_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M21.71,11.29l-9,-9c-0.39,-0.39 -1.02,-0.39 -1.41,0l-9,9c-0.39,0.39 -0.39,1.02 0,1.41l9,9c0.39,0.39 1.02,0.39 1.41,0l9,-9c0.39,-0.38 0.39,-1.01 0,-1.41zM14,14.5V12h-4v3H8v-4c0,-0.55 0.45,-1 1,-1h5V7.5l3.5,3.5 -3.5,3.5z"/>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/quantum_ic_done_vd_theme_24.xml b/res/drawable/quantum_ic_done_vd_theme_24.xml
new file mode 100644
index 0000000..0c810e8
--- /dev/null
+++ b/res/drawable/quantum_ic_done_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_email_vd_theme_24.xml b/res/drawable/quantum_ic_email_vd_theme_24.xml
new file mode 100644
index 0000000..724f45a
--- /dev/null
+++ b/res/drawable/quantum_ic_email_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M20,4L4,4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM20,8l-8,5 -8,-5L4,6l8,5 8,-5v2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_error_vd_theme_24.xml b/res/drawable/quantum_ic_error_vd_theme_24.xml
new file mode 100644
index 0000000..b9dbeb4
--- /dev/null
+++ b/res/drawable/quantum_ic_error_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-2h2v2zM13,13h-2L11,7h2v6z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_event_vd_theme_24.xml b/res/drawable/quantum_ic_event_vd_theme_24.xml
new file mode 100644
index 0000000..e0107b1
--- /dev/null
+++ b/res/drawable/quantum_ic_event_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M17,12h-5v5h5v-5zM16,1v2L8,3L8,1L6,1v2L5,3c-1.11,0 -1.99,0.9 -1.99,2L3,19c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2h-1L18,1h-2zM19,19L5,19L5,8h14v11z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_expand_less_vd_theme_24.xml b/res/drawable/quantum_ic_expand_less_vd_theme_24.xml
new file mode 100644
index 0000000..2f60a68
--- /dev/null
+++ b/res/drawable/quantum_ic_expand_less_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,8l-6,6 1.41,1.41L12,10.83l4.59,4.58L18,14z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_expand_more_vd_theme_24.xml b/res/drawable/quantum_ic_expand_more_vd_theme_24.xml
new file mode 100644
index 0000000..9fbfe48
--- /dev/null
+++ b/res/drawable/quantum_ic_expand_more_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M16.59,8.59L12,13.17 7.41,8.59 6,10l6,6 6,-6z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_hangout_vd_theme_24.xml b/res/drawable/quantum_ic_hangout_vd_theme_24.xml
new file mode 100644
index 0000000..ab07ba8
--- /dev/null
+++ b/res/drawable/quantum_ic_hangout_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M11.5,2C6.81,2 3,5.81 3,10.5S6.81,19 11.5,19h0.5v3.5c4.86,-2.34 8,-7.5 8,-12C20,5.81 16.19,2 11.5,2zM11,11l-1,2L8.5,13l1,-2L8,11L8,8h3v3zM15,11l-1,2h-1.5l1,-2L12,11L12,8h3v3z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_hangout_video_vd_theme_24.xml b/res/drawable/quantum_ic_hangout_video_vd_theme_24.xml
new file mode 100644
index 0000000..1ce818a
--- /dev/null
+++ b/res/drawable/quantum_ic_hangout_video_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M20,4L4,4c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2L22,6c0,-1.1 -0.9,-2 -2,-2zM18,16l-4,-3.2L14,16L6,16L6,8h8v3.2L18,8v8z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_help_vd_theme_24.xml b/res/drawable/quantum_ic_help_vd_theme_24.xml
new file mode 100644
index 0000000..385d720
--- /dev/null
+++ b/res/drawable/quantum_ic_help_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,19h-2v-2h2v2zM15.07,11.25l-0.9,0.92C13.45,12.9 13,13.5 13,15h-2v-0.5c0,-1.1 0.45,-2.1 1.17,-2.83l1.24,-1.26c0.37,-0.36 0.59,-0.86 0.59,-1.41 0,-1.1 -0.9,-2 -2,-2s-2,0.9 -2,2L8,9c0,-2.21 1.79,-4 4,-4s4,1.79 4,4c0,0.88 -0.36,1.68 -0.93,2.25z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_history_vd_theme_24.xml b/res/drawable/quantum_ic_history_vd_theme_24.xml
new file mode 100644
index 0000000..51621fd
--- /dev/null
+++ b/res/drawable/quantum_ic_history_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_insert_comment_vd_theme_24.xml b/res/drawable/quantum_ic_insert_comment_vd_theme_24.xml
new file mode 100644
index 0000000..247cb1b
--- /dev/null
+++ b/res/drawable/quantum_ic_insert_comment_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M20,2L4,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h14l4,4L22,4c0,-1.1 -0.9,-2 -2,-2zM18,14L6,14v-2h12v2zM18,11L6,11L6,9h12v2zM18,8L6,8L6,6h12v2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_label_vd_theme_24.xml b/res/drawable/quantum_ic_label_vd_theme_24.xml
new file mode 100644
index 0000000..5630805
--- /dev/null
+++ b/res/drawable/quantum_ic_label_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M17.63,5.84C17.27,5.33 16.67,5 16,5L5,5.01C3.9,5.01 3,5.9 3,7v10c0,1.1 0.9,1.99 2,1.99L16,19c0.67,0 1.27,-0.33 1.63,-0.84L22,12l-4.37,-6.16z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_link_vd_theme_24.xml b/res/drawable/quantum_ic_link_vd_theme_24.xml
new file mode 100644
index 0000000..67a167e
--- /dev/null
+++ b/res/drawable/quantum_ic_link_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M3.9,12c0,-1.71 1.39,-3.1 3.1,-3.1h4L11,7L7,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h4v-1.9L7,15.1c-1.71,0 -3.1,-1.39 -3.1,-3.1zM8,13h8v-2L8,11v2zM17,7h-4v1.9h4c1.71,0 3.1,1.39 3.1,3.1s-1.39,3.1 -3.1,3.1h-4L13,17h4c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_menu_vd_theme_24.xml b/res/drawable/quantum_ic_menu_vd_theme_24.xml
new file mode 100644
index 0000000..ba6adcb
--- /dev/null
+++ b/res/drawable/quantum_ic_menu_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_message_vd_theme_24.xml b/res/drawable/quantum_ic_message_vd_theme_24.xml
new file mode 100644
index 0000000..a06a1da
--- /dev/null
+++ b/res/drawable/quantum_ic_message_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M20,2L4,2c-1.1,0 -1.99,0.9 -1.99,2L2,22l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM18,14L6,14v-2h12v2zM18,11L6,11L6,9h12v2zM18,8L6,8L6,6h12v2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_mic_vd_theme_24.xml b/res/drawable/quantum_ic_mic_vd_theme_24.xml
new file mode 100644
index 0000000..ea4bef4
--- /dev/null
+++ b/res/drawable/quantum_ic_mic_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,14c1.66,0 2.99,-1.34 2.99,-3L15,5c0,-1.66 -1.34,-3 -3,-3S9,3.34 9,5v6c0,1.66 1.34,3 3,3zM17.3,11c0,3 -2.54,5.1 -5.3,5.1S6.7,14 6.7,11L5,11c0,3.41 2.72,6.23 6,6.72L11,21h2v-3.28c3.28,-0.48 6,-3.3 6,-6.72h-1.7z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_more_vert_vd_theme_24.xml b/res/drawable/quantum_ic_more_vert_vd_theme_24.xml
new file mode 100644
index 0000000..442451f
--- /dev/null
+++ b/res/drawable/quantum_ic_more_vert_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_perm_phone_msg_vd_theme_24.xml b/res/drawable/quantum_ic_perm_phone_msg_vd_theme_24.xml
new file mode 100644
index 0000000..d7e0fb4
--- /dev/null
+++ b/res/drawable/quantum_ic_perm_phone_msg_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M20,15.5c-1.25,0 -2.45,-0.2 -3.57,-0.57 -0.35,-0.11 -0.74,-0.03 -1.02,0.24l-2.2,2.2c-2.83,-1.44 -5.15,-3.75 -6.59,-6.58l2.2,-2.21c0.28,-0.27 0.36,-0.66 0.25,-1.01C8.7,6.45 8.5,5.25 8.5,4c0,-0.55 -0.45,-1 -1,-1H4c-0.55,0 -1,0.45 -1,1 0,9.39 7.61,17 17,17 0.55,0 1,-0.45 1,-1v-3.5c0,-0.55 -0.45,-1 -1,-1zM12,3v10l3,-3h6V3h-9z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_person_add_vd_theme_24.xml b/res/drawable/quantum_ic_person_add_vd_theme_24.xml
new file mode 100644
index 0000000..48a017f
--- /dev/null
+++ b/res/drawable/quantum_ic_person_add_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M15,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM6,10L6,7L4,7v3L1,10v2h3v3h2v-3h3v-2L6,10zM15,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_person_vd_theme_24.xml b/res/drawable/quantum_ic_person_vd_theme_24.xml
new file mode 100644
index 0000000..a5d9c8c
--- /dev/null
+++ b/res/drawable/quantum_ic_person_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_phone_vd_theme_24.xml b/res/drawable/quantum_ic_phone_vd_theme_24.xml
new file mode 100644
index 0000000..8d37e2b
--- /dev/null
+++ b/res/drawable/quantum_ic_phone_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M6.62,10.79c1.44,2.83 3.76,5.14 6.59,6.59l2.2,-2.2c0.27,-0.27 0.67,-0.36 1.02,-0.24 1.12,0.37 2.33,0.57 3.57,0.57 0.55,0 1,0.45 1,1V20c0,0.55 -0.45,1 -1,1 -9.39,0 -17,-7.61 -17,-17 0,-0.55 0.45,-1 1,-1h3.5c0.55,0 1,0.45 1,1 0,1.25 0.2,2.45 0.57,3.57 0.11,0.35 0.03,0.74 -0.25,1.02l-2.2,2.2z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_place_vd_theme_24.xml b/res/drawable/quantum_ic_place_vd_theme_24.xml
new file mode 100644
index 0000000..4276861
--- /dev/null
+++ b/res/drawable/quantum_ic_place_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,2C8.13,2 5,5.13 5,9c0,5.25 7,13 7,13s7,-7.75 7,-13c0,-3.87 -3.13,-7 -7,-7zM12,11.5c-1.38,0 -2.5,-1.12 -2.5,-2.5s1.12,-2.5 2.5,-2.5 2.5,1.12 2.5,2.5 -1.12,2.5 -2.5,2.5z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_public_vd_theme_24.xml b/res/drawable/quantum_ic_public_vd_theme_24.xml
new file mode 100644
index 0000000..6dffe5c
--- /dev/null
+++ b/res/drawable/quantum_ic_public_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM11,19.93c-3.95,-0.49 -7,-3.85 -7,-7.93 0,-0.62 0.08,-1.21 0.21,-1.79L9,15v1c0,1.1 0.9,2 2,2v1.93zM17.9,17.39c-0.26,-0.81 -1,-1.39 -1.9,-1.39h-1v-3c0,-0.55 -0.45,-1 -1,-1L8,12v-2h2c0.55,0 1,-0.45 1,-1L11,7h2c1.1,0 2,-0.9 2,-2v-0.41c2.93,1.19 5,4.06 5,7.41 0,2.08 -0.8,3.97 -2.1,5.39z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_search_vd_theme_24.xml b/res/drawable/quantum_ic_search_vd_theme_24.xml
new file mode 100644
index 0000000..5c5632a
--- /dev/null
+++ b/res/drawable/quantum_ic_search_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_settings_vd_theme_24.xml b/res/drawable/quantum_ic_settings_vd_theme_24.xml
new file mode 100644
index 0000000..1867c79
--- /dev/null
+++ b/res/drawable/quantum_ic_settings_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_share_vd_theme_24.xml b/res/drawable/quantum_ic_share_vd_theme_24.xml
new file mode 100644
index 0000000..f024a22
--- /dev/null
+++ b/res/drawable/quantum_ic_share_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_sim_card_vd_theme_24.xml b/res/drawable/quantum_ic_sim_card_vd_theme_24.xml
new file mode 100644
index 0000000..2bc9387
--- /dev/null
+++ b/res/drawable/quantum_ic_sim_card_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M19.99,4c0,-1.1 -0.89,-2 -1.99,-2h-8L4,8v12c0,1.1 0.9,2 2,2h12.01c1.1,0 1.99,-0.9 1.99,-2l-0.01,-16zM9,19L7,19v-2h2v2zM17,19h-2v-2h2v2zM9,15L7,15v-4h2v4zM13,19h-2v-4h2v4zM13,13h-2v-2h2v2zM17,15h-2v-4h2v4z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_smartphone_vd_theme_24.xml b/res/drawable/quantum_ic_smartphone_vd_theme_24.xml
new file mode 100644
index 0000000..9f987e7
--- /dev/null
+++ b/res/drawable/quantum_ic_smartphone_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2V3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,19H7V5h10v14z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_star_border_vd_theme_24.xml b/res/drawable/quantum_ic_star_border_vd_theme_24.xml
new file mode 100644
index 0000000..e266072
--- /dev/null
+++ b/res/drawable/quantum_ic_star_border_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M22,9.24l-7.19,-0.62L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21 12,17.27 18.18,21l-1.63,-7.03L22,9.24zM12,15.4l-3.76,2.27 1,-4.28 -3.32,-2.88 4.38,-0.38L12,6.1l1.71,4.04 4.38,0.38 -3.32,2.88 1,4.28L12,15.4z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_star_vd_theme_24.xml b/res/drawable/quantum_ic_star_vd_theme_24.xml
new file mode 100644
index 0000000..f5a93c6
--- /dev/null
+++ b/res/drawable/quantum_ic_star_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
+</vector>
diff --git a/res/drawable/quantum_ic_videocam_vd_theme_24.xml b/res/drawable/quantum_ic_videocam_vd_theme_24.xml
new file mode 100644
index 0000000..8740857
--- /dev/null
+++ b/res/drawable/quantum_ic_videocam_vd_theme_24.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0"
+        android:tint="?attr/colorControlNormal">
+    <path
+        android:fillColor="@android:color/white"
+        android:pathData="M17,10.5V7c0,-0.55 -0.45,-1 -1,-1H4c-0.55,0 -1,0.45 -1,1v10c0,0.55 0.45,1 1,1h12c0.55,0 1,-0.45 1,-1v-3.5l4,4v-11l-4,4z"/>
+</vector>
diff --git a/res/drawable/searchedittext_custom_cursor.xml b/res/drawable/searchedittext_custom_cursor.xml
index a6bb90f..473b94c 100644
--- a/res/drawable/searchedittext_custom_cursor.xml
+++ b/res/drawable/searchedittext_custom_cursor.xml
@@ -1,5 +1,18 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright 2014 Google Inc. All Rights Reserved. -->
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
 
 <shape xmlns:android="http://schemas.android.com/apk/res/android" >
     <size android:width="2dp" android:height="22dp" />
diff --git a/res/layout-sw600dp-land/contact_detail_updates_fragment.xml b/res/layout-sw600dp-land/contact_detail_updates_fragment.xml
deleted file mode 100644
index 40bc9c9..0000000
--- a/res/layout-sw600dp-land/contact_detail_updates_fragment.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<ListView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@android:id/list"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/background_social_updates"
-    android:fadingEdge="none"
-    android:divider="@null"
-    android:paddingTop="@dimen/contact_detail_list_top_padding"
-    android:paddingLeft="16dip"
-    android:paddingRight="16dip"
-    android:paddingStart="16dip"
-    android:paddingEnd="16dip"
-    android:scrollbarStyle="outsideOverlay"
-    android:clipToPadding="false"/>
diff --git a/res/layout-sw600dp/aggregation_suggestions.xml b/res/layout-sw600dp/aggregation_suggestions.xml
deleted file mode 100644
index 3a314b6..0000000
--- a/res/layout-sw600dp/aggregation_suggestions.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 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.
- */
--->
-
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    android:background="@drawable/aggregation_suggestions_bg_light_holo"
-    android:paddingBottom="10dip">
-    <LinearLayout
-        android:id="@+id/aggregation_suggestions"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical" />
-</LinearLayout>
diff --git a/res/layout-sw720dp-land/contact_detail_updates_fragment.xml b/res/layout-sw720dp-land/contact_detail_updates_fragment.xml
deleted file mode 100644
index ba9f653..0000000
--- a/res/layout-sw720dp-land/contact_detail_updates_fragment.xml
+++ /dev/null
@@ -1,30 +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.
--->
-
-<ListView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@android:id/list"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/background_social_updates"
-    android:fadingEdge="none"
-    android:divider="@null"
-    android:paddingTop="@dimen/contact_detail_list_top_padding"
-    android:paddingLeft="16dip"
-    android:paddingRight="16dip"
-    android:paddingStart="16dip"
-    android:paddingEnd="16dip"
-    android:scrollbarStyle="outsideOverlay"
-    android:clipToPadding="false"/>
diff --git a/res/layout-v23/item_group_membership.xml b/res/layout-v23/item_group_membership.xml
index 40605b1..cf45ab6 100644
--- a/res/layout-v23/item_group_membership.xml
+++ b/res/layout-v23/item_group_membership.xml
@@ -23,7 +23,7 @@
 
     <ImageView
         android:id="@+id/kind_icon"
-        android:src="@drawable/ic_menu_label"
+        android:src="@drawable/quantum_ic_label_vd_theme_24"
         style="@style/EditKindIconStyle" />
 
     <Button
diff --git a/res/layout/account_selector_list_item.xml b/res/layout/account_selector_list_item.xml
deleted file mode 100644
index ba86a9b..0000000
--- a/res/layout/account_selector_list_item.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="?android:attr/listPreferredItemHeight"
-    android:orientation="horizontal">
-    <ImageView android:id="@android:id/icon"
-        android:layout_width="@dimen/detail_network_icon_size"
-        android:layout_height="@dimen/detail_network_icon_size"
-        android:layout_margin="16dip"
-        android:layout_gravity="center_vertical" />
-
-    <LinearLayout
-        android:layout_width="0dip"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:layout_marginLeft="8dp"
-        android:orientation="vertical"
-        android:layout_gravity="center_vertical">
-
-        <TextView android:id="@android:id/text1"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginRight="8dip"
-            android:layout_marginEnd="8dip"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:singleLine="true"
-            android:ellipsize="end"/>
-
-        <TextView android:id="@android:id/text2"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginRight="8dip"
-            android:layout_marginEnd="8dip"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:textColor="?android:attr/textColorSecondary"
-            android:singleLine="true"
-            android:ellipsize="end"/>
-    </LinearLayout>
-</LinearLayout>
diff --git a/res/layout/aggregation_suggestions.xml b/res/layout/aggregation_suggestions.xml
deleted file mode 100644
index 3b9d278..0000000
--- a/res/layout/aggregation_suggestions.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 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.
- */
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:orientation="vertical"
-    android:background="@drawable/aggregation_suggestions_bg">
-    <LinearLayout
-        android:id="@+id/aggregation_suggestions"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-    />
-</LinearLayout>
diff --git a/res/layout/contact_detail_add_connection_entry_view.xml b/res/layout/contact_detail_add_connection_entry_view.xml
deleted file mode 100644
index 6d4971d..0000000
--- a/res/layout/contact_detail_add_connection_entry_view.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 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.
- */
--->
-
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:paddingLeft="@dimen/detail_item_side_margin"
-    android:paddingRight="@dimen/detail_item_side_margin"
-    android:paddingStart="@dimen/detail_item_side_margin"
-    android:paddingEnd="@dimen/detail_item_side_margin">
-    <LinearLayout
-        android:id="@+id/primary_action_view"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:paddingTop="@dimen/detail_item_vertical_margin"
-        android:paddingBottom="@dimen/detail_item_vertical_margin"
-        android:focusable="true"
-        android:background="?android:attr/selectableItemBackground"
-        android:minHeight="@dimen/detail_min_line_item_height"
-        android:orientation="horizontal"
-        android:gravity="center_vertical">
-
-        <ImageView
-            android:id="@+id/add_connection_icon"
-            android:layout_width="@dimen/detail_network_icon_size"
-            android:layout_height="@dimen/detail_network_icon_size"
-            android:layout_marginLeft="@dimen/detail_item_icon_margin"
-            android:layout_marginRight="@dimen/detail_item_icon_margin"
-            android:layout_marginStart="@dimen/detail_item_icon_margin"
-            android:layout_marginEnd="@dimen/detail_item_icon_margin"
-            android:layout_gravity="center_vertical"
-            android:scaleType="centerInside" />
-
-        <TextView
-            android:id="@+id/add_connection_label"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical"
-            android:textAppearance="?android:attr/textAppearanceMedium"/>
-    </LinearLayout>
-</FrameLayout>
diff --git a/res/layout/contact_detail_network_title_entry_view.xml b/res/layout/contact_detail_network_title_entry_view.xml
deleted file mode 100644
index 073dad8..0000000
--- a/res/layout/contact_detail_network_title_entry_view.xml
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 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="wrap_content"
-    android:paddingLeft="@dimen/detail_item_side_margin"
-    android:paddingRight="@dimen/detail_item_side_margin"
-    android:paddingStart="@dimen/detail_item_side_margin"
-    android:paddingEnd="@dimen/detail_item_side_margin">
-    <LinearLayout
-        android:id="@+id/primary_action_view"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:paddingTop="@dimen/detail_item_vertical_margin"
-        android:paddingBottom="@dimen/detail_item_vertical_margin"
-        android:focusable="true"
-        android:background="?android:attr/selectableItemBackground"
-        android:minHeight="@dimen/detail_min_line_item_height"
-        android:orientation="horizontal"
-        android:gravity="center_vertical">
-
-        <ImageView
-            android:id="@+id/network_icon"
-            android:layout_width="@dimen/detail_network_icon_size"
-            android:layout_height="@dimen/detail_network_icon_size"
-            android:layout_marginLeft="@dimen/detail_item_icon_margin"
-            android:layout_marginRight="@dimen/detail_item_icon_margin"
-            android:layout_marginStart="@dimen/detail_item_icon_margin"
-            android:layout_marginEnd="@dimen/detail_item_icon_margin"
-            android:layout_gravity="center_vertical"
-            android:scaleType="centerInside" />
-
-        <TextView
-            android:id="@+id/network_title"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_vertical"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:textColor="?android:attr/textColorSecondary" />
-    </LinearLayout>
-</FrameLayout>
diff --git a/res/layout/contact_detail_separator_entry_view.xml b/res/layout/contact_detail_separator_entry_view.xml
deleted file mode 100644
index abe1cf8..0000000
--- a/res/layout/contact_detail_separator_entry_view.xml
+++ /dev/null
@@ -1,26 +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="wrap_content">
-
-    <View
-      android:layout_width="match_parent"
-      android:layout_height="1dip"
-      android:background="?android:attr/listDivider"/>
-
-</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/contact_detail_updates_fragment.xml b/res/layout/contact_detail_updates_fragment.xml
deleted file mode 100644
index 02e906c..0000000
--- a/res/layout/contact_detail_updates_fragment.xml
+++ /dev/null
@@ -1,22 +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.
--->
-
-<ListView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@android:id/list"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:divider="@null"/>
diff --git a/res/layout/contact_detail_updates_fragment_container.xml b/res/layout/contact_detail_updates_fragment_container.xml
deleted file mode 100644
index 7414f61..0000000
--- a/res/layout/contact_detail_updates_fragment_container.xml
+++ /dev/null
@@ -1,26 +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.
--->
-
-<!--
-  Container for the "Updates" page fragment on the contact card for a contact with social updates.
-  This view ID must match with a view ID in the layout that is used after an orientation change.
--->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/updates_fragment_container"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:visibility="gone" />
diff --git a/res/layout/contact_editor_activity.xml b/res/layout/contact_editor_activity.xml
index 326e802..36fc64a 100644
--- a/res/layout/contact_editor_activity.xml
+++ b/res/layout/contact_editor_activity.xml
@@ -16,20 +16,21 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/fragment_container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/fragment_container"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
 
-    <Toolbar
+    <android.support.v7.widget.Toolbar
         android:id="@+id/toolbar"
         style="@style/EditorActionBarStyle"
         android:layout_width="match_parent"
         android:layout_height="?android:attr/actionBarSize"
         android:background="?android:attr/colorPrimary"
         android:elevation="4dp"
-        android:navigationContentDescription="@string/cancel_button_content_description"
-        android:navigationIcon="@drawable/ic_close_dk"
-        android:title="@string/contact_editor_title_existing_contact" />
+        app:navigationContentDescription="@string/cancel_button_content_description"
+        app:navigationIcon="@drawable/quantum_ic_close_vd_theme_24"
+        app:title="@string/contact_editor_title_existing_contact" />
 
 </LinearLayout>
\ No newline at end of file
diff --git a/res/layout/contact_list_content.xml b/res/layout/contact_list_content.xml
index 39f669f..d9b113f 100644
--- a/res/layout/contact_list_content.xml
+++ b/res/layout/contact_list_content.xml
@@ -56,7 +56,7 @@
             android:contentDescription="@string/dismiss_sync_alert"
             android:background="?android:attr/selectableItemBackground"
             android:scaleType="center"
-            android:src="@drawable/ic_cancel_black_24dp" />
+            android:src="@drawable/quantum_ic_cancel_vd_theme_24" />
     </LinearLayout>
 
     <!-- Shown only when an Account filter is set.
@@ -78,7 +78,7 @@
             android:enabled="false" >
 
             <view
-                class="com.android.contacts.common.list.PinnedHeaderListView"
+                class="com.android.contacts.list.PinnedHeaderListView"
                 android:id="@android:id/list"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
diff --git a/res/layout/contact_list_filter_item.xml b/res/layout/contact_list_filter_item.xml
index 9f297e6..4d1fbca 100644
--- a/res/layout/contact_list_filter_item.xml
+++ b/res/layout/contact_list_filter_item.xml
@@ -16,7 +16,7 @@
 
 <view
     xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.contacts.common.list.ContactListFilterView"
+    class="com.android.contacts.list.ContactListFilterView"
     android:descendantFocusability="blocksDescendants"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
diff --git a/res/layout/contact_picker_content.xml b/res/layout/contact_picker_content.xml
index 36734c5..382121a 100644
--- a/res/layout/contact_picker_content.xml
+++ b/res/layout/contact_picker_content.xml
@@ -21,7 +21,7 @@
     <include layout="@layout/contact_list_card"/>
 
     <view
-        class="com.android.contacts.common.list.PinnedHeaderListView"
+        class="com.android.contacts.list.PinnedHeaderListView"
         android:id="@android:id/list"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
diff --git a/res/layout/contact_tile_frequent.xml b/res/layout/contact_tile_frequent.xml
index b1e83ce..6fd38fc 100644
--- a/res/layout/contact_tile_frequent.xml
+++ b/res/layout/contact_tile_frequent.xml
@@ -15,7 +15,7 @@
 -->
 <view
     xmlns:android="http://schemas.android.com/apk/res/android"
-    class="com.android.contacts.common.list.ContactTileFrequentView"
+    class="com.android.contacts.list.ContactTileFrequentView"
     android:focusable="true"
     android:background="?android:attr/selectableItemBackground">
 
@@ -27,7 +27,7 @@
         android:paddingTop="?list_item_padding_top"
         android:paddingBottom="?list_item_padding_bottom">
 
-        <com.android.contacts.common.widget.LayoutSuppressingImageView
+        <com.android.contacts.widget.LayoutSuppressingImageView
             android:id="@+id/contact_tile_image"
             android:layout_width="?list_item_photo_size"
             android:layout_height="?list_item_photo_size"
diff --git a/res/layout/contact_tile_frequent_phone.xml b/res/layout/contact_tile_frequent_phone.xml
index f87dff7..8fcdd31 100644
--- a/res/layout/contact_tile_frequent_phone.xml
+++ b/res/layout/contact_tile_frequent_phone.xml
@@ -18,7 +18,7 @@
 <view
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/contact_tile_frequent_phone"
-    class="com.android.contacts.common.list.ContactTilePhoneFrequentView"
+    class="com.android.contacts.list.ContactTilePhoneFrequentView"
     android:focusable="true"
     android:background="?android:attr/selectableItemBackground"
     android:nextFocusLeft="@+id/contact_tile_quick">
@@ -27,7 +27,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent" >
 
-        <com.android.contacts.common.widget.LayoutSuppressingQuickContactBadge
+        <com.android.contacts.widget.LayoutSuppressingQuickContactBadge
             android:id="@id/contact_tile_quick"
             android:layout_width="64dip"
             android:layout_height="64dip"
diff --git a/res/layout/contact_tile_starred.xml b/res/layout/contact_tile_starred.xml
index 777cc05..10716cb 100644
--- a/res/layout/contact_tile_starred.xml
+++ b/res/layout/contact_tile_starred.xml
@@ -16,7 +16,7 @@
 <view
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:ex="http://schemas.android.com/apk/res-auto"
-    class="com.android.contacts.common.list.ContactTileStarredView"
+    class="com.android.contacts.list.ContactTileStarredView"
     android:focusable="true"
     android:background="?android:attr/selectableItemBackground">
 
@@ -32,7 +32,7 @@
             android:layout_height="wrap_content"
             ex:direction="widthToHeight"
             ex:ratio="1.0"
-            class="com.android.contacts.common.widget.ProportionalLayout" >
+            class="com.android.contacts.widget.ProportionalLayout" >
             <ImageView
                 android:id="@+id/contact_tile_image"
                 android:layout_width="match_parent"
diff --git a/res/layout/contact_tile_starred_quick_contact.xml b/res/layout/contact_tile_starred_quick_contact.xml
index ecbe583..2579034 100644
--- a/res/layout/contact_tile_starred_quick_contact.xml
+++ b/res/layout/contact_tile_starred_quick_contact.xml
@@ -19,13 +19,13 @@
     android:paddingRight="1dip"
     android:paddingEnd="1dip"
     android:background="@null"
-    class="com.android.contacts.common.list.ContactTileStarredView" >
+    class="com.android.contacts.list.ContactTileStarredView" >
 
     <RelativeLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent" >
 
-        <com.android.contacts.common.widget.LayoutSuppressingImageView
+        <com.android.contacts.widget.LayoutSuppressingImageView
             android:id="@+id/contact_tile_image"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
diff --git a/res/layout/create_new_contact.xml b/res/layout/create_new_contact.xml
deleted file mode 100644
index 3af60d3..0000000
--- a/res/layout/create_new_contact.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-  
-          http://www.apache.org/licenses/LICENSE-2.0
-  
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:minHeight="?android:attr/listPreferredItemHeight"
-        android:orientation="horizontal"
-        android:paddingLeft="6dip"
-        android:paddingRight="6dip"
-        android:paddingStart="6dip"
-        android:paddingEnd="6dip"
-        android:paddingTop="5dip"
-        android:paddingBottom="5dip"
-        android:gravity="center_vertical"
-        >
-    <ImageView android:id="@+id/addicon"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginLeft="5dip"
-            android:layout_marginRight="11dip"
-            android:layout_marginStart="5dip"
-            android:layout_marginEnd="11dip"
-            android:focusable="false"
-            android:src="@drawable/ic_add_contact_holo_light"
-            android:scaleType="fitCenter"
-            />
-    <TextView android:id="@+id/title"
-            android:text="@string/pickerNewContactHeader"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:textStyle="bold"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="2dip"
-            />
-</LinearLayout>
diff --git a/res/layout/dialog_call_subject.xml b/res/layout/dialog_call_subject.xml
index d6365c2..61513eb 100644
--- a/res/layout/dialog_call_subject.xml
+++ b/res/layout/dialog_call_subject.xml
@@ -127,7 +127,7 @@
                     android:id="@+id/history_button"
                     android:layout_width="25dp"
                     android:layout_height="25dp"
-                    android:src="@drawable/ic_history_white_drawable_24dp"
+                    android:src="@drawable/quantum_ic_history_vd_theme_24"
                     android:tint="@color/call_subject_history_icon"
                     android:layout_alignParentStart="true"
                     android:layout_centerVertical="true" />
diff --git a/res/layout/directory_header.xml b/res/layout/directory_header.xml
index 3e41aa7..8014672 100644
--- a/res/layout/directory_header.xml
+++ b/res/layout/directory_header.xml
@@ -17,9 +17,8 @@
 <!-- Layout used for list section separators. -->
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    style="@style/DirectoryHeader"
     android:id="@+id/directory_header"
-    android:background="?attr/contact_browser_background"
+    android:background="@android:color/transparent"
     android:paddingLeft="@dimen/directory_header_left_padding"
     android:paddingRight="?attr/list_item_padding_right"
     android:paddingStart="@dimen/directory_header_left_padding"
diff --git a/res/layout/edit_add_field.xml b/res/layout/edit_add_field.xml
deleted file mode 100644
index ac90482..0000000
--- a/res/layout/edit_add_field.xml
+++ /dev/null
@@ -1,35 +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.
--->
-<!-- Layout of "add field" row in contact editor -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:minHeight="48dip"
-    android:paddingLeft="@dimen/editor_add_field_label_left_padding"
-    android:paddingStart="@dimen/editor_add_field_label_left_padding"
-    android:background="?android:attr/selectableItemBackground"
-    android:focusable="true"
-    android:clickable="true">
-    <TextView
-        android:id="@+id/add_text"
-        android:layout_gravity="center_vertical"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:duplicateParentState="true"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:textColor="?android:attr/textColorSecondary"
-        android:text="@string/add_new_entry_for_section" />
-</FrameLayout>
\ No newline at end of file
diff --git a/res/layout/edit_delete_button.xml b/res/layout/edit_delete_button.xml
index d352801..2eea950 100644
--- a/res/layout/edit_delete_button.xml
+++ b/res/layout/edit_delete_button.xml
@@ -29,7 +29,7 @@
         android:layout_gravity="center"
         android:duplicateParentState="true"
         android:background="?android:attr/selectableItemBackground"
-        android:src="@drawable/ic_close_24dp"
+        android:src="@drawable/quantum_ic_close_vd_theme_24"
         android:tint="@color/quantum_black_hint_text"
         android:paddingLeft="@dimen/editor_round_button_padding_left"
         android:paddingRight="@dimen/editor_round_button_padding_right"
diff --git a/res/layout/edit_expansion_view.xml b/res/layout/edit_expansion_view.xml
deleted file mode 100644
index 0b62f28..0000000
--- a/res/layout/edit_expansion_view.xml
+++ /dev/null
@@ -1,38 +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.
-  -->
-
-<!-- "More" or "less" expansion button in the contact editor. -->
-
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="@dimen/editor_min_line_item_height"
-    android:layout_gravity="top">
-    <ImageView
-        android:id="@+id/expansion_view"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:duplicateParentState="true"
-        android:background="?android:attr/selectableItemBackground"
-        android:paddingLeft="@dimen/editor_round_button_padding_left"
-        android:paddingRight="@dimen/editor_round_button_padding_right"
-        android:paddingStart="@dimen/editor_round_button_padding_left"
-        android:paddingEnd="@dimen/editor_round_button_padding_right"
-        android:paddingTop="@dimen/editor_round_button_padding_top"
-        android:paddingBottom="@dimen/editor_round_button_padding_bottom" />
-</FrameLayout>
diff --git a/res/layout/edit_kind_title.xml b/res/layout/edit_kind_title.xml
deleted file mode 100644
index acdcc07..0000000
--- a/res/layout/edit_kind_title.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
- * Copyright 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="wrap_content"
-    android:paddingStart="8dip"
-    android:paddingEnd="8dip"
-    android:focusable="false">
-    <TextView
-        android:id="@+id/kind_title"
-        style="@style/EditKindSeparatorTextViewStyle"
-        android:paddingStart="0dip"
-        android:paddingEnd="8dip" />
-</FrameLayout>
diff --git a/res/layout/editor_account_header.xml b/res/layout/editor_account_header.xml
index 01cc01f..9a4ed80 100644
--- a/res/layout/editor_account_header.xml
+++ b/res/layout/editor_account_header.xml
@@ -66,7 +66,7 @@
 
     <ImageView
         android:id="@+id/account_expander_icon"
-        android:src="@drawable/ic_menu_expand_minimized_24dp"
+        android:src="@drawable/quantum_ic_expand_more_vd_theme_24"
         android:tint="@color/quantum_black_secondary_text"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
diff --git a/res/layout/editor_custom_action_bar.xml b/res/layout/editor_custom_action_bar.xml
deleted file mode 100644
index 7764674..0000000
--- a/res/layout/editor_custom_action_bar.xml
+++ /dev/null
@@ -1,45 +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.
--->
-
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:orientation="horizontal">
-
-    <ImageView
-        android:id="@+id/save_menu_item"
-        android:focusable="true"
-        android:clickable="true"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
-        android:layout_marginEnd="8dip"
-        android:src="@drawable/ic_done_wht_24dp"
-        style="?android:attr/actionButtonStyle"
-        android:contentDescription="@string/menu_done" />
-
-    <TextView
-        android:id="@+id/title"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:textColor="@color/actionbar_text_color"
-        android:text="@string/menu_done"
-        style="@android:style/TextAppearance.Material.Widget.ActionBar.Title" />
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/floating_action_button.xml b/res/layout/floating_action_button.xml
index a20d657..a31512f 100644
--- a/res/layout/floating_action_button.xml
+++ b/res/layout/floating_action_button.xml
@@ -36,6 +36,6 @@
         android:layout_height="match_parent"
         android:background="@drawable/floating_action_button"
         android:contentDescription="@string/action_menu_add_new_contact_button"
-        android:src="@drawable/ic_add"
+        android:src="@drawable/quantum_ic_add_vd_theme_24"
         android:tint="@color/floating_action_button_icon_color"/>
 </FrameLayout>
\ No newline at end of file
diff --git a/res/layout/fragment_sim_import.xml b/res/layout/fragment_sim_import.xml
index 5d6bd1c..09e2c66 100644
--- a/res/layout/fragment_sim_import.xml
+++ b/res/layout/fragment_sim_import.xml
@@ -32,7 +32,7 @@
             android:elevation="3dp"
             android:theme="@style/LightToolbarThemeOverlay"
             app:navigationContentDescription="@string/sim_import_cancel_content_description"
-            app:navigationIcon="@drawable/ic_close_24dp"
+            app:navigationIcon="@drawable/quantum_ic_close_vd_theme_24"
             app:title="@string/sim_import_title_none_selected">
 
             <Button
@@ -94,7 +94,7 @@
                 android:minHeight="0dp"
                 android:minWidth="0dp"
                 android:scaleType="center"
-                android:src="@drawable/ic_arrow_drop_down_black_24dp"
+                android:src="@drawable/quantum_ic_arrow_drop_down_vd_theme_24"
                 android:tint="?android:textColorSecondary"
                 android:visibility="gone"/>
         </LinearLayout>
diff --git a/res/layout/group_members_activity.xml b/res/layout/group_members_activity.xml
deleted file mode 100644
index 5466d2f..0000000
--- a/res/layout/group_members_activity.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2016 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/fragment_container_inner"
-    android:orientation="vertical"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent">
-</LinearLayout>
diff --git a/res/layout/item_group_membership.xml b/res/layout/item_group_membership.xml
index 5d302a6..1b62539 100644
--- a/res/layout/item_group_membership.xml
+++ b/res/layout/item_group_membership.xml
@@ -23,7 +23,7 @@
 
     <ImageView
         android:id="@+id/kind_icon"
-        android:src="@drawable/ic_menu_label"
+        android:src="@drawable/quantum_ic_label_vd_theme_24"
         style="@style/EditKindIconStyle" />
 
     <Button
diff --git a/res/layout/join_contact_picker_list_content.xml b/res/layout/join_contact_picker_list_content.xml
index 5bde895..04b0556 100644
--- a/res/layout/join_contact_picker_list_content.xml
+++ b/res/layout/join_contact_picker_list_content.xml
@@ -42,7 +42,7 @@
         android:layout_height="match_parent">
         <include layout="@layout/contact_list_card"/>
         <view
-            class="com.android.contacts.common.list.PinnedHeaderListView"
+            class="com.android.contacts.list.PinnedHeaderListView"
             android:id="@android:id/list"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
diff --git a/res/layout/photo_editor_view.xml b/res/layout/photo_editor_view.xml
index 891450c..b9f32a0 100644
--- a/res/layout/photo_editor_view.xml
+++ b/res/layout/photo_editor_view.xml
@@ -43,7 +43,8 @@
             android:layout_marginBottom="16dp"
             android:layout_marginEnd="16dp"
             android:background="?android:attr/selectableItemBackground"
-            android:src="@drawable/ic_photo_camera_white_24dp" />
+            android:tint="@android:color/white"
+            android:src="@drawable/quantum_ic_camera_alt_vd_theme_24" />
 
     <View
             android:id="@+id/photo_touch_intercept_overlay"
diff --git a/res/layout/pinned_header_list_demo.xml b/res/layout/pinned_header_list_demo.xml
deleted file mode 100644
index c717b35..0000000
--- a/res/layout/pinned_header_list_demo.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/pinned_header_list_layout"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical"
-        >
-
-    <view
-        class="com.android.contacts.common.list.PinnedHeaderListView"
-        android:id="@android:id/list"
-        android:layout_width="match_parent"
-        android:layout_height="0dip"
-        android:paddingTop="@dimen/contact_browser_list_item_padding_top_or_bottom"
-        android:clipToPadding="false"
-        android:fastScrollEnabled="true"
-        android:layout_weight="1"
-    />
-</LinearLayout>
diff --git a/res/layout/quickcontact_collapsed_suggestion_card.xml b/res/layout/quickcontact_collapsed_suggestion_card.xml
index 45de7f5..64bac99 100644
--- a/res/layout/quickcontact_collapsed_suggestion_card.xml
+++ b/res/layout/quickcontact_collapsed_suggestion_card.xml
@@ -29,7 +29,8 @@
         android:id="@+id/collapsed_suggestion_header">
 
         <ImageView
-                android:src="@drawable/quantum_ic_assistant_grey600_48"
+                android:src="@drawable/quantum_ic_assistant_vd_theme_24"
+                android:tint="@color/editor_icon_color"
                 android:layout_width="@dimen/quickcontact_collapse_icon_size"
                 android:layout_height="@dimen/quickcontact_collapse_icon_size"
                 android:layout_margin="@dimen/quickcontact_collapse_image_padding"
@@ -49,7 +50,7 @@
                 android:paddingTop="@dimen/quickcontact_collapse_text_padding"/>
 
         <ImageView
-                android:src="@drawable/ic_menu_expander_minimized_holo_light"
+                android:src="@drawable/quantum_ic_expand_more_vd_theme_24"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_gravity="center_vertical|end"
diff --git a/res/layout/quickcontact_expanding_entry_card_button.xml b/res/layout/quickcontact_expanding_entry_card_button.xml
index 5ab6189..c7f95ee 100644
--- a/res/layout/quickcontact_expanding_entry_card_button.xml
+++ b/res/layout/quickcontact_expanding_entry_card_button.xml
@@ -32,7 +32,7 @@
 
         <ImageView
             android:id="@+id/arrow"
-            android:src="@drawable/expanding_entry_card_expand_white_24"
+            android:src="@drawable/quantum_ic_expand_more_vd_theme_24"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_marginStart="@dimen/expanding_entry_card_item_padding_start"
diff --git a/res/layout/quickcontact_suggestion_contact_item.xml b/res/layout/quickcontact_suggestion_contact_item.xml
deleted file mode 100644
index 3e7ed49..0000000
--- a/res/layout/quickcontact_suggestion_contact_item.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="horizontal"
-    android:layout_width="match_parent"
-    android:layout_height="@dimen/quickcontact_expanding_item_height"
-    android:paddingTop="@dimen/quickcontact_expanding_item_padding">
-
-    <ImageView
-        android:id="@+id/aggregation_suggestion_photo"
-        android:layout_width="@dimen/quickcontact_suggestion_card_icon_height"
-        android:layout_height="@dimen/quickcontact_suggestion_card_icon_width"
-        android:layout_marginStart="@dimen/quickcontact_suggestion_card_image_spacing"
-        android:scaleType="fitCenter"
-        android:layout_gravity="center_vertical" />
-
-    <LinearLayout
-        android:id="@+id/suggestion_contact_item"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginStart="@dimen/quickcontact_expanding_item_image_padding"
-        android:layout_weight="1"
-        android:orientation="vertical"
-        android:layout_gravity="center_vertical">
-
-        <TextView
-            android:id="@+id/aggregation_suggestion_name"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/quickcontact_suggestion_card_layout_margin"
-            android:singleLine="true"
-            android:ellipsize="end"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:textColor="@color/quickcontact_entry_header_text_color" />
-
-        <TextView
-            android:id="@+id/aggregation_suggestion_account_name"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:layout_marginBottom="@dimen/quickcontact_suggestion_card_layout_margin"
-            android:singleLine="true"
-            android:ellipsize="end" />
-
-    </LinearLayout>
-
-    <CheckBox
-        android:id="@+id/suggestion_checkbox"
-        android:layout_gravity="center_vertical|end"
-        android:layout_alignParentEnd="true"
-        android:layout_width="48dp"
-        android:layout_height="48dp"
-        android:shadowColor="@color/divider_line_color_light"
-        android:layout_marginEnd="@dimen/quickcontact_suggestion_card_checkbox_right_margin"/>
-
-</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/search_bar_expanded.xml b/res/layout/search_bar_expanded.xml
index 945521f..9f90bc7 100644
--- a/res/layout/search_bar_expanded.xml
+++ b/res/layout/search_bar_expanded.xml
@@ -27,7 +27,7 @@
         android:layout_width="@dimen/search_box_icon_size"
         android:layout_height="@dimen/search_box_icon_size"
         android:layout_marginEnd="@dimen/search_box_navigation_icon_margin"
-        android:src="@drawable/ic_back_arrow"
+        android:src="@drawable/quantum_ic_arrow_back_vd_theme_24"
         android:background="?attr/selectableItemBackgroundBorderless"
         android:contentDescription="@string/action_menu_back_from_search"
         android:tint="@color/actionbar_background_color" />
@@ -53,7 +53,7 @@
         android:layout_height="@dimen/search_box_close_icon_size"
         android:layout_width="@dimen/search_box_close_icon_size"
         android:padding="@dimen/search_box_close_icon_padding"
-        android:src="@drawable/ic_close_24dp"
+        android:src="@drawable/quantum_ic_close_vd_theme_24"
         android:tint="@color/quantum_black_secondary_text"
         android:clickable="true"
         android:background="?attr/selectableItemBackgroundBorderless"
diff --git a/res/layout/select_account_list_item.xml b/res/layout/select_account_list_item.xml
index 0ba4336..edfd904 100644
--- a/res/layout/select_account_list_item.xml
+++ b/res/layout/select_account_list_item.xml
@@ -15,7 +15,7 @@
 -->
 
 <!-- Layout of a single item in the InCallUI Account Chooser Dialog. -->
-<view class="com.android.contacts.common.widget.ActivityTouchLinearLayout"
+<view class="com.android.contacts.widget.ActivityTouchLinearLayout"
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="horizontal"
     android:layout_width="match_parent"
diff --git a/res/layout/selection_bar.xml b/res/layout/selection_bar.xml
index b26dc8a..272a2fc 100644
--- a/res/layout/selection_bar.xml
+++ b/res/layout/selection_bar.xml
@@ -28,7 +28,7 @@
         android:tint="@color/quantum_black_secondary_text"
         android:background="?attr/selectableItemBackgroundBorderless"
         android:contentDescription="@string/action_menu_back_from_edit_select"
-        android:src="@drawable/ic_close_24dp"/>
+        android:src="@drawable/quantum_ic_close_vd_theme_24"/>
 
     <TextView
         android:id="@+id/selection_count_text"
diff --git a/res/layout/structured_name_editor_view.xml b/res/layout/structured_name_editor_view.xml
index 830f4d8..f5b2a67 100644
--- a/res/layout/structured_name_editor_view.xml
+++ b/res/layout/structured_name_editor_view.xml
@@ -31,7 +31,7 @@
 
     <ImageView
         android:id="@+id/kind_icon"
-        android:src="@drawable/ic_person_black_24dp"
+        android:src="@drawable/quantum_ic_person_vd_theme_24"
         android:contentDescription="@string/header_name_entry"
         style="@style/EditKindIconStyle"/>
 
diff --git a/res/menu/activity_main_drawer.xml b/res/menu/activity_main_drawer.xml
index 8d02e4d..07e9802 100644
--- a/res/menu/activity_main_drawer.xml
+++ b/res/menu/activity_main_drawer.xml
@@ -22,12 +22,12 @@
     <group android:id="@+id/nav_utilities">
         <item
             android:id="@+id/nav_all_contacts"
-            android:icon="@drawable/ic_menu_filter"
+            android:icon="@drawable/quantum_ic_account_circle_vd_theme_24"
             android:title="@string/contactsList" />
         <item
             android:id="@+id/nav_assistant"
             app:actionViewClass="android.widget.LinearLayout"
-            android:icon="@drawable/ic_assistant"
+            android:icon="@drawable/quantum_ic_assistant_vd_theme_24"
             android:title="@string/menu_assistant"/>
     </group>
 
@@ -50,11 +50,11 @@
     <group android:id="@+id/nav_misc">
         <item
             android:id="@+id/nav_settings"
-            android:icon="@drawable/ic_menu_settings"
+            android:icon="@drawable/quantum_ic_settings_vd_theme_24"
             android:title="@string/menu_settings"/>
         <item
             android:id="@+id/nav_help"
-            android:icon="@drawable/ic_menu_help"
+            android:icon="@drawable/quantum_ic_help_vd_theme_24"
             android:title="@string/menu_help"/>
     </group>
 
diff --git a/res/menu/edit_contact.xml b/res/menu/edit_contact.xml
index a62acc8..039c657 100644
--- a/res/menu/edit_contact.xml
+++ b/res/menu/edit_contact.xml
@@ -14,11 +14,12 @@
      limitations under the License.
 -->
 
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
     <item
         android:id="@+id/menu_save"
-        android:showAsAction="always"
-        android:actionLayout="@layout/editor_save_button"
+        app:showAsAction="always"
+        app:actionLayout="@layout/editor_save_button"
         android:title="@string/menu_save" />
 
     <item
diff --git a/res/menu/edit_contact_photo.xml b/res/menu/edit_contact_photo.xml
deleted file mode 100644
index 725ea8b..0000000
--- a/res/menu/edit_contact_photo.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-     Copyright (C) 2015 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-            android:id="@+id/menu_photo"
-            android:showAsAction="always"
-            android:icon="@drawable/ic_photo_camera_white_24dp"
-            android:title="@string/menu_change_photo"/>
-</menu>
diff --git a/res/menu/menu_help.xml b/res/menu/menu_help.xml
deleted file mode 100644
index 3b5d3df..0000000
--- a/res/menu/menu_help.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  Copyright (C) 2016 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:id="@+id/nav_help"/>
-</menu>
\ No newline at end of file
diff --git a/res/menu/people_options.xml b/res/menu/people_options.xml
index 10a47ba..5fb0f2e 100644
--- a/res/menu/people_options.xml
+++ b/res/menu/people_options.xml
@@ -17,7 +17,7 @@
       xmlns:contacts="http://schemas.android.com/apk/res-auto">
     <item
         android:id="@+id/menu_search"
-        android:icon="@drawable/ic_ab_search"
+        android:icon="@drawable/quantum_ic_search_vd_theme_24"
         android:title="@string/hint_findContacts"
         contacts:showAsAction="ifRoom" />
 
@@ -29,19 +29,19 @@
 
     <item
         android:id="@+id/menu_share"
-        android:icon="@drawable/ic_menu_share"
+        android:icon="@drawable/quantum_ic_share_vd_theme_24"
         android:title="@string/menu_share"
         contacts:showAsAction="ifRoom"/>
 
     <item
         android:id="@+id/menu_delete"
-        android:icon="@drawable/ic_menu_delete"
+        android:icon="@drawable/quantum_ic_delete_vd_theme_24"
         android:title="@string/menu_deleteContact"
         contacts:showAsAction="ifRoom"/>
 
     <item
         android:id="@+id/menu_join"
-        android:icon="@drawable/ic_menu_link"
+        android:icon="@drawable/quantum_ic_link_vd_theme_24"
         android:title="@string/menu_joinAggregate"
         contacts:showAsAction="ifRoom"/>
 
diff --git a/res/menu/search_menu.xml b/res/menu/search_menu.xml
index 6ed7178..bf4b5dd 100644
--- a/res/menu/search_menu.xml
+++ b/res/menu/search_menu.xml
@@ -17,7 +17,7 @@
     xmlns:contacts="http://schemas.android.com/apk/res-auto">
     <item
         android:id="@+id/menu_search"
-        android:icon="@drawable/ic_ab_search"
+        android:icon="@drawable/quantum_ic_search_vd_theme_24"
         android:title="@string/hint_findContacts"
         contacts:showAsAction="always" />
 </menu>
diff --git a/res/menu/star.xml b/res/menu/star.xml
deleted file mode 100644
index 904adbf..0000000
--- a/res/menu/star.xml
+++ /dev/null
@@ -1,21 +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.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:id="@+id/menu_star"
-        android:showAsAction="always" />
-</menu>
diff --git a/res/menu/view_contact.xml b/res/menu/view_contact.xml
deleted file mode 100644
index 8c36924..0000000
--- a/res/menu/view_contact.xml
+++ /dev/null
@@ -1,44 +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.
--->
-
-<menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item
-        android:id="@+id/menu_edit"
-        android:title="@string/menu_editContact"
-        android:alphabeticShortcut="e" />
-
-    <item
-        android:id="@+id/menu_share"
-        android:title="@string/menu_share"
-        android:alphabeticShortcut="s" />
-
-    <item
-        android:id="@+id/menu_delete"
-        android:title="@string/menu_deleteContact" />
-
-    <item
-        android:id="@+id/menu_set_ringtone"
-        android:title="@string/menu_set_ring_tone" />
-
-    <item
-        android:id="@+id/menu_send_to_voicemail"
-        android:checkable="true"
-        android:title="@string/menu_redirect_calls_to_vm" />
-
-    <item
-        android:id="@+id/menu_create_contact_shortcut"
-        android:title="@string/menu_create_contact_shortcut" />
-</menu>
diff --git a/res/menu/view_group.xml b/res/menu/view_group.xml
index dcabb13..ce49c92 100644
--- a/res/menu/view_group.xml
+++ b/res/menu/view_group.xml
@@ -19,7 +19,7 @@
 
     <item
         android:id="@+id/menu_add"
-        android:icon="@drawable/ic_person_add_24dp"
+        android:icon="@drawable/quantum_ic_person_add_vd_theme_24"
         android:title="@string/menu_addToGroup"
         contacts:showAsAction="ifRoom" />
 
@@ -33,7 +33,7 @@
 
     <item
         android:id="@+id/menu_edit_group"
-        android:icon="@drawable/ic_create_24dp"
+        android:icon="@drawable/quantum_ic_create_vd_theme_24"
         android:title="@string/menu_editGroup" />
 
     <item
diff --git a/res-icons/mipmap-hdpi/ic_contacts_launcher.png b/res/mipmap-hdpi/ic_contacts_launcher.png
similarity index 100%
rename from res-icons/mipmap-hdpi/ic_contacts_launcher.png
rename to res/mipmap-hdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res-icons/mipmap-mdpi/ic_contacts_launcher.png b/res/mipmap-mdpi/ic_contacts_launcher.png
similarity index 100%
rename from res-icons/mipmap-mdpi/ic_contacts_launcher.png
rename to res/mipmap-mdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res-icons/mipmap-xhdpi/ic_contacts_launcher.png b/res/mipmap-xhdpi/ic_contacts_launcher.png
similarity index 100%
rename from res-icons/mipmap-xhdpi/ic_contacts_launcher.png
rename to res/mipmap-xhdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res-icons/mipmap-xxhdpi/ic_contacts_launcher.png b/res/mipmap-xxhdpi/ic_contacts_launcher.png
similarity index 100%
rename from res-icons/mipmap-xxhdpi/ic_contacts_launcher.png
rename to res/mipmap-xxhdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res-icons/mipmap-xxxhdpi/ic_contacts_launcher.png b/res/mipmap-xxxhdpi/ic_contacts_launcher.png
similarity index 100%
rename from res-icons/mipmap-xxxhdpi/ic_contacts_launcher.png
rename to res/mipmap-xxxhdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 5816f7a..a5b57e5 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontakte"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontakte"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Voeg kontak by"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontak"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Direk skakel"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Direkte boodskap"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Kies \'n kontakkortpad"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Kies \'n nommer om te bel"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Kies \'n nommer om te stuur"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kies kontak"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Voeg by kontakte"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kies \'n kontak"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Kies"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Skep nuwe kontak"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Kontakbesonderhede"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Meer oor"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Opdaterings"</string>
     <string name="searchHint" msgid="8482945356247760701">"Deursoek kontakte"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Bekyk kontak"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Voeg by gunstelinge"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Verwyder van gunstelinge"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Verwyder uit gunstelinge"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Skep kortpad"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Bel kontak"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Teks - kontak"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Verdeel"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Verwyder kontakte"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Hernoem etiket"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Kies kontakte"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Voeg kontakte by"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Verwyder van etiket"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Voeg kontak by"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Skep nuwe …"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Skep etiket"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Verdeel hierdie kontak in veelvuldige kontakte?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Verdeel"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Wil jy graag die veranderinge wat jy reeds gemaak het, stoor en hierdie kontak in veelvuldige kontakte verdeel?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Stoor"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Koppel kontakte"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Kies die kontak wat jy aan <xliff:g id="NAME">%s</xliff:g> wil skakel:"</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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> geskakel"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontak</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontakte · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontak · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakte · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontak · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Vanaf Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Vanaf <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"As jy hierdie kontak uitvee, sal dit besonderhede van veelvuldige rekeninge af uitvee."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Vee hierdie kontak uit?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Vee uit"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Verwerp wysigings"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Die kontak bestaan ​​nie."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontak is by Tuisskerm gevoeg."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> is by Tuisskerm gevoeg."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Skep nuwe kontak"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Skep nuwe kontak"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Geen prente is op die tablet beskikbaar nie."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Geen prente is beskikbaar op die foon nie."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakfoto"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Gepasmaakte etiketnaam"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Stuur oproepe direk na stemboodskap"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Verwyder foto"</string>
     <string name="noContacts" msgid="2228592924476426108">"Jou kontaktelys is leeg"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Geen etikette nie."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Jy het \'n rekening nodig om groepe te skep."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Geen kontakte met hierdie etiket nie"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Geen kontakte in hierdie rekening nie"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Jou kontaktelys is leeg"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kon nie kontak stoor nie"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kon nie kontakfotoveranderinge stoor nie"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Kon nie etiket laai nie"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etiket gestoor"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiket is uitgevee"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etiket geskep"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Kan nie etiket skep nie"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Stuur boodskap"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kies kontakte"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Stuur"</string>
-    <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" 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" 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="5948889261993124839">"Alles"</string>
-    <string name="callBack" msgid="5498224409038809224">"Bel terug"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Bel weer"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Bel terug"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voeg \"<xliff:g id="EMAIL">%s</xliff:g>\" by kontakte?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> van <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakte"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Name van jou kontakte"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Geen program is gevind om hierdie aksie te hanteer nie."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klik om na die vorige skerm terug te keer"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Voeg foonnommer by"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Voeg e-pos by"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etiketnaam"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Stemklets"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videoklets"</string>
-    <string name="connections" msgid="8098440723172028350">"Skakelpunte"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Voeg skakelpunt by"</string>
-    <string name="recent" msgid="2659189233141493004">"Onlangs"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Onlangse opdaterings"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontak"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-rekening"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Neem foto"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Neem nuwe foto"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Kies foto"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Kies nuwe foto"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Kies alle"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Ontkies almal"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Voeg nuwe by"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Voeg organisasie by"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiket"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Verander"</string>
-    <string name="description_star" msgid="2605854427360036550">"gunsteling"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Redigeer kontak"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Kanselleer"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Terug"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"maak toe"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Skakel die huidige kontak aan die geselekteerde kontak?"</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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Voeg by My kontakte"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Gids <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Instellings"</string>
     <string name="menu_settings" msgid="377929915873428211">"Instellings"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Voeg by kontakte"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Voeg by kontakte"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Maak toe"</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="7122002148518724139">"Sluit jaar in"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontak"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Laai tans…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Skep \'n nuwe kontak"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Voeg rekening by"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Voer in"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Skep nuwe …"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Gooi weg"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Kanselleer"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Gooi pasmakings weg?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Deursoek kontakte"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Verwyder kontakte"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"My plaaslike profiel"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"My <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>profiel"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Vertoon alle kontakte"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Hou jou kontakte veilig, selfs al verloor jy jou selfoon: sinkroniseer met \'n aanlyn diens."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Voeg \'n rekening by"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Neem \'n oomblik om \'n rekening by te voeg wat jou kontakte na Google sal rugsteun."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nuwe kontakte sal gestoor word in <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Kies \'n verstekrekening vir nuwe kontakte:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Sien minder"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Onlangs"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Meer oor"</string>
-    <string name="send_message" msgid="8938418965550543196">"Stuur boodskap"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Skep tans \'n persoonlike kopie..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Môre"</string>
     <string name="today" msgid="8041090779381781781">"Vandag"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Vandag om <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Môre om <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Titellose geleentheid)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Stel"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Kitsboodskappe"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Webwerf"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Geleentheid"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Verwantskap"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Rekening"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Naam"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-pos"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Foon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik om kontakredakteur uit te vou."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik om kontakredakteur in te vou."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"rigtingaanwysings na ligging"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"onlangse SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik om te reageer"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"onlangse SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik om te reageer"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"inkomend"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"uitgaande"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"gemis"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"onlangse oproep. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Meer velde"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Verander kontakfoto"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Voeg kontakfoto by"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Kon nie redigeerder oopmaak nie."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Stoor tans na"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontakinligting vanaf <xliff:g id="ACCOUNT">%s</xliff:g> kan nie gewysig word nie"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Stoor tans na <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dubbeltik om \'n ander rekening te kies."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Geskakelde kontakte (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Geskakelde kontak</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> geskakelde kontakte"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"KOPPEL KONTAKTE"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"KANSELLEER"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> moontlike duplikate</item>
-      <item quantity="one">1 moontlike duplikaat</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gekoppelde kontakte</item>
-      <item quantity="one">1 gekoppelde kontak</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Hierdie kontak"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Moontlike duplikate"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Hierdie kontakte kan dalk dieselfde persoon wees. Jy kan hulle as \'n enkele kontak koppel."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Saamgevoegde kontakte"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Van jou rekeninge af"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Kies foto"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Van <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Vee <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> uit"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Vee <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> uit"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Vee <xliff:g id="DATA_KIND">%s</xliff:g> uit"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto van <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> af is nie gemerk nie"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto van <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> af is gemerk"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto van onbekende rekening af is nie gemerk nie"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto van onbekende rekening af is gemerk"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Voorstelle"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nuut"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Maak navigasielaai oop"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Gids"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Werkgids"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Alle kontakte"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Meer as <xliff:g id="COUNT">%d</xliff:g> gevind."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Vinnige kontak vir <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Geen naam nie)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Gereeld gekontak"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Bekyk kontak"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Alle kontakte met telefoonnommers"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Werkprofielkontakte"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Sien opdaterings"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Naam"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Bynaam"</string>
-    <string name="full_name" msgid="6602579550613988977">"Naam"</string>
     <string name="name_given" msgid="4280790853455320619">"Voornaam"</string>
     <string name="name_family" msgid="7466985689626017037">"Van"</string>
     <string name="name_prefix" msgid="59756378548779822">"Naamvoorvoegsel"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"E-pos <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-pos"</string>
     <string name="postal_street" msgid="8133143961580058972">"Straat"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Posbus"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Buurt"</string>
     <string name="postal_city" msgid="6597491300084895548">"Stad"</string>
     <string name="postal_region" msgid="6045263193478437672">"Deelstaat"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Poskode"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Meer groepe..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"As jy \'<xliff:g id="GROUP">%s</xliff:g>\' uit sinkronisering verwyder, sal dit ook enige ongegroepeerde kontakte uit sinkronisering verwyder."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Stoor tans vertoonopsies..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Klaar"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Kanselleer"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Gepasmaakte aansig"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Stoor ingevoerde kontakte na:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-kaart"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Kanselleer uitvoer van <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Kon nie vCard invoer/uitvoer kanselleer nie"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Onbekende fout"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Kon nie \"<xliff:g id="FILE_NAME">%s</xliff:g>\" open nie: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Kon nie \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" open nie: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Kon nie die uitvoerder aktiveer nie: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Daar is geen uitvoerbare kontak nie."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Jy het \'n vereiste toestemming gedeaktiveer."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"\'n Fout het voorgekom tydens uitvoer: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Vereiste lêernaam is te lank (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"T/A-fout"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nie genoeg geheue nie. Die lêer is dalk te groot."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Kon nie vCard ontleed nie weens onverwagte redes."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Die formaat word nie ondersteun nie."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Kon nie meta-inligting van gegewe vCard-lêer(s) versamel nie."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Een of meer lêers kon nie ingevoer word nie (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Het <xliff:g id="FILENAME">%s</xliff:g> klaar uitgevoer."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Het kontakte klaar uitgevoer."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontakte is klaar uitgevoer; klik die kennisgewing om kontakte te deel."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Voer kontakdata uit"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontakdata word tans uitgevoer."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Kon nie databasis-inligting kry nie"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Daar is geen kontakte om uit te voer nie. As jy kontakte op jou foon het, sal sommige dataverskaffers nie toelaat dat die foon se kontakte uitgevoer word nie."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Daar is geen uitvoerbare kontakte nie."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Die vCard-opsteller het nie behoorlik begin nie."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Kon nie uitvoer nie"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Die kontakdata is nie uitgevoer nie.\nRede: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Voer <xliff:g id="NAME">%s</xliff:g> in"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Kon nie  vCard-data lees nie"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Lees van vCard-data gekanselleer"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Klaar met invoer van vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Invoer van <xliff:g id="FILENAME">%s</xliff:g> gekanselleer"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> sal binnekort ingevoer word."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Die lêer sal binnekort ingevoer word."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard-invoerversoek is verwerp. Probeer asseblief later weer."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> sal binnekort uitgevoer word."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Die lêer sal binnekort uitgevoer word."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakte sal binnekort uitgevoer word."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard-uitvoerversoek is verwerp. Probeer asseblief later."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontak"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Kas van vCard(s) na die die plaaslike tydelike stoor. Die werklike invoer sal binnekort begin."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Kon nie vCard invoer nie."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontak ontvang via NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Voer kontakte uit?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Kas tans..."</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Voer <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> in: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Voer <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> in: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Voer uit na .vcf-lêer"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Rangskik volgens"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Voornaam"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"My inligting"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Stel jou profiel op"</string>
     <string name="setting_about" msgid="7014388749752042863">"Meer oor Kontakte"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Deel sigbare kontakte"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Kon nie sigbare kontakte deel nie."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Deel gunstelingkontakte"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Deel alle kontakte"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kon nie kontakte deel nie."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Daar is geen kontakte om te deel nie."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakte om te wys"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakte om te wys"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Definieer gepasmaakte aansig"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Pasmaak aansig"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Stoor"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Deursoek kontakte"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Gunstelinge"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Geen kontakte nie."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Vee dikwels-gebruiktes uit"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Kies SIM-kaart"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Bestuur rekeninge"</string>
     <string name="menu_import" msgid="6107961135813836467">"Voer in"</string>
     <string name="menu_export" msgid="2658783911863503902">"Voer uit"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Geblokkeerde nommers"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"hou op soek"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Vee soektog uit"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opsies vir wys van kontakte"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Rekening"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Gebruik dit altyd vir oproepe"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Bel met"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Bel met \'n nota"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Tik \'n nota om saam met oproep te stuur …"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"STUUR EN BEL"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> ongelese items. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> ongelese item. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Bouweergawe"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Oopbronlisensies"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Lisensiebesonderhede vir oopbronsagteware"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Vee uit"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellips"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> s."</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> uur <xliff:g id="MINUTES_1">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> s."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> uur <xliff:g id="MINUTES_1">%2$s</xliff:g> min. <xliff:g id="SECONDS">%3$s</xliff:g> sek."</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Hierdie kortpad is gedeaktiveer."</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontak is verwyder"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Voer in"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Geen verbinding nie"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Wys meer"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Klaar SIM-kaart ingevoer"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Kon nie invoer nie"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kon nie kontakte vanaf SIM-kaart invoer nie"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Voer tans SIM in"</string>
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 146536e..12d5c5c 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"ዕውቂያዎች"</string>
     <string name="contactsList" msgid="8661624236494819731">"እውቅያዎች"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"እውቅያ አክል"</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="shortcutActivityTitle" msgid="1504383567778497348">"እውቂያ ምረጥ"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"ወደ ዕውቂያ አክል"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ዕውቅያ ምረጥ"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ይምረጡ"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"አዲስ እውቂያ ይፍጠሩ"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"የእውቅያ ዝርዝሮች"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"ሰርዝ"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"ፎቶ ለውጥ"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"አቋራጭ ፍጠር"</string>
-    <string name="menu_call" msgid="3992595586042260618">"የጥሪ ዕውቂያ"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"ዕውቂያ ፃፍ"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"ግንኙነት አቋርጥ"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"ዕውቂያዎችን ያስወግዱ"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"መሰየሚያውን ዳግም ሰይም"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"እውቂያዎች ምረጥ"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"እውቂያዎችን አክል"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"ከመሰየሚያ አስወግድ"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"እውቂያ ያክሉ"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"አዲስ ፍጠር…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"መሰየሚያ ፍጠር"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"ይህ እውቂያ ከብዙ እውቂያዎች ጋር ያለውን ግንኙነት ይቋረጥ?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ግንኙነት አቋርጥ"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ቀድሞውኑ ያደረጉዋቸውን ለውጦች ማስቀመጥ እና ይህን እውቂያ ከብዙ እውቂያዎች ጋር የነበረውን ግንኙነት ማቋረጥ ይፈልጋሉ?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"አስቀምጥ"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"ዕውቂያዎችን አገናኝ"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ከ<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ተገናኝቷል"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> እውቂያዎች</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> እውቂያዎች · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> እውቂያዎች · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> እውቂያዎች · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> እውቂያዎች · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"ከGoogle"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"ከ<xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ይህን እውቂያ መሰረዝ ከብዙ መለያዎች ውስጥ መረጃ ይሰርዛል።"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"ይህ እውቂያ ይሰረዝ?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ሰርዝ"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"ለውጦችን ጣለው"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"ዕውቅያው የለም።"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"እውቂያ ወደ መነሻ ማያ ገጽ ታክሏል።"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ወደ መነሻ ማያ ገጽ ታክሏል።"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"አዲስ ዕውቂያ ፍጠር"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"አዲስ እውቂያ ፍጠር"</string>
     <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="2228592924476426108">"የእውቂያዎች ዝርዝርዎ ባዶ ነው"</string>
-    <string name="noGroups" msgid="4607906327968232225">"ምንም መሰየሚያ የለም።"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"ቡድኖች ለመፍጠር መለያ ያስፈልግሃል፡፡"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"ይህ መሰየሚያ ያላቸው ምንም እውቂያዎች የሉም"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"በዚህ መለያ ውስጥ ምንም እውቂያዎች የሉም።"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"የእውቂያዎች ዝርዝርዎ ባዶ ነው"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"እውቂያን ለማስቀመጥ ችግር አጋጥሟል"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"የእውቂያ ፎቶ ለውጦችን ማስቀመጥ አልተቻለም"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"መሰየሚያ መጫን አልተሳካም"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"መሰየሚያ ተቀምጧል"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"መሰየሚያ ተሰርዟል"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"መሰየሚያ ተፈጥሯል"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"መለያ መፍጠር አልቻለም"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"መልዕክት ላክ"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"እውቅያዎችን ምረጥ"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"ላክ"</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="5948889261993124839">"ሁሉም"</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_plus_button" msgid="515164827856229880">"ተጨማሪ"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ከ <xliff:g id="TOTAL_NUMBER">%s</xliff:g> እውቂያዎች"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"የዕውቂያዎችዎ ስሞች"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"የመሰየሚያው ስም"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"የ<xliff:g id="SOURCE">%1$s</xliff:g> መለያ"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"መሰየሚያ"</string>
-    <string name="change_photo" msgid="8530597935483526383">"ቀይር"</string>
-    <string name="description_star" msgid="2605854427360036550">"ተወዳጅ"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"እውቅያ አርትዕ"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"ይቅር"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"ተመለስ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ዝጋ"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"የአሁኑ ዕውቂያ ከተመረጠው ዕውቂያ ጋር ይገናኝ?"</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="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="7122002148518724139">"ዓመት ያክሉ"</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="4347232421410561500">"መለያ አክል"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"አምጣ"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"አዲስ ፍጠር…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"አስወግድ"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ተወው"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"ብጁዎች ይወገዱ?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"እውቅያዎችን ፈልግ"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"ዕውቂያዎችን ያስወግዱ"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"በአካባቢው ምንም መገለጫ የለም"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"የእኔ የ<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> መገለጫ"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"ሁሉንም ዕውቂያዎች በማሳየት ላይ"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"ስልክህ ቢጠፋብህ እንኳን  ዕውቂያዎችህን ደህንነታቸው እንደተጠበቀ እንዲቆዩ አድርግ ከመስመር ላይ አገልገሎት ጋር አመሳስለው::"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"መለያ አክል"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"ለእውቂያዎችዎ ወደ Google ምትክ የሚያስቀምጥ መለያ ለማከል አንድ ደቂቃ ይውሰዱ።"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"አዲስ እውቂያዎች ወደ <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ይቀመጣሉ።"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ለአዲስ እውቂያዎች ነባሪ መለያን ይምረጡ፦"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ያነሰ ይመልከቱ"</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="288549957278065542">"የግል ቅጂ በመፍጠር ላይ..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>፣ <xliff:g id="TIME_INTERVAL">%2$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">"ፈጣን መልዕክት"</string>
@@ -285,20 +220,16 @@
     <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="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">"የቅርብ ጊዜ ኤስኤምኤስ። <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_sms" msgid="1666389577263317445">"የቅርብ ጊዜ ኤስኤምኤስ። <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>። <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>። <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"የቅርብ ጊዜ ጥሪ። <xliff:g id="CALL_TYPE">%1$s</xliff:g>። <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>። <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"ተጨማሪ መስኮች"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"የእውቂያ ፎቶ ለውጥ"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"የእውቂያ ፎቶ አክል"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"አርታዒውን መክፈት አልተሳካም።"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"በማስቀመጥ ላይ ወደ፦"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"ከ<xliff:g id="ACCOUNT">%s</xliff:g> የተገኘው የእውቂያ መረጃ አርትዕ መደረግ አይችልም"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"አሁን ወደ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> በማስቀመጥ ላይ። ሌላ መለያ ለመምረጥ ሁለቴ መታ ያድርጉ።"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> የተገናኙ እውቂያዎች"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ዕውቂያዎችን አገናኝ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ይቅር"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> የተደገሙ ሊሆኑ የሚችሉ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> የተደገሙ ሊሆኑ የሚችሉ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> የተገናኙ እውቂያዎች</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> የተገናኙ እውቂያዎች</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ይህ እውቂያ"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ሊሆኑ የሚችሉ ድግምግሞሽ"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"ይህ እውቂያ ተመሳሳይ ሰው ሊሆን ይችላል። እንደ ነጠላ እውቂያ በአንድ ላይ ሊያገናኙዋቸው ይችላሉ።"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"የተገናኙ ዕውቂያዎች"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"ከእርስዎ መለያዎች"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"ፎቶ ይምረጡ"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"ከ<xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>ን ሰርዝ"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>ን ሰርዝ"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>ን ሰርዝ"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"ከ<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> የመጣ ፎቶ አልተረጋገጠም"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"ከ<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> የመጣ ፎቶ ተረጋግጧል"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"ካልታወቀ መለያ የመጣ ፎቶ ምልክት አልተደረገበትም"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"ካልታወቀ መለያ የመጣ ፎቶ ምልክት ተደርጎበታል"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"ጥቆማዎች"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"አዲስ"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"የአሰሳ መሣቢያውን ክፈት"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">" ማውጫ"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"የሥራ ማውጫ"</string>
     <string name="local_search_label" msgid="2551177578246113614">"ሁሉም እውቅያዎች"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"ከ<xliff:g id="COUNT">%d</xliff:g> የበለጠ ተገኝቷል"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"ለ <xliff:g id="NAME">%1$s</xliff:g> ፈጣን ዕውቂያ"</string>
     <string name="missing_name" msgid="8745511583852904385">"(ስም የለም)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"በተደጋጋሚ የሚገናኙ"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"ዕውቂያ ዕይ"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"የስልክ ቁጥር ያላቸው ሁሉም ዕውቂያዎች"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"የሥራ መገለጫ ዕውቂያዎች"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"አዘምኖችን ዕይ"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"ሲም"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"ስም"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ቅጽል ስም"</string>
-    <string name="full_name" msgid="6602579550613988977">"ስም"</string>
     <string name="name_given" msgid="4280790853455320619">"የራስ ስም"</string>
     <string name="name_family" msgid="7466985689626017037">"የአያት ስም"</string>
     <string name="name_prefix" msgid="59756378548779822">"ቅድመ ስም"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"ኢሜይል <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"ኢሜይል"</string>
     <string name="postal_street" msgid="8133143961580058972">"ጎዳና"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"ፖስታ ሣጥን ቁጥር"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"ጎረቤት"</string>
     <string name="postal_city" msgid="6597491300084895548">"ከተማ፡"</string>
     <string name="postal_region" msgid="6045263193478437672">"ክልል፡"</string>
     <string name="postal_postcode" msgid="572136414136673751">"ዚፕ ኮድ"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"ተጨማሪቡድኖች..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\'<xliff:g id="GROUP">%s</xliff:g>\'  ከአሳምር ማስወገድ እንዲሁ ማንኛውም በተነጣጥል ያሉ ዕውቅያዎችን ከአሳምር ያስወግዳል።"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"ማሳያ አማራጮችን በማስቀመጥ ላይ..."</string>
-    <string name="menu_done" msgid="796017761764190697">"ተከናውኗል"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"ይቅር"</string>
     <string name="listCustomView" msgid="1840624396582117590">"ብጁ እይታ"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"እንዲመጡ የተደረጉ እውቂያዎችን አስቀምጥ ወደ፦"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"ሲም ካርድ"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"የ<xliff:g id="FILENAME">%s</xliff:g> ወደ ውጭ መላክ ይቅር?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard ማስመጣት/ወደ ውጪ መላክ ይቅር ማለት አልተቻለም"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"ያልታወቀ ስህተት"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" ፡<xliff:g id="EXACT_REASON">%s</xliff:g> መክፈት አልተቻለም"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ፡<xliff:g id="EXACT_REASON">%2$s</xliff:g> መክፈት አልተቻለም"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ላኪው፡\"<xliff:g id="EXACT_REASON">%s</xliff:g>\"  ለማስነሳት አልተቻለም"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ምንም ወደ ውጭ መላክ የሚችል ዕውቂያ የለም"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"አንድ የሚያስፈልግ ፈቃድ አስወግደዋል።"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"በመላክ ጊዜስህተት ተከስቷል: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"የተጠየቀው ፋይል ስም በጣም ረጅም ነው  (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ስህተት"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"በቂ ማህደረ ትውስታ የለም፡፡ፋይሉ ምናልባት በጣም ትልቅ ይሆናል፡፡"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"ባልተጠበቀ ምክንያት vCard መተንተን አልተቻለም፡፡"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"ቅርፀቱ አይታገዝም"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"በተሰጠው(ጡት) vCard ፋይል(ሎች) ሜታ መረጃ መሰብሰብ አልተቻለም፡፡"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"አንድ ወይም ከዛ በላይ ፋይሎች ማስመጣት አልተቻለም (%s)፡፡"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> መላክ ጨርሷል"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"እውቂያዎችን ወደ ውጪ መላክ ተጠናቅቋል።"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"እውቂያዎችን ወደ ውጭ መላክ ተጠናቅቋል፣ እውቂያዎችን ለማጋራት ማሳወቂያውን ጠቅ ያድርጉ።"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"የዕውቂያ ውሂብ በመላክ ላይ"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"የእውቂያ ውሂብ ወደ ውጭ በመላክ ላይ ነው።"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ውሂብ ጎታ መረጃን ማግኘት አልተቻለም"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"ወደ ውጭ የሚላኩ እውቅያዎች የሉም፡፡ ስልክህ ውስጥ እውቅያዎች ካሉህ፤አንዳንድ ውሂብ አቅራቢዎች ከስልኩ እውቅያዎች ወደ ውጭ እንዲላኩ አይፈቅዱም፡፡"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ወደ ውጭ የሚላኩ እውቅያዎች የሉም።"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"የ vCard  አቀናባሪው በትክክል አልጀመረም::"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ወደ ውጭ መላክ አልተቻለም"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"የዕውቅያ ውሂብ ወደ ውጭ አልተላከም፡፡ \nምክንያት፡፡\"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> ማስገባት"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard ውሂብ ማንበብ አልተቻለም"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"የvCard ውሂብ ማንበብ ተሰርዟል"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">" <xliff:g id="FILENAME">%s</xliff:g> vCard  ማስመጣት ጨርሷል"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ማስመጣት ተሰርዞዋል"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ከአፍታ ቆይታ በኋላ ይመጣል።"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ፋይሉ ከአፍታ ቆይታ በኋላ ይመጣል።"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"የvCard ማስመጣት ጥየቃ ውድቅ ተደርጓል። እባክህ ትንሽ ቆይተህ ሞክር።"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> ከአፍታ ቆይታ በኋላ ይላካል።"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ፋይሉ ትንሽ ቆይቶ ወደ ውጪ ይላካል።"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"እውቂያዎች አሁን ወደ ውጭ ይላካሉ።"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"የvCard ላክ ጥየቃ ውድቅ ተደርጓል። እባክህ ትንሽ ቆይተህ ሞክር።"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"እውቅያ"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"ወደ ጊዜያዊ ማከማቻ vCard(s) እየሸጎጠ ነው። ትክክለኛው አስመጣ በቅርቡ ይጀምራል።"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard ማስመጣት አልተቻለም"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"በ NFC  የደረሱ ዕውቂያዎች"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"እውቅያዎች ላክ"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"በመሸጎጥ ላይ"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"በማስገባት ላይ<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>፡<xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"በማስገባት ላይ<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>፡<xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"ወደ .vcf ፋይል ላክ"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"ደርድር በ"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"የራስ ስም"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"የእኔ መረጃ"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"መገለጫዎን ያዘጋጁ"</string>
     <string name="setting_about" msgid="7014388749752042863">"ስለ ዕውቂያዎች"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"የሚታዩ እውቂያዎችን አጋራ"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"የሚታዩ እውቂያዎችን ማጋራት አልተሳካም።"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ተወዳጅ እውቂያዎችን አጋራ"</string>
     <string name="share_contacts" msgid="8109287987498711664">"ሁሉንም እውቂያዎች አጋራ"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"እውቂያዎችን ማጋራት አልተሳካም።"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"ምንም የሚጋሩ እውቂያዎች የሉም።"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"ዕውቂያዎች አሳይ"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ዕውቂያዎች አሳይ"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"ብጁ እይታን ይበይኑ"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"ዕይታ አብጅ"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"አስቀምጥ"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"እውቂያዎችን ይፈልጉ"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"ተወዳጆች"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"ምንም ዕውቂያዎች የሉም"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"ተደጋጋሚዎችን አጽዳ"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"ሲም ካርድ ይምረጡ"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"መለያዎችን አስተዳድር"</string>
     <string name="menu_import" msgid="6107961135813836467">"አምጣ"</string>
     <string name="menu_export" msgid="2658783911863503902">"ወደ ውጪ ላክ"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"የታገዱ ቁጥሮች"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>በ<xliff:g id="SOURCE">%2$s</xliff:g> በኩል"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"መፈለግ አቁም"</string>
     <string name="description_clear_search" msgid="688023606766232904">"ፍለጋን አጽዳ"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"የእውቂያ ማሳያ አማራጮች"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"መለያ"</string>
     <string name="set_default_account" msgid="4311613760725609801">"ለጥሪዎች ሁልጊዜ ይህንን ተጠቀም"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"ይደውሉ ከዚህ ጋር"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"ከማስታወሻ ጋር ደውል"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"ከውይይት ጋር ለመላክ የማስታወሻ ጽሑፍ ይተይቡ…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ላክ እና ደውል"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>። <xliff:g id="COUNT_3">%2$d</xliff:g> ያልተነበቡ ንጥሎች። </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>። <xliff:g id="COUNT_3">%2$d</xliff:g> ያልተነበቡ ንጥሎች። </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"የግንብ ሥሪት"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"የክፍት ምንጭ ፈቃዶች"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ለክፍት ምንጭ ሶፍትዌሮች የፈቃድ ዝርዝሮች"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"ሰርዝ"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"ሶስት ነጥብ"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ሴ"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> ደቂቃ <xliff:g id="SECONDS">%s</xliff:g> ሴ"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ሰዓት <xliff:g id="MINUTES_1">%s</xliff:g> ደቂቃ <xliff:g id="SECONDS">%s</xliff:g> ሴ"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> ደቂቃ <xliff:g id="SECONDS">%2$s</xliff:g> ሴ"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ሰዓት <xliff:g id="MINUTES_1">%2$s</xliff:g> ደቂቃ <xliff:g id="SECONDS">%3$s</xliff:g> ሴ"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ይህ አቋራጭ ተወግዷል"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"እውቂያ ተወግዷል"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"ከውጭ አምጣ"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"ምንም ግንኙነት የለም"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"ሲም"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"ተጨማሪ አሳይ"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"ሲም ካርድ ማምጣት ጨርሷል"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"ማስመጣት አልተሳካም"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"ከ SIM ካርድ ዕውቂያዎች ማስመጣት አልተቻለም"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"ሲም በማምጣት ላይ"</string>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 61feaf4..83566b6 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"جهات الاتصال"</string>
     <string name="contactsList" msgid="8661624236494819731">"جهات الاتصال"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"إضافة جهة اتصال"</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="shortcutActivityTitle" msgid="1504383567778497348">"اختيار جهة اتصال"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"إضافة إلى جهة اتصال"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"اختيار جهة اتصال"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"تحديد"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"إنشاء جهة اتصال جديدة"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"تفاصيل جهة الاتصال"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"حذف"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"تغيير الصورة"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"إنشاء اختصار"</string>
-    <string name="menu_call" msgid="3992595586042260618">"الاتصال بجهة الاتصال"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"إرسال رسالة لجهة الاتصال"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"إلغاء الربط"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"إزالة جهات الاتصال"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"إعادة تسمية التصنيف"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"تحديد جهات الاتصال"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"إضافة جهات اتصال"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"الإزالة من تصنيف"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"إضافة جهة اتصال"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"إنشاء مجموعة جديدة…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"إنشاء تصنيف"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"هل تريد إلغاء ربط جهة الاتصال هذه إلى جهات اتصال متعددة؟"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"إلغاء الربط"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"هل تريد حفظ التغييرات التي أجريتها وإلغاء ربط جهة الاتصال هذه إلى جهات اتصال متعددة؟"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"حفظ"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"ربط جهات الاتصال"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"اختر جهة الاتصال التي تريد ربطها بـ <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> مرتبط"</string>
@@ -91,12 +82,12 @@
       <item quantity="one">جهة اتصال واحدة (<xliff:g id="COUNT_0">%d</xliff:g>)</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="zero"><xliff:g id="COUNT_2">%d</xliff:g> جهة اتصال · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="two"><xliff:g id="COUNT_2">%d</xliff:g> جهتا اتصال · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> جهات اتصال · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="many"><xliff:g id="COUNT_2">%d</xliff:g> جهة اتصال · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> جهة اتصال · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> جهة اتصال · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="zero"><xliff:g id="COUNT_2">%1$d</xliff:g> جهة اتصال · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="two"><xliff:g id="COUNT_2">%1$d</xliff:g> جهتا اتصال · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> جهات اتصال · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> جهة اتصال · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> جهة اتصال · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> جهة اتصال · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"‏من Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"من <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -113,21 +104,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"سيؤدي حذف جهة الاتصال هذه إلى حذف تفاصيل من عدة حسابات."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"هل تريد حذف جهة الاتصال هذه؟"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"حذف"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"إلغاء التغييرات"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"جهة الاتصال غير موجودة."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"تمت إضافة جهة الاتصال إلى الشاشة الرئيسية."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"تمت إضافة <xliff:g id="NAME">%s</xliff:g> إلى الشاشة الرئيسية."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"إنشاء جهة اتصال جديدة"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"إنشاء جهة اتصال جديدة"</string>
     <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="2228592924476426108">"قائمة جهات اتصالك فارغة"</string>
-    <string name="noGroups" msgid="4607906327968232225">"لا تصنيف"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"يجب توفير حساب لإنشاء مجموعات."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"لا توجد جهات اتصال بهذه التسمية"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"لا توجد جهات اتصال في هذا الحساب"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"قائمة جهات اتصالك فارغة"</string>
@@ -140,7 +125,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"حدث خطأ أثناء حفظ جهة الاتصال"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"تعذر حفظ تغييرات صورة جهة الاتصال"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"فشل تحميل التصنيف"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"تم حفظ التصنيف"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"تم حذف التصنيف"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"تم إنشاء التصنيف"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"يتعذر إنشاء تصنيف"</string>
@@ -155,41 +139,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"إرسال رسالة"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"اختيار جهات الاتصال"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"إرسال"</string>
-    <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" 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" 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="5948889261993124839">"الكل"</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_plus_button" msgid="515164827856229880">"علامة زائد"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> من <xliff:g id="TOTAL_NUMBER">%s</xliff:g> من جهات الاتصال"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"أسماء جهات الاتصال"</string>
-    <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>
@@ -212,52 +164,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"اسم التصنيف"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"حساب <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"التصنيف"</string>
-    <string name="change_photo" msgid="8530597935483526383">"تغيير"</string>
-    <string name="description_star" msgid="2605854427360036550">"مفضل"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"تعديل جهة الاتصال"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"إلغاء"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"رجوع"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"إغلاق"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"هل تريد ربط جهة الاتصال الحالية بجهة الاتصال المحددة؟"</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="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="7122002148518724139">"تضمين العام"</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="4347232421410561500">"إضافة حساب"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"استيراد"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"إنشاء مجموعة جديدة…"</string>
@@ -271,14 +199,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"تجاهل"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"إلغاء"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"تجاهل عمليات التخصيص؟"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"البحث في جهات الاتصال"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"إزالة جهات الاتصال"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"ملفي الشخصي المحلي"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"ملفي الشخصي في <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"عرض جميع جهات الاتصال"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"يمكنك الاحتفاظ بجهات اتصالك في أمان حتى إذا فقدت هاتفك: من خلال المزامنة مع خدمة عبر الإنترنت."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"إضافة حساب"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"‏خذ دقيقة من وقتك لإضافة حساب يحفظ نسخة احتياطية من جهات اتصالك على Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"سيتم حفظ جهات الاتصال الجديدة في <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"اختيار حساب افتراضي لجهات الاتصال الجديدة:"</string>
@@ -297,13 +221,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"عرض أقل"</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="288549957278065542">"جارٍ إنشاء نسخة شخصية..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>، <xliff:g id="TIME_INTERVAL">%2$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">"المراسلة الفورية"</string>
@@ -313,20 +236,16 @@
     <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="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_sms" msgid="1666389577263317445">"‏رسائل SMS الأخيرة. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"المكالمة الأخيرة. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"المزيد من الحقول"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"تغيير صورة جهة الاتصال"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"إضافة صورة جهة الاتصال"</string>
@@ -334,57 +253,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"أخفق فتح المحرر."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"الحفظ في"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"معلومات جهة الاتصال من <xliff:g id="ACCOUNT">%s</xliff:g> غير قابلة للتعديل"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"جارٍ الحفظ حاليًا في <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. يمكنك النقر نقرًا مزدوجًا لاختيار حساب آخر."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> جهة اتصال مرتبطة"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ربط جهات الاتصال"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"إلغاء"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <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>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <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>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"جهة الاتصال هذه"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"التكرارات المحتملة"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"ربما تمثل جهات الاتصال هذه شخصًا واحدًا. يمكنك ربطها معًا كجهة اتصال واحدة."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"جهات الاتصال المرتبطة"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"من حساباتك"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"اختيار صورة"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"من <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"حذف <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"حذف <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"حذف <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"تم إلغاء تحديد صورة من <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"تم تحديد صورة من <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"لم يتم تحديد صورة من حساب غير معروف"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"تم تحديد صورة من حساب غير معروف"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"الاقتراحات"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"جديد"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"فتح لائحة التنقل"</string>
@@ -453,11 +328,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"الدليل"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"دليل العمل"</string>
     <string name="local_search_label" msgid="2551177578246113614">"جميع جهات الاتصال"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"تم العثور على أكثر من <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"اتصال سريع لـ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(بلا اسم)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"يتم الاتصال بهم بشكل متكرر"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"عرض جهة الاتصال"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"جميع جهات الاتصال التي لها أرقام هواتف"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"جهات الاتصال للملف الشخصي للعمل"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"عرض التحديثات"</string>
@@ -465,7 +338,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"الاسم"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"اللقب"</string>
-    <string name="full_name" msgid="6602579550613988977">"الاسم"</string>
     <string name="name_given" msgid="4280790853455320619">"الاسم الأول"</string>
     <string name="name_family" msgid="7466985689626017037">"اسم العائلة"</string>
     <string name="name_prefix" msgid="59756378548779822">"بادئة الاسم"</string>
@@ -498,8 +370,6 @@
     <string name="email_custom" msgid="5536404237099078802">"إرسال بريد إلكتروني إلى <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"بريد إلكتروني"</string>
     <string name="postal_street" msgid="8133143961580058972">"الشارع"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"صندوق البريد"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"منطقة مجاورة"</string>
     <string name="postal_city" msgid="6597491300084895548">"المدينة"</string>
     <string name="postal_region" msgid="6045263193478437672">"المحافظة"</string>
     <string name="postal_postcode" msgid="572136414136673751">"الرمز البريدي"</string>
@@ -537,8 +407,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"مزيد من المجموعات..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ستؤدي إزالة \"<xliff:g id="GROUP">%s</xliff:g>\" من المزامنة أيضًا إلى إزالة أية جهات اتصال غير مجمعة من المزامنة."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"جارٍ حفظ خيارات العرض..."</string>
-    <string name="menu_done" msgid="796017761764190697">"تم"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"إلغاء"</string>
     <string name="listCustomView" msgid="1840624396582117590">"عرض مُخصص"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"حفظ جهات الاتصال المستوردة إلى:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"‏شريحة SIM"</string>
@@ -566,18 +434,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"هل تريد إلغاء تصدير <xliff:g id="FILENAME">%s</xliff:g>؟"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"‏تعذر إلغاء استيراد/تصدير vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"خطأ غير معروف."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"تعذر فتح \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"تعذر فتح \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"تعذر بدء المُصدر: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ليست هناك جهة اتصال قابلة للتصدير."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"لقد عطلت إذنًا مطلوبًا."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"حدث خطأ أثناء التصدير: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"اسم الملف المطلوب أطول مما يجب (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"‏خطأ I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"الذاكرة غير كافية. ربما يكون الملف أكبر مما يجب."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"‏تعذر تحليل vCard بسبب غير متوقع."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"التنسيق غير معتمد."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"‏تعذر جمع معلومات وصفية حول ملفات vCard المحددة."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"‏تعذر استيراد ملف أو أكثر (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"تم الانتهاء من تصدير <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"تم الانتهاء من تصدير جهات الاتصال."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"تم الانتهاء من تصدير جهات الاتصال، انقر على الإشعار لمشاركة جهات الاتصال."</string>
@@ -586,29 +450,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"تصدير بيانات جهة الاتصال"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"يجري تصدير بيانات جهات الاتصال."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"تعذر الحصول على معلومات قاعدة البيانات."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"ليست هناك أية جهات اتصال قابلة للتصدير. إذا كانت لديك جهات اتصال على هاتفك، فإن بعض موفري البيانات لا يسمحون بتصدير جهات الاتصال من الهاتف."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"لا توجد جهات اتصال قابلة للتصدير."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"‏لم يبدأ مؤلف vCard بشكل صحيح."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"تعذر التصدير"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"لم يتم تصدير بيانات جهة الاتصال.\nالسبب: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"جارٍ استيراد <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"‏تتعذر قراءة بيانات vCard."</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"‏تم إلغاء قراءة بيانات vCard"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"‏تم الانتهاء من استيراد ملف vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"تم إلغاء استيراد <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"سيتم استيراد <xliff:g id="FILENAME">%s</xliff:g> بعد قليل."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"سيتم استيراد الملف قريبًا."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"‏تم رفض طلب استيراد vCard. أعد المحاولة لاحقًا."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"سيتم تصدير <xliff:g id="FILENAME">%s</xliff:g> بعد قليل."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"سيتم تصدير الملف بعد قليل."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"سيتم تصدير جهات الاتصال قريبًا."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"‏تم رفض طلب تصدير vCard. أعد المحاولة لاحقًا."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"جهة اتصال"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"‏يجري تخزين ملفات vCard مؤقتًا على وحدة تخزين مؤقتة محلية. سيبدأ الاستيراد الفعلي قريبًا."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"‏تعذر استيراد vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"‏استلام ج اتص.NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"تصدير جهات الاتصال؟"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"تخزين مؤقت"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"استيراد <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"استيراد <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"‏تصدير إلى ملف vcf."</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"ترتيب بحسب"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"الاسم الأول"</string>
@@ -621,8 +481,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"معلوماتي"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"إعداد الملف الشخصي"</string>
     <string name="setting_about" msgid="7014388749752042863">"حول جهات الاتصال"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"مشاركة جهات الاتصال المرئية"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"أخفقت مشاركة جهات الاتصال المرئية."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"مشاركة جهات الاتصال المفضلة"</string>
     <string name="share_contacts" msgid="8109287987498711664">"مشاركة جميع جهات الاتصال"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"أخفقت مشاركة جهات الاتصال."</string>
@@ -632,14 +490,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"ليست هناك جهات اتصال لمشاركتها."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"جهات الاتصال المعروضة"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"جهات الاتصال المعروضة"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"تحديد العرض المُخصص"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"تخصيص العرض"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"حفظ"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"البحث في قائمة جهات الاتصال"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"المفضلة"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"ليست هناك جهات اتصال."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"محو قائمة من يتصل بهم كثيرًا"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"‏تحديد شريحة SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"إدارة الحسابات"</string>
     <string name="menu_import" msgid="6107961135813836467">"استيراد"</string>
     <string name="menu_export" msgid="2658783911863503902">"تصدير"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"الأرقام المحظورة"</string>
@@ -647,23 +501,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> عبر <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"إيقاف البحث"</string>
     <string name="description_clear_search" msgid="688023606766232904">"محو البحث"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"خيارات عرض جهات الاتصال"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"الحساب"</string>
     <string name="set_default_account" msgid="4311613760725609801">"استخدام هذا للمكالمات دائمًا"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"الاتصال باستخدام"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"مكالمة مع ملاحظة"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"اكتب ملاحظة لإرسالها مع المكالمة..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"الإرسال والاتصال"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="zero"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> عناصر غير مقروءة. </item>
-      <item quantity="two"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> عناصر غير مقروءة. </item>
-      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> عناصر غير مقروءة. </item>
-      <item quantity="many"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> عناصر غير مقروءة. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> عناصر غير مقروءة. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> عنصر غير مقروء. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"نسخة الإصدار"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"تراخيص البرامج المفتوحة المصدر"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"تفاصيل الترخيص للبرامج مفتوحة المصدر"</string>
@@ -677,8 +521,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"حذف"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"علامة حذف"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ثانية"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> دقيقة <xliff:g id="SECONDS">%s</xliff:g> ثانية"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ساعة <xliff:g id="MINUTES_1">%s</xliff:g> دقيقة <xliff:g id="SECONDS">%s</xliff:g> ثانية"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> دقيقة <xliff:g id="SECONDS">%2$s</xliff:g> ثانية"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ساعة <xliff:g id="MINUTES_1">%2$s</xliff:g> دقيقة <xliff:g id="SECONDS">%3$s</xliff:g> ثانية"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"تم تعطيل هذا الاختصار"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"تمت إزالة جهة الاتصال"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"استيراد"</string>
@@ -705,4 +549,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"لا اتصال"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"‏شريحة SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"عرض المزيد"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"‏انتهى استيراد شريحة SIM"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"أخفق الاستيراد"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"‏تعذر استيراد جهات الاتصال من شريحة SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"‏استيراد SIM"</string>
 </resources>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index a3f04d2..5e923f5 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontaktlar"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontaktlar"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Kontakt əlavə edin"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Birbaşa nömrə yığımı"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Birbaşa mesaj"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Kontakt qısayolunu seçin"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Zəng üçün nömrə seçin"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Mesaj göndərmək üçün nömrə seçin"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kontakt seçin"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Kontakta əlavə edin"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontakt seçin"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Seçin"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Yeni kontakt yaradın"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Kontakt detalları"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Haqqında"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Güncəlləşdirmələr"</string>
     <string name="searchHint" msgid="8482945356247760701">"Kontakt axtarın"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Kontakta baxın"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Favoritlərə əlavə edin"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Favoritlərdən yığışdırın"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Seçilmişlərdən silindi"</string>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Silin"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Şəkli dəyiş"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Qısayol yaradın"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Kontakta zəng edin"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Mətn kontaktı"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Parçalayın"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Kontaktları silin"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Etiketin adını dəyişin"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Kontaktları seçin"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Kontakt əlavə edin"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Etiketdən silin"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Kontakt əlavə edin"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Yenisini yaradın..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Etiket yaradın"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Bu kontakt çoxsaylı kontaktlara parçalansın?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Parçalayın"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Hal-hazırda etdiyiniz dəyişiklikləri yadda saxlamaq və bu kontaktı çoxsaylı kontaktlara parçalamaq istərdiniz?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Yadda saxlayın"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontaktları əlaqələndirin"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> ilə əlaqələndirmək istədiyiniz kontaktı seçin:"</string>
-    <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Bütün kontaktları göstərin"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Təklif edilmiş kontaktlar"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Bütün kontaktlar"</string>
     <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ilə bağlantı"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontakt · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google\'dan"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> hesabından"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Bu kontaktın silinməsi çoxsaylı hesablardan detalların silinməsi ilə nəticələnəcək."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Bu kontakt silinsin?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Silin"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Dəyişiklikləri kənarlaşdırın"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt mövcud deyil."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt Əsas ekrana elavə edilib."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> Əsas ekrana əlavə edilib."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Yeni kontakt yaradın"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Yeni kontakt yaradın"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Planşetdə şəkillər əlçatımlı deyil."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Telefonda heç bir şəkil əlçatımlı deyil."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakt fotosu"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Fərdi etiket adı"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Səsləri birbaşa səsli poçta göndərin"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Fotonu yığışdırın"</string>
     <string name="noContacts" msgid="2228592924476426108">"Kontakt siyahınız boşdur"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Etiket yoxdur"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Qrup yaratmaq üçün hesaba ehtiyacınız var."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Bu etiketlə kontakt yoxdur"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Bu hesabda heç bir kontakt yoxdur"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Kontakt siyahınız boşdur"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kontaktın yadda saxlanmasında xəta"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kontakt foto dəyişiklikləri yadda saxlanılmadı"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Etiketi yükləmək uğursuz oldu"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etiket yadda saxlanıldı"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiket silindi"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etiket yaradıldı"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Etiket yarada bilməz"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Mesaj göndərin"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kontaktları seçin"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Göndərin"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> əlaqə</item>
-      <item quantity="one"> telefon nömrəsi olan 1 əlaqə</item>
-    </plurals>
-    <string name="listTotalPhoneContactsZero" msgid="6968813857632984319">"Telefon nömrəsi olan kontakt yoxdur"</string>
-    <plurals name="listFoundAllContacts" formatted="false" msgid="4872115339963093220">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tapıldı</item>
-      <item quantity="one">1 tapıldı</item>
-    </plurals>
     <string name="listFoundAllContactsZero" msgid="922980883593159444">"Kontakt yoxdur"</string>
-    <plurals name="searchFoundContacts" formatted="false" msgid="7223023725334884618">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tapıldı</item>
-      <item quantity="one">1 nəfər tapıldı</item>
-    </plurals>
-    <string name="all_contacts_tab_label" msgid="5948889261993124839">"Bütün"</string>
-    <string name="callBack" msgid="5498224409038809224">"Geriyə zəng"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Yenidən zəng edin"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Zəngi qaytarın"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" kontaktlara əlavə olunsun?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktdan <xliff:g id="CURRENT_NUMBER">%s</xliff:g> kontakt"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Kontaktlarınızın adları"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Bu əməliyyatı idarə etmək üçün heç bir tətbiq tapılmadı."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Öncəki ekrana qayıtmaq üçün klikləyin"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Digər nömrə əlavə edin"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"E-mail əlavə edin"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etiket adı"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Səsli çat"</string>
     <string name="video_chat" msgid="1872255818640336072">"Video çat"</string>
-    <string name="connections" msgid="8098440723172028350">"Əlaqələr"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Bağlantı əlavə edin"</string>
-    <string name="recent" msgid="2659189233141493004">"Son"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Son güncəlləşmələr"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> hesabı"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Fotoşəkil çəkin"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Yeni foto çəkin"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Foto seçin"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Yeni foto seçin"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Axtarılır..."</string>
-    <string name="menu_display_selected" msgid="6470001164297969034">"Seçilmişləri göstər"</string>
-    <string name="menu_display_all" msgid="8887488642609786198">"Hamısını göstər"</string>
-    <string name="menu_select_all" msgid="621719255150713545">"Hamısını seçin"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Heç birini seçməyin"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Yenisini əlavə edin"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Təşkilat əlavə edin"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarix"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiket"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Dəyişdir"</string>
-    <string name="description_star" msgid="2605854427360036550">"sevimli"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Kontaktı redaktə edin"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Ləğv edin"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Geri"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"qapadın"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Cari kontakt seçilmiş kontaktla əlaqələndirilsin?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Seçilmiş kontaktın redaktəsinə keçirilsin? Hazırda daxil etdiyiniz informasiya kopyalanacaq."</string>
-    <string name="menu_copyContact" msgid="1573960845106822639">"Kontaktlarıma Kopyalayın"</string>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Kontaktlarıma Əlavə Edin"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Kataloq <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Ayarlar"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ayarlar"</string>
     <string name="menu_help" msgid="1680178646764069976">"Kömək &amp; əks əlaqə"</string>
-    <string name="preference_displayOptions" msgid="1341720270148252393">"Displey seçənəkləri"</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 nömrəsi"</string>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Kontaktlara əlavə edin"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Kontakta əlavə edin"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Qapadın"</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="7122002148518724139">"İl daxil edin"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Yüklənir…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Yeni kontakt yaradın"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Hesab əlavə edin"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"İmport"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Yenisini yaradın..."</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Ləğv edin"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Ləğv edin"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Fərdiləşmə ləğv edilsin?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Kontakt axtarın"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Kontaktları silin"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Yerli profilim"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Mənim <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profilim"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Bütün kontaktlar göstərilir"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Telefonunuzu itirsəniz belə, kontaktlarınızı təhlükəsiz saxlayın: onlayn xidmət ilə sinxronlaşdırın."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Hesab əlavə edin"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Kontaktlarınızı Google\'a yedəkləyən hesabı əlavə etmək üçün bir dəqiqənizi ayırın."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Yeni kontaktlar <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> hesabında yadda saxlanacaq."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Yeni kontaktlar üçün defolt hesab seçin:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Baxışı kiçildin"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Son"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Haqqında"</string>
-    <string name="send_message" msgid="8938418965550543196">"Mesaj göndərin"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Şəxsi nüsxə yaradılır..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Sabah"</string>
     <string name="today" msgid="8041090779381781781">"Bu gün"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Bu gün saat <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Sabah saat <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Başlıqsız tədbir)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Ayarlayın"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Veb sayt"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Tədbir"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Əlaqə"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Hesab"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Ad"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-poçt"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Əlaqə redaktorunu genişləndirmək üçün klikləyin."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Əlaqə redaktorunu yığışdırmaq üçün klikləyin."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"məkana istiqamətlər"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"son sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. cavab üçün klikləyin"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"son sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. cavab üçün klikləyin"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"gələn"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"gedən"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"buraxılmış"</string>
-    <string name="content_description_recent_call" msgid="5183800406316723676">"son ç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>. zəng etmək üçün klikləyin"</string>
+    <string name="content_description_recent_call" msgid="5183800406316723676">"son çağrı. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. zəng etmək üçün klikləyin"</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">"Siz hər hansı bir şəxsin Görüşlə bağlı identifikatorlarını e-poçt sahəsi və ya telefon sahəsinə daxil edəndə, Görüş yerləri daha yaxşı işləyir."</string>
     <string name="editor_more_fields" msgid="3630987771304393421">"Daha çox sahə"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Kontakt fotosunu dəyişin"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Kontakt fotosu əlavə edin"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Redaktoru açmaq uğursuz oldu."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Hesabda yadda saxlanır"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> hesabından olan kontakt məlumatı redaktə olunmur"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Hal-hazırda <xliff:g id="ACCOUNT_NAME">%s</xliff:g> hesabında yadda saxlanır. Fərqli hesab seçmək üçün iki dəfə basın."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Əlaqələnmiş kontakt (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Əlaqələnmiş kontakt</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> əlaqələnmiş kontakt"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"KONTAKTLARI ƏLAQƏLƏNDİRİN"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"LƏĞV EDİN"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Mümkün dublikat</item>
-      <item quantity="one">1 Mümkün dublikat </item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> əlaqələnmiş kontakt</item>
-      <item quantity="one">1 əlaqələnmiş kontakt</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Bu kontakt"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mümkün dublikatlar"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Bu kontaktlar eyni şəxsə aid ola bilər. Onları bir kontaktda birləşdirə bilərsiniz."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Əlaqələndirilmiş kontaktlar"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Hesablarınızdan"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Foto seçin"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> hesabından"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> datasını silin"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> datasını silin"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> datasını silin"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>istifadəçisindən gələn foto yoxlanmadı"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> istifadəçisindən gələn foto yoxlandı"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Naməlum hesabdan olan foto yoxlanmadı"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Naməlum hesabdan olan foto yoxlandı"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Təkliflər"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Yeni"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Naviqasiya siyirməsini açın"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Kataloq"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"İş kataloqu"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Bütün kontaktlar"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> ədəddən çox tapılıb."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> üçün tez kontakt"</string>
     <string name="missing_name" msgid="8745511583852904385">"(ad yoxdur)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Tez-tez əlaqə saxlanan"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Kontakta baxın"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Telefon nömrələri olan bütün kontaktlar"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"İş profili kontaktları"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Güncəlləşmələri göstər"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Ad"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nik"</string>
-    <string name="full_name" msgid="6602579550613988977">"Ad"</string>
     <string name="name_given" msgid="4280790853455320619">"Ad"</string>
     <string name="name_family" msgid="7466985689626017037">"Soyad"</string>
     <string name="name_prefix" msgid="59756378548779822">"Ad prefiksi"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ünvanına məktub göndərin"</string>
     <string name="email" msgid="5668400997660065897">"E-poçt"</string>
     <string name="postal_street" msgid="8133143961580058972">"Küçə"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"PO Box"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Qonşuluq"</string>
     <string name="postal_city" msgid="6597491300084895548">"Şəhər"</string>
     <string name="postal_region" msgid="6045263193478437672">"Dövlət"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Poçt indeksi"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Daha çox qrup..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" qrupunun sinxronlaşmadan silinməsi istənilən qrupsuz kontaktı da sinxronlaşmadan siləcək."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Displey seçənəkləri yadda saxlanır..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Hazırdır"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Ləğv et"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Fərdiləşdirilmiş görünüş"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"İmport olunan kontaktları yadda saxlayın:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SİM kart"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> eksportu ləğv edilsin?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Vizit kart importunu/eksportunu ləğv etmək mümkün olmadı"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Naməlum xəta."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" açmaq olmadı: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" açmaq olmadı: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Eksporteri başlatmaq olmadı: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Eksport edilə bilən heç bir kontakt yoxdur."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Tələb olunan icazəni deaktiv etmisiniz."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Eksport zamanı xəta baş verdi: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Tələb olunan fayl adı çox uzundur (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O xəta"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Yetərincə yaddaş yoxdur. Fayl çox böyük ola bilər."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Gözlənilməyən səbəbə görə vizit kart təhlil edilə bilmədi."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format dəstəklənmir."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Verilmiş vizit kartların meta məlumatları toplana bilmədi."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Bir və daha çox fayl import edilə bilməz (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> eksportu bitdi."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontaktların eksportu tamamlandı."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktların eksportu tamamlandı, kontaktları paylaşmaq üçün bildirişə tıklayın."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontakt datası eksport olunur"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontakt datası eksport olunur."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Verilənlər bazası məlumatları əldə oluna bilmədi."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Eksport oluna bilən kontakt yoxdur. Əgər telefonunuzda kontakt varsa, bəzi data provayderləri kontaktların telefondan kənara eksport olunmasına icazə verməyə bilər."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Burada eksport edilə bilən kontakt yoxdur."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Vizit kart tərtibçisi düzgün başlamadı."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Eksport edilə bilmədi"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontakt datası eksport edilmədi.\nSəbəb: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> import edilir"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Vizit kart datası oxuna bilmədi"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Vizit kart datasının oxunması ləğv edildi"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vizit kart importu qurtardı"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> importu ləğv edildi"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> tezliklə import olunacaq."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Bu fayl tezliklə import ediləcək."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Vizit kart import sorğusu rədd edildi. Yenidən cəhd edin."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> tezliklə eksport ediləcək."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Fayl az sonra eksport ediləcək."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktlar tezliklə eksport ediləcək."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Vizit kart eksport sorğusu rədd edildi. Daha sonra cəhd edin."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Vizit kart yerli müvəqqəti yaddaşa keşlənir. Hazırkı import tezliklə başlayacaq."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Vizit kart import edilə bilmədi."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt NFC üzərindən alınıb"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Kontaktlar eksport olunsun?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Keşləndirilir"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"İmport edilir: <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"İmport edilir: <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf fayldan eksport edin"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sıralayın:"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ad"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Məlumatlarım"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Profilinizi quraşdırın"</string>
     <string name="setting_about" msgid="7014388749752042863">"Kontaktlar Haqqında"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Görünən kontaktları paylaşın"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Görünən kontaktları paylaşmaq olmadı"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Sevdiyiniz kontaktları paylaşın"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Bütün kontaktları paylaşın"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kontaktları paylaşmaq uğursuz oldu."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Bölüşmək üçün kontakt yoxdur."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Göstərilməli kontaktlar"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Göstəriləsi kontaktlar"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Fərdiləşdirilmiş görünüşü müəyyən edin"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Görünüşü fərdiləşdirin"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Yadda saxlayın"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Kontakt axtarın"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritlər"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Kontakt yoxdur."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Müntəzəmləri təmizləyin"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM kart seçin"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Hesabları idarə edin"</string>
     <string name="menu_import" msgid="6107961135813836467">"İmport edin"</string>
     <string name="menu_export" msgid="2658783911863503902">"Eksport edin"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Bloklanmış nömrələr"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> vasitəsilə <xliff:g id="DATE">%1$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"axtarışı dayandırın"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Axtarışı təmizləyin"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Kontakt göstərilmə seçimləri"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Hesab"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Həmişə bu zənglər üçün istifadə edin"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Çağrı üçün SIM:"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Qeyd ilə zəng edin"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Zəng ilə göndərmək üçün qeyd yazın..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"GÖNDƏRİN &amp; ZƏNG EDİN"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> oxunmamış element. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> oxunmamış element. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Quruluş versiyası"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Mənbə lisenziyalarını açın"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Açıq mənbə proqramı üçün lisenziya detalları"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Silin"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellips"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> saniyə"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> dəq <xliff:g id="SECONDS">%s</xliff:g> san"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> saat <xliff:g id="MINUTES_1">%s</xliff:g> dəqiqə <xliff:g id="SECONDS">%s</xliff:g> saniyə"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> dəq <xliff:g id="SECONDS">%2$s</xliff:g> san"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> saat <xliff:g id="MINUTES_1">%2$s</xliff:g> dəqiqə <xliff:g id="SECONDS">%3$s</xliff:g> saniyə"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Bu qısayol deaktiv edildi"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt silindi"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"İmport"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Bağlantı yoxdur"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Daha çox göstərin"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM kartın importu tamamlandı"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"İmport alınmadı"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontaktları SIM kartdan import etmək olmadı"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM import edilir"</string>
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 62f283a..f7b7881 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Контакти"</string>
     <string name="contactsList" msgid="8661624236494819731">"Контакти"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Добавяне на контакт"</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="shortcutActivityTitle" msgid="1504383567778497348">"Избиране на контакт"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Добавяне към контакта"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Избор на контакт"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Избиране"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Създайте нов контакт"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Подробности за контакта"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Изтриване"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Промяна на снимката"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Създаване на пряк път"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Обаждане на контакт"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Изпращaне на SMS на контакт"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Разделяне"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Премахване на контакти"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Преименуване на етикета"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Избор на контакти"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Добавяне на контакти"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Премахване от етикета"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Добавяне на контакт"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Създаване на ново…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Създаване на етикет"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Искате ли да разделите този контакт на няколко?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Разделяне"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Искате ли да запазите вече направените от вас промени и да разделите този контакт на няколко?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Запазване"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Свързване на контактите"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Изберете контакта, който искате да свържете с/ъс <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Свързахте <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> контакт</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> контакта · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> контакт · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> контакта · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> контакт · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"От Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"От <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Изтриването на този контакт ще премахне подробностите от няколко профила."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Да се изтрие ли този контакт?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Изтриване"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Отхвърляне на промените"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Контактът не съществува."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контактът е добавен към началния екран."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Добавихте <xliff:g id="NAME">%s</xliff:g> към началния екран."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Създаване на нов контакт"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Създаване на нов контакт"</string>
     <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="2228592924476426108">"Списъкът ви с контакти е празен"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Няма етикети."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Необходим ви е профил, за да създавате групи."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Няма контакти с този етикет"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"В този профил няма контакти"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Списъкът ви с контакти е празен"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"При запазването на контакта възникна грешка"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Промените в снимката на контакта не можаха да бъдат запазени"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Зареждането на етикета не бе успешно"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Етикетът е запазен."</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Етикетът бе изтрит"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Етикетът бе създаден"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Етикетът не може да бъде създаден"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Изпращане на съобщение"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Избиране на контакти"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Изпращане"</string>
-    <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" 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" 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="5948889261993124839">"Всички"</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_plus_button" msgid="515164827856229880">"плюс"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> от <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контакта"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Имена на контактите ви"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Име на етикета"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"Профил в <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Етикет"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Промяна"</string>
-    <string name="description_star" msgid="2605854427360036550">"любимо"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Редактиране на контакта"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Отказ"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Назад"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"затваряне"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Да се свърже ли текущият контакт с избрания?"</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="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="7122002148518724139">"Включване на годината"</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="4347232421410561500">"Добавяне на профил"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Импортиране"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Създаване на ново…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Отхвърляне"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Отказ"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Да се отхвърли ли персонализирането?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Търсене в контактите"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Премахване на контакти"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Моят локален потр. профил"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Потр. ми профил <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Показват се всички контакти"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Погрижете се за безопасността на контактите си, ако загубите своя телефон: синхронизирайте с онлайн услуга."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Добавяне на профил"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Отделете малко време и добавете профил, чрез който ще се създават резервни копия на контактите ви в Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Новите контакти ще се запазват в/ъв <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Изберете стандартен профил за новите контакти:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Преглед на по-малко"</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="288549957278065542">"Създава се лично копие..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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">"Незабавно съобщение"</string>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"Скорошен SMS. „<xliff:g id="MESSAGE_BODY">%1$s</xliff:g>“ от <xliff:g id="PHONE_NUMBER">%2$s</xliff:g> на <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"Скорошно обаждане (<xliff:g id="CALL_TYPE">%1$s</xliff:g>) от <xliff:g id="PHONE_NUMBER">%2$s</xliff:g> на <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Още полета"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Промяна на снимката на контакта"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Добавяне на снимка на контакта"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Отварянето на редактора не бе успешно."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Запазва се във:"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Данните за контакта от <xliff:g id="ACCOUNT">%s</xliff:g> не могат да се редактират"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Понастоящем се запазва в профила <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Докоснете двукратно, за да изберете друг."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Свързани контакти (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Свързан контакт</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> свързани контакта"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"СВЪРЗВАНЕ НА КОНТАКТИТЕ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ОТКАЗ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> възможни дубликата</item>
-      <item quantity="one">1 възможен дубликат</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> свързани контакта</item>
-      <item quantity="one">1 свързан контакт</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Този контакт"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Възможни дубликати"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Тези контакти може да са един и същи човек. Можете да ги свържете в един."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Свързани контакти"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"От профилите ви"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Избиране на снимка"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"От <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Изтриване на <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Изтриване на <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Изтриване на <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Снимката от <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> е без отметка"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Снимката от <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> е с отметка"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Неизбрана снимка от неизвестен профил"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Избрана снимка от неизвестен профил"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Предложения"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Ново"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Отваряне на слоя за навигация"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Директория"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Служебен указател"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Всички контакти"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Намерени са повече от <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Бърз контакт за <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Няма име)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Често търсени"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Преглед на контакта"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Всички контакти с телефонни номера"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Контакти в служебния потребителски профил"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Актуализации"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM карта"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Име"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Псевдоним"</string>
-    <string name="full_name" msgid="6602579550613988977">"Име"</string>
     <string name="name_given" msgid="4280790853455320619">"Собствено име"</string>
     <string name="name_family" msgid="7466985689626017037">"Фамилно име"</string>
     <string name="name_prefix" msgid="59756378548779822">"Обръщение"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Имейл до <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Изпращане на имейл"</string>
     <string name="postal_street" msgid="8133143961580058972">"Улица"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"П.К."</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Квартал"</string>
     <string name="postal_city" msgid="6597491300084895548">"Град"</string>
     <string name="postal_region" msgid="6045263193478437672">"Щат"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Пощенски код"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Още групи..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Ако синхронизирането на „<xliff:g id="GROUP">%s</xliff:g>“ спре, то ще спре и за негрупираните контакти."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Опциите за показване се запазват..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Готово"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Отказ"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Персонализиран изглед"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Запазване на импортираните контакти във:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM карта"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Да се анулира ли експортирането на <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Импорт./експорт. не можа да се анулира"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Неизвестна грешка."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"„<xliff:g id="FILE_NAME">%s</xliff:g>“ не можа да се отвори: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"„<xliff:g id="FILE_NAME">%1$s</xliff:g>“ не можа да се отвори: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Експортирането не можа да започне: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Няма контакт, позволяващ експортиране."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Деактивирахте задължително разрешение."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Възникна грешка при експортирането: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Изисканото име на файла е твърде дълго („<xliff:g id="FILENAME">%s</xliff:g>“)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O грешка"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Няма достатъчно памет. Файлът може да е твърде голям."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"vCard не можа да бъде анализирана по неочаквана причина."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Форматът не се поддържа."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Метаинформацията от даден/и vCard файл/ове не можа да бъде събрана."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Един или повече файла не можаха да бъдат импортирани (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Експортирането на <xliff:g id="FILENAME">%s</xliff:g> завърши."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Експортирането на контактите завърши."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Експортирането на контактите завърши. Кликнете върху известието, за да ги споделите."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Експортиране на данни за контакти"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Данните за контактите се експортират."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Информацията за базата от данни не можа да бъде получена."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Няма контакти, позволяващи експортиране. Ако в телефона си имате контакти, е възможно някои доставчици на данни да не позволяват експортирането им извън него."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Няма контакти, позволяващи експортиране."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Създателят на vCard не се стартира правилно."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Не се експортира"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Данните за контакта не бяха експортирани.\nПричина: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> се импортира"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Данните не можаха да бъдат прочетени"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Четенето на данни от vCard е анулирано"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Импортирането на vCard <xliff:g id="FILENAME">%s</xliff:g> завърши"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Импортирането на <xliff:g id="FILENAME">%s</xliff:g> е анулирано"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ще се импортира скоро."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Файлът ще се импортира скоро."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Заявката за импортиране на vCard бе отхвърлена. Опитайте отново по-късно."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> ще се експортира скоро."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Файлът ще бъде експортиран скоро."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Контактите ще бъдат експортирани скоро."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Заявката за експортиране на vCard бе отхвърлена. Опитайте отново по-късно."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"контакт"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard се кешира/т във временно локално хранилище. Самото импортиране ще започне скоро."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard не можа да бъде импортирана."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Контакт: Получ. чрез NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Да се експортират ли контактите?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Кешира се"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Импортира се <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Импортира се <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Експорт като .vcf файл"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Сортиране по"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Собствено име"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Моята информация"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Настройте потребителския си профил"</string>
     <string name="setting_about" msgid="7014388749752042863">"Всичко за Контакти"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Споделяне на видимите контакти"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Споделянето на видимите контакти не бе успешно."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Споделяне на любимите контакти"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Споделяне на всички контакти"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Споделянето на контактите не бе успешно."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Няма контакти за споделяне."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Контакти за показване"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Контакти за показване"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Определяне на персонализирания изглед"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Персонализиране на изгледа"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Запазване"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Търсете контакти"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Любими"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Няма контакти."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Изчистване на често търсените"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Избиране на SIM карта"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Управление на профилите"</string>
     <string name="menu_import" msgid="6107961135813836467">"Импортиране"</string>
     <string name="menu_export" msgid="2658783911863503902">"Експортиране"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Блокирани номера"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> чрез <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"спиране на търсенето"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Изчистване на търсенето"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Опции за показване на контактите"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Профил"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Винаги да се използва за обаждания"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Обаждане чрез"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Обаждане, включващо бележка"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Напишете бележка, която да се изпрати с обаждането…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ИЗПРАЩАНЕ И ОБАЖДАНЕ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочетени елемента. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> непрочетен елемент. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Версия"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Лицензи за отворен код"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Подробности за лицензите на софтуера с отворен код"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Изтриване"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Многоточие"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ч <xliff:g id="MINUTES_1">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мин <xliff:g id="SECONDS">%2$s</xliff:g> сек"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ч <xliff:g id="MINUTES_1">%2$s</xliff:g> мин <xliff:g id="SECONDS">%3$s</xliff:g> сек"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Този пряк път е деактивиран"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Контактът бе премахнат"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Импортиране"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Няма връзка"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM карта"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Показване на още"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Импортирането от SIM картата завърши"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Импортирането не бе успешно"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Контактите не можаха да се импортират от SIM картата"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Импортира се от SIM картата"</string>
 </resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 6aa57bf..c517d45 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"পরিচিতিগুলি"</string>
     <string name="contactsList" msgid="8661624236494819731">"পরিচিতিগুলি"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"পরিচিতি যোগ করুন"</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="shortcutActivityTitle" msgid="1504383567778497348">"পরিচিতি বেছে নিন"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"পরিচিতিতে যোগ করুন"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"একটি পরিচিতি বেছে নিন"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"নির্বাচন"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"নতুন পরিচিতি তৈরি করুন"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"পরিচিতির বিবরণগুলি"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"মুছুন"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"ফটো পরিবর্তন করুন"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"শর্টকাট তৈরি করুন"</string>
-    <string name="menu_call" msgid="3992595586042260618">"পরিচিতিকে কল করুন"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"পরিচিতিকে পাঠ্য বার্তা পাঠান"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"লিঙ্কমুক্ত করুন"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"পরিচিতিগুলি সরান"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"লেবেলের পুনঃনামকরণ করুন"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"পরিচিতিগুলিকে নির্বাচন করুন"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"পরিচিতিগুলি যোগ করুন"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"লেবেল থেকে সরান"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"পরিচিতি যোগ করুন"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"নতুন তৈরি করুন…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"লেবেল তৈরি করুন"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"এই পরিচিতিটিকে একাধিক পরিচিতি থেকে লিঙ্কমুক্ত করবেন?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"লিঙ্কমুক্ত করুন"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"আপনি কি আপনার ইতিমধ্যে করা পরিবর্তনগুলি সংরক্ষণ এবং এই পরিচিতিটিকে একাধিক পরিচিতি থেকে লিঙ্কমুক্ত করতে চান?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"সংরক্ষণ করুন"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"পরিচিতিগুলি লিঙ্ক করুন"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"যে পরিচিতিটিকে <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> লিঙ্ক করা হয়েছে"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>টি পরিচিতি</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g>টি পরিচিতি · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g>টি পরিচিতি · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g>টি পরিচিতি · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g>টি পরিচিতি · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google থেকে"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> থেকে"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"এই পরিচিতিটি মোছা হলে সেটি একাধিক অ্যাকাউন্ট থেকে বিশদ বিবরণ মুছবে৷"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"এই পরিচিতিটি মুছবেন?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"মুছুন"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"পরিবর্তনগুলি খারিজ করুন"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"এই পরিচিতিটি বিদ্যমান নয়৷"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"হোম স্ক্রীনে পরিচিতি যোগ করা হযেছে৷"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"হোম স্ক্রীনে <xliff:g id="NAME">%s</xliff:g> যোগ করা হয়েছে৷"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"নতুন পরিচিতি তৈরি করুন"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"নতুন পরিচিতি তৈরি করুন"</string>
     <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="2228592924476426108">"আপনার পরিচিতির তালিকা খালি"</string>
-    <string name="noGroups" msgid="4607906327968232225">"কোনো লেবেল নেই।"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"গোষ্ঠীগুলি তৈরি করার জন্য আপনার একটি অ্যাকাউন্টের প্রয়োজন৷"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"এই লেবেলে কোনো পরিচিতি নেই"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"এই অ্যাকাউন্টে কোনো পরিচিতি নেই"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"আপনার পরিচিতির তালিকা খালি"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"পরিচিতি সংরক্ষণ করার সময় ত্রুটি"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"পরিচিতির ফটোয় করা পরিবর্তনগুলি সংরক্ষণ করা গেল না"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"লেবেল লোড করা গেল না"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"লেবেল সংরক্ষিত হয়েছে"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"লেবেল মুছে ফেলা হয়েছে"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"লেবেল তৈরি করা হয়েছে"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"লেবেল তৈরি করা গেল না"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"বার্তা পাঠান"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"পরিচিতিগুলি বেছে নিন"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"পাঠান"</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="5948889261993124839">"সমস্ত"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"লেবেলের নাম"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> অ্যাকাউন্ট"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"লেবেল"</string>
-    <string name="change_photo" msgid="8530597935483526383">"পরিবর্তন"</string>
-    <string name="description_star" msgid="2605854427360036550">"পছন্দসই"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"পরিচিতি সম্পাদনা করুন"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"বাতিল করুন"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"ফিরুন"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"বন্ধ করুন"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"নির্বাচিত পরিচিতির সঙ্গে বর্তমান পরিচিতিটি লিঙ্ক করবেন?"</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="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="7122002148518724139">"বছর অন্তর্ভুক্ত করুন"</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="4347232421410561500">"অ্যাকাউন্ট যোগ করুন"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"আমদানি করুন"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"নতুন তৈরি করুন…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"বাতিল করুন"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"বাতিল করুন"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"কাস্টমাইজেশান বাতিল করতে চান?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"পরিচিতিগুলি খুঁজুন"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"পরিচিতিগুলি সরান"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"আমার স্থানীয় প্রোফাইল"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"আমার <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> প্রোফাইল"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"সমস্ত পরিচিতি দেখানো হচ্ছে"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"আপনার ফোন হারিয়ে গেলেও আপনার পরিচিতিগুলিকে নিরাপদ রাখুন: একটি অনলাইন পরিষেবার সাথে সিংক্রোনাইজ করুন৷"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"একটি অ্যাকাউন্ট যোগ করুন"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"কয়েক মিনিট সময় দিয়ে একটি অ্যাকাউন্ট যোগ করুন যেটি Google এ আপনার পরিচিতিগুলির ব্যাক আপ নেবে৷"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"নতুন পরিচিতিগুলি <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> এ সংরক্ষণ করা হবে৷"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"নতুন পরিচিতিগুলির জন্য একটি ডিফল্ট অ্যাকাউন্ট বেছে নিন:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"আরো কম"</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="288549957278065542">"একটি ব্যক্তিগত অনুলিপি তৈরি করা হচ্ছে…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"সাম্প্রতিক sms৷ <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>৷ <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>৷ <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"সাম্প্রতিক কল৷ <xliff:g id="CALL_TYPE">%1$s</xliff:g>৷ <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>৷ <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"আরো ফিল্ড"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"পরিচিতির ফটো পরিবর্তন করুন"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"পরিচিতির ফটো যোগ করুন"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"সম্পাদক খোলা গেল না৷"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"এতে সংরক্ষণ করা হচ্ছে"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> এর থেকে আসা পরিচিতির তথ্য সম্পাদনযোগ্য নয়"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"বর্তমানে <xliff:g id="ACCOUNT_NAME">%s</xliff:g> এ সংরক্ষণ করা হচ্ছে৷ কোনো আলাদা অ্যাকাউন্ট চয়ন করার জন্য দুবার আলতো চাপুন৷"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g>টি লিঙ্ক করা পরিচিতি"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"পরিচিতি লিঙ্ক করুন"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"বাতিল করুন"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g>টি সম্ভাব্য সদৃশ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>টি সম্ভাব্য সদৃশ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g>টি লিঙ্ক করা পরিচিতি</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>টি লিঙ্ক করা পরিচিতি</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"এই পরিচিতি"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"সম্ভাব্য সদৃশগুলি"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"এই পরিচিতিগুলি একই ব্যক্তির হতে পারে৷ আপনি সেগুলিকে একটি একক পরিচিতি হিসাবে লিঙ্ক করতে পারবেন৷"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"লিঙ্ক করা পরিচিতিগুলি"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"আপনার অ্যাকাউন্টগুলি থেকে"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"ফটো বেছে নিন"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> থেকে"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> মুছুন"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> মুছুন"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> মুছুন"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> এর থেকে ফটো পরীক্ষা করা হয়নি"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> এর থেকে ফটো পরীক্ষা করা হয়েছে"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"অজানা অ্যাকাউন্টের ফটোতে টিক চিহ্ন দেওয়া হয়নি"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"অজানা অ্যাকাউন্টের ফটোতে টিক চিহ্ন দেওয়া হয়েছে"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"প্রস্তাবনা"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"নতুন"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"নেভিগেশান ড্রয়ার খুলুন"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"ডিরেক্টরি"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"কাজের সংগ্রহ"</string>
     <string name="local_search_label" msgid="2551177578246113614">"সকল পরিচিতি"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g>টির থেকে বেশি খুঁজে পাওয়া গিয়েছে৷"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> এর জন্য দ্রুত পরিচিতি"</string>
     <string name="missing_name" msgid="8745511583852904385">"(কোনও নাম নেই)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"ঘন ঘন যোগাযোগ করা হয়েছে"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"পরিচিতি দেখুন"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"ফোন নম্বর সহ সমস্ত পরিচিতি"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"কর্মস্থলের প্রোফাইলের পরিচিতিগুলি"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"আপডেটগুলি দেখুন"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"নাম"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ডাকনাম"</string>
-    <string name="full_name" msgid="6602579550613988977">"নাম"</string>
     <string name="name_given" msgid="4280790853455320619">"প্রথম নাম"</string>
     <string name="name_family" msgid="7466985689626017037">"পদবি"</string>
     <string name="name_prefix" msgid="59756378548779822">"নামের আগের অংশ"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> এ ইমেল পাঠান"</string>
     <string name="email" msgid="5668400997660065897">"ইমেল করুন"</string>
     <string name="postal_street" msgid="8133143961580058972">"রাস্তা"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"পোস্ট বক্স"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"খুব পরিচিত ক্ষেত্র"</string>
     <string name="postal_city" msgid="6597491300084895548">"শহর"</string>
     <string name="postal_region" msgid="6045263193478437672">"রাজ্য"</string>
     <string name="postal_postcode" msgid="572136414136673751">"পিন কোড"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"আরো গোষ্ঠী…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"সমন্বয় থেকে \"<xliff:g id="GROUP">%s</xliff:g>\" সরানো হলে তা সমন্বয় থেকে যেকোনো অগোষ্ঠীবদ্ধ পরিচিতিগুলিকেও সরাবে৷"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"প্রদর্শনের বিকল্পগুলি সংরক্ষণ করা হচ্ছে..."</string>
-    <string name="menu_done" msgid="796017761764190697">"সম্পন্ন হয়েছে"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"বাতিল করুন"</string>
     <string name="listCustomView" msgid="1840624396582117590">"কাস্টমাইজ করা দৃশ্য"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"আমদানি করা পরিচিতিগুলি এতে সংরক্ষণ করুন:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM কার্ড"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> এর রপ্তানি বাতিল করবেন?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard এর আমদানি/রপ্তানি বাতিল করা যায়নি"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"অজানা ত্রুটি৷"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" খোলা যায়নি: <xliff:g id="EXACT_REASON">%s</xliff:g>৷"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" খোলা যায়নি: <xliff:g id="EXACT_REASON">%2$s</xliff:g>৷"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"রপ্তানিকারক শুরু করা যায়নি: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"৷"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"রফতানিযোগ্য কোনো পরিচিতি নেই৷"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"আপনি একটি প্রয়োজনীয় অনুমতি অক্ষম করেছেন৷"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"রপ্তানির সময় একটি ত্রুটি ঘটেছে: \" <xliff:g id="EXACT_REASON">%s</xliff:g> \"৷"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"প্রয়োজনীয় ফাইলের নামটি  (\"<xliff:g id="FILENAME">%s</xliff:g>\") অত্যন্ত দীর্ঘ৷"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ত্রুটি"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"যথেষ্ট মেমরি নেই৷ ফাইলটি খুব বড় হতে পারে৷"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"একটি অপ্রত্যাশিত কারণে vCard পার্জ করা যায়নি৷"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"এই ফর্ম্যাটটি সমর্থিত নয়৷"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"প্রদত্ত vCard ফাইলের(গুলির) মেটা তথ্য সংগ্রহ করা যায়নি৷"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"একটি বা একাধিক (%s) ফাইল আমদানি করা যাবে না৷"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> রপ্তানি করা সম্পন্ন হয়েছে৷"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"পরিচিতি রপ্তানি করা সম্পন্ন হয়েছে৷"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"পরিচিতিগুলি রপ্তানি করা হয়েছে, পরিচিতিগুলিকে শেয়ার করতে বিজ্ঞপ্তিটিতে ক্লিক করুন৷"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"পরিচিতির তথ্য রপ্তানি করা হচ্ছে"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"পরিচিতির ডেটা রপ্তানি করা হচ্ছে৷"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ডেটাবেসের তথ্য পাওয়া যায়নি৷"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"এখানে রপ্তানিযোগ্য কোনো পরিচিতি নেই৷ আপনার ফোনে পরিচিতি থাকলে, কিছু ডেটা সরবরাহকারী আপনার ফোন থেকে সেই পরিচিতিগুলিকে রপ্তানি করা মঞ্জুর নাও করতে পারে৷"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"রপ্তানি করার জন্য কোনো পরিচিতি নেই৷"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard কম্পোজার সঠিকভাবে শুরু করা হয়নি৷"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"রপ্তানি করা যায়নি"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"পরিচিতির তথ্য রপ্তানি করা যায়নি৷\nকারণ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> আমদানি করা হচ্ছে"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard ডেটা পড়া যায়নি"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard ডেটা পড়া বাতিল করা হয়েছে"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> আমদানি করা সমাপ্ত হয়েছে"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> আমদানি করা বাতিল করা হয়েছে"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> শীঘ্রই আমদানি করা হবে৷"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ফাইলটি শীঘ্রই আমদানি করা হবে৷"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard আমদানি করার অনুরোধ প্রত্যাখ্যাত হয়েছে৷ পরে আবার চেষ্টা করুন৷"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> শীঘ্রই রপ্তানি করা হবে৷"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ফাইলটি শীঘ্রই রপ্তানি করা হবে৷"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"পরিচিতিগুলি শীঘ্রই রপ্তানি করা হবে৷"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard রপ্তানি করার অনুরোধ প্রত্যাখ্যাত হয়েছে৷ পরে আবার চেষ্টা করুন৷"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"পরিচিতি"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"স্থানীয় অস্থায়ী সংগ্রহস্থলে vCard(গুলি)কে ক্যাশ করা হচ্ছে৷ প্রকৃত আমদানি শীঘ্রই শুরু হবে৷"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard আমদানি করতে পারা যায় নি৷"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC এর মাধ্যমে পরিচিতি প্রাপ্ত হয়েছে"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"পরিচিতিগুলি রপ্তানি করবেন?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"ক্যাশ করা হচ্ছে"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"আমদানি করা হচ্ছে, <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"আমদানি করা হচ্ছে, <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf ফাইলে রপ্তানি করুন"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"এই অনুসারে সাজান"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"প্রথম নাম"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"আমার তথ্য"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"আপনার প্রোফাইল সেট আপ করুন"</string>
     <string name="setting_about" msgid="7014388749752042863">"পরিচিতি সম্পর্কিত"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"দৃশ্যমান পরিচিতিগুলিকে শেয়ার করুন"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"দৃশ্যমান পরিচিতিগুলি শেয়ার করতে ব্যর্থ হয়েছে৷"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"পছন্দসই পরিচিতিগুলি শেয়ার করুন"</string>
     <string name="share_contacts" msgid="8109287987498711664">"সকল পরিচিতি শেয়ার করুন"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"পরিচিতিগুলিকে শেয়ার করতে ব্যর্থ হয়েছে৷"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"শেয়ার করার জন্য কোনো পরিচিতি নেই৷"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"দেখানোর জন্য পরিচিতিগুলি"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"দেখানোর জন্য পরিচিতিগুলি"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"কাস্টমাইজ দৃশ্য নির্ধারণ"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"দর্শন কাস্টমাইজ করুন"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"সংরক্ষণ"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"পরিচিতিগুলি খুঁজুন"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"পছন্দসইগুলি"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"কোনো পরিচিতি নেই৷"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"পুনরাবৃত্তি সাফ করুন"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"সিম কার্ড নির্বাচন করুন"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"অ্যাকাউন্টগুলি পরিচালনা করুন"</string>
     <string name="menu_import" msgid="6107961135813836467">"আমদানি করুন"</string>
     <string name="menu_export" msgid="2658783911863503902">"রপ্তানি করুন"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"অবরোধ করা নম্বরগুলি"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> এর মাধ্যমে <xliff:g id="DATE">%1$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"অনুসন্ধান বন্ধ করুন"</string>
     <string name="description_clear_search" msgid="688023606766232904">"অনুসন্ধান সাফ করুন"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"পরিচিতি প্রদর্শনের বিকল্পগুলি"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"অ্যাকাউন্ট"</string>
     <string name="set_default_account" msgid="4311613760725609801">"কলের জন্য সবসময় এটি ব্যবহার করুন"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"এর মাধ্যমে কল করুন"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"একটি নোট সহ কল করুন"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"কলের সাথে পাঠানোর জন্য একটি নোট লিখুন…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"পাঠান এবং কল করুন"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>৷ <xliff:g id="COUNT_3">%2$d</xliff:g>টি অপঠিত আইটেম৷ </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>৷ <xliff:g id="COUNT_3">%2$d</xliff:g>টি অপঠিত আইটেম৷ </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"বিল্ডের সংস্করণ"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"মুক্ত উৎস লাইসেন্স"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"মুক্ত উৎস সফ্টওয়্যারের লাইসেন্স বিবরণ"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"মুছুন"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"এলিপসিস"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> সেকেন্ড"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> মিনিট <xliff:g id="SECONDS">%s</xliff:g> সেকেন্ড"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ঘণ্টা <xliff:g id="MINUTES_1">%s</xliff:g> মিনিট <xliff:g id="SECONDS">%s</xliff:g> সেকেন্ড"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> মিনিট <xliff:g id="SECONDS">%2$s</xliff:g> সেকেন্ড"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ঘণ্টা <xliff:g id="MINUTES_1">%2$s</xliff:g> মিনিট <xliff:g id="SECONDS">%3$s</xliff:g> সেকেন্ড"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"এই শর্টকাটটি অক্ষম করা হয়েছে"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"পরিচিতিটি সরানো হয়েছে"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"আমদানি করুন"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"কোনো সংযোগ নেই"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"আরো দেখান"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM কার্ড আমদানি করা সমাপ্ত হয়েছে"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"আমদানি ব্যর্থ হয়েছে"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM কার্ড থেকে পরিচিতিগুলি আমদানি করা গেল না"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM আমদানি করা হচ্ছে"</string>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index f9e4297..0e5c7df 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contactes"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contactes"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Afegeix un contacte"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Contacte"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Marcatge directe"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Missatge directe"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Tria una drecera de contacte"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Tria un número per trucar-hi"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Número per enviar un missatge"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Tria un contacte"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Afegeix al contacte"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Tria un contacte"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Selecciona"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Crea un contacte"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Dades de contacte"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Quant a"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Actualitz."</string>
     <string name="searchHint" msgid="8482945356247760701">"Cerca als contactes"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Visualitza el contacte"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Afegeix als preferits"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Suprimeix dels preferits"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Eliminat dels preferits"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Crea una drecera"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Truca al contacte"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Envia un SMS al contacte"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Desenllaça"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Suprimeix els contactes"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Canvia el nom de l\'etiqueta"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Selecciona contactes"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Afegeix els contactes"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Suprimeix de l\'etiqueta"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Afegeix un contacte"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Crea…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Crea una etiqueta"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Vols desenllaçar aquest contacte en diversos contactes?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desenllaça"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Vols desar els canvis que ja has aplicat i desenllaçar aquest contacte en diversos contactes?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Desa"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Enllaça els contactes"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Tria el contacte que vols enllaçar 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> s\'ha enllaçat"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacte</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contactes · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacte · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contactes · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contacte · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"De Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"De <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Si suprimeixes aquest contacte, se suprimirà informació de diversos comptes."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Vols suprimir aquest contacte?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Suprimeix"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Descarta els canvis"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"El contacte no existeix."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"S\'ha afegit el contacte a la pantalla d\'inici."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"S\'ha afegit <xliff:g id="NAME">%s</xliff:g> a la pantalla d\'inici."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Crea un contacte"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Crea un contacte"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"No hi ha imatges disponibles a la tauleta."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"No hi ha cap imatge disponible al telèfon."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto de contacte"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nom de camp personalitzat"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Envia les trucades directament a la bústia de veu"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Suprimeix la foto"</string>
     <string name="noContacts" msgid="2228592924476426108">"La llista de contactes està buida"</string>
-    <string name="noGroups" msgid="4607906327968232225">"No hi ha cap etiqueta."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Per crear grups necessites un compte."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"No hi ha cap contacte amb aquesta etiqueta"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"No hi ha cap contacte en aquest compte"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"La llista de contactes està buida"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"S\'ha produït un error en desar el contacte"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"No s\'han pogut desar els canvis de la foto de contacte"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"L\'etiqueta no s\'ha pogut carregar"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"L\'etiqueta s\'ha desat"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"L\'etiqueta s\'ha suprimit"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"L\'etiqueta s\'ha creat"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"L\'etiqueta no es pot crear"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Envia un missatge"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Tria contactes"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Envia"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactes amb número de telèfon</item>
-      <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" 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" 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="5948889261993124839">"Tots"</string>
-    <string name="callBack" msgid="5498224409038809224">"Truca"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Torna a trucar"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Retorna la trucada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voleu afegir \"<xliff:g id="EMAIL">%s</xliff:g>\" als contactes?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"més"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactes"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Noms dels contactes"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"No s\'ha trobat cap aplicació per processar aquesta acció."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Fes clic per tornar a la pantalla anterior"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Afegeix un número de telèfon"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Afegeix una adreça electrònica"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nom de l\'etiqueta"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Xat de veu"</string>
     <string name="video_chat" msgid="1872255818640336072">"Xat de vídeo"</string>
-    <string name="connections" msgid="8098440723172028350">"Connexions"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Afegeix una connexió"</string>
-    <string name="recent" msgid="2659189233141493004">"Recent"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Actualitzac. recents"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Compte de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Fes una foto"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Fes una foto nova"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Tria una foto"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Selecciona una foto nova"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Selecciona-ho tot"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Anul·la tota la selecció"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Afegeix-ne un"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Afegeix organització"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Canvia"</string>
-    <string name="description_star" msgid="2605854427360036550">"preferit"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Edita contacte"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancel·la"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Enrere"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"tanca"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vols enllaçar 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Afegeix a Els meus contactes"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Directori <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Configuració"</string>
     <string name="menu_settings" msgid="377929915873428211">"Configuració"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Afegeix als contactes"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Afegeix al contacte"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Tanca"</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="7122002148518724139">"Inclou l\'any"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Contacte"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"S\'està carregant…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crea un contacte"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Afegeix un compte"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importa"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Crea…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descarta"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancel·la"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Vols descartar les personalitzacions?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Cerca als contactes"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Suprimeix els contactes"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"El meu perfil local"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"El meu perfil de <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"S\'estan mostrant tots els contactes"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantén els contactes segurs encara que perdis el telèfon: sincronitza\'ls amb un servidor en línia."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Afegeix compte"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Dedica un minut a afegir un compte per crear una còpia de seguretat dels contactes a Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Els contactes nous es desaran a <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Tria un compte predeterminat per als contactes nous:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Mostra\'n menys"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Recents"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Quant a"</string>
-    <string name="send_message" msgid="8938418965550543196">"Envia un missatge"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"S\'està creant una còpia personal..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Demà"</string>
     <string name="today" msgid="8041090779381781781">"Avui"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Avui a les <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Demà a les <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Esdeveniment sense títol)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Estableix"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Lloc web"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Esdeveniment"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relació"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Compte"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nom"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Adreça electrònica"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telèfon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Fes clic per desplegar l\'editor de contactes."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Fes clic per replegar l\'editor de contactes."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"indicacions cap a la ubicació"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS recent. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Fes clic per respondre."</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS recent. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Fes clic per respondre."</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrant"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"sortints"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdudes"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"Trucada recent. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Més camps"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Canvia la foto del contacte"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Afegeix una foto al contacte"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"No s\'ha pogut obrir l\'editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Es desa a"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"La informació de contacte de <xliff:g id="ACCOUNT">%s</xliff:g> no es pot editar"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Actualment es desa a <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Fes doble toc per triar un altre compte."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Contactes enllaçats (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Contacte enllaçat</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contactes enllaçats"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ENLLAÇA ELS CONTACTES"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCEL·LA"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> possibles duplicats</item>
-      <item quantity="one">1 possible duplicat</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">S\'han enllaçat <xliff:g id="COUNT">%d</xliff:g> contactes</item>
-      <item quantity="one">S\'ha enllaçat 1 contacte</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Aquest contacte"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possibles duplicats"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"És possible que aquests contactes corresponguin a la mateixa persona. Els pots enllaçar i crear un contacte únic."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Contactes enllaçats"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Dels teus comptes"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Tria una foto"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Del compte <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Suprimeix <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Suprimeix <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Suprimeix <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto del compte <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> no seleccionada"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto del compte <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> seleccionada"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"No s\'ha seleccionat la foto d\'un compte desconegut"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"S\'ha seleccionat la foto d\'un compte desconegut"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Suggeriments"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nou"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Obre el tauler de navegació"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">" Directori"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Directori de la feina"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Tots els contactes"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Se n\'han trobat més de <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Contacte ràpid per a <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Sense nom)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactats sovint"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Mostra el contacte"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Tots els contactes amb números de telèfon"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Contactes del perfil professional"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Mostra actualitzac."</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nom"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Àlies"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nom"</string>
     <string name="name_given" msgid="4280790853455320619">"Nom"</string>
     <string name="name_family" msgid="7466985689626017037">"Cognoms"</string>
     <string name="name_prefix" msgid="59756378548779822">"Prefix del nom"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Envia un correu electrònic a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Envia un correu electrònic"</string>
     <string name="postal_street" msgid="8133143961580058972">"Carrer"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Apartat postal"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Barri"</string>
     <string name="postal_city" msgid="6597491300084895548">"Ciutat"</string>
     <string name="postal_region" msgid="6045263193478437672">"Estat"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Codi postal"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Més grups..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Si s\'elimina \"<xliff:g id="GROUP">%s</xliff:g>\" de la sincronització, també se n\'eliminaran els contactes no agrupats."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"S\'estan desant les opcions de visualització..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Fet"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Cancel·la"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Visualització personalitzada"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Desa els contactes importats a:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Targeta SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vols cancel·lar l\'exportació de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"No es pot cancel·lar la imp./exp. vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"S\'ha produït un error desconegut."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"No s\'ha pogut obrir \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"No s\'ha pogut obrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"No s\'ha pogut iniciar l\'exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"No hi ha cap contacte que es pugui exportar."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Has desactivat un permís obligatori."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"S\'ha produït un error durant l\'exportació: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"El nom de fitxer obligatori és massa llarg (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Error d\'E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"No hi ha prou memòria. És possible que el fitxer sigui massa gran."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"No s\'ha pogut analitzar la vCard a causa d\'un motiu inesperat."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"No s\'admet aquest format."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"No s\'ha pogut recopilar metainformació dels fitxers de la vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"No s\'ha pogut importar un dels fitxers com a mínim (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exportació de <xliff:g id="FILENAME">%s</xliff:g> finalitzada."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"S\'han acabat d\'exportar els contactes"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"S\'han acabat d\'exportar els contactes; fes clic a la notificació per compartir-los."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"S\'estan exportant les dades de contacte"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"S\'estan exportant les dades de contacte."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"No s\'ha pogut obtenir informació de la base de dades."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"No hi ha cap contacte que es pugui exportar. Si en tens algun al telèfon, és possible que hi hagi proveïdors de dades que no permetin que els contactes s\'exportin des del telèfon."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"No hi ha contactes que es puguin exportar."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"No s\'ha iniciat correctament el creador de vCard."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Error en exportar"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"No s\'han exportat les dades de contacte.\nMotiu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"S\'està important <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"No s\'han pogut llegir les dades de vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"S\'ha cancel·lat la lectura de dades de vCard"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importació de vCard <xliff:g id="FILENAME">%s</xliff:g> finalitzada"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"S\'ha cancel·lat la importació de: <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> s\'importarà d\'aquí a una estona."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"D\'aquí a poc s\'importarà el fitxer."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"S\'ha rebutjat la sol·licitud per importar vCard. Torna-ho a provar més tard."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> s\'exportarà en breu."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"El fitxer s\'exportarà aviat."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Aviat s\'exportaran els contactes."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"S\'ha rebutjat la sol·licitud per exportar vCard. Torna-ho a provar més tard."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contacte"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"S\'estan desant els vCard a l\'emmagatzematge temporal local. La importació real començarà aviat."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"No s\'ha pogut importar la vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contac. reb. NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Exportació contactes"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Desament a la memòria cau"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"S\'està important <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"S\'està important <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exporta a un fitxer .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordena per"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nom"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"La meva informació"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Configura el teu perfil"</string>
     <string name="setting_about" msgid="7014388749752042863">"Informació sobre Contactes"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Comparteix els contactes visibles"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"No s\'han pogut compartir els contactes visibles."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Comparteix els contactes preferits"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Comparteix tots els contactes"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"No s\'han pogut compartir els contactes."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"No hi ha cap contacte per compartir."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contactes per mostrar"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactes per mostrar"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Defineix la visualització personalitzada"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Personalitza la visualització"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Desa"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Cerca contactes"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Preferits"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"No hi ha cap contacte."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Esborra els freqüents"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Selecciona una targeta SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Gestiona els comptes"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importa"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exporta"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloquejats"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> mitjançant <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"atura la cerca"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Esborra la cerca"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opcions de visualització de contactes"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Compte"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Utilitza sempre per a les trucades"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Truca amb"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Truca amb una nota"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Escriu una nota per enviar-la juntament amb la trucada…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ENVIA I TRUCA"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> elements no llegits. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> element no llegit. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versió de la compilació"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Llicències de programari lliure"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalls de la llicència de programari lliure"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Suprimeix"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Punts suspensius"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> hr <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> hr <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Aquesta drecera s\'ha desactivat"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"El contacte s\'ha suprimit"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importa"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Sense connexió"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Mostra més"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importació de la targeta SIM completada"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"La importació ha fallat"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"No s\'han pogut importar els contactes de la targeta SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"S\'estan important els contactes de la SIM"</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 674e45e..4509b03 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontakty"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontakty"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Přidat kontakt"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Přímé vytáčení"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Přímá zpráva"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Výběr zkratky kontaktu"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Výběr čísla pro hovor"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Výběr čísla pro zprávu"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Vybrat kontakt"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Přidat do kontaktu"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Vyberte kontakt"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Vybrat"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Vytvořte nový kontakt"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Kontaktní údaje"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"O kontaktu"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Aktualizace"</string>
     <string name="searchHint" msgid="8482945356247760701">"Vyhledat kontakty"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Zobrazit kontakt"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Přidat k oblíbeným položkám"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Odebrat z oblíbených položek"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Odstraněno z oblíbených"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Vytvořit zkratku"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Volat kontakt"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Odeslat zprávu kontaktu"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Zrušit propojení"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Odebrat kontakty"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Přejmenovat štítek"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Vybrat kontakty"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Přidat kontakty"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Odebrat ze štítku"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Přidat kontakt"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Nový štítek…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Vytvořit štítek"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Chcete propojení kontaktů zrušit a vytvořit několik samostatných kontaktů?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Zrušit propojení"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Chcete uložit provedené změny, zrušit propojení kontaktu a vytvořit několik samostatných kontaktů?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Uložit"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Propojit kontakty"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Vyberte kontakt, který chcete propojit 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Kontakt <xliff:g id="NAME">%s</xliff:g> byl propojen"</string>
@@ -87,10 +78,10 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> kontakty · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="many"><xliff:g id="COUNT_2">%d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontaktů · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakty · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktů · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Z účtu Googlu"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Z účtu služby <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -107,21 +98,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Smazáním tohoto kontaktu smažete podrobnosti z více účtů."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Chcete tento kontakt smazat?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Smazat"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Zahodit změny"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt neexistuje."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt byl přidán na plochu."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> byl přidán na plochu."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Vytvořit nový kontakt"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Vytvořit nový kontakt"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"V tabletu nejsou žádné fotografie."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"V telefonu nejsou žádné fotografie."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografie kontaktu"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Vlastní název štítku"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Přesměrovat hovory přímo do hlasové schránky"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Odebrat fotografii"</string>
     <string name="noContacts" msgid="2228592924476426108">"Váš seznam kontaktů je prázdný"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Žádné štítky."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"K vytváření skupin potřebujete účet."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Žádné kontakty s tímto štítkem"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"V tomto účtu nejsou uloženy žádné kontakty"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Váš seznam kontaktů je prázdný"</string>
@@ -134,7 +119,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kontakt se nepodařilo uložit"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Změny fotky kontaktu se nepodařilo uložit"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Štítek se nepodařilo načíst"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Štítek byl uložen"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Štítek byl smazán"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Štítek byl vytvořen"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Štítek se nepodařilo vytvořit"</string>
@@ -149,35 +133,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Poslat zprávu"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Vybrat kontakty"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Odeslat"</string>
-    <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" 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" 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="5948889261993124839">"Vše"</string>
-    <string name="callBack" msgid="5498224409038809224">"Zavolat zpět"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Zavolat znovu"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Zpětné volání"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Chcete přidat „<xliff:g id="EMAIL">%s</xliff:g>“ do kontaktů?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktů"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Jména vašich kontaktů"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Aplikace potřebná k provedení této akce nebyla nalezena."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknutím se vrátíte na předchozí obrazovku"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Přidat telefonní číslo"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Přidat e-mail"</string>
@@ -198,52 +156,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Název štítku"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Hlasový chat"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videochat"</string>
-    <string name="connections" msgid="8098440723172028350">"Spojení"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Přidat spojení"</string>
-    <string name="recent" msgid="2659189233141493004">"Nedávné"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Poslední aktualizace"</string>
     <string name="account_type_format" msgid="718948015590343010">"Zdroj kontaktu: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Účet <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Vyfotit"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Pořídit novou fotografii"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Vybrat fotku"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Vybrat novou fotku"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Vybrat vše"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Zrušit výběr všech"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Přidat nové"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Přidat organizaci"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Štítek"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Změnit"</string>
-    <string name="description_star" msgid="2605854427360036550">"oblíbené"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Upravit kontakt"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Zrušit"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Zpět"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zavřít"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Propojit 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Přidat do skupiny Moje kontakty"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Adresář <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Nastavení"</string>
     <string name="menu_settings" msgid="377929915873428211">"Nastavení"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Přidat do kontaktů"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Přidat do kontaktu"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Zavřít"</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="7122002148518724139">"Uvést rok"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Načítá se..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Vytvořit nový kontakt"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Přidat účet"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importovat"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Nový štítek…"</string>
@@ -257,14 +191,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Zahodit"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Zrušit"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Zahodit vlastní úpravy?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Vyhledejte kontakty"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Odebrat kontakty"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Můj místní profil"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Můj profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Zobrazují se všechny kontakty"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mějte kontakty v bezpečí, i když telefon ztratíte: synchronizujte je s některou online službou."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Přidat účet"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Přidejte svůj účet a nechte si kontakty zálohovat do Googlu."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nové kontakty se uloží do účtu <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Zvolte výchozí účet pro nové kontakty:"</string>
@@ -283,13 +213,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Zobrazit méně"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Nedávné"</string>
     <string name="about_card_title" msgid="2920942314212825637">"O kartě"</string>
-    <string name="send_message" msgid="8938418965550543196">"Odeslat zprávu"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Vytváření osobní kopie..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Zítra"</string>
     <string name="today" msgid="8041090779381781781">"Dnes"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Dnes v <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Zítra v <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Událost bez názvu)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Nastavit"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Chat"</string>
@@ -299,20 +228,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Web"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Událost"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Vztah"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Účet"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Jméno"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknutím rozbalíte editor kontaktů."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknutím sbalíte editor kontaktů."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"trasy k místům"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"nedávná sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknutím odpovíte"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"nedávná sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknutím odpovíte"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"příchozí"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"odchozí"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"zmeškaný"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"nedávný hovor. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Další pole"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Změnit fotku kontaktu"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Přidat fotku kontaktu"</string>
@@ -320,49 +245,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Editor se nepodařilo otevřít."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Uložit do účtu"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktní údaje z účtu <xliff:g id="ACCOUNT">%s</xliff:g> není možné upravit"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Momentálně se ukládá do účtu <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dvojitým klepnutím můžete vybrat jiný účet."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="few">Propojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="many">Propojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Propojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Propojený kontakt</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Počet propojených kontaktů: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"PROPOJIT KONTAKTY"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ZRUŠIT"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> možné duplicity</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> možné duplicity</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> možných duplicit</item>
-      <item quantity="one">1 možná duplicita</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> propojené kontakty</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> propojeného kontaktu</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> propojených kontaktů</item>
-      <item quantity="one">1 propojený kontakt</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Tento kontakt"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Možná duplicita"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Tyto kontakty možná reprezentují stejného člověka. Můžete je propojit a vytvořit z nich jeden kontakt."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Propojené kontakty"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Z vašich účtů"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Výběr fotky"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Z účtu <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Smazat <xliff:g id="DATA_KIND">%s</xliff:g> (<xliff:g id="DATA_TYPE">%s </xliff:g>)"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Smazat <xliff:g id="DATA_KIND">%2$s</xliff:g> (<xliff:g id="DATA_TYPE">%1$s </xliff:g>)"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Smazat <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotka z účtu <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> není vybrána"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Vybrána fotka z účtu <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Fotka z neznámého účtu nebyla vybrána"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Fotka z neznámého účtu byla vybrána"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Návrhy"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novinka"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Otevřít navigační panel"</string>
@@ -431,11 +320,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Adresář"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Pracovní adresář"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Všechny kontakty"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Nalezeno více kontaktů než <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Rychlý kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Žádné jméno)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Často používané kontakty"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Zobrazit kontakt"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Všechny kontakty s telefonními čísly"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontakty z pracovního profilu"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Zobrazit aktualizace"</string>
@@ -443,7 +330,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Jméno"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Přezdívka"</string>
-    <string name="full_name" msgid="6602579550613988977">"Jméno"</string>
     <string name="name_given" msgid="4280790853455320619">"Jméno"</string>
     <string name="name_family" msgid="7466985689626017037">"Příjmení"</string>
     <string name="name_prefix" msgid="59756378548779822">"Titul před jménem"</string>
@@ -476,8 +362,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Poslat e-mail na adresu <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-mail"</string>
     <string name="postal_street" msgid="8133143961580058972">"Ulice"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Číslo poštovní schránky"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Čtvrť"</string>
     <string name="postal_city" msgid="6597491300084895548">"Město"</string>
     <string name="postal_region" msgid="6045263193478437672">"Stát"</string>
     <string name="postal_postcode" msgid="572136414136673751">"PSČ"</string>
@@ -515,8 +399,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Další skupiny…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Odebráním skupiny <xliff:g id="GROUP">%s</xliff:g> ze synchronizace odeberete ze synchronizace také všechny kontakty mimo skupinu."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Ukládání možností zobrazení…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Hotovo"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Zrušit"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Vlastní zobrazení"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Účet k uložení importovaných kontaktů:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM karta"</string>
@@ -540,18 +422,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Zrušit export souboru <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Import/export vizitky vCard nelze zrušit"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Neznámá chyba."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Soubor <xliff:g id="FILE_NAME">%s</xliff:g> nelze otevřít: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Soubor <xliff:g id="FILE_NAME">%1$s</xliff:g> nelze otevřít: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nelze spustit nástroj pro export: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Žádný kontakt nelze exportovat."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Zakázali jste nutné oprávnění."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Při exportu došlo k chybě: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Požadovaný název souboru (<xliff:g id="FILENAME">%s</xliff:g>) je příliš dlouhý."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Chyba I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Není k dispozici dostatek paměti. Soubor může být příliš velký."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Analýza souboru vCard se z neočekávaných důvodů nezdařila."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formát není podporován."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Informace o metadatech daných souborů vCard se nepodařilo shromáždit."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Jeden nebo více souborů se nepodařilo importovat (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Export souboru <xliff:g id="FILENAME">%s</xliff:g> byl dokončen."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Export kontaktů byl dokončen."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Export kontaktů byl dokončen. Klepnutím na oznámení je můžete sdílet."</string>
@@ -560,29 +438,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Export dat kontaktů"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Probíhá export dat kontaktů."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nepodařilo se získat informace o databázi."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Nelze exportovat žádné kontakty. Pokud máte v telefonu skutečně uložené kontakty, je možné, že některý poskytovatel datových služeb zakázal jejich export mimo telefon."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nemáte žádné kontakty k exportu."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Editor souboru vCard nebyl správně spuštěn."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Export se nezdařil"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Data kontaktů nebyla exportována.\nDůvod: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Probíhá import: <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nepodařilo se přečíst údaje vizitky vCard."</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Čtení dat souboru vCard bylo zrušeno"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Import souboru vCard (<xliff:g id="FILENAME">%s</xliff:g>) byl dokončen"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Import souboru <xliff:g id="FILENAME">%s</xliff:g> byl zrušen."</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Soubor <xliff:g id="FILENAME">%s</xliff:g> bude za okamžik importován."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Soubor bude zakrátko importován."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Požadavek na import souborů vCard byl zamítnut. Zkuste to prosím později."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Soubor <xliff:g id="FILENAME">%s</xliff:g> bude za okamžik exportován."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Soubor bude brzy exportován."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakty budou brzy exportovány."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Požadavek na export souborů vCard byl zamítnut. Zkuste to prosím později."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Načítání souboru vCard do mezipaměti místního dočasného úložiště. Vlastní import bude zahájen v krátké době."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Soubor vCard se nepodařilo importovat."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt přijatý přes NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Exportovat kontakty?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Ukládání do mezipaměti"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Probíhá import: <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Probíhá import: <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exportovat do souboru VCF"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Řadit podle"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Jméno"</string>
@@ -595,8 +469,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Moje údaje"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Nastavit váš profil"</string>
     <string name="setting_about" msgid="7014388749752042863">"O aplikaci Kontakty"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Sdílet viditelné kontakty"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Viditelné kontakty se nepodařilo sdílet."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Sdílet oblíbené kontakty"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Sdílet všechny kontakty"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kontakty se nepodařilo sdílet."</string>
@@ -606,14 +478,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nejsou dostupné žádné kontakty ke sdílení."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakty k zobrazení"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakty k zobrazení"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Nastavit vlastní zobrazení"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Přizpůsobit zobrazení"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Uložit"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Vyhledejte kontakty"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Oblíbené"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Žádné kontakty."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Vymazat často kontaktované os."</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Vybrat SIM kartu"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Spravovat účty"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importovat"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exportovat"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokovaná čísla"</string>
@@ -621,21 +489,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> prostřednictvím služby <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"zastavit vyhledávání"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Vymazat vyhledávání"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Možnosti zobrazení kontaktů"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Účet"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Vždy používat pro hovory"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Volat z účtu"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Volání s poznámkou"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Zadejte poznámku, která se odešle pomocí volání…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ODESLAT A ZAVOLAT"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepřečtené položky. </item>
-      <item quantity="many"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepřečtené položky. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepřečtených položek. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> nepřečtená položka. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Verze sestavení"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licence open source"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Podrobnosti o licencích pro software open source"</string>
@@ -649,8 +509,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Smazat"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Tři tečky"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Tato zkratka byla deaktivována"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt byl odebrán"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importovat"</string>
@@ -675,4 +535,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Nejste připojeni"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM karta"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Zobrazit více"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Import ze SIM karty byl dokončen"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Import se nezdařil"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontakty ze SIM karty se nepodařilo importovat"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importování ze SIM karty"</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 0e6b20f..b65dcbe 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontaktpersoner"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontaktpersoner"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Tilføj kontaktperson"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Direkte opkald"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Direkte besked"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Vælg en kontaktgenvej"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Vælg et nummer at ringe til"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Vælg et nummer"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Vælg kontaktperson"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Føj til kontaktperson"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Vælg en kontaktperson"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Vælg"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Opret ny kontaktperson"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Kontaktoplysninger"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Om"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Opdateringer"</string>
     <string name="searchHint" msgid="8482945356247760701">"Søg i kontakter"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Vis kontakt"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Føj til foretrukne"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Fjern fra foretrukne"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Fjernet fra foretrukne"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Opret genvej"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Ring til kontakt"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Send sms til kontakt"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Ophæv sammenfletning"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Fjern kontaktpersoner"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Omdøb etiket"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Vælg kontaktpersoner"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Tilføj kontaktpersoner"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Fjern fra etiket"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Tilføj kontaktperson"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Opret ny…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Opret etiket"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Vil du ophæve sammenfletningen og opdele denne kontaktperson i flere kontaktpersoner?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Ophæv sammenfletningen"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Vil du gemme de ændringer, du allerede har foretaget, og ophæve sammenfletningen og opdele kontaktpersonen i flere kontaktpersoner?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Gem"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Sammenflet kontaktpersoner"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Vælg den kontaktperson, der skal knyttes 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> er sammenflettet"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktpersoner</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> kontaktperson · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontaktpersoner · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktperson · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktpersoner · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Fra Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Fra <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Sletning af denne kontaktperson sletter oplysninger fra flere konti."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Vil du slette denne kontaktperson?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Slet"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Kassér ændringer"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontaktpersonen findes ikke."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontaktpersonen blev føjet til startskærmen."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> blev føjet til startskærmen."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Opret ny kontaktperson"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Opret ny kontaktperson"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Der er ingen tilgængelige billeder på tabletcomputeren."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Der er ingen tilgængelige billeder på telefonen."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Billede af kontaktperson"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Navn på tilpasset etiket"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Send opkald direkte til telefonsvarer"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Fjern billede"</string>
     <string name="noContacts" msgid="2228592924476426108">"Din liste over kontaktpersoner er tom"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Der er ingen etiketter."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Du skal have en konto for at kunne oprette grupper."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Der er ingen kontaktpersoner med denne etiket"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Der er ingen kontaktpersoner på denne konto"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Din liste over kontaktpersoner er tom"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Der opstod en fejl, da kontaktpersonen blev gemt"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ændringerne af kontaktpersonens billede kan ikke gemmes"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Etiketten kan ikke indlæses"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etiketten blev gemt"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiketten blev slettet"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etiketten blev oprettet"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Etiketten kan ikke oprettes"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Send besked"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Vælg kontaktpersoner"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Send"</string>
-    <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" 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" 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="5948889261993124839">"Alle"</string>
-    <string name="callBack" msgid="5498224409038809224">"Ring tilbage"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Ring op igen"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Ring tilbage"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Føj \"<xliff:g id="EMAIL">%s</xliff:g>\" til kontaktpersoner?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> af <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakter"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Navne på dine kontakter"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Der blev ikke fundet nogen app, der kan håndtere denne handling."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klik for at gå tilbage til forrige skærmbillede"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Tilføj telefonnummer"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Tilføj e-mail"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etiketnavn"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Talechat"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videochat"</string>
-    <string name="connections" msgid="8098440723172028350">"Forbindelser"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Tilføj forbindelse"</string>
-    <string name="recent" msgid="2659189233141493004">"Seneste"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Seneste opdateringer"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontaktperson"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-konto"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Tag billede"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Tag nyt billede"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Vælg billede"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Vælg et nyt billede"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Vælg alle"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Fravælg alle"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Tilføj ny"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Tilføj organisation"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dato"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiket"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Rediger"</string>
-    <string name="description_star" msgid="2605854427360036550">"foretrukken"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Rediger kontaktperson"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Annuller"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Tilbage"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"luk"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vil du knytte den aktuelle kontaktperson til 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Føj til mine kontaktpersoner"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Indeks <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Indstillinger"</string>
     <string name="menu_settings" msgid="377929915873428211">"Indstillinger"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Føj til kontaktpersoner"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Føj til kontaktperson"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Luk"</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="7122002148518724139">"Inkluder år"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontaktperson"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Indlæser…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Opret ny kontaktperson"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Tilføj konto"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importér"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Opret ny…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Kassér"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Annuller"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Vil du kassere tilpasningerne?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Søg i kontaktpersoner"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Fjern kontaktpersoner"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Min lokale profil"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Min <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>-profil"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Viser alle kontaktpersoner"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Behold dine kontaktpersoner, selv hvis du mister din telefon: Synkroniser med en onlinetjeneste."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Tilføj en konto"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Brug et øjeblik på at tilføje en konto, som sikkerhedskopierer dine kontaktpersoner til Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nye kontakter gemmes på <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Vælg en standardkonto til nye kontaktpersoner:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Se mindre"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Seneste"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Om"</string>
-    <string name="send_message" msgid="8938418965550543196">"Send besked"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Opretter en privat kopi..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"I morgen"</string>
     <string name="today" msgid="8041090779381781781">"I dag"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"I dag kl. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"I morgen kl. <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Ikke-navngiven begivenhed)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Angiv"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Chat"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Begivenhed"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relation"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Konto"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Navn"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik for at udvide værktøjet til redigering af kontaktpersoner."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik for at skjule værktøjet til redigering af kontaktpersoner."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"rutevejledning til placering"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"seneste sms-besked. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Klik for at svare"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"seneste sms-besked. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Klik for at svare"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"indgående"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"udgående"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ubesvarede"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"seneste opkald. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Flere felter"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Skift kontaktpersonens billede"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Tilføj et billede af kontaktpersonen"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Redigeringsværktøjet kunne ikke åbnes."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Gemmes på"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktoplysningerne fra <xliff:g id="ACCOUNT">%s</xliff:g> kan ikke redigeres"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"I øjeblikket gemmes den på <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Tryk to gange for at vælge en anden konto."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="one">Sammenflettet kontaktperson (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Sammenflettede kontaktpersoner (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> sammenflettede kontaktpersoner"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"SAMMENFLET KONTAKTPERSONER"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANNULLER"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> mulig dublet</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mulige dubletter</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> sammenflettet kontaktperson</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> sammenflettede kontaktpersoner</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Denne kontaktperson"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mulige dubletter"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Disse kontaktpersoner kan være den samme person. Du kan sammenflette dem til én enkelt kontaktperson."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Sammenflettede kontaktpersoner"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Fra dine konti"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Vælg billede"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Fra <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Slet <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Slet <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Slet <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Billede fra <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> er ikke valgt"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Billede fra <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> er valgt"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Der er ikke markeret et billede fra en ukendt konto"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Et billede fra en ukendt konto er markeret"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Forslag"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nyt"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Åbn navigationsskuffen"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Indeks"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Indeks for arbejde"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Alle kontaktpersoner"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Der er fundet mere end <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Hurtigkontakt for <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Intet navn)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Jævnligt kontaktet"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Vis kontaktperson"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Alle kontaktpersoner med telefonnumre"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontaktpersoner for arbejdsprofil"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Se opdateringer"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM-kort"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Navn"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Kaldenavn"</string>
-    <string name="full_name" msgid="6602579550613988977">"Navn"</string>
     <string name="name_given" msgid="4280790853455320619">"Fornavn"</string>
     <string name="name_family" msgid="7466985689626017037">"Efternavn"</string>
     <string name="name_prefix" msgid="59756378548779822">"Navnepræfiks"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Send en e-mail til <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-mail"</string>
     <string name="postal_street" msgid="8133143961580058972">"Gade"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Postboks"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Nabolag"</string>
     <string name="postal_city" msgid="6597491300084895548">"By"</string>
     <string name="postal_region" msgid="6045263193478437672">"Stat"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Postnummer"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Flere grupper ..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Hvis du fjerner \"<xliff:g id="GROUP">%s</xliff:g>\" fra synkroniseringen, fjernes alle ugrupperede kontaktpersoner fra synkroniseringen."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Gemmer indstillinger for visning…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Gem"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Annuller"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Tilpasset visning"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Gem importerede kontaktpersoner på:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-kort"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vil du annullere eksport af <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Import/eksport af vCard kunne ikke annulleres"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Ukendt fejl."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" kunne ikke åbnes: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" kunne ikke åbnes: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Eksportfunktionen kunne ikke startes: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Der er ingen kontaktpersoner, der kan eksporteres."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Du har deaktiveret en påkrævet tilladelse."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Der opstod en fejl under eksporten: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Det krævede filnavn er for langt (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O-fejl"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Ikke nok hukommelse. Filen kan være for stor."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"vCard kunne ikke parses af uventede årsager."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formatet understøttes ikke."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Metaoplysninger om de angivne vCard-filer kunne ikke hentes."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"En eller flere filer kunne ikke importeres (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> er eksporteret."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontaktpersonerne blev eksporteret."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktpersonerne blev eksporteret. Klik på underretningen for at dele kontaktpersonerne."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Eksporterer kontaktdata"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Eksporterer kontaktoplysningerne."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Databaseoplysningerne kunne ikke hentes."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Der er ingen kontaktpersoner, der kan eksporteres. Hvis du har kontaktpersoner på din telefon, kan nogle dataudbydere ikke tillade, at kontaktpersonerne eksporteres fra telefonen."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Der er ingen kontaktpersoner, der kan eksporteres."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Oprettelsen af vCard startede ikke korrekt."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Eksport ikke mulig"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontaktpersondataene blev ikke eksporteret.\nÅrsag: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importerer <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Dataene på dette vCard kunne ikke læses"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Læsning af vCard-data blev annulleret"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard-filen <xliff:g id="FILENAME">%s</xliff:g> er importeret"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Import af <xliff:g id="FILENAME">%s</xliff:g> blev annulleret"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> importeres om et øjeblik."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Filen importeres inden længe."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Anmodningen om import af vCard blev afvist. Prøv igen senere."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> eksporteres om et øjeblik."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Filen eksporteres om et øjeblik."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktpersonerne eksporteres om lidt."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Anmodningen om eksport af vCard blev afvist. Prøv igen senere."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Cachelagrer vCard(s) til lokalt midlertidigt lager. Den egentlige import starter snart."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard kunne ikke importeres."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt via NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Eksporter kontakter?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Cachelagrer"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importerer <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importerer <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Eksportér til .vcf-fil"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortér efter"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Fornavn"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Mine oplysninger"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Konfigurer din profil"</string>
     <string name="setting_about" msgid="7014388749752042863">"Om Kontaktpersoner"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Del synlige kontaktpersoner"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Det lykkedes ikke at dele synlige kontaktpersoner."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Del foretrukne kontaktpersoner"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Del alle kontaktpersoner"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kontaktpersonerne kunne ikke deles."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Der er ingen kontaktpersoner, der kan deles."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontaktpersoner, der vises"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Viste kontaktpersoner"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Angiv tilpasset visning"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Tilpas visning"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Gem"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Søg efter kontaktpersoner"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Foretrukne"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Ingen kontaktpersoner."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Ryd hyppige"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Vælg SIM-kort"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Administrer konti"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importér"</string>
     <string name="menu_export" msgid="2658783911863503902">"Eksportér"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokerede telefonnumre"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"stop søgning"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Ryd søgning"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Indstillinger for visning af kontaktpersoner"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Konto"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Brug altid ved opkald"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Ring med"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Ring med en note"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Indtast en note, som skal sendes ved opkald…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"SEND, OG RING OP"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> ulæst element. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> ulæste elementer. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Build-version"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Open source-licenser"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licensoplysninger til open source-software"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Slet"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellipse"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> t. <xliff:g id="MINUTES_1">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> sek."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> t. <xliff:g id="MINUTES_1">%2$s</xliff:g> min. <xliff:g id="SECONDS">%3$s</xliff:g> sek."</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Denne genvej er blevet deaktiveret"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontaktpersonen blev fjernet"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importér"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Der er ingen forbindelse"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-kort"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Vis flere"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM-kortet blev importeret"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Importen mislykkedes"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontaktpersonerne kunne ikke importeres fra SIM-kortet"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM-kortet importeres"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 8edb126..4d88fcb 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontakte"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontakte"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Kontakt hinzufügen"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Direktwahl"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Direktnachricht"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Kontakt auswählen"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Nummer für den Anruf auswählen"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Nummer für Nachricht auswählen"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kontakt auswählen"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Zu Kontakt hinzufügen"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontakt auswählen"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Auswählen"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Neuen Kontakt erstellen"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Kontaktinformationen"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Über"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Updates"</string>
     <string name="searchHint" msgid="8482945356247760701">"In Kontakten suchen"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Kontakt anzeigen"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Zu Favoriten hinzufügen"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Aus Favoriten entfernen"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Aus Favoriten entfernt"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Verknüpfung erstellen"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Kontakt anrufen"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"SMS an Kontakt"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Verknüpfung aufheben"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Kontakte entfernen"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Label umbenennen"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Kontakte auswählen"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Kontakte hinzufügen"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Aus Label entfernen"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Kontakt hinzufügen"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Neu erstellen…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Label erstellen"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Verknüpfung dieses Kontakts aufheben, um mehrere Kontakte zu erstellen?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Verknüpfung aufheben"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Möchtest du die vorgenommenen Änderungen speichern und die Verknüpfung dieses Kontakts aufheben, um mehrere Kontakte zu erstellen?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Speichern"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontakte verknüpfen"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Wähle einen Kontakt aus, den du mit <xliff:g id="NAME">%s</xliff:g> verknüpfen möchtest:"</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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> verknüpft"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> Kontakt</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> Kontakte · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> Kontakt · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> Kontakte · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> Kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Von Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Von <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Wenn du diesen Kontakt löschst, werden Informationen aus mehreren Konten gelöscht."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Diesen Kontakt löschen?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Löschen"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Änderungen verwerfen"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Dieser Kontakt existiert nicht."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt zu Startbildschirm hinzugefügt."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> zu Startbildschirm hinzugefügt."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Neuen Kontakt erstellen"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Neuen Kontakt erstellen"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Auf dem Tablet sind keine Bilder verfügbar."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Auf dem Telefon sind keine Bilder verfügbar."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontaktbild"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Name des benutzerdef. Labels"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Anrufe direkt an Mailbox senden"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Foto entfernen"</string>
     <string name="noContacts" msgid="2228592924476426108">"Die Kontaktliste ist leer"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Keine Labels."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Du benötigst ein Konto, um Gruppen erstellen zu können."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Keine Kontakte mit diesem Label"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Keine Kontakte für dieses Konto"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Die Kontaktliste ist leer"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Fehler beim Speichern des Kontakts"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Änderungen am Kontaktfoto konnten nicht gespeichert werden"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Label konnte nicht geladen werden"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Label gespeichert"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label gelöscht"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Label erstellt"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Label kann nicht erstellt werden"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Nachricht senden"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kontakte auswählen"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Senden"</string>
-    <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" 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" 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="5948889261993124839">"Alle"</string>
-    <string name="callBack" msgid="5498224409038809224">"Rückruf"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Erneut anrufen"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Zurückrufen"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" zu den Kontakten hinzufügen?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> von <xliff:g id="TOTAL_NUMBER">%s</xliff:g> Kontakten"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Namen meiner Kontakte"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Für diese Aktion wurde keine App gefunden."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klicke hier, um zum vorherigen Bildschirm zurückzukehren."</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Telefonnummer hinzufügen"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"E-Mail-Adresse hinzufügen"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Labelname"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Sprachchat"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videochat"</string>
-    <string name="connections" msgid="8098440723172028350">"Verbindungen"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Verbindung hinzufügen"</string>
-    <string name="recent" msgid="2659189233141493004">"Neueste Nachrichten"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Neueste Updates"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> Kontakt"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-Konto"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Foto machen"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Neues Foto aufnehmen"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Foto auswählen"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Neues Foto auswählen"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Alle auswählen"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Auswahl für alle aufheben"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Hinzufügen"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Unternehmen hinzufügen"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Label"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Ändern"</string>
-    <string name="description_star" msgid="2605854427360036550">"Favorit"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Kontakt bearbeiten"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Abbrechen"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Zurück"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"Schließen"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Aktuellen Kontakt mit ausgewähltem Kontakt verknüpfen?"</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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Zu meinen Kontakten hinzufügen"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Verzeichnis <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Einstellungen"</string>
     <string name="menu_settings" msgid="377929915873428211">"Einstellungen"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Zu Kontakten hinzufügen"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Zu Kontakt hinzufügen"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Schließen"</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="7122002148518724139">"Inklusive Jahr"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Wird geladen…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Neuen Kontakt erstellen"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Konto hinzufügen"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importieren"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Neu erstellen…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Verwerfen"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Abbrechen"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Anpassungen verwerfen?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Kontakte suchen"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Kontakte entfernen"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Mein lokales Profil"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Mein <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>-Profil"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Alle Kontakte werden angezeigt."</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Synchronisierung mit einem Online-Service: Deine Kontakte sind dann auch sicher, wenn du dein Telefon verlierst."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Konto hinzufügen"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Nimm dir kurz Zeit und weise ein Konto zu, mit dem deine Kontakte in Google gesichert werden."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Neue Kontakte werden in <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> gespeichert."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Wähle ein Standardkonto für neue Kontakte:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Weniger anzeigen"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Letzte"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Info"</string>
-    <string name="send_message" msgid="8938418965550543196">"Nachricht senden"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Persönliche Kopie wird erstellt..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Morgen"</string>
     <string name="today" msgid="8041090779381781781">"Heute"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Heute um <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Morgen um <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Unbenannter Termin)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Festlegen"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Chat"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Termin"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Beziehung"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Konto"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Name"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-Mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Zum Maximieren des Kontakteditors klicken"</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Zum Minimieren des Kontakteditors klicken"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"Wegbeschreibung"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"Letzte SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Zum Antworten klicken."</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"Letzte SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Zum Antworten klicken."</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"Eingehend"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"Ausgehend"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"Verpasst"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"Letzter Anruf. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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 du die Hangouts-ID der Person in das E-Mail- oder Telefonfeld eingibst."</string>
     <string name="editor_more_fields" msgid="3630987771304393421">"Weitere Felder"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Kontaktbild ändern"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Kontaktbild hinzufügen"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Fehler beim Öffnen des Editors."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Speichern in"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktinfo von <xliff:g id="ACCOUNT">%s</xliff:g> kann nicht bearbeitet werden"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Wird derzeit in <xliff:g id="ACCOUNT_NAME">%s</xliff:g> gespeichert. Doppeltippe, um ein anderes Konto auszuwählen."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Verknüpfte Kontakte (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Verknüpfter Kontakt</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> verknüpfte Kontakte"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"Kontakte verknüpfen"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"Abbrechen"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mögliche Duplikate</item>
-      <item quantity="one">1 mögliches Duplikat</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> verknüpfte Kontakte</item>
-      <item quantity="one">1 verknüpfter Kontakt</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Dieser Kontakt"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mögliche Duplikate"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Bei diesen Kontakten könnte es sich um dieselbe Person handeln. Du kannst sie zu einem einzigen Kontakt verknüpfen."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Verknüpfte Kontakte"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Aus meinen Konten"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Foto auswählen"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Von <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> löschen"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> löschen"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> löschen"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto von <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>nicht ausgewählt"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto von <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ausgewählt"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto aus unbekanntem Konto nicht ausgewählt"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto aus unbekanntem Konto ausgewählt"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Vorschläge"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Neu"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Navigationsleiste öffnen"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Verzeichnis"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Verzeichnis geschäftlicher Kontakte"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Alle Kontakte"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Mehr als <xliff:g id="COUNT">%d</xliff:g> gefunden"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Schnellkontakt für <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Kein Name)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Häufig kontaktiert"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Kontakt anzeigen"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Alle Kontakte mit Telefonnummern"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Arbeitsprofilkontakte"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Updates anzeigen"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Name"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Spitzname"</string>
-    <string name="full_name" msgid="6602579550613988977">"Name"</string>
     <string name="name_given" msgid="4280790853455320619">"Vorname"</string>
     <string name="name_family" msgid="7466985689626017037">"Nachname"</string>
     <string name="name_prefix" msgid="59756378548779822">"Namenpräfix"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"E-Mail an <xliff:g id="CUSTOM_LABEL">%s</xliff:g> senden"</string>
     <string name="email" msgid="5668400997660065897">"E-Mail"</string>
     <string name="postal_street" msgid="8133143961580058972">"Straße"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Postfach"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Nachbarschaft"</string>
     <string name="postal_city" msgid="6597491300084895548">"Stadt"</string>
     <string name="postal_region" msgid="6045263193478437672">"Bundesland"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Postleitzahl"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Weitere Gruppen..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Wenn \"<xliff:g id="GROUP">%s</xliff:g>\" aus der Synchronisierung entfernt wird, werden auch alle nicht gruppierten Kontakte aus der Synchronisierung entfernt."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Anzeigeoptionen werden gespeichert..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Fertig"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Abbrechen"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Benutzerdefinierte Ansicht"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Importierte Kontakte speichern unter:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-Karte"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Export von <xliff:g id="FILENAME">%s</xliff:g> abbrechen?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard-Import/-Export nicht abgebrochen"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Unbekannter Fehler"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" konnte nicht geöffnet werden: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" konnte nicht geöffnet werden: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Exportprogramm konnte nicht gestartet werden: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Es ist kein exportierbarer Kontakt vorhanden."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Du hast eine erforderliche Berechtigung deaktiviert."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Beim Export ist ein Fehler aufgetreten: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Erforderlicher Dateiname ist zu lang (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"E/A-Fehler"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nicht genügend Speicherplatz. Die Datei ist möglicherweise zu groß."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Die vCard konnte aus einem unerwarteten Grund nicht geparst werden."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Das Format wird nicht unterstützt."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Abrufen der Metadaten aus angegebenen vCards nicht möglich"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Eine oder mehrere Dateien können nicht importiert werden (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Export von <xliff:g id="FILENAME">%s</xliff:g> abgeschlossen"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontakte wurden exportiert."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Das Exportieren der Kontakte ist abgeschlossen. Klicke auf die Benachrichtigung, um die Kontakte freizugeben."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontaktdaten werden exportiert."</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Die Kontaktdaten werden gerade exportiert."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Datenbankinformationen konnten nicht abgerufen werden."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Es sind keine exportierbaren Kontakte vorhanden. Falls sich Kontakte auf Ihrem Telefon befinden, ist das Exportieren der Kontakte möglicherweise durch den Datenanbieter gesperrt."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Keine Kontakte zum Exportieren vorhanden."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Das Programm zum Erstellen der vCard wurde nicht richtig gestartet."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Export nicht möglich"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Die Kontaktdaten wurden nicht exportiert.\nGrund: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> wird importiert"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Lesen der vCard-Daten nicht möglich"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Lesen von vCard-Daten abgebrochen"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Import der vCard <xliff:g id="FILENAME">%s</xliff:g> abgeschlossen"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Import von <xliff:g id="FILENAME">%s</xliff:g> abgebrochen"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> wird demnächst importiert."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Die Datei wird in Kürze importiert."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Die vCard-Importanfrage wurde abgelehnt. Bitte versuchen Sie es später erneut."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> wird demnächst exportiert."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Die Datei wird in Kürze exportiert."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Die Kontakte werden in Kürze exportiert."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Die vCard-Exportanfrage wurde abgelehnt. Bitte versuchen Sie es später erneut."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"Kontakt"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Caching der vCard(s) in lokalen temporären Speicher wird durchgeführt. Der eigentliche Import beginnt gleich."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Importieren der vCard nicht möglich"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt erhalten per NCF"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Kontakte exportieren?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Caching läuft..."</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> wird importiert: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> wird importiert: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"In VCF-Datei exportieren"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortieren nach"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Vorname"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Meine Daten"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Profil einrichten"</string>
     <string name="setting_about" msgid="7014388749752042863">"Über \"Kontakte\""</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Sichtbare Kontakte teilen"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Die sichtbaren Kontakte konnten nicht geteilt werden."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Lieblingskontakte teilen"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Alle Kontakte teilen"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kontakte konnten nicht geteilt werden."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Keine Kontakte zum Teilen vorhanden."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakte zur Ansicht"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakte zur Ansicht"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Benutzerdef. Ansicht"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Ansicht anpassen"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Speichern"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Kontakte suchen"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriten"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Keine Kontakte"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"\"Häufig kontaktiert\" löschen"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM-Karte auswählen"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Konten verwalten"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importieren"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exportieren"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blockierte Nummern"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> über <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"Suche beenden"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Suche zurücksetzen"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Anzeigeoptionen für Kontakte"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Konto"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Diese SIM für alle Anrufe verwenden"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Anrufen mit"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Mit einer Notiz anrufen"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Notiz eingeben, die beim Anrufen gesendet wird…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"SENDEN &amp; ANRUFEN"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> ungelesene Elemente. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> ungelesenes Element. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Build-Version"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Open-Source-Lizenzen"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Lizenzdetails für Open-Source-Software"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Löschen"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Auslassungszeichen"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Diese Verknüpfung wurde deaktiviert"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt wurde entfernt"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importieren"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Keine Verbindung"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Mehr anzeigen"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importieren der SIM-Karte abgeschlossen"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Fehler beim Importieren"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontakte konnten nicht von SIM-Karte importiert werden"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM wird importiert"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 81cba9d..000d32e 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Επαφές"</string>
     <string name="contactsList" msgid="8661624236494819731">"Επαφές"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Προσθήκη επαφής"</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="shortcutActivityTitle" msgid="1504383567778497348">"Επιλογή επαφής"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Προσθήκη σε επαφή"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Επιλέξτε μια επαφή"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Επιλογή"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Δημιουργία νέας επαφής"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Λεπτομέρειες επαφής"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Διαγραφή"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Αλλαγή φωτογραφίας"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Δημιουργία συντόμευσης"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Κλήση επαφής"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Αποστολή μηνύματος κειμένου σε επαφή"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Αποσύνδεση"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Κατάργηση επαφών"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Μετονομασία ετικέτας"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Επιλογή επαφών"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Προσθήκη επαφών"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Κατάργηση από ετικέτα"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Προσθήκη επαφής"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Δημιουργία νέας…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Δημιουργία ετικέτας"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Θέλετε να αναιρέσετε τη σύνδεση αυτής της επαφής για να μετατραπεί σε πολλαπλές επαφές;"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Αναίρεση σύνδεσης"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Θέλετε να αποθηκεύσετε τις αλλαγές που έχετε πραγματοποιήσει ήδη και να αναιρέσετε τη σύνδεση αυτής της επαφής για να μετατραπεί σε πολλαπλές επαφές;"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Aποθήκευση"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Σύνδεση επαφών"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Επιλέξτε την επαφή που θέλετε να συνδέσετε με τον χρήστη <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> συνδέθηκε"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> επαφή</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> επαφές · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> επαφή · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> επαφές · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> επαφή · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Από την Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Από: <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Με τη διαγραφή αυτής της επαφής, θα διαγραφούν στοιχεία από πολλαπλούς λογαριασμούς."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Να διαγραφεί αυτή η επαφή;"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Διαγραφή"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Απόρριψη αλλαγών"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Η επαφή δεν υπάρχει."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Η επαφή προστέθηκε στην Αρχική οθόνη."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Ο/Η <xliff:g id="NAME">%s</xliff:g> προστέθηκε στην Αρχική οθόνη."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Δημιουργία νέας επαφής"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Δημιουργία νέας επαφής"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Δεν υπάρχουν διαθέσιμες εικόνες στο tablet."</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="2228592924476426108">"Η λίστα επαφών σας είναι άδεια"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Δεν υπάρχουν ετικέτες."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Για να δημιουργήσετε ομάδες πρέπει να έχετε έναν λογαριασμό."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Δεν υπάρχουν επαφές με αυτήν την εκτικέτα"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Δεν υπάρχουν επαφές σε αυτόν το λογαριασμό"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Η λίστα επαφών σας είναι άδεια"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Σφάλμα κατά την αποθήκευση της επαφής"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Δεν ήταν δυνατή η αποθήκευση των αλλαγών που πραγματοποιήθηκαν στη φωτογραφία της επαφής"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Η φόρτωση ετικέτας απέτυχε"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Η ετικέτα αποθηκεύτηκε."</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Η ετικέτα διαγράφηκε"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Η ετικέτα δημιουργήθηκε"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Δεν είναι δυνατή η δημιουργία ετικέτας"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Αποστολή μηνύματος"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Επιλογή επαφών"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Αποστολή"</string>
-    <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" 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" 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="5948889261993124839">"Όλες"</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_plus_button" msgid="515164827856229880">"συν"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> από <xliff:g id="TOTAL_NUMBER">%s</xliff:g> επαφές"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Ονόματα των επαφών σας"</string>
-    <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">"Προσθήκη email"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Όνομα ετικέτας"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"Λογαριασμός <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Ετικέτα"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Αλλαγή"</string>
-    <string name="description_star" msgid="2605854427360036550">"αγαπημένο"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Επεξεργασία"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Ακύρωση"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Πίσω"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"κλείσιμο"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Να γίνει σύνδεση της τρέχουσας επαφής με την επιλεγμένη επαφή;"</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="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="7122002148518724139">"Συμπερίληψη έτους"</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="4347232421410561500">"Προσθήκη λογαριασμού"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Εισαγωγή"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Δημιουργία νέας…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Απόρριψη"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Ακύρωση"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Απόρριψη προσαρμογών;"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Αναζήτηση επαφών"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Κατάργηση επαφών"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Τοπικό προφίλ"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Προφίλ μου <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Εμφάνιση όλων των επαφών"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Διατηρήστε τις επαφές σας ασφαλείς ακόμα και αν χάσετε το τηλέφωνό σας: συγχρονισμός με άλλη συσκευή στο διαδίκτυο."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Προσθήκη λογαριασμού"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Αφιερώστε λίγο χρόνο για να προσθέσετε έναν λογαριασμό μέσω του οποίου θα δημιουργήσετε αντίγραφα ασφαλείας των επαφών σας στην Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Οι νέες επαφές θα αποθηκευτούν στο λογαριασμό <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Επιλέξτε έναν προεπιλεγμένο λογαριασμό για νέες επαφές:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Δείτε λιγότερα"</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="288549957278065542">"Δημιουργία προσωπικού αντιγράφου..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"πρόσφατο sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"πρόσφατη κλήση. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Περισσότερα πεδία"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Αλλαγή φωτογραφίας επαφής"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Προσθήκη φωτογραφίας επαφής"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Αποτυχία ανοίγματος προγράμματος επεξεργασίας."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Αποθήκευση σε"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Τα στοιχεία επαφής από το <xliff:g id="ACCOUNT">%s</xliff:g> δεν είναι επεξεργάσιμα"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Γίνεται αποθήκευση στο λογαριασμό <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Πατήστε δύο φορές για να επιλέξετε διαφορετικό λογαριασμό."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Συνδεδεμένες επαφές (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Συνδεδεμένη επαφή</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> συνδεδεμένες επαφές"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ΣΥΝΔΕΣΗ ΕΠΑΦΩΝ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ΑΚΥΡΩΣΗ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> πιθανά διπλότυπα</item>
-      <item quantity="one">1 πιθανό διπλότυπο</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> συνδεδεμένες επαφές</item>
-      <item quantity="one">1 συνδεδεμένη επαφή</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Αυτή η επαφή"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Πιθανά διπλότυπα"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Αυτές οι επαφές μπορεί να αντιστοιχούν στο ίδιο άτομο. Μπορείτε να τις συνδέσετε σε μία μεμονωμένη επαφή."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Συνδεδεμένες επαφές"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Από τους λογαριασμούς σας"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Επιλογή φωτογραφίας"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Από <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Διαγραφή <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Διαγραφή <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Διαγραφή <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Δεν επιλέχθηκε φωτογραφία από <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Επιλέχθηκε φωτογραφία από <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Δεν επιλέχθηκε φωτογραφία από άγνωστο λογαριασμό"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Επιλέχθηκε φωτογραφία από άγνωστο λογαριασμό"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Προτάσεις"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Νέο"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Άνοιγμα συρταριού πλοήγησης"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Κατάλογος"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Κατάλογος εργασίας"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Όλες οι επαφές"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Βρέθηκαν περισσότερα από <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Γρήγορη επαφή για <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Χωρίς όνομα)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Επαφές που έχετε συχνή επικοινωνία"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Προβολή επαφής"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Όλες οι επαφές με αριθμούς τηλεφώνου"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Επαφές προφίλ εργασίας"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Προβολή ενημερώσεων"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Όνομα"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Ψευδώνυμο"</string>
-    <string name="full_name" msgid="6602579550613988977">"Όνομα"</string>
     <string name="name_given" msgid="4280790853455320619">"Όνομα"</string>
     <string name="name_family" msgid="7466985689626017037">"Επώνυμο"</string>
     <string name="name_prefix" msgid="59756378548779822">"Πρόθεμα ονόματος"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου προς <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Διεύθυνση ηλεκτρονικού ταχυδρομείου"</string>
     <string name="postal_street" msgid="8133143961580058972">"Οδός"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Ταχυδρομική θυρίδα"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Γειτονιά"</string>
     <string name="postal_city" msgid="6597491300084895548">"Πόλη"</string>
     <string name="postal_region" msgid="6045263193478437672">"Πολιτεία"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Ταχυδρομικός κώδικας"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Περισσότερες ομάδες…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Η κατάργηση της ομάδας \"<xliff:g id="GROUP">%s</xliff:g>\" από τον συγχρονισμό θα καταργήσει επίσης και τις επαφές χωρίς ομαδοποίηση από τον συγχρονισμό."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Αποθήκευση επιλογών προβολής…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Τέλος"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Ακύρωση"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Προσαρμοσμένη προβολή"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Αποθήκευση επαφών που εισήχθησαν σε:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Κάρτα SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Να ακυρωθεί η εξαγωγή του αρχείου <xliff:g id="FILENAME">%s</xliff:g>;"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Αδ.ακύρ.εισαγ./εξαγ.vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Άγνωστο σφάλμα."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Δεν ήταν δυνατό το άνοιγμα του αρχείου \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Δεν ήταν δυνατό το άνοιγμα του αρχείου \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Δεν ήταν δυνατή η έναρξη του εξαγωγέα: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Δεν υπάρχει επαφή με δυνατότητα εξαγωγής."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Απενεργοποιήσατε μια απαιτούμενη άδεια."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Προέκυψε κάποιο σφάλμα κατά την εξαγωγή: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Το απαιτούμενο όνομα αρχείου είναι πάρα πολύ μεγάλο (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Σφάλμα I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Δεν υπάρχει αρκετή μνήμη. Το αρχείο ενδέχεται να είναι πάρα πολύ μεγάλο."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Δεν ήταν δυνατή η ανάλυση της κάρτας vCard λόγω μη αναμενόμενης αιτίας."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Η μορφή δεν υποστηρίζεται."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Δεν ήταν δυνατή η συλλογή πληροφοριών μεταδεδομένων των καρτών vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Δεν ήταν δυνατή η εισαγωγή ενός ή περισσότερων αρχείων (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Η εξαγωγή του αρχείου <xliff:g id="FILENAME">%s</xliff:g> ολοκληρώθηκε."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Ολοκλήρωση εξαγωγής επαφών."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Ολοκληρώθηκε η εξαγωγή των επαφών. Κάντε κλικ στην ειδοποίηση για να μοιραστείτε επαφές."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Εξαγωγή δεδομένων επαφών"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Γίνεται εξαγωγή των δεδομένων επαφών."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Δεν ήταν δυνατή η λήψη πληροφοριών βάσης δεδομένων."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Δεν υπάρχουν επαφές προς εξαγωγή. Αν υπάρχουν επαφές στο τηλέφωνό σας, ορισμένοι πάροχοι δεδομένων ενδέχεται να μην επιτρέπουν την εξαγωγή των επαφών από το τηλέφωνο."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Δεν υπάρχουν επαφές προς εξαγωγή."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Η έναρξη της vCard δεν ήταν σωστή."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Αδυναμία εξαγωγής"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Δεν έγινε εξαγωγή των δεδομένων επαφής.\nΑιτία: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Εισαγωγή <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Αδύν. ανάγν. δεδομ. vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Ακύρωση ανάγνωσης δεδομένων vCard"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Η εισαγωγή vCard ολοκληρώθηκε <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Η εισαγωγή του αρχείου <xliff:g id="FILENAME">%s</xliff:g> ακυρώθηκε"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Η <xliff:g id="FILENAME">%s</xliff:g> θα εισαχθεί σύντομα."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Η εισαγωγή του αρχείου θα γίνει σύντομα."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Το αίτημα εισαγωγής vCard απορρίφθηκε. Δοκιμάστε ξανά αργότερα."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Η <xliff:g id="FILENAME">%s</xliff:g> θα εξαχθεί σύντομα."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Η εξαγωγή του αρχείου θα γίνει σύντομα."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Σε λίγο θα ξεκινήσει η εξαγωγή επαφών."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Το αίτημα εξαγωγής vCard απορρίφθηκε. Δοκιμάστε ξανά αργότερα."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"επαφή"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Αλλαγή vCard σε τοπικό χώρο προσωρινής αποθήκευσης. Η εισαγωγή θα ξεκινήσει σύντομα."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Δεν ήταν δυνατή η εισαγωγή κάρτας vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Λήψ.επ.μέσω ΕΚΠ"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Εξαγωγή επαφών;"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Προσωρινή αποθήκευση"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Εισαγωγή <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Εισαγωγή <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Εξαγωγή σε αρχείο .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ταξινόμηση κατά"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Όνομα"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Τα στοιχεία μου"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Ρυθμίστε το προφίλ σας"</string>
     <string name="setting_about" msgid="7014388749752042863">"Σχετικά με τις Επαφές"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Κοινή χρήση ορατών επαφών"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Η κοινοποίηση των ορατών επαφών απέτυχε."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Κοινοποίηση αγαπημένων επαφών"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Κοινή χρήση όλων των επαφών"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Αποτυχία κοινής χρήσης επαφών."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Δεν υπάρχουν επαφές για κοινοποίηση."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Επαφές για εμφάνιση"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Επαφές για προβολή"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Ορισμός προσαρμοσμένης προβολής"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Προσαρμογή προβολής"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Αποθήκευση"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Αναζήτηση στις επαφές"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Αγαπ."</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Δεν υπάρχουν επαφές."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Διαγραφή ατόμ. με συχνή επικ."</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Επιλογή κάρτας SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Διαχείριση λογαριασμών"</string>
     <string name="menu_import" msgid="6107961135813836467">"Εισαγωγή"</string>
     <string name="menu_export" msgid="2658783911863503902">"Εξαγωγή"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Αποκλεισμένοι αριθμοί"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> μέσω <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"τέλος αναζήτησης"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Διαγραφή αναζητήσεων"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Επιλογές εμφάνισης επαφών"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Λογαριασμός"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Χρήση πάντα για κλήσεις"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Κλήση με"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Κλήση με σημείωση"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Πληκτρολογήστε μια σημείωση για αποστολή με την κλήση…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ΑΠΟΣΤΟΛΗ ΚΑΙ ΚΛΗΣΗ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> μη αναγνωσμένα στοιχεία. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> μη αναγνωσμένο στοιχείο. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Έκδοση build"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Άδειες λογισμικού ανοικτού κώδικα"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Λεπτομέρειες άδειας λογισμικού ανοικτού κώδικα"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Πλήκτρο Delete"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Αποσιωπητικά"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> δ."</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> λ <xliff:g id="SECONDS">%s</xliff:g> δ."</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ώ. <xliff:g id="MINUTES_1">%s</xliff:g> λ. <xliff:g id="SECONDS">%s</xliff:g> δ."</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> λ <xliff:g id="SECONDS">%2$s</xliff:g> δ."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ώ. <xliff:g id="MINUTES_1">%2$s</xliff:g> λ. <xliff:g id="SECONDS">%3$s</xliff:g> δ."</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Η συντόμευση απενεργοποιήθηκε"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Η επαφή καταργήθηκε"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Εισαγωγή"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Δεν υπάρχει σύνδεση"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Εμφάνιση περισσότερων"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Ολοκληρώθηκε εισαγωγή από κάρτα SIM"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Αποτυχία εισαγωγής"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Δεν ήταν δυνατή η εισαγωγή επαφών από την κάρτα SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Εισαγωγή από SIM"</string>
 </resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 2a2a8c0..cf04bfc 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contacts"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Add contact"</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="shortcutActivityTitle" msgid="1504383567778497348">"Choose contact"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Add to contact"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Choose a contact"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Select"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Create new contact"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Contact details"</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>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Create shortcut"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Call contact"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Text contact"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Unlink"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Remove contacts"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Rename label"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Select contacts"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Add contacts"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Remove from label"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Add contact"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Create new…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Create label"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Unlink this contact into multiple contacts?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Unlink"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Would you like to save the changes that you already made and unlink this contact into multiple contacts?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Save"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Link contacts"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Choose the contact who you want to link 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> linked"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"From Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"From <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Deleting this contact will delete details from multiple accounts."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Delete this contact?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"delete"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Discard changes"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"The contact doesn\'t exist."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contact added to Home screen."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> added to Home screen."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Create new contact"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Create new contact"</string>
     <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="2228592924476426108">"Your contacts list is empty"</string>
-    <string name="noGroups" msgid="4607906327968232225">"No labels."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"To create groups you need an account."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"No contacts with this label"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"No contacts in this account"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Your contacts list is empty"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Error while saving contact"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Couldn\'t save contact photo changes"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Failed to load label"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Label saved"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label deleted"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Label created"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Can\'t create label"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Send message"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Choose contacts"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Send"</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="5948889261993124839">"All"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Label name"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> account"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Label"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Change"</string>
-    <string name="description_star" msgid="2605854427360036550">"favourite"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Edit contact"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancel"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Back"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"close"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Link 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="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="7122002148518724139">"Include 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="4347232421410561500">"Add account"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Import"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Create new…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Discard"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancel"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Discard customisations?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Search contacts"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Remove contacts"</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="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="6648376557574360096">"Take a moment to add an account that will back up your contacts to Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"New contacts will be saved to <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Choose a default account for new contacts:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"See less"</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="288549957278065542">"Creating a personal copy…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"recent SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"recent call. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"More fields"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Change contact photo"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Add contact photo"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Failed to open editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Saving to"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Contact info from <xliff:g id="ACCOUNT">%s</xliff:g> isn\'t editable"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Currently saving to <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Double-tap to choose a different account."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Linked contacts (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Linked contact</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> linked contacts"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LINK CONTACTS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCEL"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Possible duplicates</item>
-      <item quantity="one">1 Possible duplicate</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> linked contacts</item>
-      <item quantity="one">1 linked contact</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"This contact"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possible duplicates"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"These contacts might be the same person. You can link them together as a single contact."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Linked contacts"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"From your accounts"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Choose photo"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"From <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Delete <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Delete <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Delete <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Photo from <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>not checked"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Photo from <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>checked"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Photo from unknown account not selected"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Photo from unknown account selected"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Suggestions"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"New"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Open navigation drawer"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Directory"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Work directory"</string>
     <string name="local_search_label" msgid="2551177578246113614">"All contacts"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"More than <xliff:g id="COUNT">%d</xliff:g> found."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Quick contact for <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(No name)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Frequently contacted"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"View contact"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"All contacts with phone numbers"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Work profile contacts"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"View updates"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Name"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nickname"</string>
-    <string name="full_name" msgid="6602579550613988977">"Name"</string>
     <string name="name_given" msgid="4280790853455320619">"First name"</string>
     <string name="name_family" msgid="7466985689626017037">"Surname"</string>
     <string name="name_prefix" msgid="59756378548779822">"Name prefix"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Email <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Email"</string>
     <string name="postal_street" msgid="8133143961580058972">"Street"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"PO box"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Neighbourhood"</string>
     <string name="postal_city" msgid="6597491300084895548">"City"</string>
     <string name="postal_region" msgid="6045263193478437672">"County"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Postcode"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"More groups…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Removing \"<xliff:g id="GROUP">%s</xliff:g>\" from sync will also remove any ungrouped contacts from sync."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Saving display options…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Done"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Cancel"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Customised view"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Save imported contacts to:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM card"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancel export of <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Couldn\'t cancel vCard import/export"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Unknown error."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Couldn\'t open \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Couldn\'t open \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Couldn\'t start the exporter: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"There is no exportable contact."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"You have disabled a required permission."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"An error occurred during export: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Required filename is too long (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O error"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Not enough memory. The file may be too large."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Couldn\'t parse vCard for an unexpected reason."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"The format isn\'t supported."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Couldn\'t collect meta information of given vCard file(s)."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"One or more files couldn\'t be imported (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Finished exporting <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Finished exporting contacts."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Finished exporting contacts. Please click the notification to share contacts."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exporting contact data"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Contact data is being exported."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Couldn\'t get database information."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"There are no exportable contacts. If you do have contacts on your phone, some data providers may not allow the contacts to be exported from the phone."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"There are no exportable contacts."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"The vCard composer didn\'t start properly."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Couldn\'t export"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"The contact data wasn\'t exported.\nReason: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importing <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Couldn\'t read vCard data"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Reading vCard data cancelled"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Finished importing vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importing <xliff:g id="FILENAME">%s</xliff:g> cancelled"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> will be imported shortly."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"The file will be imported shortly."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard import request was rejected. Try again later."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> will be exported shortly."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"The file will be exported shortly."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Contacts will be exported shortly."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard export request was rejected. Try again later."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Caching vCard(s) to local temporary storage. The actual import will start soon."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Couldn\'t import vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contact received over NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Export contacts?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Caching"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importing <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importing <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Export to .vcf file"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sort by"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"First name"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"My info"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Set up your profile"</string>
     <string name="setting_about" msgid="7014388749752042863">"About Contacts"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Share visible contacts"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Failed to share visible contacts."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Share favourite contacts"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Share all contacts"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Failed to share contacts."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"There are no contacts to share."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contacts to display"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contacts to display"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Define customised view"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Customise view"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Save"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Search contacts"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favourites"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"No contacts."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Clear frequents"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Select SIM card"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Manage accounts"</string>
     <string name="menu_import" msgid="6107961135813836467">"Import"</string>
     <string name="menu_export" msgid="2658783911863503902">"Export"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blocked numbers"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"stop searching"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Clear search"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Contact display options"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Account"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Always use this for calls"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Call with"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Call with a note"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Type a note to send with the call…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"SEND &amp; CALL"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> unread items. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> unread item. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Build version"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Open-source licences"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licence details for open-source software"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Delete"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellipsis"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> hr <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sec"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> hr <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sec"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"This shortcut has been disabled"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Contact was removed"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Import"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"No connection"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Show more"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Finished importing SIM card"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Import failed"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Couldn\'t import contacts from SIM card"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importing SIM"</string>
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 2a2a8c0..cf04bfc 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contacts"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Add contact"</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="shortcutActivityTitle" msgid="1504383567778497348">"Choose contact"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Add to contact"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Choose a contact"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Select"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Create new contact"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Contact details"</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>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Create shortcut"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Call contact"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Text contact"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Unlink"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Remove contacts"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Rename label"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Select contacts"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Add contacts"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Remove from label"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Add contact"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Create new…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Create label"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Unlink this contact into multiple contacts?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Unlink"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Would you like to save the changes that you already made and unlink this contact into multiple contacts?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Save"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Link contacts"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Choose the contact who you want to link 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> linked"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"From Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"From <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Deleting this contact will delete details from multiple accounts."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Delete this contact?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"delete"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Discard changes"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"The contact doesn\'t exist."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contact added to Home screen."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> added to Home screen."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Create new contact"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Create new contact"</string>
     <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="2228592924476426108">"Your contacts list is empty"</string>
-    <string name="noGroups" msgid="4607906327968232225">"No labels."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"To create groups you need an account."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"No contacts with this label"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"No contacts in this account"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Your contacts list is empty"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Error while saving contact"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Couldn\'t save contact photo changes"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Failed to load label"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Label saved"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label deleted"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Label created"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Can\'t create label"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Send message"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Choose contacts"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Send"</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="5948889261993124839">"All"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Label name"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> account"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Label"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Change"</string>
-    <string name="description_star" msgid="2605854427360036550">"favourite"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Edit contact"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancel"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Back"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"close"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Link 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="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="7122002148518724139">"Include 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="4347232421410561500">"Add account"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Import"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Create new…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Discard"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancel"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Discard customisations?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Search contacts"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Remove contacts"</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="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="6648376557574360096">"Take a moment to add an account that will back up your contacts to Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"New contacts will be saved to <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Choose a default account for new contacts:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"See less"</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="288549957278065542">"Creating a personal copy…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"recent SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"recent call. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"More fields"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Change contact photo"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Add contact photo"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Failed to open editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Saving to"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Contact info from <xliff:g id="ACCOUNT">%s</xliff:g> isn\'t editable"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Currently saving to <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Double-tap to choose a different account."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Linked contacts (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Linked contact</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> linked contacts"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LINK CONTACTS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCEL"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Possible duplicates</item>
-      <item quantity="one">1 Possible duplicate</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> linked contacts</item>
-      <item quantity="one">1 linked contact</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"This contact"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possible duplicates"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"These contacts might be the same person. You can link them together as a single contact."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Linked contacts"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"From your accounts"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Choose photo"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"From <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Delete <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Delete <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Delete <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Photo from <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>not checked"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Photo from <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>checked"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Photo from unknown account not selected"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Photo from unknown account selected"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Suggestions"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"New"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Open navigation drawer"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Directory"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Work directory"</string>
     <string name="local_search_label" msgid="2551177578246113614">"All contacts"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"More than <xliff:g id="COUNT">%d</xliff:g> found."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Quick contact for <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(No name)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Frequently contacted"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"View contact"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"All contacts with phone numbers"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Work profile contacts"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"View updates"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Name"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nickname"</string>
-    <string name="full_name" msgid="6602579550613988977">"Name"</string>
     <string name="name_given" msgid="4280790853455320619">"First name"</string>
     <string name="name_family" msgid="7466985689626017037">"Surname"</string>
     <string name="name_prefix" msgid="59756378548779822">"Name prefix"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Email <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Email"</string>
     <string name="postal_street" msgid="8133143961580058972">"Street"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"PO box"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Neighbourhood"</string>
     <string name="postal_city" msgid="6597491300084895548">"City"</string>
     <string name="postal_region" msgid="6045263193478437672">"County"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Postcode"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"More groups…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Removing \"<xliff:g id="GROUP">%s</xliff:g>\" from sync will also remove any ungrouped contacts from sync."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Saving display options…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Done"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Cancel"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Customised view"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Save imported contacts to:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM card"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancel export of <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Couldn\'t cancel vCard import/export"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Unknown error."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Couldn\'t open \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Couldn\'t open \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Couldn\'t start the exporter: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"There is no exportable contact."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"You have disabled a required permission."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"An error occurred during export: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Required filename is too long (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O error"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Not enough memory. The file may be too large."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Couldn\'t parse vCard for an unexpected reason."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"The format isn\'t supported."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Couldn\'t collect meta information of given vCard file(s)."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"One or more files couldn\'t be imported (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Finished exporting <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Finished exporting contacts."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Finished exporting contacts. Please click the notification to share contacts."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exporting contact data"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Contact data is being exported."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Couldn\'t get database information."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"There are no exportable contacts. If you do have contacts on your phone, some data providers may not allow the contacts to be exported from the phone."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"There are no exportable contacts."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"The vCard composer didn\'t start properly."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Couldn\'t export"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"The contact data wasn\'t exported.\nReason: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importing <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Couldn\'t read vCard data"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Reading vCard data cancelled"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Finished importing vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importing <xliff:g id="FILENAME">%s</xliff:g> cancelled"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> will be imported shortly."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"The file will be imported shortly."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard import request was rejected. Try again later."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> will be exported shortly."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"The file will be exported shortly."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Contacts will be exported shortly."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard export request was rejected. Try again later."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Caching vCard(s) to local temporary storage. The actual import will start soon."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Couldn\'t import vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contact received over NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Export contacts?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Caching"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importing <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importing <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Export to .vcf file"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sort by"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"First name"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"My info"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Set up your profile"</string>
     <string name="setting_about" msgid="7014388749752042863">"About Contacts"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Share visible contacts"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Failed to share visible contacts."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Share favourite contacts"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Share all contacts"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Failed to share contacts."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"There are no contacts to share."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contacts to display"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contacts to display"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Define customised view"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Customise view"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Save"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Search contacts"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favourites"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"No contacts."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Clear frequents"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Select SIM card"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Manage accounts"</string>
     <string name="menu_import" msgid="6107961135813836467">"Import"</string>
     <string name="menu_export" msgid="2658783911863503902">"Export"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blocked numbers"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"stop searching"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Clear search"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Contact display options"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Account"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Always use this for calls"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Call with"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Call with a note"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Type a note to send with the call…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"SEND &amp; CALL"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> unread items. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> unread item. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Build version"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Open-source licences"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licence details for open-source software"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Delete"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellipsis"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> hr <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sec"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> hr <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sec"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"This shortcut has been disabled"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Contact was removed"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Import"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"No connection"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Show more"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Finished importing SIM card"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Import failed"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Couldn\'t import contacts from SIM card"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importing SIM"</string>
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 2a2a8c0..cf04bfc 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contacts"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Add contact"</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="shortcutActivityTitle" msgid="1504383567778497348">"Choose contact"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Add to contact"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Choose a contact"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Select"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Create new contact"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Contact details"</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>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Create shortcut"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Call contact"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Text contact"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Unlink"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Remove contacts"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Rename label"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Select contacts"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Add contacts"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Remove from label"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Add contact"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Create new…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Create label"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Unlink this contact into multiple contacts?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Unlink"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Would you like to save the changes that you already made and unlink this contact into multiple contacts?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Save"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Link contacts"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Choose the contact who you want to link 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> linked"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"From Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"From <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Deleting this contact will delete details from multiple accounts."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Delete this contact?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"delete"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Discard changes"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"The contact doesn\'t exist."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contact added to Home screen."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> added to Home screen."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Create new contact"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Create new contact"</string>
     <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="2228592924476426108">"Your contacts list is empty"</string>
-    <string name="noGroups" msgid="4607906327968232225">"No labels."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"To create groups you need an account."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"No contacts with this label"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"No contacts in this account"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Your contacts list is empty"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Error while saving contact"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Couldn\'t save contact photo changes"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Failed to load label"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Label saved"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label deleted"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Label created"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Can\'t create label"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Send message"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Choose contacts"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Send"</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="5948889261993124839">"All"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Label name"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> account"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Label"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Change"</string>
-    <string name="description_star" msgid="2605854427360036550">"favourite"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Edit contact"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancel"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Back"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"close"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Link 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="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="7122002148518724139">"Include 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="4347232421410561500">"Add account"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Import"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Create new…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Discard"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancel"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Discard customisations?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Search contacts"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Remove contacts"</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="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="6648376557574360096">"Take a moment to add an account that will back up your contacts to Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"New contacts will be saved to <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Choose a default account for new contacts:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"See less"</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="288549957278065542">"Creating a personal copy…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"recent SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"recent call. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"More fields"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Change contact photo"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Add contact photo"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Failed to open editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Saving to"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Contact info from <xliff:g id="ACCOUNT">%s</xliff:g> isn\'t editable"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Currently saving to <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Double-tap to choose a different account."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Linked contacts (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Linked contact</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> linked contacts"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LINK CONTACTS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCEL"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Possible duplicates</item>
-      <item quantity="one">1 Possible duplicate</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> linked contacts</item>
-      <item quantity="one">1 linked contact</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"This contact"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possible duplicates"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"These contacts might be the same person. You can link them together as a single contact."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Linked contacts"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"From your accounts"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Choose photo"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"From <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Delete <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Delete <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Delete <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Photo from <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>not checked"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Photo from <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>checked"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Photo from unknown account not selected"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Photo from unknown account selected"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Suggestions"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"New"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Open navigation drawer"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Directory"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Work directory"</string>
     <string name="local_search_label" msgid="2551177578246113614">"All contacts"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"More than <xliff:g id="COUNT">%d</xliff:g> found."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Quick contact for <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(No name)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Frequently contacted"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"View contact"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"All contacts with phone numbers"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Work profile contacts"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"View updates"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Name"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nickname"</string>
-    <string name="full_name" msgid="6602579550613988977">"Name"</string>
     <string name="name_given" msgid="4280790853455320619">"First name"</string>
     <string name="name_family" msgid="7466985689626017037">"Surname"</string>
     <string name="name_prefix" msgid="59756378548779822">"Name prefix"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Email <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Email"</string>
     <string name="postal_street" msgid="8133143961580058972">"Street"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"PO box"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Neighbourhood"</string>
     <string name="postal_city" msgid="6597491300084895548">"City"</string>
     <string name="postal_region" msgid="6045263193478437672">"County"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Postcode"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"More groups…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Removing \"<xliff:g id="GROUP">%s</xliff:g>\" from sync will also remove any ungrouped contacts from sync."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Saving display options…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Done"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Cancel"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Customised view"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Save imported contacts to:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM card"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancel export of <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Couldn\'t cancel vCard import/export"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Unknown error."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Couldn\'t open \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Couldn\'t open \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Couldn\'t start the exporter: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"There is no exportable contact."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"You have disabled a required permission."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"An error occurred during export: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Required filename is too long (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O error"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Not enough memory. The file may be too large."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Couldn\'t parse vCard for an unexpected reason."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"The format isn\'t supported."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Couldn\'t collect meta information of given vCard file(s)."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"One or more files couldn\'t be imported (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Finished exporting <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Finished exporting contacts."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Finished exporting contacts. Please click the notification to share contacts."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exporting contact data"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Contact data is being exported."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Couldn\'t get database information."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"There are no exportable contacts. If you do have contacts on your phone, some data providers may not allow the contacts to be exported from the phone."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"There are no exportable contacts."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"The vCard composer didn\'t start properly."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Couldn\'t export"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"The contact data wasn\'t exported.\nReason: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importing <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Couldn\'t read vCard data"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Reading vCard data cancelled"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Finished importing vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importing <xliff:g id="FILENAME">%s</xliff:g> cancelled"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> will be imported shortly."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"The file will be imported shortly."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard import request was rejected. Try again later."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> will be exported shortly."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"The file will be exported shortly."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Contacts will be exported shortly."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard export request was rejected. Try again later."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Caching vCard(s) to local temporary storage. The actual import will start soon."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Couldn\'t import vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contact received over NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Export contacts?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Caching"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importing <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importing <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Export to .vcf file"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sort by"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"First name"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"My info"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Set up your profile"</string>
     <string name="setting_about" msgid="7014388749752042863">"About Contacts"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Share visible contacts"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Failed to share visible contacts."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Share favourite contacts"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Share all contacts"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Failed to share contacts."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"There are no contacts to share."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contacts to display"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contacts to display"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Define customised view"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Customise view"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Save"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Search contacts"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favourites"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"No contacts."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Clear frequents"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Select SIM card"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Manage accounts"</string>
     <string name="menu_import" msgid="6107961135813836467">"Import"</string>
     <string name="menu_export" msgid="2658783911863503902">"Export"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blocked numbers"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"stop searching"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Clear search"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Contact display options"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Account"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Always use this for calls"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Call with"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Call with a note"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Type a note to send with the call…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"SEND &amp; CALL"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> unread items. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> unread item. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Build version"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Open-source licences"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licence details for open-source software"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Delete"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellipsis"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> hr <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sec"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> hr <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sec"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"This shortcut has been disabled"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Contact was removed"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Import"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"No connection"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Show more"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Finished importing SIM card"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Import failed"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Couldn\'t import contacts from SIM card"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importing SIM"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index f0ed779..e329b52 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contactos"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contactos"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Agregar contacto"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Contacto"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Marcado directo"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Mensaje directo"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Seleccionar acceso directo"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Seleccionar un número para la llamada"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Seleccionar un número para el mensaje"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Elegir contacto"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Agregar al contacto"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Seleccionar un contacto"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Seleccionar"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Crear contacto nuevo"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Detalles de contacto"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Acerca de"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Actualizaciones"</string>
     <string name="searchHint" msgid="8482945356247760701">"Buscar contactos"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Ver contacto"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Agregar a favoritos"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Eliminar de favoritos"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Eliminado de favoritos"</string>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Borrar"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Cambiar foto"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Crear acceso directo"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Llamar al contacto"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar texto al contacto"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Desvincular"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Quitar contactos"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Cambiar nombre de la etiqueta"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Seleccionar contactos"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Agregar contactos"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Quitar de la etiqueta"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Agregar contacto"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Crear nueva…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Crear etiqueta"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"¿Deseas desvincular este contacto en múltiples contactos?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desvincular"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"¿Deseas guardar los cambios que realizaste y desvincular este contacto en múltiples contactos?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Guardar"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Vincular contactos"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Selecciona el contacto que quieres vincular 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Se vinculó a <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contactos   <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contactos   <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"De Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"De <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Borrar este contacto suprimirá la información de múltiples cuentas."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"¿Deseas borrar este contacto?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Borrar"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Descartar cambios"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"El contacto no existe."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Se agregó el contacto a la pantalla principal."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> se agregó a la pantalla principal."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Crear nuevo contacto"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Crear contacto nuevo"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"No hay imágenes disponibles en el tablet."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"No hay imágenes disponibles en el dispositivo."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto de contacto"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nombre personalizado de etiqueta"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar llamadas directamente al correo de voz"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Eliminar foto"</string>
     <string name="noContacts" msgid="2228592924476426108">"Tu lista de contactos está vacía"</string>
-    <string name="noGroups" msgid="4607906327968232225">"No hay etiquetas."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Para crear grupos, necesitas una cuenta."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Ningún contacto tiene esta etiqueta"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"No hay contactos en esta cuenta"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Tu lista de contactos está vacía"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Se produjo un error al guardar el contacto"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"No se pudieron guardar los cambios en la foto del contacto"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"No se pudo cargar la etiqueta"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etiqueta guardada"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Se borró la etiqueta"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Se creó la etiqueta"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"No se puede crear la etiqueta"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Enviar mensaje"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Elegir contactos"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Enviar"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos con números de teléfono</item>
-      <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" 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" 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="5948889261993124839">"Todos"</string>
-    <string name="callBack" msgid="5498224409038809224">"Volver a llamar"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Llamar nuevamente"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Regresar llamada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"¿Deseas agregar \"<xliff:g id="EMAIL">%s</xliff:g>\" a los contactos?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"más"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nombres de tus contactos"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"No se encontró ninguna aplicación que pueda realizar esta acción."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Haz clic para volver a la pantalla anterior."</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Agregar número de teléfono"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Agregar correo electrónico"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nombre de etiq."</string>
     <string name="audio_chat" msgid="2535716629358298691">"Chat de voz"</string>
     <string name="video_chat" msgid="1872255818640336072">"Chat de video"</string>
-    <string name="connections" msgid="8098440723172028350">"Conexiones"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Agregar conexión"</string>
-    <string name="recent" msgid="2659189233141493004">"Recientes"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Actualiz. recientes"</string>
     <string name="account_type_format" msgid="718948015590343010">"Contacto de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Cuenta de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Tomar foto"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Tomar nueva foto"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Elegir una foto"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Seleccionar una foto nueva"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Seleccionar todo"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Desmarcar todos"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Agregar nuevo"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Agregar organización"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Fecha"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Cambiar"</string>
-    <string name="description_star" msgid="2605854427360036550">"favorito"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Editar contacto"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancelar"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Atrás"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"cerrar"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"¿Deseas vincular 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Agregar a Mis contactos"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Directorio <xliff:g id="TYPE">%1$s</xliff:g>"</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="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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Agregar a contactos"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Agregar al contacto"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Cerrar"</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="7122002148518724139">"Incluir el año"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Contacto"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Cargando..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crear un contacto nuevo"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Agregar cuenta"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importar"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Crear nueva…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descartar"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancelar"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"¿Deseas descartar las personalizaciones?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Buscar contactos"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Quitar contactos"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Mi perfil local"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Mi perfil de <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Mostrar todos los contactos"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantén tus contactos a salvo aunque pierdas el dispositivo: sincronízalos con un servicio online."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Agregar una cuenta"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Tómate un minuto para agregar una cuenta desde la que se creará una copia de seguridad de tus contactos en Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Se guardarán los contactos nuevos en <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Elige una cuenta predeterminada para los contactos nuevos:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Reciente"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Información"</string>
-    <string name="send_message" msgid="8938418965550543196">"Enviar mensaje"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Creando una copia personal..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Mañana"</string>
     <string name="today" msgid="8041090779381781781">"Hoy"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Hoy a la hora <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Mañana a la hora <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Evento sin título)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Establecer"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Sitio web"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relación"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Cuenta"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nombre"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Correo electrónico"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Teléfono"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Haz clic aquí para expandir el editor de contacto."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Haz clic aquí para contraer el editor de contacto."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"instrucciones sobre cómo llegar a la ubicación"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS reciente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Haz clic para responder."</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS reciente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Haz clic para responder."</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrante"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"realizada"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdida"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"Llamada reciente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Más campos"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Cambiar foto de contacto"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Agregar foto de contacto"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"No se pudo abrir el editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Guardar en"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"No se puede editar la información de contacto de <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Actualmente, los contactos se guardan en <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Presiona dos veces para elegir una cuenta diferente."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Contactos vinculados (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Contacto vinculado</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contactos vinculados"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"VINCULAR CONTACTOS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other">Hay <xliff:g id="COUNT">%d</xliff:g> posibles duplicados</item>
-      <item quantity="one">Hay 1 posible duplicado</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">Se vincularon <xliff:g id="COUNT">%d</xliff:g> contactos</item>
-      <item quantity="one">Se vinculó 1 contacto</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contacto"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Posibles duplicados"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Es posible que estos contactos sean de la misma persona. Puedes vincularlos como un solo contacto."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Contactos vinculados"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"De tus cuentas"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Elegir foto"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Desde <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Borrar <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Borrar <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Borrar <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"No se seleccionó la foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Se seleccionó la foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"No se seleccionó la foto de una cuenta desconocida"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Se seleccionó la foto de una cuenta desconocida"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Sugerencias"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nuevo"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Abrir panel lateral de navegación"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Directorio"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Directorio de trabajo"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Todos los contactos"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Se encontraron más de <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Contacto rápido de <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Sin nombre)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactado con frecuencia"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Ver contacto"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Todos los contactos con número de teléfono"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Contactos del perfil de trabajo"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Ver actualizaciones"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nombre"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Apodo"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nombre"</string>
     <string name="name_given" msgid="4280790853455320619">"Nombre"</string>
     <string name="name_family" msgid="7466985689626017037">"Apellido"</string>
     <string name="name_prefix" msgid="59756378548779822">"Prefijo del nombre"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Enviar correo electrónico a <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Correo"</string>
     <string name="postal_street" msgid="8133143961580058972">"Dirección postal"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Apartado postal"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Barrio"</string>
     <string name="postal_city" msgid="6597491300084895548">"Ciudad"</string>
     <string name="postal_region" msgid="6045263193478437672">"Estado"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Código POSTAL"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Más grupos…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"La eliminación de \"<xliff:g id="GROUP">%s</xliff:g>\" de la sincronización también eliminará de la sincronización todos los contactos que no estén agrupados."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Guardando opciones de visualización..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Finalizar"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Cancelar"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Vista personalizada"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Guardar los contactos importados en la siguiente ubicación:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Tarjeta SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"¿Deseas cancelar la exportación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"No se canceló la impor./expor. de vCard."</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Error desconocido"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"No se pudo abrir \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"No se pudo abrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"No se pudo iniciar el exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"No hay contactos para exportar."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Inhabilitaste un permiso necesario."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Se produjo un error durante la exportación: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"El nombre de archivo requerido es demasiado largo (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Error de E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Memoria insuficiente (es probable que el archivo sea muy grande)."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"No se pudo analizar el archivo vCard debido a un error inesperado."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"El formato no es compatible."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"No se pudieron recopilar los metadatos de los archivos vCard proporcionados."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"No se pudieron importar uno o más archivos (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Finalizó la exportación de <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Finalizó la exportación de contactos."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Se completó la exportación de los contactos. Haz clic en la notificación para compartirlos."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando datos de contacto"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Se están exportando los datos de contacto."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"No se pudo obtener la información de la base de datos."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"No hay contactos exportables. Si tienes contactos en el dispositivo, es posible que algunos proveedores de datos no permitan la exportación de contactos desde el dispositivo."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"No hay contactos para exportar."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"El compositor de la vCard no se inició correctamente."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"No se pudo exportar"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"No se exportaron los datos del contacto.\nMotivo: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importando <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"No se pudieron leer los datos de vCard."</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Se canceló la lectura de datos de la vCard."</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Finalizó la importación de la vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Se canceló la importación de <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> se importará en breve."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"El archivo se importará en breve."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Se rechazó la solicitud de importación de la vCard. Vuelve a intentarlo más tarde."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> se exportará en breve."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"El archivo se exportará en breve."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Los contactos se exportarán en breve."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Se rechazó la solicitud de exportación de la vCard. Vuelve a intentarlo más tarde."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contacto"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Almacenando vCard(s) en caché local temporal. La importación comenzará pronto."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"No se pudo importar archivo de vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contac recib NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"¿Exportar contactos?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Almacenando en caché"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exportar al archivo .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordenar por"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nombre"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Mi información"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Configura tu perfil"</string>
     <string name="setting_about" msgid="7014388749752042863">"Acerca de Contactos"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Compartir contactos visibles"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"No se pudieron compartir los contactos visibles."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartir contactos favoritos"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Compartir todos los contactos"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"No se pudieron compartir los contactos."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"No hay contactos para compartir."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contactos para mostrar"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactos para mostrar"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Definir vista personalizada"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Personalizar vista"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Guardar"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Buscar contactos"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"No hay contactos."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Borrar contactos frecuentes"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Seleccionar tarjeta SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Administrar cuentas"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importar"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exportar"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> a través de <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"detener la búsqueda"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Borrar la búsqueda"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opciones de visualización de contactos"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Cuenta"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Usar siempre para llamadas"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Llamar con"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Llamada con una nota"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Escribe una nota para enviar con la llamada…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ENVIAR Y LLAMAR"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> elementos no leídos. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> elemento no leído. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versión de compilación"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licencias de código abierto"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalles de la licencia de software de código abierto"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Borrar"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Elipsis"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Este acceso directo se inhabilitó"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Se quitó el contacto"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importar"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Sin conexión"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Mostrar más"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Terminó la importación de la tarjeta SIM"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Error al importar"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"No se pudieron importar los contactos de la tarjeta SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importando la tarjeta SIM"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index a3547c5..d125fa0 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contactos"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contactos"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Añadir contacto"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Contacto"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Llamada directa"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Mensaje directo"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Elegir acceso directo contacto"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Elegir número para llamar"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Elegir un número para el mensaje"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Elegir contacto"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Añadir al contacto"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Elige un contacto"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Seleccionar"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Crear nuevo contacto"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Detalles del contacto"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Información de"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Actividad"</string>
     <string name="searchHint" msgid="8482945356247760701">"Buscar contactos"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Ver contacto"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Añadir a Favoritos"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Eliminar de Favoritos"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Eliminado de favoritos"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Crear acceso directo"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Llamar al contacto"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar SMS al contacto"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Desvincular"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Quitar contactos"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Cambiar nombre de etiqueta"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Seleccionar contactos"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Añadir contactos"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Eliminar de la etiqueta"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Añadir contacto"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Crear…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Crear etiqueta"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"¿Desvincular este contacto en varios contactos?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desvincular"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"¿Quieres guardar los cambios que has hecho y desvincular este contacto en varios contactos?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Guardar"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Vincular contactos"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Selecciona el contacto que quieras vincular 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> enlazado"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contactos · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contactos · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"De Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"De <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Si se elimina este contacto, se eliminarán detalles de varias cuentas."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"¿Eliminar este contacto?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Eliminar"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Descartar cambios"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Este contacto no existe."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contacto añadido a la pantalla inicio."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> añadido a la pantalla de inicio."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Crear nuevo contacto"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Crear nuevo contacto"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"No hay ninguna imagen disponible en el tablet."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"No hay ninguna imagen disponible en el teléfono."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto de contacto"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nombre del campo personalizado"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar llamadas directamente al buzón de voz"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Eliminar foto"</string>
     <string name="noContacts" msgid="2228592924476426108">"La lista de contactos está vacía"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Sin etiquetas."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Para poder crear grupos, necesitas una cuenta."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"No hay ningún contacto con esta etiqueta"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"No hay contactos en esta cuenta"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"La lista de contactos está vacía"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"No se ha podido guardar el contacto"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"No se han podido guardar los cambios en la foto del contacto"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"No se ha podido cargar la etiqueta"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etiqueta guardada"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiqueta eliminada"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etiqueta creada"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"No se puede crear la etiqueta"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Enviar mensaje"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Seleccionar contactos"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Enviar"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos con número de teléfono</item>
-      <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" 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" 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="5948889261993124839">"Todos"</string>
-    <string name="callBack" msgid="5498224409038809224">"Llamar"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Volver a llamar"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Devolver llamada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"¿Quieres añadir \"<xliff:g id="EMAIL">%s</xliff:g>\" a Contactos?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"más"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nombres de tus contactos"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"No se ha detectado ninguna aplicación que pueda hacer esta acción."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Haz clic para volver a la pantalla anterior"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Añadir número de teléfono"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Añadir correo electrónico"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nombre etiqueta"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Chat de voz"</string>
     <string name="video_chat" msgid="1872255818640336072">"Chat de vídeo"</string>
-    <string name="connections" msgid="8098440723172028350">"Conexiones"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Añadir conexión"</string>
-    <string name="recent" msgid="2659189233141493004">"Reciente"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Actualizaciones recientes"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Cuenta de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Hacer una foto"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Hacer una foto nueva"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Elegir foto"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Seleccionar nueva foto"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Seleccionar todo"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Desmarcar todo"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Añadir nuevo"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Añadir organización"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Fecha"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Cambiar"</string>
-    <string name="description_star" msgid="2605854427360036550">"favoritos"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Editar contacto"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancelar"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Atrás"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"cerrar"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"¿Quieres vincular 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Añadir a Mis contactos"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Directorio <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Ajustes"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ajustes"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Añadir a contactos"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Añadir al contacto"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Cerrar"</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="7122002148518724139">"Incluir año"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Contacto"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Cargando..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crear un contacto"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Añadir cuenta"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importar"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Crear…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descartar"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancelar"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"¿Quieres descartar las personalizaciones?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Buscar contactos"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Quitar contactos"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Mi perfil local"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Mi perfil de <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Mostrando todos los contactos"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantén tus contactos a salvo aunque pierdas el teléfono: sincronízalos con un servicio online."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Añadir una cuenta"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Dedica un minuto a añadir una cuenta que hará copias de seguridad de tus contactos en Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Los nuevos contactos se guardan en <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Selecciona una cuenta predeterminada para los contactos nuevos:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Recientes"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Información"</string>
-    <string name="send_message" msgid="8938418965550543196">"Enviar mensaje"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Creando una copia personal..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Mañana"</string>
     <string name="today" msgid="8041090779381781781">"Hoy"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Hoy a las <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Mañana a las <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Evento sin título)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Establecer"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Sitio web"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relación"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Cuenta"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nombre"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Correo electrónico"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Teléfono"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Haz clic para ampliar el editor de contactos."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Haz clic para contraer el editor de contactos."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"indicaciones para llegar a la ubicación"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms reciente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. haz clic para responder"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms reciente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. haz clic para responder"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"recibida"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"realizada"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdida"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"llamada reciente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Más campos"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Cambiar la foto del contacto"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Añadir una foto del contacto"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"No se ha podido abrir el editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Se guardará en"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"No se puede editar la información de contacto de <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Actualmente los contactos se guardan en <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Toca dos veces para seleccionar otra cuenta."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Contactos enlazados (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Contacto enlazado</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contactos enlazados"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"VINCULAR CONTACTOS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> posibles duplicados</item>
-      <item quantity="one">1 posible duplicado</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos enlazados</item>
-      <item quantity="one">1 contacto enlazado</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contacto"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Posibles duplicados"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Es posible que estos contactos se correspondan a la misma persona. Puedes enlazarlos y crear un único contacto."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Contactos enlazados"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"De tus cuentas"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Elegir foto"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"De <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Eliminar <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Eliminar <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Eliminar <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> no seleccionada"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> seleccionada"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"No se ha seleccionado una foto de una fuente desconocida"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Se ha seleccionado una foto de una fuente desconocida"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Sugerencias"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nuevo"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Abrir panel de navegación"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Directorio"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Directorio de trabajo"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Todos los contactos"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Se han encontrado más de <xliff:g id="COUNT">%d</xliff:g> contactos."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Contacto rápido de <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Sin nombre)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactos frecuentes"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Ver contacto"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Todos los contactos con número"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Contactos del perfil de trabajo"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Ver actualizaciones"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"Tarjeta SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nombre"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Seudónimo"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nombre"</string>
     <string name="name_given" msgid="4280790853455320619">"Nombre"</string>
     <string name="name_family" msgid="7466985689626017037">"Apellidos"</string>
     <string name="name_prefix" msgid="59756378548779822">"Prefijo del nombre"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Enviar un correo a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Correo electrónico"</string>
     <string name="postal_street" msgid="8133143961580058972">"Calle"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Apartado postal"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Vecindario"</string>
     <string name="postal_city" msgid="6597491300084895548">"Ciudad"</string>
     <string name="postal_region" msgid="6045263193478437672">"Provincia/Estado"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Código postal"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Más grupos…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Si eliminas \"<xliff:g id="GROUP">%s</xliff:g>\" de las sincronización, también se eliminarán todos los contactos no agrupados."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Guardando opciones de visualización…"</string>
-    <string name="menu_done" msgid="796017761764190697">"OK"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Cancelar"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Vista personalizada"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Guardar contactos importados en:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Tarjeta SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"¿Seguro que quieres cancelar la exportación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Error al cancelar la importación/exportación de vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Error desconocido"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"No se ha podido abrir el archivo \"<xliff:g id="FILE_NAME">%s</xliff:g>\" (<xliff:g id="EXACT_REASON">%s</xliff:g>)."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"No se ha podido abrir el archivo \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" (<xliff:g id="EXACT_REASON">%2$s</xliff:g>)."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"No se ha podido iniciar la exportación: (\"<xliff:g id="EXACT_REASON">%s</xliff:g>\")."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"No hay contactos que exportar."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Has inhabilitado un permiso necesario."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Se ha producido un error durante la exportación (\"<xliff:g id="EXACT_REASON">%s</xliff:g>\")."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"El nombre de archivo obligatorio es demasiado largo (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Error de E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"No hay suficiente espacio de memoria (el archivo puede ser demasiado grande)."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"No se ha podido analizar el archivo vCard debido a un error inesperado."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"No se admite este formato."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"No se han podido recuperar los metadatos de los archivos vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"No se ha podido importar uno o más archivos (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exportación de <xliff:g id="FILENAME">%s</xliff:g> finalizada"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Los contactos se han exportado."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Los contactos se han exportado; haz clic en la notificación para compartirlos."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando datos de contacto"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Se están exportando los datos de los contactos."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"No se ha podido obtener información de la base de datos."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"No hay contactos que exportar. Si ya tienes contactos en el teléfono, es posible que el proveedor de datos no permita que se exporten los contactos del teléfono."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"No hay contactos que se puedan exportar."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"El redactor de vCard no se ha iniciado correctamente."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Error al exportar"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"No se han exportado los datos de contactos (\nmotivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\")."</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importando <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"No se han podido leer los datos de la vCard."</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Lectura de datos de vCard cancelada"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importación de <xliff:g id="FILENAME">%s</xliff:g> de vCard finalizada"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Se ha cancelado la importación de <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> se importará en breve."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"El archivo se importará en breve."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Se ha rechazado la solicitud de importación de vCard. Inténtalo de nuevo más tarde."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> se exportará en breve."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"El archivo se exportará en breve."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Los contactos se van a exportar en breve."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Se ha rechazado la solicitud de exportación de vCard. Inténtalo de nuevo más tarde."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contacto"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Se están almacenando los archivos vCard en la caché. La importación empezará pronto."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Error al importar el archivo vCard"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contacto recibido por NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"¿Exportar contactos?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Almacenando en caché"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exportar a archivo .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordenar por"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nombre"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Mi información"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Configura tu perfil"</string>
     <string name="setting_about" msgid="7014388749752042863">"Información sobre Contactos"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Compartir contactos visibles"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"No se han podido compartir los contactos visibles."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartir contactos favoritos"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Compartir todos los contactos"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"No se han podido compartir contactos."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"No hay contactos que compartir."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contactos que mostrar"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactos que mostrar"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Definir vista personalizada"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Personalizar vista"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Guardar"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Buscar contactos"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"No hay contactos."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Borrar frecuentes"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Seleccionar tarjeta SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Administrar cuentas"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importar"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exportar"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> con <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"dejar de buscar"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Borrar la búsqueda"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opciones para mostrar contactos"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Cuenta"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Usar siempre esta para llamadas"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Llamar con"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Llamada con una nota"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Escribe una nota para enviarla con la llamada…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ENVIAR Y LLAMAR"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> elementos no leídos. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> elemento no leído. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versión de la compilación"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licencias de código abierto"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalles de las licencias de software libre"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Eliminar"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Puntos suspensivos"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Se ha inhabilitado este acceso directo"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"El contacto se ha eliminado"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importar"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"No hay conexión"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Mostrar más"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Se ha importado la tarjeta SIM"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"No se ha podido realizar la importación"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"No se han podido importar los contactos de la tarjeta SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Se está importando la tarjeta SIM"</string>
 </resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index cfd84d6..78d43a3 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontaktid"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontaktid"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Kontakti lisamine"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Otsevalimine"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Otsesõnum"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Kontakti otsetee valimine"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Valige helistamiseks number"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Valige sõnumi jaoks number"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kontakti valimine"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Kontaktile lisamine"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontakti valimine"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Valimine"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Loo uus kontakt"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Kontakti üksikasjad"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Teave:"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Värskendused"</string>
     <string name="searchHint" msgid="8482945356247760701">"Otsige kontakte"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Kuva kontakt"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Lisa lemmikutesse"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Eemalda lemmikutest"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Lemmikutest eemaldatud"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Loo otsetee"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Helista kontaktile"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Saada kontaktile SMS"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Tühista linkimine"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Eemalda kontaktid"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Nimeta silt ümber"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Vali kontaktid"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Lisa kontakte"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Eemalda sildilt"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Lisa kontakt"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Uue loomine …"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Sildi loomine"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Kas tühistada selle kontakti linkimine ja jagada see mitmeks kontaktiks?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Tühista linkimine"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Kas soovite tehtud muudatused salvestada, tühistada selle kontakti linkimise ja jagada selle mitmeks kontaktiks?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Salvesta"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontaktide linkimine"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Valige kontakt, kelle soovite linkida kontaktiga <xliff:g id="NAME">%s</xliff:g>:"</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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> on lingitud"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontakti · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakti · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google\'ilt"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Kontolt <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Selle kontakti kustutamisel kustutatakse andmed mitmelt kontolt."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Kas kustutada see kontakt?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Kustuta"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Loobu muudatustest"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakti ei ole olemas."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt lisati avaekraanile."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> lisati avaekraanile."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Loo uus kontakt"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Loo uus kontakt"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Tahvelarvutis pole ühtegi pilti saadaval."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Telefonis pole ühtegi pilti saadaval."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakti foto"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Kohandatud sildi nimi"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Saada kõned otse kõneposti"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Eemalda foto"</string>
     <string name="noContacts" msgid="2228592924476426108">"Teie kontaktiloend on tühi"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Silte pole."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Rühmade loomiseks vajate kontot."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Selle sildiga kontakte pole"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Kontol ei ole ühtki kontakti"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Teie kontaktiloend on tühi"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Viga kontakti salvestamisel"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kontakti foto muudatusi ei õnnestunud salvestada"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Sildi laadimine ebaõnnestus"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Silt on salvestatud"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Silt on kustutatud"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Silt on loodud"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Silti ei saa luua"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Saada sõnum"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kontaktide valimine"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Saada"</string>
-    <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" 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" 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="5948889261993124839">"Kõik"</string>
-    <string name="callBack" msgid="5498224409038809224">"Helista tagasi"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Helista uuesti"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Tagasihelistamine"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Kas lisada „<xliff:g id="EMAIL">%s</xliff:g>” kontaktidesse?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"pluss"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktist"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Teie kontaktide nimed"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Selle toimingu käsitsemiseks ei leitud ühtegi rakendust."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klõpsake eelmisele ekraanikuvale naasmiseks"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Lisage telefoninumber"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Lisage e-posti aadress"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Sildi nimi"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Häälvestlus"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videovestlus"</string>
-    <string name="connections" msgid="8098440723172028350">"Ühendused"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Lisa ühendus"</string>
-    <string name="recent" msgid="2659189233141493004">"Hiljutised"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Uusimad värskendused"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Teenuse <xliff:g id="SOURCE">%1$s</xliff:g> konto"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Tee foto"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Tee uus foto"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Vali foto"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Vali uus foto"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Vali kõik"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Tühista kõikide valik"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Lisa uus"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Lisa organisatsioon"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Kuupäev"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Silt"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Muuda"</string>
-    <string name="description_star" msgid="2605854427360036550">"lemmik"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Muuda kontakti"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Tühista"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Tagasi"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"sule"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Kas linkida 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Lisa lehele Minu kontaktid"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Kataloog <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Seaded"</string>
     <string name="menu_settings" msgid="377929915873428211">"Seaded"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Lisa kontaktidesse"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Kontaktile lisamine"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Sule"</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="7122002148518724139">"Kaasa aasta"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Laadimine ..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Loo uus kontakt"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Konto lisamine"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importimine"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Uue loomine …"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Loobu"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Tühista"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Kas soovite kohandamistest loobuda?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Otsige kontakte"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Kontaktide eemaldamine"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Minu kohalik profiil"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Minu profiil: <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Kõigi kontaktide kuvamine"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Hoidke oma kontaktid turvalisena ka siis, kui kaotate telefoni: sünkroonige need võrguteenusega."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Konto lisamine"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Leidke pisut aega ja lisage konto, mis varundab teie kontaktid Google\'is."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Uued kontaktid salvestatakse kontole <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Valige uute kontaktide jaoks vaikekonto:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Kuva vähem"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Hiljutine"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Teave"</string>
-    <string name="send_message" msgid="8938418965550543196">"Saada sõnum"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Isikliku koopia loomine ..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Homme"</string>
     <string name="today" msgid="8041090779381781781">"Täna"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Täna kell <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Homme kell <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Pealkirjata sündmus)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Määra"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Kiirsuhtlus"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Veebisait"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Sündmus"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Seos"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Konto"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nimi"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-post"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Klõpsake kontaktiredigeerija laiendamiseks."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klõpsake kontaktiredigeerija ahendamiseks."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"juhised asukohta"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"viimane SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klõpsake vastamiseks"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"viimane SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klõpsake vastamiseks"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"sissetulevad"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"väljaminevad"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"vastamata"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"viimane kõne. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Rohkem välju"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Kontakti foto muutmine"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Kontakti foto lisamine"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Redigeerija avamine ebaõnnestus."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Salvestamine asukohta"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktiteavet kontol <xliff:g id="ACCOUNT">%s</xliff:g> ei saa muuta"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Praegu salvestatakse kontole <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Teise konto valimiseks topeltpuudutage."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Lingitud kontaktid (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Lingitud kontakt</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> lingitud kontakti"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LINGI KONTAKTID"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"TÜHISTA"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> võimalikku duplikaati</item>
-      <item quantity="one">1 võimalik duplikaat</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> lingitud kontakti</item>
-      <item quantity="one">1 lingitud kontakt</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"See kontakt"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Võimalikud duplikaadid"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Need kontaktid võivad olla sama isik. Saate need linkida üheks kontaktiks."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Lingitud kontaktid"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Teie kontodelt"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Foto valimine"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Kontolt <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Kustuta <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Kustuta <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Kustuta <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto kasutajalt <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> pole märgitud"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto kasutajalt <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> on märgitud"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Tundmatult kontolt pärinev foto pole märgitud"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Tundmatult kontolt pärinev foto on märgitud"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Soovitused"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Uus"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Ava navigeerimissahtel"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Kataloog"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Töökontaktide kataloog"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Kõik kontaktid"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Leitud rohkem kui <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Kiirkontakt: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Nimi puudub)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Sageli valitud kontaktid"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Vaadake kontakti"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Kõik telefoninumbritega kontaktid"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Tööprofiili kontaktid"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Kuva värskendused"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM-kaart"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nimi"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Hüüdnimi"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nimi"</string>
     <string name="name_given" msgid="4280790853455320619">"Eesnimi"</string>
     <string name="name_family" msgid="7466985689626017037">"Perekonnanimi"</string>
     <string name="name_prefix" msgid="59756378548779822">"Nime eesliide"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Saada meil: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-post"</string>
     <string name="postal_street" msgid="8133143961580058972">"Tänav"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Postkast"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Naabruskond"</string>
     <string name="postal_city" msgid="6597491300084895548">"Linn"</string>
     <string name="postal_region" msgid="6045263193478437672">"Riik"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Sihtnumber"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Rohkem rühmi ..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Rühma „<xliff:g id="GROUP">%s</xliff:g>” eemaldamisel sünkroonimisest eemaldatakse sünkroonimisest ka kõik rühmitamata kontaktid."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Kuvavalikute salvestamine ..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Valmis"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Tühista"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Kohandatud vaade"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Imporditud kontaktid salvestatakse kontole:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-kaart"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Kas tühistada faili <xliff:g id="FILENAME">%s</xliff:g> eksportimine?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCardi impordi/ekspordi tühist. ebaõnn."</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Tundmatu viga."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Faili „<xliff:g id="FILE_NAME">%s</xliff:g>” ei saa avada: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Faili „<xliff:g id="FILE_NAME">%1$s</xliff:g>” ei saa avada: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Eksportijat ei saa lähtestada: „<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Eksporditavad kontaktid puuduvad."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Olete nõutud loa keelanud."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Viga eksportimisel: „<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Kohustuslik failinimi on liiga pikk („<xliff:g id="FILENAME">%s</xliff:g>”)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O viga"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Pole piisavalt mälu. Fail võib olla liiga suur."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Ootamatul põhjusel vCardi sõelumine ebaõnnestus."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Vormingut ei toetata."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"vCardi faili(de) metaandmete kogumine ebaõnnestus."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Vähemalt ühe faili importimine ebaõnnestus (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Faili <xliff:g id="FILENAME">%s</xliff:g> eksportimine on lõpetatud."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontaktide eksportimine lõpetati."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktide eksportimine lõpetati. Kontaktide jagamiseks klõpsake märguandel."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontaktandmete eksportimine"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktandmed eksporditakse."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Andmebaasiteabe hankimine ebaõnnestus."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Eksporditavaid kontakte pole. Kui teil siiski on telefonis kontakte, ei pruugi mõned andmesidepakkujad kontaktide eksportimist telefonist lubada."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Eksporditavaid kontakte ei ole."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCardi helilooja ei käivitunud korralikult."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Eksport ebaõnnestus"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontaktandmeid ei eksporditud.\nPõhjus: „<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importimine: <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCardi andmete lugemine ebaõnnestus"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCardi andmete lugemine tühistati"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCardi faili <xliff:g id="FILENAME">%s</xliff:g> importimine on lõpetatud"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Faili <xliff:g id="FILENAME">%s</xliff:g> importimine tühistati"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Fail <xliff:g id="FILENAME">%s</xliff:g> imporditakse peagi."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fail imporditakse peagi."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCardi importimistaotlus lükati tagasi. Proovige hiljem uuesti."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Fail <xliff:g id="FILENAME">%s</xliff:g> eksporditakse peagi."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Fail eksporditakse peagi."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktid eksporditakse peagi."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCardi eksportimistaotlus lükati tagasi. Proovige hiljem uuesti."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCardi(de) vahemälustamine kohalikku ajutisse mäluruumi. Tegelik importimine algab peagi."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCardi importimine ebaõnnestus."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt võeti vastu  NFC kaudu"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Eksportida kontakt?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Vahemällu salvestamine"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importimine: <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importimine: <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Eksportimine VCF-faili"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortimisalus:"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Eesnimi"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Minu teave"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Seadistage oma profiil"</string>
     <string name="setting_about" msgid="7014388749752042863">"Teave rakenduse Kontaktid kohta"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Jaga nähtavaid kontakte"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Nähtavate kontaktide jagamine ebaõnnestus."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Jaga lemmikkontakte"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Jaga kõiki kontakte"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kontaktide jagamine ebaõnnestus."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Jagamiseks ei ole ühtki kontakti."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kuvatavad kontaktisikud"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kuvatavad kontaktid"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Kohandatud vaate määramine"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Vaate kohandamine"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Salvesta"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Otsi kontakte"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Lemmikud"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Kontaktid puuduvad."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Sagedaste kustutamine"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM-kaardi valimine"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Kontode haldamine"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importimine"</string>
     <string name="menu_export" msgid="2658783911863503902">"Eksportimine"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokeeritud numbrid"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> allika <xliff:g id="SOURCE">%2$s</xliff:g> kaudu"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"otsimise peatamine"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Otsingu kustutamine"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Kontaktide kuvavalikud"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Konto"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Kasuta helistamiseks alati seda"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Helistamine kontoga"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Kõne koos märkusega"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Sisestage märkus, mis koos kõnega saata …"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"SAADA JA HELISTA"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> lugemata üksust. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> lugemata üksus. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Järguversioon"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Avatud lähtekoodi litsentsid"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Avatud lähtekoodiga tarkvara litsentsi üksikasjad"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Kustuta"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Mõttepunktid"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"See otsetee on keelatud"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt eemaldati"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Impordi"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Ühendus puudub"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-kaart"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Kuva rohkem"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM-kaardi importimine viidi lõpule"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Importimine ebaõnnestus"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontakte ei õnnestunud SIM-kaardilt importida"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM-kaardi importimine"</string>
 </resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 2c2c25f..861ae56 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontaktuak"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontaktuak"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Gehitu kontaktua"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontaktua"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Markatze zuzena"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Mezu zuzena"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Aukeratu lasterbidea"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Aukeratu deitzeko zenbaki bat"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Aukeratu mezua bidaltzeko zenbaki bat"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Aukeratu kontaktua"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Gehitu kontaktu batean"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Aukeratu kontaktu bat"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Hautatu"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Sortu kontaktua"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Kontaktuaren xehetasunak"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Honi buruz"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Eguneratzeak"</string>
     <string name="searchHint" msgid="8482945356247760701">"Bilatu kontaktuetan"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Ikusi kontaktua"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Gehitu gogokoetan"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Kendu gogokoetatik"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Gogokoetatik kendu da"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Sortu lasterbidea"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Deitu kontaktuari"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Bidali testu-mezua kontaktuari"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Desestekatu"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Kendu kontaktuak"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Aldatu etiketaren izena"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Hautatu kontaktuak"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Gehitu kontaktuak"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Kendu etiketatik"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Gehitu kontaktua"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Sortu…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Sortu etiketa"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Kontaktuaren loturak desegin eta hainbat kontaktutan banandu nahi duzu?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Banandu"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Egin dituzun aldaketak gorde, eta hautatutako kontaktua hainbat kontaktutan banandu nahi duzu?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Gorde"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Lotu kontaktuak"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Aukeratu <xliff:g id="NAME">%s</xliff:g> kontaktuarekin lotu nahi duzuna:"</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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Lotu da <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontaktu</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google-koak"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> kontukoak"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Kontaktua ezabatzen baduzu, hainbat kontutatik ezabatuko da informazioa."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Kontaktua ezabatu nahi duzu?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Ezabatu"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Baztertu aldaketak"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Ez dago horrelako kontakturik."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Hasierako pantailan gehitu da kontaktua."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Hasierako pantailan gehitu da <xliff:g id="NAME">%s</xliff:g>."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Sortu kontaktua"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Sortu kontaktua"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Ez dago irudi erabilgarririk tabletan."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Ez dago irudi erabilgarririk telefonoan."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontaktuaren argazkia"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Etiketa pertsonalizatuaren izena"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Bidali deiak zuzenean erantzungailura"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Kendu argazkia"</string>
     <string name="noContacts" msgid="2228592924476426108">"Hutsik dago kontaktuen zerrenda"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Ez dago etiketarik."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Taldeak sortzeko, kontu bat behar duzu."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Ez dago etiketa hau duen kontakturik"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Ez dago kontakturik kontu honetan"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Hutsik dago kontaktuen zerrenda"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Errore bat gertatu da kontaktua gordetzean"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ezin izan dira gorde kontaktuaren argazkiari egindako aldaketak"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Ezin izan da kargatu etiketa"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Gorde da etiketa"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Ezabatu da etiketa"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Sortu da etiketa"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Ezin da sortu etiketa"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Bidali mezua"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Aukeratu kontaktuak"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Bidali"</string>
-    <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" 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" 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="5948889261993124839">"Guztiak"</string>
-    <string name="callBack" msgid="5498224409038809224">"Itzuli deia"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Deitu berriro"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Itzuli deia"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" kontaktuetan gehitu?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"gehi"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktu"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Kontaktuen izenak"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Ez da ekintza kudeatzeko aplikaziorik aurkitu."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Egin klik hemen aurreko pantailara itzultzeko"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Gehitu telefono-zenbakia"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Gehitu helbide elektronikoa"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etiketa-izena"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Ahots-txata"</string>
     <string name="video_chat" msgid="1872255818640336072">"Bideo-txata"</string>
-    <string name="connections" msgid="8098440723172028350">"Konexioak"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Gehitu konexioa"</string>
-    <string name="recent" msgid="2659189233141493004">"Azkenak"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Azken berritasunak"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontaktua"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> kontua"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Atera argazkia"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Atera beste argazki bat"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Aukeratu argazkia"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Hautatu beste argazki bat"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Hautatu guztiak"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Desautatu guztiak"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Gehitu beste bat"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Gehitu erakundea"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiketa"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Aldatu"</string>
-    <string name="description_star" msgid="2605854427360036550">"gogokoa"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Editatu kontaktua"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Utzi"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Atzera"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"itxi"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Uneko kontaktua eta hautatutako kontaktua lotu 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Gehitu Nire kontaktuak atalean"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> direktorioa"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Ezarpenak"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ezarpenak"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Gehitu kontaktuetan"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Gehitu kontaktuan"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Itxi"</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="7122002148518724139">"Sartu urtea"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontaktua"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Kargatzen…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Sortu kontaktua"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Gehitu kontua"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Inportatu"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Sortu…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Baztertu"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Utzi"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Pertsonalizazioak baztertu nahi dituzu?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> (<xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>)"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Bilatu kontaktuetan"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Kendu kontaktuak"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Gailuko profila"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Nire <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profila"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Kontaktu guztiak bistaratzen"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Izan kontaktuak seguru telefonoa galduta ere: sinkronizatu sareko zerbitzu batekin."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Gehitu kontu bat"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Hartu minutu pare bat Google-ko kontaktuen babeskopiak gordeko dituen kontu bat gehitzeko."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"<xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> kontuan gordeko dira kontaktu berriak."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Aukeratu kontaktu berriak gordetzeko erabili nahi duzun kontua:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ikusi gutxiago"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Azkenak"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Honi buruz"</string>
-    <string name="send_message" msgid="8938418965550543196">"Bidali mezua"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Kopia pertsonala sortzen…"</string>
     <string name="tomorrow" msgid="6241969467795308581">"Bihar"</string>
     <string name="today" msgid="8041090779381781781">"Gaur"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Gaur (<xliff:g id="TIME_INTERVAL">%s</xliff:g>)"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Bihar (<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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g> (<xliff:g id="TIME_INTERVAL">%2$s</xliff:g>)"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Izenik gabeko gertaera)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Ezarri"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Webgunea"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Gertaera"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Erlazioa"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Kontua"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Izena"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Helbide elektronikoa"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefonoa"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Egin klik kontaktuen editorea zabaltzeko."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Egin klik kontaktuen editorea tolesteko."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"kokapenerako jarraibideak"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"duela gutxiko SMSa. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. sakatu erantzuteko"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"duela gutxiko SMSa. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. sakatu erantzuteko"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"sarrerakoa"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"irteerakoa"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"galdua"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"duela gutxiko deia. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Eremu gehiago"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Aldatu kontaktuaren argazkia"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Gehitu kontaktuaren argazkia"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Ezin izan da ireki editorea."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Hemen gordeko da:"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Ezin da editatu <xliff:g id="ACCOUNT">%s</xliff:g> kontuko kontaktuaren informazioa"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> kontuan gordetzen dira kontaktuak. Beste kontu bat hautatzeko, sakatu birritan."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Lotutako kontaktuak (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Lotutako kontaktua</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> kontaktu lotuta"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LOTU KONTAKTUAK"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"UTZI"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> bikoiztu posible</item>
-      <item quantity="one">Bikoiztu posible bat</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">Lotutako <xliff:g id="COUNT">%d</xliff:g> kontaktu</item>
-      <item quantity="one">Lotutako kontaktu bat</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Kontaktu hau"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Baliteke bikoiztuak egotea"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Kontaktu hauek pertsona bera izan daitezke. Lotu egin ditzakezu, informazioa kontaktu bakarrean bilduta izateko."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Lotutako kontaktuak"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Zure kontuetatik"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Aukeratu argazkia"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Kontua: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Ezabatu <xliff:g id="DATA_TYPE">%s </xliff:g> <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Ezabatu <xliff:g id="DATA_TYPE">%1$s </xliff:g> <xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Ezabatu <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Ez da hautatu <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> erabiltzailearen kontuko argazkia"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Hautatu da <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> erabiltzailearen kontuko argazkia"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Kontu ezezaguneko argazkia hautatu gabe dago"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Kontu ezezaguneko argazkia hautatu da"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Iradokizunak"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Berriak"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Ireki nabigazio-panel lerrakorra"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Direktorioa"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Laneko kontaktuak"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Kontaktu guztiak"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> baino gehiago aurkitu dira."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Honen kontaktu bizkorra: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Izenik ez)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Sarri kontaktatutakoak"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Ikusi kontaktua"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Telefono-zenbakiak dituzten kontaktu guztiak"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Laneko profileko kontaktuak"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Ikusi berritasunak"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM txartela"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Izena"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Goitizena"</string>
-    <string name="full_name" msgid="6602579550613988977">"Izena"</string>
     <string name="name_given" msgid="4280790853455320619">"Izena"</string>
     <string name="name_family" msgid="7466985689626017037">"Abizena"</string>
     <string name="name_prefix" msgid="59756378548779822">"Izenaren aurrizkia"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Bidali mezu elektroniko bat <xliff:g id="CUSTOM_LABEL">%s</xliff:g> helbidera"</string>
     <string name="email" msgid="5668400997660065897">"Bidali mezu elektronikoa"</string>
     <string name="postal_street" msgid="8133143961580058972">"Kalea"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Posta-kutxa"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Auzoa"</string>
     <string name="postal_city" msgid="6597491300084895548">"Hiria"</string>
     <string name="postal_region" msgid="6045263193478437672">"Estatua"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Posta-kodea"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Talde gehiago…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" sinkronizaziotik kentzen baduzu, talderik gabeko kontaktu guztiak ere ezabatuko dira."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Bistaratze-aukerak gordetzen…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Eginda"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Utzi"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Ikuspegi pertsonalizatua"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Gorde inportatutako kontaktuak hemen:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM txartela"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> fitxategiaren esportazioa bertan behera utzi nahi duzu?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Ezin da vCard inportazioa edo esportazioa utzi"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Errore ezezaguna."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Ezin izan da \"<xliff:g id="FILE_NAME">%s</xliff:g>\" ireki. Arrazoia: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Ezin izan da \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ireki. Arrazoia: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Ezin izan da esportatzailea hasi. Arrazoia: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Ez dago esporta daitekeen kontakturik."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Beharrezkoa den baimen bat desgaitu duzu."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Errore bat gertatu da esportatu bitartean. Arrazoia: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Beharrezko fitxategi-izena luzeegia da (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Sarrera- edo irteera-errorea"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Ez dago behar adina memoria. Baliteke fitxategia handiegia izatea."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Ezin izan da vCard txartela analizatu ustekabeko arrazoiren batengatik."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formatua ez da bateragarria."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Ezin izan da emandako vCard txartelaren fitxategien meta-informazioa bildu."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Ezin izan da fitxategi bat edo gehiago inportatu (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Amaitu da <xliff:g id="FILENAME">%s</xliff:g> esportatzen."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Esportatu dira kontaktuak."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Esportatu dira kontaktuak. Haiek partekatzeko, egin klik jakinarazpenean."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontaktuen datuak esportatzen"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktuen datuak esportatzen ari dira."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Ezin izan da datu-baseko informazioa lortu."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Ez dago esporta daitekeen kontakturik. Telefonoan kontaktuak badituzu, baliteke datu-hornitzaileek kontaktuak telefonotik esportatzen ez uztea."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Ez dago esporta daitekeen kontakturik."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard txartelen idazlea ez da behar bezala hasi."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Ezin izan da esportatu"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Ez dira kontaktuaren datuak esportatu.\nArrazoia: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> inportatzen"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Ezin izan dira vCard datuak irakurri"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard datuen irakurketa utzi egin da"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vCard fitxategia inportatzen amaitu da"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> fitxategiaren inportazioa utzi egin da"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> fitxategia laster inportatuko da."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fitxategia laster inportatuko da."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard fitxategia inportatzeko eskaera ukatu da. Saiatu geroago."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> fitxategia laster esportatuko da."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Laster esportatuko da fitxategia."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Laster esportatuko dira kontaktuak."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard fitxategia esportatzeko eskaera ukatu da. Saiatu berriro geroago."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontaktua"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard-ak aldi baterako biltegi lokalaren cachean gordetzen ari dira. Inportazioa bera laster hasiko da."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Ezin izan da vCard fitxategia inportatu."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontaktua NFC bidez jaso da"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Kontaktuak esportatu nahi dituzu?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Cachean gordetzen"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> inportatzen: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> inportatzen: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Esportatu .vcf gisa"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordenatzeko irizpidea"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Izena"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Nire informazioa"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Konfiguratu profila"</string>
     <string name="setting_about" msgid="7014388749752042863">"Kontaktuak zerbitzuari buruz"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Partekatu ikusgai dauden kontaktuak"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Ezin izan dira partekatu ikusgai dauden kontaktuak."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Partekatu gogoko kontaktuak"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Partekatu kontaktu guztiak"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Ezin izan dira partekatu kontaktuak."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Ez dago parteka daitekeen kontakturik."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Bistaratu beharreko kontaktuak"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Bistaratu beharrekoak"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Ikuspegi pertsonalizatua"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Pertsonalizatu ikuspegia"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Gorde"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Bilatu kontaktuetan"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Gogokoak"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Ez dago kontakturik."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Garbitu sarri erabilitakoak"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Hautatu SIM txartela"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Kudeatu kontuak"</string>
     <string name="menu_import" msgid="6107961135813836467">"Inportatu"</string>
     <string name="menu_export" msgid="2658783911863503902">"Esportatu"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokeatutako zenbakiak"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="SOURCE">%2$s</xliff:g> bidez"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"gelditu bilaketa"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Garbitu bilaketa"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Kontaktuak bistaratzeko aukerak"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Kontua"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Erabili beti hau deietarako"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Deitu kontu honekin:"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Egin deia ohar batekin"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Idatzi deiarekin batera bidali beharreko oharra…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"BIDALI ETA DEITU"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. Irakurri gabeko <xliff:g id="COUNT_3">%2$d</xliff:g> elementu. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. Irakurri gabeko <xliff:g id="COUNT_1">%2$d</xliff:g> elementu. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Konpilazioaren bertsioa"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Kode irekiko lizentziak"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Kode irekiko softwarearen lizentziaren xehetasunak"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Ezabatu"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Elipsia"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Lasterbidea desgaitu egin da"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kendu da kontaktua"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Inportatu"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Ez dago konexiorik"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM txart."</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Erakutsi gehiago"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Inportatu da SIM txartela"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Ezin izan da inportatu"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Ezin izan dira inportatu SIM txarteleko kontaktuak"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM txartela inportatzen"</string>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 9386a8d..d942271 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"مخاطبین"</string>
     <string name="contactsList" msgid="8661624236494819731">"مخاطبین"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"افزودن مخاطب"</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="shortcutActivityTitle" msgid="1504383567778497348">"انتخاب مخاطب"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"افزودن به مخاطب"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"انتخاب مخاطب"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"انتخاب"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ایجاد مخاطب جدید"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"اطلاعات تماس"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"حذف"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"تغییر عکس"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"ایجاد میان‌بر"</string>
-    <string name="menu_call" msgid="3992595586042260618">"تماس با مخاطب"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"ارسال متن به مخاطب"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"لغو ارتباط"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"حذف مخاطبین"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"تغییر نام برچسب"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"انتخاب مخاطبین"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"افزودن مخاطبین"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"حذف از برچسب"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"افزودن مخاطب"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"ایجاد مورد جدید..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ایجاد برچسب"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"این مخاطب به چند مخاطب لغو پیوند شود؟"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"لغو پیوند"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"می‌خواهید تغییراتی را که قبلاً ایجاد کرده‌اید، ذخیره کنید و این مخاطب را به چند مخاطب لغو پیوند کنید؟"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"ذخیره‌"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"پیوند دادن مخاطبین"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"مخاطبی را که می‌خواهید با <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> پیوند داده شد"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> مخاطب</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> مخاطب · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> مخاطب · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> مخاطب · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> مخاطب · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"‏از Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"از <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"حذف این مخاطب، جزئیات از چند حساب را حذف می‌کند."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"این مخاطب حذف شود؟"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"حذف"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"صرف‌نظر از تغییرات"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"مخاطبی موجود نیست."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"مخاطب به صفحه اصلی اضافه شد."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> به صفحه اصلی اضافه شد."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"ایجاد مخاطب جدید"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"ایجاد مخاطب جدید"</string>
     <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="2228592924476426108">"فهرست مخاطبینتان خالی است"</string>
-    <string name="noGroups" msgid="4607906327968232225">"برچسبی وجود ندارد."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"برای ایجاد گروه‌ها، نیاز به یک حساب دارید."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"هیچ مخاطبی با این برچسب وجود ندارد"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"هیچ مخاطبی در این حساب نیست"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"فهرست مخاطبینتان خالی است"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"خطا در ذخیره مخاطب"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"تغییرات عکس مخاطب ذخیره نشد"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"برچسب بار نشد"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"برچسب ذخیره شد"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"برچسب حذف شد"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"برچسب ایجاد شد"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"برچسب ایجاد نشد"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"ارسال پیام"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"انتخاب مخاطبین"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"ارسال"</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="5948889261993124839">"همه"</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_plus_button" msgid="515164827856229880">"به اضافه"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> از <xliff:g id="TOTAL_NUMBER">%s</xliff:g> مخاطب"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"نام‌های مخاطبین شما"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"نام برچسب"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"حساب <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"برچسب"</string>
-    <string name="change_photo" msgid="8530597935483526383">"تغییر"</string>
-    <string name="description_star" msgid="2605854427360036550">"مورد دلخواه"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"ویرایش مخاطب"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"لغو"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"برگشت"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"بستن"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"مخاطب فعلی به مخاطب انتخاب شده پیوند داده شود؟"</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="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="7122002148518724139">"سال لحاظ شود"</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="4347232421410561500">"افزودن حساب"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"وارد کردن"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"ایجاد مورد جدید..."</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"صرف‌نظر کردن"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"لغو"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"از موارد سفارشی صرف‌نظر شود؟"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"جستجوی مخاطبین"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"حذف مخاطبین"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"نمایه محلی من"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"نمایه <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> من"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"نمایش همه مخاطبان"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"مخاطبین خود را ایمن نگهدارید حتی اگر گوشی شما گم شود: با یک سرویس آنلاین همگام‌سازی کنید."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"افزودن یک حساب"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"‏کمی وقت بگذارید و حسابی را اضافه کنید تا از مخاطبینتان در Google نسخه پشتیبان تهیه شود."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"مخاطب‌های جدید در <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ذخیره می‌شوند."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"انتخاب حساب پیش‌فرض برای مخاطبین جدید:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"مشاهده موارد کمتر"</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="288549957278065542">"ایجاد یک کپی شخصی..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>، ‏<xliff:g id="TIME_INTERVAL">%2$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">"پیام فوری"</string>
@@ -285,20 +220,16 @@
     <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="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">"پیامک اخیر. <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_sms" msgid="1666389577263317445">"پیامک اخیر. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. ‏<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. ‏<xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"تماس اخیر. <xliff:g id="CALL_TYPE">%1$s</xliff:g>‏. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>‏. ‏<xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"فیلدهای بیشتر"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"تغییر عکس مخاطب"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"افزودن عکس مخاطب"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"ویرایشگر باز نشد."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"ذخیره در"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"اطلاعات تماس از <xliff:g id="ACCOUNT">%s</xliff:g> قابل ویرایش نیست"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"درحال‌ حاضر در <xliff:g id="ACCOUNT_NAME">%s</xliff:g> ذخیره می‌شود. برای انتخاب حساب دیگری، دوضربه سریع بزنید."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> مخاطب پیوند داده شده"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"پیوند دادن مخاطبین"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"لغو"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> مخاطب تکراری احتمالی</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مخاطب تکراری احتمالی</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> مخاطب پیوند داده شده</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> مخاطب پیوند داده شده</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"این مخاطب"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"مخاطبین تکراری ممکن"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"ممکن است این مخاطب‌ها یک نفر باشند. می‌توانید آن‌ها را به‌عنوان یک مخاطب به هم پیوند دهید."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"مخاطب‌های پیوندداده‌شده"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"از حساب‌های شما"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"انتخاب عکس"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"از <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"حذف <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"حذف <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"حذف <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"عکس <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> انتخاب نشد"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"عکس <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> انتخاب شد"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"عکس از حساب نامشخص انتخاب نشده است"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"عکس از حساب نامشخص انتخاب شده است"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"پیشنهادها"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"جدید"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"بازکردن کشوی پیمایش"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"دایرکتوری"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"فهرست کار"</string>
     <string name="local_search_label" msgid="2551177578246113614">"همه مخاطبین"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"بیش از <xliff:g id="COUNT">%d</xliff:g> مورد پیدا شد."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"تماس سریع برای <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(بدون نام)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"اغلب تماس گرفته شده"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"مشاهده مخاطب"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"همه مخاطبین دارای شماره تلفن"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"مخاطبین نمایه کاری"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"مشاهده به‌روزرسانی‌ها"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"سیم کارت"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"نام"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"نام مستعار"</string>
-    <string name="full_name" msgid="6602579550613988977">"نام"</string>
     <string name="name_given" msgid="4280790853455320619">"نام"</string>
     <string name="name_family" msgid="7466985689626017037">"نام خانوادگی"</string>
     <string name="name_prefix" msgid="59756378548779822">"پیشوند نام"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"ارسال رایانامه به <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"رایانامه"</string>
     <string name="postal_street" msgid="8133143961580058972">"خیابان"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"صندوق پستی"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"محله"</string>
     <string name="postal_city" msgid="6597491300084895548">"شهر"</string>
     <string name="postal_region" msgid="6045263193478437672">"ایالت"</string>
     <string name="postal_postcode" msgid="572136414136673751">"کد پستی"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"گروه‌های بیشتر..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"حذف \"<xliff:g id="GROUP">%s</xliff:g>\" از همگام‌سازی نیز هر گونه مخاطب گروه‌بندی نشده‌ای را از همگام‌سازی حذف می‌کند."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"در حال ذخیره گزینه‌های نمایش..."</string>
-    <string name="menu_done" msgid="796017761764190697">"تمام"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"لغو"</string>
     <string name="listCustomView" msgid="1840624396582117590">"نمای سفارشی‌شده"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"ذخیره مخاطبین واردشده در:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"سیم کارت"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"صادر کردن <xliff:g id="FILENAME">%s</xliff:g> لغو شود؟"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"نمی‌توان وارد کردن/ صادر کردن کارت ویزیت را لغو کرد"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"خطای ناشناس."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" باز نشد: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" باز نشد: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"صادر کننده راه‌اندازی نشد: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"هیچ مخاطب قابل صدوری موجود نیست."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"یک اجازه الزامی را غیرفعال کردید."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"خطایی در هنگام صادر کردن روی داد: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"نام فایل خیلی طولانی است (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"خطای ورودی/خروجی"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"حافظه کافی نیست. ممکن است فایل بسیار بزرگ باشد."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"تفسیر کارت ویزیت به دلیل پیش‌بینی نشده‌ای ممکن نیست."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"قالب پشتیبانی نمی‌شود."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"نمی‌توان اطلاعات متای فایل کارت ویزیت داده شده را جمع‌آوری کرد."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"‏نمی‌توان یک یا چند فایل را وارد کرد (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"صادر کردن <xliff:g id="FILENAME">%s</xliff:g> پایان یافت."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"صادر کردن مخاطبین تمام شد."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"مخاطبین صادر شدند؛ برای اشتراک‌گذاری مخاطبین، روی اعلان کلیک کنید."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"صدور اطلاعات مخاطب"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"داده‌های مخاطب در حال صادر شدن است."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"نمی‌توان اطلاعات پایگاه داده را دریافت کرد."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"هیچ مخاطب قابل صدوری وجود ندارد. اگر در گوشی خود مخاطبینی دارید، بعضی از ارائه‌دهندگان داده ممکن است اجازه ندهند تا مخاطبین از گوشی صادر شوند."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"هیچ مخاطب قابل صدوری وجود ندارد."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"سازنده فایل کارت ویزیت به درستی اجرا نشد."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"صادر نمی‌شود"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"‏داده‎های مخاطب صادر نشد.\nعلت: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"وارد کردن <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"خواندن داده‌های کارت ویزیت ممکن نیست"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"خواندن داده کارت ویزیت لغو شد"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"وارد کردن کارت ویزیت <xliff:g id="FILENAME">%s</xliff:g> پایان یافت"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"واردکردن <xliff:g id="FILENAME">%s</xliff:g> لغو شد"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> به زودی وارد می‌شود."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"فایل پس از مدت کوتاهی وارد می‌شود."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"درخواست وارد کردن کارت ویزیت رد شد. لطفاً بعداً امتحان کنید."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> به زودی صادر می‌شود."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"فایل به‌زودی منقضی می‌شود."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"مخاطبین به‌زودی صادر می‌شوند."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"درخواست صدور کارت ویزیت رد شد. لطفاً بعداً امتحان کنید."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"مخاطب"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"در حال ذخیره کارت‌های ویزیت در حافظه موقت محلی است. وارد کردن واقعی به زودی آغاز خواهد شد."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"وارد کردن کارت ویزیت انجام نشد."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"‏مخاطب از طریق NFC رسید"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"مخاطبین صادر شوند؟"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"در حال ذخیره در حافظهٔ پنهان"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"وارد کردن <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"وارد کردن <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"‏صادر کردن به فایل ‎.vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"مرتب‌سازی براساس"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"نام"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"اطلاعات من"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"تنظیم نمایه"</string>
     <string name="setting_about" msgid="7014388749752042863">"درباره مخاطبین"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"اشتراک‌گذاری مخاطبین قابل مشاهده"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"مخاطبین قابل مشاهده به اشتراک گذاشته نشدند."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"اشتراک‌گذاری مخاطبین دلخواه"</string>
     <string name="share_contacts" msgid="8109287987498711664">"اشتراک‌گذاری همه مخاطبین"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"مخاطبین به اشتراک گذاشته نشدند."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"مخاطبی برای اشتراک‌گذاری وجود ندارد."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"مخاطبین جهت نمایش"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"مخاطبین جهت نمایش"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"تعریف نمای سفارشی‌شده"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"سفارشی ساختن نما"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"ذخیره"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"جستجوی مخاطبین"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"موارد دلخواه"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"مخاطبی موجود نیست."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"پاک کردن تماس‌های مکرر"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"انتخاب سیم‌کارت"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"مدیریت حساب‌ها"</string>
     <string name="menu_import" msgid="6107961135813836467">"وارد کردن"</string>
     <string name="menu_export" msgid="2658783911863503902">"صادر کردن"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"شماره‌های مسدودشده"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> از طریق <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"توقف جستجو"</string>
     <string name="description_clear_search" msgid="688023606766232904">"پاک کردن جستجو"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"گزینه‌های نمایش مخاطب"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"حساب"</string>
     <string name="set_default_account" msgid="4311613760725609801">"همیشه برای تماس‌ استفاده شود"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"تماس با"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"تماس به همراه یادداشت"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"یادداشتی بنویسید که همراه تماس ارسال شود…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ارسال و تماس"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / ‏<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> مورد خوانده‌نشده. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> مورد خوانده‌نشده. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"نسخه ساخت"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"مجوزهای منبع آزاد"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"جزئیات مجوز برای نرم‌افزار منبع آزاد"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"حذف"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"سه نقطه"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> دقیقه <xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ساعت <xliff:g id="MINUTES_1">%s</xliff:g> دقیقه <xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> دقیقه <xliff:g id="SECONDS">%2$s</xliff:g> ثانیه"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ساعت <xliff:g id="MINUTES_1">%2$s</xliff:g> دقیقه <xliff:g id="SECONDS">%3$s</xliff:g> ثانیه"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"میان‌بر غیرفعال شده است"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"محاطب حذف شد"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"وارد کردن"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"اتصال برقرار نیست"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"سیم کارت"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"نمایش موارد بیشتر"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"وارد کردن سیم کارت تمام شد"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"وارد نشد"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"مخاطبین از سیم کارت وارد نشدند"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"وارد کردن سیم کارت"</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 7ad0f48..284f3d2 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Yhteystiedot"</string>
     <string name="contactsList" msgid="8661624236494819731">"Yhteystiedot"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Lisää yhteystieto"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Yhteystieto"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Puhelu"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Tekstiviesti"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Valitse kuvakkeen yhteystieto"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Valitse vastaanottajan numero"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Valitse vastaanottajan numero"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Yhteystiedon valitseminen"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Lisää yhteystietoon"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Valitse yhteystieto"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Valitse"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Luo uusi yhteystieto"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Yhteystiedot"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Tietoja"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Päivitykset"</string>
     <string name="searchHint" msgid="8482945356247760701">"Hae yhteystiedoista"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Näytä yhteystieto"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Lisää suosikkeihin"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Poista suosikeista"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Poistettu suosikeista"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Luo pikakuvake"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Soita"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Lähetä tekstiviesti yhteystiedolle"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Poista linkitys"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Poista yhteystiedot"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Nimeä tunniste uudelleen"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Kontaktien valitseminen"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Lisää yhteystietoja"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Poista tunnisteesta"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Lisää yhteystieto"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Luo uusi…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Luo tunniste"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Poistetaanko tämän yhteystiedon linkitys useisiin yhteystietoihin?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Poista linkitys"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Haluatko tallentaa jo tekemäsi muutokset ja poistaa tämän yhteystiedon linkityksen useisiin yhteystietoihin?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Tallenna"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Linkitä yhteystiedot"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Valitse yhteystieto, jonka haluat yhdistää yhteystietoon <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> liitetty"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> yhteystieto</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> yhteystietoa, <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> yhteystieto, <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> yhteystietoa, <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> yhteystieto, <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Googlelta"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Tililtä <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Jos poistat tämän yhteystiedon, tietoja poistetaan useilta tileiltä."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Poistetaanko yhteystieto?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Poista"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Hylkää muutokset"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Yhteystietoa ei ole olemassa."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Yhteystieto lisättiin aloitusnäytölle."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> lisättiin aloitusnäytölle."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Luo uusi yhteystieto"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Luo uusi yhteystieto"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Tablet-laitteella ei ole kuvia."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Tässä puhelimessa ei ole käytettäviä kuvia."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Yhteyshenkilön valokuva"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Oman luokituksen nimi"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Ohjaa puheluja suoraan vastaajaan"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Poista kuva"</string>
     <string name="noContacts" msgid="2228592924476426108">"Yhteystietoluettelo on tyhjä."</string>
-    <string name="noGroups" msgid="4607906327968232225">"Ei tunnisteita"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Tarvitset tilin ryhmien luomiseen."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Tässä tunnisteessa ei ole yhteystietoja."</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Tällä tilillä ei ole yhteystietoja."</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Yhteystietoluettelo on tyhjä."</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Virhe tallennettaessa yhteystietoa"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Yhteystietojen kuvien muutosten tallentaminen epäonnistui."</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Tunnisteen lataus epäonnistui."</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Tunniste tallennettiin."</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Tunniste poistettiin."</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Tunniste luotiin."</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Tunnisteen luominen ei onnistu."</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Lähetä viesti"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Valitse yhteystiedot"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Lähetä"</string>
-    <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" 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 yhteystietoja"</string>
-    <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="5948889261993124839">"Kaikki"</string>
-    <string name="callBack" msgid="5498224409038809224">"Soita takaisin"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Soita uudelleen"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Soita takaisin"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Lisätäänkö <xliff:g id="EMAIL">%s</xliff:g> yhteystietoihin?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%s</xliff:g> yhteystietoa"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Yhteystietojen nimet"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Tätä toimintoa käsittelevää sovellusta ei löydy."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Palaa edelliseen näyttöön klikkaamalla"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Lisää puhelinnumero"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Lisää sähköposti"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Tunnisteen nimi"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Äänikeskustelu"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videokeskustelu"</string>
-    <string name="connections" msgid="8098440723172028350">"Yhteydet"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Lisää yhteys"</string>
-    <string name="recent" msgid="2659189233141493004">"Viimeisimmät"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Uusimmat päivitykset"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-osoite"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-tili"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Ota valokuva"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Ota uusi kuva"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Valitse valokuva"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Valitse uusi valokuva"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Valitse kaikki"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Poista kaikki valinnat"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Lisää uusi"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Lisää organisaatio"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Päivämäärä"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Tunniste"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Muuta"</string>
-    <string name="description_star" msgid="2605854427360036550">"lisää suosikkeihin"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Muokkaa kontaktia"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Peruuta"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Takaisin"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"sulje"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Yhdistetäänkö valittu kontakti nykyiseen kontaktiin?"</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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Lisää yhteystietoihin"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Hakemisto <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Asetukset"</string>
     <string name="menu_settings" msgid="377929915873428211">"Asetukset"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Lisää yhteystietoihin"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Lisää yhteystietoon"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Sulje"</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="7122002148518724139">"Näytä vuosi"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Yhteystiedot"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Ladataan..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Luo uusi yhteystieto"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Lisää tili"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Tuo"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Luo uusi…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Hylkää"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Peruuta"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Hylätäänkö muokkaukset?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Hae yhteystiedoista"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Poista yhteystiedot"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Oma paikallinen profiili"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Oma <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>-profiili"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Kaikki kontaktit"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Pidä kontaktisi turvassa, vaikka puhelimesi katoaisi: synkronoi ne verkkopalvelun avulla."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Lisää tili"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Lisää Google-tili, jolle yhteystiedot voidaan varmuuskopioida. Se vie vain hetken."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Uudet yhteystiedot tallennetaan tilille <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Valitse uusien yhteystietojen oletustili:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Näytä vähemmän"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Viimeisimmät"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Tietoja"</string>
-    <string name="send_message" msgid="8938418965550543196">"Lähetä viesti"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Luodaan kopio..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Huomenna"</string>
     <string name="today" msgid="8041090779381781781">"Tänään"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Tänään klo <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Huomenna klo <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Nimetön tapahtuma)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Käytä"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Pikaviesti"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Sivusto"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Tapahtuma"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Suhde"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Tili"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nimi"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Sähköposti"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Puhelin"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Laajenna yhteystietojen muokkausnäkymä klikkaamalla."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Tiivistä yhteystietojen muokkausnäkymä klikkaamalla."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"reittiohjeet sijaintiin"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"Viimeisin tekstiviesti. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Vastaa klikkaamalla."</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"Viimeisin tekstiviesti. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Vastaa klikkaamalla."</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"saapuva"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"lähtevä"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"vastaamaton"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"Viimeisin puhelu. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Lisää kenttiä"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Vaihda yhteystiedon valokuvaa"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Lisää yhteystiedon valokuva"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Muokkausnäkymän avaaminen epäonnistui."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Tallennetaan tilille"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Tilin <xliff:g id="ACCOUNT">%s</xliff:g> yhteystietoja ei voi muokata."</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Tallennetaan tilille <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Valitse toinen tili kaksoisnapauttamalla."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Linkitetyt yhteystiedot (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Linkitetty yhteystieto</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> yhdistettyä kontaktia"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LINKITÄ YHTEYSTIEDOT"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"PERUUTA"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mahdollista kaksoiskappaletta</item>
-      <item quantity="one">1 mahdollinen kaksoiskappale</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">Yhdistä <xliff:g id="COUNT">%d</xliff:g> kontaktin tiedot</item>
-      <item quantity="one">Yhdistä 1 kontaktin tiedot</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Tämä kontakti"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mahdolliset kaksoiskappaleet"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Nämä yhteystiedot saattavat kuulua samalle henkilölle. Voit linkittää ne yhdeksi yhteystiedoksi."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Linkitetyt yhteystiedot"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Omista tileistäsi"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Valitse valokuva"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Tili: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Poista <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Poista <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Poista <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Tilin <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> kuvaa ei ole valittuna."</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Tilin <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> kuva on valittuna."</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Tuntemattoman tilin kuva ei ole valittuna."</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Tuntemattoman tilin kuva on valittuna."</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Ehdotukset"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Uusi"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Avaa navigoinnin vetopaneeli"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Hakemisto"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Työhakemisto"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Kaikki yhteystiedot"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Löytyi yli <xliff:g id="COUNT">%d</xliff:g> yhteystietoa."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Pikayhteys henkilöön <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Ei nimeä)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Usein käytetyt"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Näytä yhteystieto"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Kaikki kontaktit puhelinnumeroineen"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Työprofiilin yhteystiedot"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Näytä päivitykset"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM-kortti"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nimi"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Lempinimi"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nimi"</string>
     <string name="name_given" msgid="4280790853455320619">"Etunimi"</string>
     <string name="name_family" msgid="7466985689626017037">"Sukunimi"</string>
     <string name="name_prefix" msgid="59756378548779822">"Nimen etuliite"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Lähetä sähköpostia: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Sähköposti"</string>
     <string name="postal_street" msgid="8133143961580058972">"Katuosoite"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Postilokero"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Kaupunginosa"</string>
     <string name="postal_city" msgid="6597491300084895548">"Kaupunki"</string>
     <string name="postal_region" msgid="6045263193478437672">"Lääni"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Postinumero"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Lisää ryhmiä…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Ryhmän <xliff:g id="GROUP">%s</xliff:g> poistaminen synkronoinnista lopettaa myös ryhmittelemättömien yhteystietojen synkronoinnin."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Tallennetaan näyttövalintoja…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Valmis"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Peruuta"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Muokattu näkymä"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Tallenna tuodut yhteystiedot kohteeseen"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-kortti"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Peruuta kohteen <xliff:g id="FILENAME">%s</xliff:g> vienti?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCardin tuonnin/viennin peruutus epäonn."</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Tuntematon virhe."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Tiedostoa \"<xliff:g id="FILE_NAME">%s</xliff:g>\" ei voi avata: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Tiedostoa \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ei voi avata: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Vientiohjelman käynnistys epäonnistui: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Ei vietäviä yhteystietoja."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Olet poistanut käytöstä tarvittavan käyttöoikeuden."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Virhe viennin aikana: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Tarvittava tiedostonimi on liian pitkä (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O-virhe"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Muisti ei riitä. Tiedosto voi olla liian suuri."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"vCardia ei voi jäsentää odottamattomasta syystä."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Muotoa ei tueta."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Annettujen vCard-tiedostojen sisällönkuvaustietojen noutaminen epäonnistui."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Ainakin yhden tiedoston tuominen epäonnistui (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Kohteen <xliff:g id="FILENAME">%s</xliff:g> vienti valmis."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Yhteystiedot vietiin"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Yhteystiedot vietiin. Jaa yhteystiedot klikkaamalla ilmoitusta."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Viedään yhteystietoja"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Yhteystietoja viedään."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Tietokannan tietojen hakeminen epäonnistui."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Ei vietäviä yhteystietoja. Jos puhelimessasi on yhteystietoja, tietojen tarjoaja on saattanut estää niiden viemisen puhelimen ulkopuolelle."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Vietäviä yhteystietoja ei ole."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard-luonti ei käynnistynyt oikein."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Vieminen epäonnistui"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Yhteystietoja ei viety.\nSyy: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Tuodaan <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard-tietojen luku epäonnistui."</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard-tietojen lukeminen peruttu"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCardin <xliff:g id="FILENAME">%s</xliff:g> tuonti valmis"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Kohteen <xliff:g id="FILENAME">%s</xliff:g> tuonti peruttu"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> tuodaan pian."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Tiedosto tuodaan pian."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard-tuontipyyntö hylättiin. Yritä myöhemmin uudelleen."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> viedään pian."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Tiedosto viedään hetken kuluttua."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Yhteystiedot viedään hetken kuluttua."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard-vientipyyntö hylättiin. Yritä myöhemmin uudelleen."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"yhteystieto"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Lisätään vCard-tietojen välimuistiversiot paikalliseen väliaikaistallennustilaan. Tuonti alkaa pian."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard-tietojen tuominen epäonnistui."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakti saatu (NFC)"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Vie yhteystietoja?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Vie välimuistiin"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Tuodaan <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Tuodaan <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Vie .vcf-tiedostoon"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Lajitteluperuste"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Etunimi"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Omat tiedot"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Luo profiili"</string>
     <string name="setting_about" msgid="7014388749752042863">"Tietoja yhteystiedoista"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Jaa näkyvät yhteystiedot"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Näkyvien yhteystietojen jakaminen epäonnistui."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Jaa suosikkiyhteystiedot"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Jaa kaikki yhteystiedot"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Yhteystietojen jakaminen epäonnistui."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Jaettavia yhteystietoja ei ole."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Näytettävät yhteystiedot"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Näytettävät yhteystiedot"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Tarkenna muokattua näkymää"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Näkymän muokkaaminen"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Tallenna"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Hae yhteystietoja"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Suosikit"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Ei yhteystietoja."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Tyhjennä usein käytetyt"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Valitse SIM-kortti"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Hallinnoi tilejä"</string>
     <string name="menu_import" msgid="6107961135813836467">"Tuo"</string>
     <string name="menu_export" msgid="2658783911863503902">"Vie"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Estetyt numerot"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> lähteestä: <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"lopeta haku"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Tyhjennä haku"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Yhteystietojen näyttöasetukset"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Tili"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Käytä kaikille puheluille"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Valitse puhelinoperaattori:"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Soita ja lähetä muistiinpano"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Kirjoita muistiinpano, joka lähetetään puhelun yhteydessä…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"LÄHETÄ ja SOITA"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> lukematonta kohdetta </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> lukematon kohde </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Koontiversio"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Avoimen lähdekoodin käyttöluvat"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Avoimen lähdekoodin ohjelmiston käyttöluvan tiedot"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Poista"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellipsi"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> t <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> t <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Pikakuvake on poistettu käytöstä"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Yhteystieto poistettiin"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Tuo"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Ei yhteyttä"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-kortti"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Näytä lisää"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM-kortin tuominen valmis"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Tuonti epäonnistui."</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Yhteystietojen tuominen SIM-kortilta epäonnistui."</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Tuodaan SIM-kortin yhteystietoja"</string>
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 338293d..b270aa7 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contacts"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Ajouter un contact"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Contact"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Raccourci appel"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Raccourci message"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Choisir un contact"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Choisissez le numéro"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Choisissez le numéro auquel envoyer le message"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Sélectionner un contact"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Ajouter au contact"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Sélectionner un contact"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Sélectionner"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Créer un contact"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Détails du contact"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"À propos"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Mises à jour"</string>
     <string name="searchHint" msgid="8482945356247760701">"Rech. des contacts"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Afficher le contact"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Ajouter aux favoris"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Supprimer des favoris"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Supprimé des favoris"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Créer un raccourci"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Appeler le contact"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Envoyer un SMS au contact"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Annuler la fusion"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Supprimer les contacts"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Renommer l\'étiquette"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Sélectionner des contacts"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Ajouter des contacts"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Supprimer de l\'étiquette"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Ajouter un contact"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Créer…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Créer une étiquette"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Annuler la fusion et diviser ce contact en plusieurs contacts?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Annuler la fusion"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Voulez-vous enregistrer les modifications que vous avez déjà apportées et diviser ce contact en plusieurs contacts?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Enregistrer"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Associer les contacts"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Choisissez le contact que vous souhaitez 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> associés"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> contact · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"De Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"De <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"La suppression de ce contact entraînera la suppression de renseignements dans plusieurs comptes."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Supprimer ce contact?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Supprimer"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Supprimer les modifications"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Ce contact n\'existe pas."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Le contact a été ajouté à l\'écran d\'accueil."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"« <xliff:g id="NAME">%s</xliff:g> » a été ajouté à l\'écran d\'accueil."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Créer un nouveau contact"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Créer un nouveau contact"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Aucune image n\'est disponible sur la tablette."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Aucune image disponible sur le téléphone"</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Photo du contact"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Étiquette personnalisée"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Renvoyer les appels directement vers la messagerie vocale"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Retirer la photo"</string>
     <string name="noContacts" msgid="2228592924476426108">"Votre liste de contacts est vide"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Aucune étiquette."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Vous devez posséder un compte pour créer des groupes."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Aucun contact avec cette étiquette"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Aucun contact dans ce compte"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Votre liste de contacts est vide"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Erreur lors de l\'enregistrement du contact"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Impossible d\'enregistrer les changements apportés à la photo du contact"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Échec du chargement de l\'étiquette"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Étiquette enregistrée"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Étiquette supprimée"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Étiquette créée"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Impossible de créer une étiquette"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Envoyer un message"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Sélectionner des contacts"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Envoyer"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact avec un numéro de téléphone</item>
-      <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" 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" 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="5948889261993124839">"Tout"</string>
-    <string name="callBack" msgid="5498224409038809224">"Rappeler"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Renouveler l\'appel"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Rappeler"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ajouter \"<xliff:g id="EMAIL">%s</xliff:g>\" aux contacts?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Noms de vos contacts"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Aucune application pouvant gérer cette action n\'a été trouvée."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Cliquez ici pour revenir à l\'écran précédent"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Ajouter un numéro de téléphone"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Ajouter une adresse de courriel"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nom d\'étiquette"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Clavardage audio"</string>
     <string name="video_chat" msgid="1872255818640336072">"Clavardage vidéo"</string>
-    <string name="connections" msgid="8098440723172028350">"Liens"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Ajouter un contact"</string>
-    <string name="recent" msgid="2659189233141493004">"Fichiers récents"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Mises à jour récentes"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> contact"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Compte <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Prendre une photo"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Prendre une autre photo"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Choisir une photo"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Sélectionner une nouvelle photo"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Tout sélectionner"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Tout désélectionner"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Ajouter"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Ajouter une entreprise"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Étiquette"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Modifier"</string>
-    <string name="description_star" msgid="2605854427360036550">"favori"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Modifier un contact"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Annuler"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Précédent"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fermer"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Ajouter à \"Mes contacts\""</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Annuaire <xliff:g id="TYPE">%1$s</xliff:g>"</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="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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Ajouter aux contacts"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Ajouter au contact"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Fermer"</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="7122002148518724139">"Inclure l\'année"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Contact"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Chargement en cours..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Créer un contact"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Ajouter un compte"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importer"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Créer…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Ignorer"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Annuler"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Supprimer les personnalisations?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Rechercher dans les contacts"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Supprimer les contacts"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Mon profil local"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Mon profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Affichage de tous les contacts"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Assurez la sécurité de vos contacts, même si vous perdez votre téléphone en effectuant une synchronisation avec un service en ligne."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Ajouter un compte"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Prenez une minute pour ajouter un compte qui sauvegardera vos contacts sur Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Les nouveaux contacts seront enregistrés dans le compte <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Choisissez un compte par défaut pour les nouveaux contacts :"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"En voir moins"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Récents"</string>
     <string name="about_card_title" msgid="2920942314212825637">"À propos"</string>
-    <string name="send_message" msgid="8938418965550543196">"Envoyer un message"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Création d\'une copie personnelle…"</string>
     <string name="tomorrow" msgid="6241969467795308581">"Demain"</string>
     <string name="today" msgid="8041090779381781781">"Aujourd\'hui"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Aujourd\'hui à <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Demain à <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Événement sans titre)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Définir"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Site Web"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Événement"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relation"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Compte"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nom"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Courriel"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Téléphone"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Cliquez pour développer l\'éditeur de contact."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Cliquez pour réduire l\'éditeur de contact."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"itinéraire vers le lieu"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"Texto récent : « <xliff:g id="MESSAGE_BODY">%s</xliff:g> », de <xliff:g id="PHONE_NUMBER">%s</xliff:g>, le <xliff:g id="DATE">%s</xliff:g>. Touchez l\'écran pour répondre à ce message."</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"Texto récent : « <xliff:g id="MESSAGE_BODY">%1$s</xliff:g> », de <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, le <xliff:g id="DATE">%3$s</xliff:g>. Touchez l\'écran pour répondre à ce message."</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrant"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"sortant"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"manqué"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"Appel récent : <xliff:g id="CALL_TYPE">%1$s</xliff:g>, <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Autres champs"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Modifier la photo du contact"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Ajouter une photo du contact"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Échec de l\'ouverture de l\'éditeur."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Enregistrer dans le compte"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Les coordonnées de <xliff:g id="ACCOUNT">%s</xliff:g> ne peuvent pas être modifiées"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Enregistrement en cours dans le compte <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Touchez deux fois pour choisir un autre compte."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="one">Contact associé (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Contacts associés (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contacts associés"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ASSOCIER LES CONTACTS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANNULER"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> doublon possible</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> doublons possibles</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact associé</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts associés</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ce contact"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Doublons possibles"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Ces contacts correspondent peut-être à la même personne. Vous pouvez les regrouper dans un seul contact."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Contacts associés"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"De vos comptes"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Sélectionner une photo"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"De <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Effacer <xliff:g id="DATA_TYPE">%s </xliff:g> <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Effacer <xliff:g id="DATA_TYPE">%1$s </xliff:g> <xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Effacer <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Photo <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> – <xliff:g id="USER_NAME">%s </xliff:g> non cochée"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Photo <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> – <xliff:g id="USER_NAME">%s </xliff:g> cochée"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Photo d\'un compte inconnu non sélectionnée"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Photo d\'un compte inconnu sélectionnée"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Suggestions"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nouveau"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Ouvrir le panneau de navigation"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Répertoire"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Annuaire professionnel"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Tous les contacts"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Plus de <xliff:g id="COUNT">%d</xliff:g> contacts ont été trouvés."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Lien rapide vers <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Sans nom)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contacts fréquents"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Afficher le contact"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Tous les contacts disposant d\'un numéro de téléphone"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Contacts du profil professionnel"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Afficher les mises à jour"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nom"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudonyme"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nom"</string>
     <string name="name_given" msgid="4280790853455320619">"Prénom"</string>
     <string name="name_family" msgid="7466985689626017037">"Nom de famille"</string>
     <string name="name_prefix" msgid="59756378548779822">"Préfixe du nom"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Envoyer un courriel à <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Adresse de courriel :"</string>
     <string name="postal_street" msgid="8133143961580058972">"Rue"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Case postale"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Quartier"</string>
     <string name="postal_city" msgid="6597491300084895548">"Ville"</string>
     <string name="postal_region" msgid="6045263193478437672">"État/province"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Code postal"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Autres groupes…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Le retrait du groupe \"<xliff:g id="GROUP">%s</xliff:g>\" de la synchronisation entraîne également le retrait des contacts n\'appartenant à aucun groupe."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Enregistrement des options d\'affichage en cours…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Terminé"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Annuler"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Affichage personnalisé"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Enregistrer les contacts importés dans le compte :"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Carte SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Annuler l\'exportation du fichier <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Impossible annuler import./export. vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Erreur inconnue."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Impossible d\'ouvrir le fichier <xliff:g id="FILE_NAME">%s</xliff:g> pour la raison suivante : <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Impossible d\'ouvrir le fichier <xliff:g id="FILE_NAME">%1$s</xliff:g> pour la raison suivante : <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Impossible de démarrer le programme d\'exportation pour la raison suivante : <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Aucun contact ne peut être exporté."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Vous avez désactivé une autorisation obligatoire."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Une erreur s\'est produite lors de l\'exportation : <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Le nom de fichier requis est trop long (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Erreur d\'E/S."</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Mémoire insuffisante. Le fichier est peut-être trop volumineux."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Impossible d\'analyser le fichier vCard pour une raison inattendue."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Le format n\'est pas compatible."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Impossible de collecter des métadonnées contenues dans le ou les fichiers vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Impossible d\'importer un ou plusieurs fichiers (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exportation du fichier <xliff:g id="FILENAME">%s</xliff:g> terminée"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Les contacts ont été exportés."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Les contacts ont été exportés. Cliquez sur la notification pour les partager."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportation des données des contacts en cours"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Les données des contacts sont en cours d\'exportation."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Impossible d\'obtenir les informations concernant la base de données."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Aucun contact ne peut être exporté. Si des contacts sont enregistrés sur votre téléphone, il est possible qu\'un fournisseur de données n\'autorise pas l\'exportation de contacts vers un autre appareil."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Aucun contact ne peut être exporté."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Le système de composition vCard n\'a pas démarré correctement."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Échec exportation"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Les données du contact n\'ont pas été exportées.\nMotif : <xliff:g id="FAIL_REASON">%s</xliff:g>."</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importation (<xliff:g id="NAME">%s</xliff:g>)"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Impossible de lire les données vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Lecture des données vCard annulée"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Le fichier vCard <xliff:g id="FILENAME">%s</xliff:g> a bien été importé"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importation du fichier <xliff:g id="FILENAME">%s</xliff:g> annulée"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Le fichier <xliff:g id="FILENAME">%s</xliff:g> va bientôt être importé."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Le fichier va bientôt être importé."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"La demande d\'importation du fichier vCard a été rejetée. Veuillez réessayer plus tard."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Le fichier <xliff:g id="FILENAME">%s</xliff:g> va bientôt être exporté."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Le fichier sera exporté sous peu."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Les contacts seront exportés sous peu."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"La demande d\'exportation du fichier vCard a été rejetée. Veuillez réessayer plus tard."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Mise en cache des fichiers vCard dans l\'espace de stockage temporaire local. L\'importation va bientôt démarrer."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Impossible d\'importer le fichier vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contact reçu via NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Exporter les contacts?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Mise en cache…"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importation <xliff:g id="CURRENT_NUMBER">%s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%s</xliff:g> (<xliff:g id="NAME">%s</xliff:g>)"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importation <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> (<xliff:g id="NAME">%3$s</xliff:g>)"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exporter en format .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Trier par"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Prénom"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Mon profil"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Configurer votre profil"</string>
     <string name="setting_about" msgid="7014388749752042863">"À propos de Contacts"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Partager les contacts visibles"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Échec du partage des contacts visibles."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Partager les contacts favoris"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Partager tous les contacts"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Échec du partage des contacts."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Il n\'y a aucun contact à partager."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contacts à afficher"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contacts à afficher"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Affichage personnalisé"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Personnaliser l\'affichage"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Enregistrer"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Rechercher dans les contacts"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoris"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Aucun contact"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Effacer les contacts fréquents"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Sélectionner une carte SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Gérer les comptes"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importer"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exporter"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Numéros bloqués"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"arrêter la recherche"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Effacer les termes de recherche"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Options d\'affichage des contacts"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Compte"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Toujours l\'utiliser pour les appels"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Appeler avec"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Envoyez une note pour accompagner l\'appel"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Tapez une note pour accompagner l\'appel…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ENVOYER ET APPELER"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> élément non lu. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> éléments non lus. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Version"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licences de logiciels libres"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Renseignements sur les licences de logiciels libres"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Supprimer"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellipse"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ce raccourci a été désactivé"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Le contact a été supprimé"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importer"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Aucune connexion"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"Carte SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Afficher plus"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importation de la carte SIM terminée"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Échec de l\'importation"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Impossible d\'importer des contacts à partir de la carte SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importation des contacts SIM en cours…"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index c5fa0de..befabc6 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contacts"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contacts"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Ajouter un contact"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Contact"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Raccourci appel"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Raccourci message"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Choisissez un contact"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Choisissez le numéro à appeler"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Choisissez un numéro"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Choisir un contact"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Ajouter au contact"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Sélectionner un contact"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Sélectionner"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Créer un contact"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Détails du contact"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"À propos de"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Mises à jour"</string>
     <string name="searchHint" msgid="8482945356247760701">"Rech. des contacts"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Afficher le contact"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Ajouter aux favoris"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Supprimer des favoris"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Supprimé des favoris"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Créer un raccourci"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Appeler le contact"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Envoyer un SMS au contact"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Dissocier"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Supprimer les contacts"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Renommer le libellé"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Sélectionner des contacts"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Ajouter des contacts"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Retirer du libellé"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Ajouter un contact"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Créer…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Créer un libellé"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Diviser ce contact en plusieurs contacts ?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Dissocier"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Voulez-vous enregistrer les modifications que vous avez déjà apportées et diviser ce contact en plusieurs contacts ?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Enregistrer"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Associer les contacts"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Sélectionnez le contact que vous souhaitez associer avec <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> associé"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contacts</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> contact · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Contacts Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Contacts de <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"La suppression de ce contact entraînera la suppression d\'informations détaillées issues de plusieurs comptes."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Supprimer ce contact ?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Supprimer"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Supprimer les modifications"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Ce contact n\'existe pas."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Le contact a bien été ajouté à l\'écran d\'accueil."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"\"<xliff:g id="NAME">%s</xliff:g>\" a bien été ajouté à l\'écran d\'accueil."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Créer un nouveau contact"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Créer un nouveau contact"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Aucune image n\'est disponible sur la tablette."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Aucune image disponible sur le téléphone."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Photo d\'un contact"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Libellé personnalisé"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Renvoyer les appels directement vers la messagerie vocale"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Supprimer la photo"</string>
     <string name="noContacts" msgid="2228592924476426108">"Votre liste de contacts est vide"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Aucun libellé."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Vous devez posséder un compte pour créer des groupes."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Aucun contact n\'est associé à ce libellé"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Aucun contact dans ce compte"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Votre liste de contacts est vide"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Erreur lors de l\'enregistrement du contact"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Impossible d\'enregistrer les modifications apportées à la photo du contact"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Impossible de charger le libellé"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Libellé enregistré"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Libellé supprimé"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Libellé créé"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Impossible de créer le libellé"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Envoyer un message"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Sélectionner des contacts"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Envoyer"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact avec numéro de téléphone</item>
-      <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" 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" 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="5948889261993124839">"Tous"</string>
-    <string name="callBack" msgid="5498224409038809224">"Rappeler"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Renouveler l\'appel"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Rappeler"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ajouter \"<xliff:g id="EMAIL">%s</xliff:g>\" aux contacts ?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> sur <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacts"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Noms de vos contacts"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Aucune application pouvant gérer cette action n\'a été trouvée."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Cliquez pour revenir à l\'écran précédent."</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Ajouter un numéro de téléphone"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Ajouter une adresse e-mail"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nom du libellé"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Chat audio"</string>
     <string name="video_chat" msgid="1872255818640336072">"Chat vidéo"</string>
-    <string name="connections" msgid="8098440723172028350">"Contacts"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Ajouter un contact"</string>
-    <string name="recent" msgid="2659189233141493004">"Récentes"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Mises à jour récentes"</string>
     <string name="account_type_format" msgid="718948015590343010">"Contact <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Compte <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Prendre une photo"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Prendre une autre photo"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Sélectionner une photo"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Sélectionner une nouvelle photo"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Tout sélectionner"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Tout désélectionner"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Ajouter"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Ajouter une entreprise"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Date"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Ajouter libellé"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Modifier"</string>
-    <string name="description_star" msgid="2605854427360036550">"favori"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Modifier le contact"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Annuler"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Retour"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fermer"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Ajouter à \"Mes contacts\""</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Annuaire <xliff:g id="TYPE">%1$s</xliff:g>"</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="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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Ajouter aux contacts"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Ajouter au contact"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Fermer"</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="7122002148518724139">"Inclure l\'année"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Contact"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Chargement…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Créer un contact"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Ajouter un compte"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importer"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Créer…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Supprimer"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Annuler"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Supprimer les personnalisations ?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Rechercher des contacts"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Supprimer les contacts"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Mon profil local"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Mon profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Affichage de tous les contacts"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Assurez la sécurité de vos contacts, même si vous perdez votre téléphone en effectuant une synchronisation avec un service en ligne."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Ajouter un compte"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Prenez le temps d\'ajouter un compte afin de sauvegarder vos contacts sur Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Les nouveaux contacts seront enregistrés dans le compte <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Sélectionnez un compte par défaut pour les nouveaux contacts :"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Moins"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Récents"</string>
     <string name="about_card_title" msgid="2920942314212825637">"À propos de"</string>
-    <string name="send_message" msgid="8938418965550543196">"Envoyer le message"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Création d\'une copie personnelle…"</string>
     <string name="tomorrow" msgid="6241969467795308581">"Demain"</string>
     <string name="today" msgid="8041090779381781781">"Aujourd\'hui"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Aujourd\'hui, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Demain, <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Événement sans titre)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Définir"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Messagerie instantanée"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Site Web"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Événement"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relation"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Compte"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nom"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Adresse e-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Numéro de téléphone"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Cliquez pour développer l\'éditeur de contact."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Cliquez pour réduire l\'éditeur de contact."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"itinéraire vers le lieu"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS récent : \"<xliff:g id="MESSAGE_BODY">%s</xliff:g>\", <xliff:g id="PHONE_NUMBER">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>. Appuyez sur l\'écran pour répondre à ce message."</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS récent : \"<xliff:g id="MESSAGE_BODY">%1$s</xliff:g>\", <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$s</xliff:g>. Appuyez sur l\'écran pour répondre à ce message."</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrant"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"sortant"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"manqué"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"Appel récent : <xliff:g id="CALL_TYPE">%1$s</xliff:g>, <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Autres champs"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Modifier la photo du contact"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Ajouter une photo pour le contact"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Échec de l\'ouverture de l\'éditeur."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Enregistrement sur le compte"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Les coordonnées de <xliff:g id="ACCOUNT">%s</xliff:g> ne sont pas modifiables."</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Enregistrement en cours sur le compte <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Appuyez deux fois pour choisir un autre compte."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="one">Contact associé (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Contacts associés (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contacts associés"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ASSOCIER LES CONTACTS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANNULER"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact potentiellement en double</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts potentiellement en double</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact associé</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contacts associés</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> – <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ce contact"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Doublons potentiels"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Ces contacts correspondent peut-être à la même personne. Vous pouvez les regrouper dans un seul contact."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Contacts associés"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"De vos comptes"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Sélectionner une photo"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Du compte <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Supprimer l\'élément \"<xliff:g id="DATA_TYPE">%s </xliff:g> – <xliff:g id="DATA_KIND">%s</xliff:g>\""</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Supprimer l\'élément \"<xliff:g id="DATA_TYPE">%1$s </xliff:g> – <xliff:g id="DATA_KIND">%2$s</xliff:g>\""</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Supprimer l\'élément \"<xliff:g id="DATA_KIND">%s</xliff:g>\""</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Photo <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> – <xliff:g id="USER_NAME">%s </xliff:g> non cochée"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Photo <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> – <xliff:g id="USER_NAME">%s </xliff:g> cochée"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Photo d\'un compte inconnu non sélectionnée"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Photo d\'un compte inconnu sélectionnée"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Suggestions"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nouveau"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Ouvrir le panneau de navigation"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Annuaire"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Annuaire professionnel"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Tous les contacts"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Plus de <xliff:g id="COUNT">%d</xliff:g> résultats trouvés."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Liens rapides vers <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Sans nom)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contacts fréquents"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Afficher le contact"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Tous les contacts disposant d\'un numéro de téléphone"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Contacts du profil professionnel"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Afficher mises à jour"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"Carte SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nom"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudo"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nom"</string>
     <string name="name_given" msgid="4280790853455320619">"Prénom"</string>
     <string name="name_family" msgid="7466985689626017037">"Nom"</string>
     <string name="name_prefix" msgid="59756378548779822">"Titre"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Envoyer un e-mail à <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Envoyer un e-mail"</string>
     <string name="postal_street" msgid="8133143961580058972">"Rue"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Boîte postale"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Voisinage"</string>
     <string name="postal_city" msgid="6597491300084895548">"Ville"</string>
     <string name="postal_region" msgid="6045263193478437672">"État"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Code postal"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Autres groupes..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Le retrait de \"<xliff:g id="GROUP">%s</xliff:g>\" de la synchronisation entraînera également le retrait des contacts n\'appartenant à aucun groupe."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Enregistrement des options d\'affichage..."</string>
-    <string name="menu_done" msgid="796017761764190697">"OK"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Annuler"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Vue personnalisée"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Enregistrer les contacts importés sur :"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Carte SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Annuler l\'exportation de \"<xliff:g id="FILENAME">%s</xliff:g>\" ?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Impossible annuler import./export. vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Erreur inconnue."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Impossible d\'ouvrir \"<xliff:g id="FILE_NAME">%s</xliff:g>\" pour la raison suivante : <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Impossible d\'ouvrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" pour la raison suivante : <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Impossible de démarrer le programme d\'exportation : \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Aucun contact ne peut être exporté."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Vous avez désactivé une autorisation obligatoire."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Une erreur s\'est produite lors de l\'exportation : \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Le nom de fichier requis est trop long (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Erreur d\'E/S."</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Mémoire insuffisante. Le fichier est peut-être trop volumineux."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Impossible d\'analyser le fichier vCard pour une raison inattendue."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Ce format n\'est pas compatible."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Impossible de collecter des métadonnées contenues dans le ou les fichiers vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Impossible d\'importer un ou plusieurs fichiers (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exportation de \"<xliff:g id="FILENAME">%s</xliff:g>\" terminée"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Les contacts ont bien été exportés"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Les contacts ont bien été exportés. Cliquez sur la notification pour les partager."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportation des données des contacts"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Les données de contact sont en cours d\'exportation."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Impossible d\'obtenir les informations concernant la base de données."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Aucun contact ne peut être exporté. Si des contacts sont enregistrés sur votre téléphone, il est possible qu\'un fournisseur de données n\'autorise pas l\'exportation de contacts vers un autre appareil."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Aucun contact à exporter."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Le système de composition vCard n\'a pas démarré correctement."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Échec exportation"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Les données du contact n\'ont pas été exportées.\nMotif : \"<xliff:g id="FAIL_REASON">%s</xliff:g>\"."</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importation en cours : <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Impossible de lire les données vCard."</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Lecture des données vCard annulée"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Fichier vCard <xliff:g id="FILENAME">%s</xliff:g> importé"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importation de \"<xliff:g id="FILENAME">%s</xliff:g>\" annulée"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Importation du fichier <xliff:g id="FILENAME">%s</xliff:g> imminente"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Le fichier va bientôt être importé."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"La demande d\'importation du fichier vCard a été rejetée. Veuillez réessayer ultérieurement."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Exportation du fichier <xliff:g id="FILENAME">%s</xliff:g> imminente"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Le fichier va bientôt être exporté."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Les contacts seront bientôt exportés."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"La demande d\'exportation du fichier vCard a été rejetée. Veuillez réessayer ultérieurement."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Mise en cache des fichiers vCard dans l\'espace de stockage temporaire local. L\'importation va bientôt démarrer."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Impossible d\'importer le fichier vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contact reçu via NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Exporter contacts ?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Mise en cache…"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importation en cours <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> : <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importation en cours <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> : <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exporter vers fichier VCF"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Trier par"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Prénom"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Mes infos"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Configurer votre profil"</string>
     <string name="setting_about" msgid="7014388749752042863">"À propos de Contacts"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Partager les contacts visibles"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Échec du partage des contacts visibles."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Partager les contacts favoris"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Partager tous les contacts"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Échec du partage des contacts."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Aucun contact à partager."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contacts à afficher"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contacts à afficher"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Vue personnalisée"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Personnaliser la vue"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Enregistrer"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Rechercher dans vos contacts"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoris"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Aucun contact"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Effacer les contacts fréquents"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Sélectionner une carte SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Gérer les comptes"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importer"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exporter"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Numéros bloqués"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"arrêter la recherche"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Effacer la recherche"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Options d\'affichage des contacts"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Compte"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Toujours l\'utiliser pour les appels"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Appeler avec"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Appeler avec une note"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Saisissez une note pour accompagner l\'appel..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ENVOYER L\'OBJET ET APPELER"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> élément non lu. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> éléments non lus. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Version de build"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licences Open Source"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Informations sur les licences des logiciels Open Source"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Supprimer"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellipse"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min et <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min et <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min et <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min et <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ce raccourci a été désactivé."</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Le contact a été supprimé."</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importer"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Aucune connexion"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"Carte SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Afficher plus"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importation depuis la carte SIM terminée"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Échec lors de l\'importation"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Impossible d\'importer les contacts depuis la carte SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importation depuis la carte SIM..."</string>
 </resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index 96a4d0b..d5562f9 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contactos"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contactos"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Engadir contacto"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Contacto"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Marcación directa"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Mensaxe directa"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Elixe contacto para atallo"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Elixe número para chamadas"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Elixe número para mensaxes"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Escoller contacto"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Engadir a un contacto"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Seleccionar un contacto"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Seleccionar"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Crear novo contacto"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Detalles do contacto"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Acerca de"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Actualizacións"</string>
     <string name="searchHint" msgid="8482945356247760701">"Buscar contactos"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Ver contacto"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Engadir a favoritos"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Eliminar dos favoritos"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Eliminado de favoritos"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Crear acceso directo"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Chamar ao contacto"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar mensaxe ao contacto"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Desligar"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Eliminar contactos"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Cambiar nome da etiqueta"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Seleccionar contactos"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Engadir contactos"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Eliminar da etiqueta"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Engadir contacto"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Crear nova…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Crear etiqueta"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Queres desligar este contacto en varios contactos?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desligar"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Queres gardar os cambios que xa fixeches e desligar este contacto en varios contactos?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Gardar"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Ligar contactos"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Selecciona o contacto que queres ligar 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ligou os contactos"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contactos · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contactos · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"De Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"De <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"A eliminación deste contacto eliminará detalles de varias contas."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Queres eliminar este contacto?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Eliminar"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Descartar cambios"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"O contacto non existe."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Engadiuse o contacto á pantalla de inicio."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Engadiuse a <xliff:g id="NAME">%s</xliff:g> á pantalla de inicio."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Crear novo contacto"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Crear novo contacto"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Non hai imaxes dispoñibles na tableta."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Non hai imaxes dispoñibles no teléfono."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto de contacto"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nome de etiqueta personalizada"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar chamadas directamente ao correo de voz"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Eliminar foto"</string>
     <string name="noContacts" msgid="2228592924476426108">"A túa lista de contactos está baleira"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Ningunha etiqueta."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Para crear grupos precisas unha conta."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Non hai ningún contacto con esta etiqueta"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Non hai ningún contacto nesta conta"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"A túa lista de contactos está baleira"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Produciuse un erro ao gardar o contacto"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Non se puideron gardar os cambios na foto do contacto"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Produciuse un erro ao cargar a etiqueta"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Gardouse a etiqueta"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Eliminouse a etiqueta"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Creouse a etiqueta"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Non se pode crear a etiqueta"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Enviar mensaxe"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Escoller contactos"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Enviar"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos con números de teléfono</item>
-      <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" 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">"Non hai contactos"</string>
-    <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="5948889261993124839">"Todos"</string>
-    <string name="callBack" msgid="5498224409038809224">"Devolver chamada"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Chamar de novo"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Devolver chamada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Engadir \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contactos?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"máis"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nomes dos teus contactos"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Non se encontrou ningunha aplicación para procesar esta acción."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Fai clic para volver á pantalla anterior"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Engadir número de teléfono"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Engadir correo electrónico"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nome etiqueta"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Chat de voz"</string>
     <string name="video_chat" msgid="1872255818640336072">"Chat de vídeo"</string>
-    <string name="connections" msgid="8098440723172028350">"Conexións"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Engadir conexión"</string>
-    <string name="recent" msgid="2659189233141493004">"Recente"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Actualizac. recentes"</string>
     <string name="account_type_format" msgid="718948015590343010">"Contacto de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Conta de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Facer foto"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Facer foto nova"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Escoller foto"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Seleccionar nova foto"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Seleccionar todo"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Anular toda a selección"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Engadir nova"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Engadir organización"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Cambiar"</string>
-    <string name="description_star" msgid="2605854427360036550">"favorito"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Editar contacto"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancelar"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Volver"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"pechar"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Queres ligar o contacto actual co contacto seleccionado?"</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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Engadir a Os meus contactos"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Directorio <xliff:g id="TYPE">%1$s</xliff:g>"</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="1680178646764069976">"Axuda e suxestións"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Engadir a contactos"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Engadir ao contacto"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Pechar"</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="7122002148518724139">"Incluír ano"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Contacto"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Cargando..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crear un contacto novo"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Engadir conta"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importar"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Crear nova…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descartar"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancelar"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Queres descartar as personalizacións?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Busca nos contactos"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Eliminar contactos"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"O meu perfil local"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"O meu perfil de <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Mostrando todos os contactos"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantén os teus contactos seguros aínda que perdas o teléfono: sincroniza cun servizo en liña."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Engadir unha conta"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Engade unha conta para facer a copia de seguranza dos teus contactos en Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Os contactos novos gardaranse en <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Escolle unha conta predeterminada para novos contactos:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Recente"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Acerca de"</string>
-    <string name="send_message" msgid="8938418965550543196">"Enviar mensaxe"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Creando unha copia persoal..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Mañá"</string>
     <string name="today" msgid="8041090779381781781">"Hoxe"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Hoxe ás <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Mañá ás <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Evento sen título)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Configurar"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Sitio web"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relación"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Conta"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Correo electrónico"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Teléfono"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Fai clic para ampliar o editor de contactos."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Fai clic para contraer o editor de contactos."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"indicacións para a localización"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. fai clic para responder"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. fai clic para responder"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrante"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"saínte"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdida"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Máis campos"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Cambiar foto de contacto"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Engadir foto de contacto"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Produciuse un erro ao abrir o editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Gardando en"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"A información de contacto de <xliff:g id="ACCOUNT">%s</xliff:g> non se pode editar"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Gardando actualmente en <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Toca dúas veces para seleccionar unha conta diferente."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Contactos ligados (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Contacto ligado</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Ligáronse <xliff:g id="COUNT">%d</xliff:g> contactos"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LIGAR CONTACTOS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> posibles duplicados</item>
-      <item quantity="one">1 posible duplicado</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">Ligáronse <xliff:g id="COUNT">%d</xliff:g> contactos</item>
-      <item quantity="one">Ligouse 1 contacto</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contacto"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Posibles duplicados"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Estes contactos poden referirse á mesma persoa. Podes ligalos nun contacto único."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Contactos ligados"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Das túas contas"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Escoller foto"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"De <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Eliminar <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Eliminar <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Eliminar <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Non se seleccionou a foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Seleccionouse a foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Non se seleccionou a foto dunha conta descoñecida"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Seleccionouse a foto dunha conta descoñecida"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Suxestións"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Abrir panel de navegación"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Directorio"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Directorio de traballo"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Todos os contactos"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Encontráronse máis de <xliff:g id="COUNT">%d</xliff:g> contactos."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Contacto rápido para <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Sen nome)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactados frecuentemente"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Ver contacto"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Todos os contactos con números de teléfono"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Contactos do perfil de traballo"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Ver actualizacións"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Alcume"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nome"</string>
     <string name="name_given" msgid="4280790853455320619">"Nome"</string>
     <string name="name_family" msgid="7466985689626017037">"Apelidos"</string>
     <string name="name_prefix" msgid="59756378548779822">"Tratamento do nome"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Enviar correo electrónico a: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Correo electrónico"</string>
     <string name="postal_street" msgid="8133143961580058972">"Rúa"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Apartado de correos"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Barrio"</string>
     <string name="postal_city" msgid="6597491300084895548">"Cidade"</string>
     <string name="postal_region" msgid="6045263193478437672">"Estado"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Código postal"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Máis grupos..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Se eliminas \"<xliff:g id="GROUP">%s</xliff:g>\" da sincronización, tamén eliminarás os contactos non agrupados da sincronización."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Gardando opcións de visualización..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Feito"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Cancelar"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Vista personalizada"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Gardar contactos importados en:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Tarxeta SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Queres cancelar a exportación de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Imposible cancelar import./export. vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Erro descoñecido."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Non se puido abrir \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Non se puido abrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Non se puido iniciar o exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Non hai ningún contacto exportable."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Desactivaches un permiso necesario."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Produciuse un erro durante a exportación: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"O nome do ficheiro necesario é demasiado longo (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Erro de E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Non hai memoria suficiente. É posible que o ficheiro sexa demasiado grande."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Non se puido analizar o ficheiro vCard debido a un motivo inesperado."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"O formato non é compatible."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Non se puido recoller a información meta de determinados ficheiros vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Non se puideron importar un ou máis ficheiros (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Finalizou a exportación de <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Finalizou a exportación dos contactos."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Finalizou a exportación dos contactos. Fai clic na notificación para compartilos."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando datos de contactos"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Estanse exportando os datos dos contactos."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Non se puido obter a información da base de datos."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Non hai ningún contacto exportable. Se tes contactos no teléfono, é posible que algúns provedores de datos non permitan a exportación dos contactos desde o teléfono."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Non hai ningún contacto exportable."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"O redactor de vCard non se iniciou correctamente."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Imposible exportar"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Non se exportaron os datos dos contactos.\n Motivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importando <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Non se puideron ler os datos de vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Lectura dos datos de vCard cancelada"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importación de <xliff:g id="FILENAME">%s</xliff:g> de vCard finalizada"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importación de <xliff:g id="FILENAME">%s</xliff:g> cancelada"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> importarase en breve."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"O ficheiro importarase en breve."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Rexeitouse a solicitude de importación do ficheiro vCard. Téntao de novo máis tarde."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> exportarase en breve."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"O ficheiro exportarase en breve."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Exportaranse os contactos en breve."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Rexeitouse a solicitude de exportación de vCard. Téntao de novo máis tarde."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contacto"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Estanse almacenando as vCard na memoria caché do almacenamento temporal local. A importación real comezará en breve."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Non se puido importar o ficheiro vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contacto recibido por NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Queres exportar contactos?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Almacenando na caché"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exportar a ficheiro .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordenar por"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nome"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"A miña información"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Configurar perfil"</string>
     <string name="setting_about" msgid="7014388749752042863">"Acerca de Contactos"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Compartir contactos visibles"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Produciuse un erro ao compartir os contactos visibles."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartir contactos favoritos"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Compartir todos os contactos"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Erro ao compartir os contactos."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Non hai ningún contacto para compartir."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contactos para mostrar"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactos para mostrar"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Definir vista personalizada"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Personalizar vista"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Gardar"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Busca nos contactos"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Ningún contacto"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Borrar frecuentes"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Seleccionar tarxeta SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Xestionar contas"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importar"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exportar"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> a través de <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"deter busca"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Borrar busca"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opcións da visualización de contactos"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Conta"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Usar sempre esta tarxeta para as chamadas"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Chamar con"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Chamar cunha nota"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Escribe unha nota para enviala coa chamada…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ENVIAR e CHAMAR"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> elementos non lidos. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> elemento non lido. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versión de compilación"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenzas de código aberto"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalles da licenza para software de código aberto"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Eliminar"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Puntos suspensivos"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Desactivouse o atallo"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Eliminouse o contacto"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importar"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Sen conexión"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Mostrar máis"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Finalizou a importación da tarxeta SIM"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Produciuse un erro na importación"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Non se puideron importar os contactos da tarxeta SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importando SIM"</string>
 </resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index bd56f31..8f081b4 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"સંપર્કો"</string>
     <string name="contactsList" msgid="8661624236494819731">"સંપર્કો"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"સંપર્ક ઉમેરો"</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="shortcutActivityTitle" msgid="1504383567778497348">"સંપર્ક પસંદ કરો"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"સંપર્કમાં ઉમેરો"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"સંપર્ક પસંદ કરો"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"પસંદ કરો"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"નવો સંપર્ક બનાવો"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"સંપર્ક વિગતો"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"કાઢી નાખો"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"ફોટો બદલો"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"શૉર્ટકટ બનાવો"</string>
-    <string name="menu_call" msgid="3992595586042260618">"સંપર્કને કૉલ કરો"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"સંપર્કને ટેક્સ્ટ કરો"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"અનલિંક કરો"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"સંપર્કો દૂર કરો"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"લેબલનું નામ બદલો"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"સંપર્કો પસંદ કરો"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"સંપર્કો ઉમેરો"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"લેબલમાંથી દૂર કરો"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"સંપર્ક ઉમેરો"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"નવું બનાવો…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"લેબલ બનાવો"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"આ સંપર્કને બહુવિધ સંપર્કોમાં અનલિંક કરીએ?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"અનલિંક કરો"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"તમે પહેલેથી કરેલા ફેરફારોને સાચવવા અને આ સંપર્કને બહુવિધ સંપર્કોમાં અનલિંક કરવા ઈચ્છો છો?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"સાચવો"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"સંપર્કો લિંક કરો"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"તમે <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ને લિંક કર્યાં"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> સંપર્ક</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> સંપર્ક · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> સંપર્ક · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> સંપર્ક · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> સંપર્ક · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google થી"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> થી"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"આ સંપર્કને કાઢી નાખવું બહુવિધ એકાઉન્ટ્સમાંથી વિગતો કાઢી નાખશે."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"આ સંપર્કને કાઢી નાખીએ?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"કાઢી નાખો"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"ફેરફારો છોડી દો"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"સંપર્ક અસ્તિત્વમાં નથી."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"સંપર્કને હોમ સ્ક્રીન પર ઉમેરવામાં આવ્યો."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ને હોમ સ્ક્રીન પર ઉમેરવામાં આવ્યું."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"નવો સંપર્ક બનાવો"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"નવો સંપર્ક બનાવો"</string>
     <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="2228592924476426108">"તમારી સંપર્કોની સૂચિ ખાલી છે"</string>
-    <string name="noGroups" msgid="4607906327968232225">"કોઈ લેબલ્સ નથી."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"જૂથો બનાવવા માટે તમને એકાઉન્ટની જરૂર છે."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"આ લેબલ સાથે કોઈ સંપર્કો નથી"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"આ એકાઉન્ટમાંં કોઈ સંંપર્કો નથી"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"તમારી સંપર્કોની સૂચિ ખાલી છે"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"સંપર્ક સાચવવામાં ભૂલ"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"સંપર્ક ફોટાના ફેરફારો સાચવી શક્યાં નથી"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"લેબલ લોડ કરવામાં નિષ્ફળ થયાં"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"લેબલ સાચવ્યું"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"લેબલ કાઢી નાખ્યું"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"લેબલ બનાવ્યું"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"લેબલ બનાવી શકતાં નથી"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"સંદેશ મોકલો"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"સંપર્કો પસંદ કરો"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"મોકલો"</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="5948889261993124839">"તમામ"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"લેબલનું નામ"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> એકાઉન્ટ"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"લેબલ"</string>
-    <string name="change_photo" msgid="8530597935483526383">"બદલો"</string>
-    <string name="description_star" msgid="2605854427360036550">"મનપસંદ"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"સંપર્ક સંપાદિત કરો"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"રદ કરો"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"પાછળ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"બંધ કરો"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"પસંદ કરેલ સંપર્ક સાથે વર્તમાન સંપર્કને લિંક કરીએ?"</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="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="7122002148518724139">"વર્ષ શામેલ કરો"</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="4347232421410561500">"એકાઉન્ટ ઉમેરો"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"આયાત કરો"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"નવું બનાવો…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"નિકાળો"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"રદ કરો"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"કસ્ટમાઇઝેશન્સ નિકાળીએ?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"સંપર્કો શોધો"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"સંપર્કો દૂર કરો"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"મારી સ્થાનિક પ્રોફાઇલ"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"મારી <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> પ્રોફાઇલ"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"તમામ સંપર્કો દર્શાવી રહ્યાં છે"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"તમે તમારો ફોન ગુમાવી દો તો પણ તમારા સંપર્કોને સુરક્ષિત રાખો: ઓનલાઇન સેવા સાથે સમન્વયિત કરો."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"એક એકાઉન્ટ ઉમેરો"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"તે એકાઉન્ટ ઉમેરવા માટે થોડો સમય આપો કે જે Google પર તમારા સંપર્કોનું બેક અપ લેશે."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"નવા સંપર્કોને <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> પર સાચવવામાં આવશે."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"નવા સંપર્કો માટે એક ડીફોલ્ટ એકાઉન્ટ પસંદ કરો:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ઓછું જુઓ"</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="288549957278065542">"વ્યક્તિગત કૉપિ બનાવી રહ્યાં છે…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"તાજેતરનો sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"તાજેતરનો કૉલ. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"વધુ ફીલ્ડ્સ"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"સંપર્ક ફોટો બદલો"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"સંપર્ક ફોટો ઉમેરો"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"સંપાદક ખોલવામાં નિષ્ફળ થયાં."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"આમાં સાચવી રહ્યાં છે"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> તરફથી સંપર્ક માહિતી સંપાદનક્ષમ નથી"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"હાલમાં <xliff:g id="ACCOUNT_NAME">%s</xliff:g> પર સાચવી રહ્યાં છે. અલગ એકાઉન્ટ ચૂંટવા માટે બે વાર ટૅપ કરો."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> લિંક કરેલ સંપર્ક"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"સંપર્કો લિંક કરો"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"રદ કરો"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> સંભવિત ડુપ્લિકેટ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> સંભવિત ડુપ્લિકેટ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> લિંક કરેલ સંપર્ક</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> લિંક કરેલ સંપર્ક</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"આ સંપર્ક"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"સંભવિત ડુપ્લિકેટ્સ"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"આ સંપર્કો એક જ વ્યક્તિ હોઈ શકે છે. તમે તેઓને એકલ સંપર્ક તરીકે એકસાથે લિંક કરી શકો છો."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"લિંક કરેલ સંપર્કો"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"તમારા એકાઉન્ટ્સમાંથી"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"ફોટો પસંદ કરો"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> માંથી"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> કાઢી નાખો"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> કાઢી નાખો"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> કાઢી નાખો"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ની તસ્વીર ચેક કરી નથી"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ની તસ્વીર ચેક કરી"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"અજાણ્યાં એકાઉન્ટનો ફોટો ચેક ન કર્યો"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"અજાણ્યાં એકાઉન્ટનો ફોટો ચેક કર્યો"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"સૂચનો"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"નવું"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"નેવિગેશન ડ્રોઅર ખોલો"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"નિર્દેશિકા"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"કાર્ય નિર્દેશિકા"</string>
     <string name="local_search_label" msgid="2551177578246113614">"તમામ સંપર્કો"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> કરતાં વધુ મળ્યાં."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> માટે ઝડપી સંપર્ક"</string>
     <string name="missing_name" msgid="8745511583852904385">"(નામ નથી)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"વારંવાર સંપર્ક કરેલા લોકો"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"સંપર્ક જુઓ"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"ફોન નંબર્સ સાથેના તમામ સંપર્કો"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"કાર્ય પ્રોફાઇલના સંપર્કો"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"અપડેટ્સ જુઓ"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"નામ"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ઉપનામ"</string>
-    <string name="full_name" msgid="6602579550613988977">"નામ"</string>
     <string name="name_given" msgid="4280790853455320619">"નામ"</string>
     <string name="name_family" msgid="7466985689626017037">"અટક"</string>
     <string name="name_prefix" msgid="59756378548779822">"નામ ઉપસર્ગ"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> પર ઇમેઇલ મોકલો"</string>
     <string name="email" msgid="5668400997660065897">"ઇમેઇલ"</string>
     <string name="postal_street" msgid="8133143961580058972">"શેરી"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"પોસ્ટ બોક્સ"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"પડોશ"</string>
     <string name="postal_city" msgid="6597491300084895548">"શહેર"</string>
     <string name="postal_region" msgid="6045263193478437672">"રાજ્ય"</string>
     <string name="postal_postcode" msgid="572136414136673751">"પિન કોડ"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"વધુ જૂથો…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"સમન્વયનમાંથી \"<xliff:g id="GROUP">%s</xliff:g>\" ને દૂર કરવું, સમન્વયનમાંથી કોઇપણ જૂથ વિનાના સંપર્કોને પણ દૂર કરશે."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"પ્રદર્શન વિકલ્પો સાચવી રહ્યું છે…"</string>
-    <string name="menu_done" msgid="796017761764190697">"થઈ ગયું"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"રદ કરો"</string>
     <string name="listCustomView" msgid="1840624396582117590">"કસ્ટમાઇઝ કરેલ દૃશ્ય"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"આયાત કરેલ સંપર્કોને આની પર સાચવો:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM કાર્ડ"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> ની નિકાસ રદ કરીએ?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard આયાત/નિકાસને રદ કરી શક્યાં નહીં"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"અજાણી ભૂલ."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" ખોલી શક્યાં નથી: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ખોલી શક્યાં નથી: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"નિકાસકર્તા શરૂ કરી શક્યાં નહીં: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"કોઈ નિકાસયોગ્ય સંપર્ક નથી."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"તમે આવશ્યક પરવાનગી અક્ષમ કરી છે."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"નિકાસ દરમિયાન ભૂલ આવી: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"જરૂરી ફાઇલનું નામ ખૂબ લાંબું છે (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ભૂલ"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"પર્યાપ્ત મેમરી નથી. આ ફાઇલ ખૂબ મોટી હોઈ શકે છે."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"અનપેક્ષિત કારણસર vCard નું વિશ્લેષણ કરી શકાયું નથી."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"ફોર્મેટ સમર્થિત નથી."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"આપેલ vCard ફાઇલ(લો)ની મેટા માહિતી ભેગી કરી શકાઈ નથી."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"એક અથવા વધુ ફાઇલો આયાત કરી શકાઈ નથી (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> ને નિકાસ કરવું સમાપ્ત થયું."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"સંપર્કોને નિકાસ કરવાનું સમાપ્ત થયું."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"નિકાસ કરવાનું સમાપ્ત થયું, સંપર્કો શેર કરવા માટે સૂચના ક્લિક કરો."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"સંપર્ક ડેટા નિકાસ કરી રહ્યાં છે"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"સંપર્ક ડેટાનો નિકાસ કરવામાં આવી રહ્યો છે."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ડેટાબેઝ માહિતી મેળવી શક્યાં નથી."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"કોઈ નિકાસયોગ્ય સંપર્કો નથી. જો તમારી પાસે તમારા ફોન પર કોઈ સંપર્કો નથી, તો કેટલાક ડેટા પ્રદાતા ફોન પરથી સંપર્કોને નિકાસ કરવાની મંજૂરી આપી શકશે નહીં."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"કોઇ નિકાસયોગ્ય સંપર્કો નથી."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard કમ્પોઝર ઠીકથી પ્રારંભ થયું નથી."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"નિકાસ કરી શક્યાં નથી"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"સંપર્ક ડેટા નિકાસ કર્યો નહોતો.\nકારણ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> ને આયાત કરે છે"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard ડેટા વાંચી શકાયો નથી"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard ડેટા વાંચવું રદ કર્યું"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> ને આયાત કરવું સમાપ્ત થયું"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ને આયાત કરવું રદ કર્યું"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ને ટૂંક સમયમાં આયાત કરવામાં આવશે."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ફાઇલ ટૂંક સમયમાં આયાત કરવામાં આવશે."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard આયાતની વિનંતી નકારી હતી. પછીથી ફરી પ્રયાસ કરો."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> ને ટૂંક સમયમાં નિકાસ કરવામાં આવશે."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ફાઇલને ટૂંક સમયમાં નિકાસ કરવામાં આવશે."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"સંપર્કોનો ટૂંક સમયમાં નિકાસ કરવામાં આવશે."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard નિકાસની વિનંતી નકારી હતી. પછીથી ફરી પ્રયાસ કરો."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"સંપર્ક"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"સ્થાનિક અસ્થાયી સ્ટોરેજ પર vCard કેશ કરી રહ્યાં છે. વાસ્તવિક આયાત ટૂંક સમયમાં શરૂ થશે."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard આયાત કરી શકાયો નથી."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC પર સંપર્ક પ્રાપ્ત"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"સંપર્કો નિકાસ કરીએ?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"કેશ કરી રહ્યાં છે"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> આયાત કરે છે: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> આયાત કરે છે: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf ફાઇલ પર નિકાસ કરો"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"આ પ્રમાણે સૉર્ટ કરો"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"નામ"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"મારી માહિતી"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"તમારી પ્રોફાઇલ સેટ કરો"</string>
     <string name="setting_about" msgid="7014388749752042863">"સંપર્કો વિશે"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"દૃશ્યક્ષમ સંપર્કોને શેર કરો"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"દૃશ્યક્ષમ સંપર્કો શેર કરવામાં નિષ્ફળ થયાં."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"મનપસંદ સંપર્કોને શેર કરો"</string>
     <string name="share_contacts" msgid="8109287987498711664">"તમામ સંપર્કોને શેર કરો"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"સંપર્કોને શેર કરવામાં નિષ્ફળ થયાં."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"શેર કરવા માટે કોઇ સંપર્કો નથી"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"પ્રદર્શિત કરવાના સંપર્કો"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"પ્રદર્શિત કરવાના સંપર્કો"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"કસ્ટમાઇઝ કરેલ દૃશ્ય નિર્ધારિત કરો"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"કસ્ટમાઇઝ દૃશ્ય"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"સાચવો"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"સંપર્કો શોધો"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"મનપસંદ"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"કોઈ સંપર્કો નથી."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"વારંવારના સાફ કરો"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM કાર્ડ પસંદ કરો"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"એકાઉન્ટ્સ સંચાલિત કરો"</string>
     <string name="menu_import" msgid="6107961135813836467">"આયાત કરો"</string>
     <string name="menu_export" msgid="2658783911863503902">"નિકાસ કરો"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"અવરોધિત નંબરો"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> મારફતે <xliff:g id="DATE">%1$s</xliff:g> ના રોજ"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"શોધવાનું રોકો"</string>
     <string name="description_clear_search" msgid="688023606766232904">"શોધ સાફ કરો"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"સંપર્ક પ્રદર્શન વિકલ્પો"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"એકાઉન્ટ"</string>
     <string name="set_default_account" msgid="4311613760725609801">"કૉલ્સ માટે આનો ઉપયોગ હંમેશાં કરો"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"આની સાથે કૉલ કરો"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"નોંધ સાથે કૉલ કરો"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"કૉલ સાથે મોકલવા માટે એક નોંધ લખો…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"મોકલો અને કૉલ કરો"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> વાંચ્યા વગરની આઇટમ. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> વાંચ્યા વગરની આઇટમ. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"બિલ્ડ સંસ્કરણ"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"ઓપન સોર્સ લાઇસન્સીસ"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ખુલ્લા સ્ત્રોતના સોફ્ટવેર માટે લાઇસન્સની વિગતો"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"કાઢી નાખો"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"અધ્યાહાર"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> સેકંડ"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> મિનિટ <xliff:g id="SECONDS">%s</xliff:g> સેકંડ"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> કલાક <xliff:g id="MINUTES_1">%s</xliff:g> મિનિટ <xliff:g id="SECONDS">%s</xliff:g> સેકંડ"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> મિનિટ <xliff:g id="SECONDS">%2$s</xliff:g> સેકંડ"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> કલાક <xliff:g id="MINUTES_1">%2$s</xliff:g> મિનિટ <xliff:g id="SECONDS">%3$s</xliff:g> સેકંડ"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"આ શૉર્ટકટ અક્ષમ કરવામાંં આવેલ છે"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"સંપર્ક દૂર કર્યો હતો"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"આયાત કરો"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"કોઈ કનેક્શન નથી"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"વધુ બતાવો"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM કાર્ડ આયાત કરવાનું સમાપ્ત થયું"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"આયાત કરવું નિષ્ફળ થયું"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM કાર્ડમાંથી સંપર્કો આયાત કરી શક્યાં નથી"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM આયાત કરી રહ્યાં છે"</string>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 928f6ed..76d02c9 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"संपर्क"</string>
     <string name="contactsList" msgid="8661624236494819731">"संपर्क"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"संपर्क जोड़ें"</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="shortcutActivityTitle" msgid="1504383567778497348">"संपर्क चुनें"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"संपर्क में जोड़ें"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"कोई संपर्क चुनें"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"चुनें"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"नया संपर्क बनाएं"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"संपर्क विवरण"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"हटाएं"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"फ़ोटो बदलें"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"शॉर्टकट बनाएं"</string>
-    <string name="menu_call" msgid="3992595586042260618">"संपर्क को कॉल करें"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"इस संपर्क को SMS भेजें"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"अनलिंक करें"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"संपर्क निकालें"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"लेबल का नाम बदलें"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"संपर्कों को चुनें"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"संपर्क जोड़ें"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"लेबल से निकालें"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"संपर्क जोड़ें"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"नया बनाएं…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"लेबल बनाएं"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"एकाधिक खातों में इन संपर्कों को अनलिंक करें?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"अनलिंक करें"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"क्या आप पहले से किए गए बदलावों को सहेजना और इस संपर्क को एकाधिक संपर्कों में अनलिंक करना चाहते हैं?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"सहेजें"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"संपर्क लिंक करें"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"वह संपर्क चुनें जिसे आप <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> लिंक किया गया"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> संपर्क</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> संपर्क · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> संपर्क · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> संपर्क · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> संपर्क · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google से"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> से"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"इस संपर्क को हटाने से एकाधिक खातों से विवरण हट जाएंगे."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"यह संपर्क हटाएं?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"हटाएं"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"परिवर्तन हटा दें"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"संपर्क मौजूद नहीं है."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"संपर्कों को होम स्क्रीन में जोड़ा गया."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> को होम स्क्रीन में जोड़ा गया."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"नया संपर्क बनाएं"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"नया संपर्क बनाएं"</string>
     <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="2228592924476426108">"आपकी संपर्क सूची खाली है"</string>
-    <string name="noGroups" msgid="4607906327968232225">"कोई लेबल नहीं."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"समूह बनाने के लिए आपको किसी खाते की आवश्‍यकता होती है."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"इस लेबल वाला कोई संपर्क नहीं"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"इस खाते में कोई संपर्क नहीं"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"आपकी संपर्क सूची खाली है"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"संपर्क सहेजने में गड़बड़ी"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"संपर्क फ़ोटो के बदलाव नहीं सहेजे जा सके"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"लेबल लोड करने में विफल रहा"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"लेबल सहेजा गया"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"लेबल हटाया गया"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"लेबल बनाया गया"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"लेबल नहीं बनाया जा सकता"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"संदेश भेजें"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"संपर्क चुनें"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"भेजें"</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="5948889261993124839">"सभी"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"लेबल नाम"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> खाता"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"लेबल"</string>
-    <string name="change_photo" msgid="8530597935483526383">"बदलें"</string>
-    <string name="description_star" msgid="2605854427360036550">"पसंदीदा"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"संपर्क संपादित करें"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"रद्द करें"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"वापस जाएं"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"बंद करें"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"वर्तमान संपर्क को चयनित संपर्क से लिंक करें?"</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="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="7122002148518724139">"वर्ष शामिल करें"</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="4347232421410561500">"खाता जोड़ें"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"आयात करें"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"नया बनाएं…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"अभी नहीं"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"रद्द करें"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"कस्‍टमाइज़ेशन छोड़ें?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"संपर्क खोजें"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"संपर्क निकालें"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"मेरी स्थानीय प्रोफ़ाइल"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"मेरी <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> प्रोफ़ाइल"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"सभी संपर्क प्रदर्शित कर रहा है"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"अपना फ़ोन खो देने पर भी अपने संपर्क सुरक्षित रखें: किसी ऑनलाइन सेवा से समन्‍वयित करें."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"कोई खाता जोड़ें"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"कुछ समय निकालें और Google में आपके संपर्कों का बैकअप लेने के लिए एक खाता जोड़ें."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"नए संपर्कों को <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> में सहेजा जाएगा."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"नए संपर्कों के लिए डिफ़ॉल्ट खाता चुनें:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"कम देखें"</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="288549957278065542">"एक व्‍यक्तिगत प्रतिलिपि बना रहा है…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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">"हाल ही का एसएमएस. <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_sms" msgid="1666389577263317445">"हाल ही का एसएमएस. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"हाल ही का कॉल. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"अधिक फ़ील्‍ड"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"संपर्क की फ़ोटो बदलें"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"संपर्क की फ़ोटो जोड़ें"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"संपादक को खोलने में विफल रहा."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"इसमें सहेजा जा रहा है"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> की संपर्क जानकारी संपादित नहीं की जा सकती है"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"वर्तमान में <xliff:g id="ACCOUNT_NAME">%s</xliff:g> में सहेजा जा रहा है. भिन्न खाता चुनने के लिए डबल-टैप करें."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> लिंक किए गए संपर्क"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"संपर्क लिंक करें"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"अभी नहीं"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> संभावित प्रतिलिपि</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> संभावित प्रतिलिपि</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one">लिंक किए गए <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
-      <item quantity="other">लिंक किए गए <xliff:g id="COUNT">%d</xliff:g> संपर्क</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"यह संपर्क"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"संभावित प्रतिलिपि"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"हो सकता है कि ये संपर्क एक ही व्‍यक्‍ति हो. आप उन्हें एकल संपर्क के रूप में एक साथ लिंक कर सकते हैं."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"लिंक किए गए संपर्क"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"आपके खातों से"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"फ़ोटो चुनें"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> की ओर से"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> हटाएं"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> हटाएं"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> हटाएं"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>की फ़ोटो चेक नहीं की गई"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>की फ़ोटो चेक की गई"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"अज्ञात खाते की फ़ोटो नहीं जांची गई"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"अज्ञात खाते की फ़ोटो जांची गई"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"सुझाव"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"नया"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"मार्गदर्शक ड्रॉवर खोलें"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"निर्देशिका"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"कार्य निर्देशिका"</string>
     <string name="local_search_label" msgid="2551177578246113614">"सभी संपर्क"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> से अधिक मिले."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> के लिए त्‍वरित संपर्क"</string>
     <string name="missing_name" msgid="8745511583852904385">"(कोई नाम नहीं)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"बार-बार संपर्क किया गया"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"संपर्क देखें"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"फ़ोन नंबरों वाले सभी संपर्क."</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"कार्य प्रोफ़ाइल के संपर्क"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"नई जानकारी देखें"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"सिम"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"नाम"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"प्रचलित नाम"</string>
-    <string name="full_name" msgid="6602579550613988977">"नाम"</string>
     <string name="name_given" msgid="4280790853455320619">"नाम"</string>
     <string name="name_family" msgid="7466985689626017037">"उपनाम"</string>
     <string name="name_prefix" msgid="59756378548779822">"नाम उपसर्ग"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> को ईमेल करें"</string>
     <string name="email" msgid="5668400997660065897">"ईमेल भेजें"</string>
     <string name="postal_street" msgid="8133143961580058972">"मार्ग का नाम"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"पीओ बॉक्स"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"पड़ोस"</string>
     <string name="postal_city" msgid="6597491300084895548">"शहर"</string>
     <string name="postal_region" msgid="6045263193478437672">"राज्य"</string>
     <string name="postal_postcode" msgid="572136414136673751">"ज़िप कोड"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"अधिक समूह…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" को समन्‍वयन से निकालने से समन्‍वयन से सभी असमूहीकृत संपर्क भी  निकल जाएंगे."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"प्रदर्शन विकल्प सहेज रहा है…"</string>
-    <string name="menu_done" msgid="796017761764190697">"पूर्ण"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"अभी नहीं"</string>
     <string name="listCustomView" msgid="1840624396582117590">"कस्टमाइज़ किया गया दृश्य"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"आयातित संपर्कों को इसमें सहेजें:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM कार्ड"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> का निर्यात रहने दें?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard आयात/निर्यात रद्द नहीं हो सका"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"अज्ञात त्रुटि‍."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" नहीं खोली जा सकी: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" नहीं खोली जा सकी: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"निर्यातकर्ता प्रारंभ नहीं किया जा सका: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"कोई निर्यात-योग्‍य संपर्क नहीं है."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"आपने एक आवश्यक अनुमति को अक्षम कर दिया है."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"निर्यात करते समय कोई त्रुटि आई: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"आवश्‍यक फ़ाइल नाम बहुत बड़ा है (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O त्रुटि"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"स्‍मृति पर्याप्त नहीं है. हो सकता है फ़ाइल बहुत बड़ी हो."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"किसी अप्रत्‍याशित कारण से vCard पार्स नहीं किया जा सका."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"प्रारूप समर्थित नहीं है."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"दी गई vCard फ़ाइल(फ़ाइलों) की मेटा जानकारी एकत्र नहीं की जा सकी."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"एक या अधिक फ़ाइलें आयात नहीं की जा सकीं (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> का निर्यात करना पूर्ण."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"संपर्कों का निर्यात किया जाना समाप्त हो गया."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"संपर्कों का निर्यात पूरा हो गया है, संपर्क साझा करने के लिए नोटिफ़िकेशन क्लिक करें."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"संपर्क डेटा निर्यात हो रहा है"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"संपर्क डेटा निर्यात किया जा रहा है."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"डेटाबेस जानकारी नहीं मिल सकी."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"कोई भी निर्यात-योग्‍य संपर्क नहीं है. यदि आपके पास अपने फ़ोन पर संपर्क  हों, तो हो सकता है कि कुछ डेटा प्रदाता संपर्कों को फ़ोन से निर्यात न करने दें."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"कोई भी निर्यात-योग्‍य संपर्क नहीं है."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard कंपोज़र ठीक से शुरू नहीं हुआ."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"निर्यात नहीं कर सका"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"संपर्क डेटा निर्या‍त नहीं किया गया था.\nकारण: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> आयात कर रहा है"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard डेटा नहीं पढ़ा जा सका"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard डेटा को पढ़ना रद्द किया गया"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> आयात करना पूर्ण"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> को आयात करना रद्द किया गया"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> को जल्‍दी ही आयात किया जाएगा."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"फ़ाइल शीघ्र ही आयात की जाएगी."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard आयात अनुरोध अस्‍वीकार हो गया था. बाद में पुन: प्रयास करें."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> को जल्‍दी ही निर्यात किया जाएगा."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"फ़ाइल शीघ्र ही निर्यात की जाएगी."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"संपर्कों को शीघ्र ही निर्यात किया जाएगा."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard आयात अनुरोध अस्‍वीकार हो गया था. बाद में पुन: प्रयास करें."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"संपर्क"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard को स्‍थानीय अस्‍थायी मेमोरी में संचित कर रहा है. वास्‍तविक आयात जल्‍दी ही प्रारंभ होगा."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard आयात नहीं कर सका."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC पर प्राप्त संपर्क"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"संपर्क निर्यात करें?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"संचय कर रहा है"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> आयात कर रहा है: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> आयात कर रहा है: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf फाइल में निर्यात करें"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"इससे क्रमित करें"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"नाम"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"मेरी जानकारी"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"अपनी प्रोफ़ाइल सेट करें"</string>
     <string name="setting_about" msgid="7014388749752042863">"संपर्क के बारे में"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"दिखाई देने वाले संपर्क साझा करें"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"दृश्‍यमान संपर्क साझा करने में विफल रहा."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"पसंदीदा संपर्कों को साझा करें"</string>
     <string name="share_contacts" msgid="8109287987498711664">"सभी संपर्कों को साझा करें"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"संपर्कों को साझा करना विफल रहा."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"साझा करने के लिए कोई भी संपर्क नहीं है."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"प्रदर्शन के लिए संपर्क"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"प्रदर्शन के लिए संपर्क"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"कस्टमाइज़ किए गए दृश्य को परिभाषित करें"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"दृश्य कस्टमाइज़ करें"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"सहेजें"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"संपर्क खोजें"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"पसंदीदा"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"कोई संपर्क नहीं."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"अक्सर किए जाने वाले साफ़ करें"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"सिम कार्ड चुनें"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"खाते प्रबंधित करें"</string>
     <string name="menu_import" msgid="6107961135813836467">"आयात करें"</string>
     <string name="menu_export" msgid="2658783911863503902">"निर्यात करें"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"अवरोधित नंबर"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> द्वारा <xliff:g id="DATE">%1$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"खोजना बंद करें"</string>
     <string name="description_clear_search" msgid="688023606766232904">"खोज साफ़ करें"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"संपर्क प्रदर्शन विकल्प"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"खाता"</string>
     <string name="set_default_account" msgid="4311613760725609801">"कॉल के लिए हमेशा इसका उपयोग करें"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"इससे कॉल करें"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"नोट के साथ कॉल करें"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"कॉल के साथ भेजने के लिए नोट लिखें..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"भेजें और कॉल करें"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> नहीं पढ़े गए आइटम. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> नहीं पढ़े गए आइटम. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"बिल्ड वर्शन"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"ओपन सोर्स लाइसेंस"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ओपन सोर्स सॉफ़्टवेयर के लाइसेंस वि‍वरण"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"हटाएं"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"पदलोप चिह्न"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> सेकंड"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> मि. <xliff:g id="SECONDS">%s</xliff:g> से."</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> घंटे <xliff:g id="MINUTES_1">%s</xliff:g> मिनट <xliff:g id="SECONDS">%s</xliff:g> सेकंड"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> मि. <xliff:g id="SECONDS">%2$s</xliff:g> से."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> घंटे <xliff:g id="MINUTES_1">%2$s</xliff:g> मिनट <xliff:g id="SECONDS">%3$s</xliff:g> सेकंड"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"इस शॉर्टकट को अक्षम कर दिया गया है"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"संपर्क निकाल दिया गया था"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"आयात करें"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"कोई कनेक्शन नहीं"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"सिम"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"और दिखाएं"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM कार्ड का आयात पूर्ण"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"आयात करना विफल रहा"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM कार्ड से संपर्क आयात नहीं किए जा सके"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM को आयात किया जा रहा है"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 4d1b568..0aceb50 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontakti"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontakti"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Dodavanje kontakta"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Izravan poziv"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Izravna poruka"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Odaberite prečac kontakta"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Odaberite broj za pozivanje"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Odabir broja za poruku"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Odabir kontakta"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Dodavanje kontaktu"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Odaberite kontakt"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Odaberi"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Izrada novog kontakta"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Pojedinosti kontakta"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"O kontaktu"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Ažuriranja"</string>
     <string name="searchHint" msgid="8482945356247760701">"Pretraži kontakte"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Prikaži kontakt"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Dodaj u favorite"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Ukloni iz favorita"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Uklonjeno iz favorita"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Izradi prečac"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Nazovi kontakt"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Poruka kontaktu"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Prekini vezu"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Uklanjanje kontakata"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Promjena naziva oznake"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Odabir kontakata"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Dodavanje kontakata"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Uklanjanje iz oznake"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Dodavanje kontakta"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Izrada nove oznake…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Izrada oznake"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Želite li razdvojiti taj kontakt na više kontakata?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Razdvoji"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Želite li spremiti promjene koje ste već izvršili i razdvojiti taj kontakt na više kontakata?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Spremi"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Povezivanje kontakata"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Odaberite kontakt koji želite povezati s kontaktom <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Kontakti su povezani s imenom <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -85,9 +76,9 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontakata</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> kontakt · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> kontakta · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontakata · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakta · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakata · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"S Google računa"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"S računa: <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -104,21 +95,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Brisanjem ovog kontakta izbrisat ćete podatke s više računa."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Želite li izbrisati ovaj kontakt?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Izbriši"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Odbaci promjene"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt ne postoji."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt je dodan na početni zaslon."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> dodan je na početni zaslon."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Izrada novog kontakta"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Stvori novi kontakt"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Na tabletnom uređaju nema dostupnih slika."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nema dostupnih slika na telefonu."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakt fotografija"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Prilagođeni naziv oznake"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Pošalji pozive izravno u govornu poštu"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Ukloni fotografiju"</string>
     <string name="noContacts" msgid="2228592924476426108">"Popis kontakata je prazan"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Nema oznaka."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Za stvaranje grupa potreban vam je račun"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Nema kontakata s tom oznakom"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Nema kontakata na ovom računu"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Popis kontakata je prazan"</string>
@@ -131,7 +116,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Pogreška pri spremanju kontakta"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Promjene fotografije kontakta ne mogu se spremiti"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Oznaka se ne može učitati"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Oznaka je spremljena"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Oznaka je izbrisana"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Oznaka je izrađena"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Oznaka se ne može izraditi"</string>
@@ -146,32 +130,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Slanje poruke"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Odabir kontakata"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Slanje"</string>
-    <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" 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" 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="5948889261993124839">"Sve"</string>
-    <string name="callBack" msgid="5498224409038809224">"Povratni poziv"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Zovi ponovo"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Povratni poziv"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Dodati \"<xliff:g id="EMAIL">%s</xliff:g>\" kontaktima?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> od <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakata"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nazivi vaših kontakata"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Nije pronađena nijedna aplikacija koja može provesti ovu radnju."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknite za povratak na prethodni zaslon"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Dodajte telefonski broj"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Dodajte e-adresu"</string>
@@ -191,52 +152,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Naziv oznake"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Glasovni chat"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videochat"</string>
-    <string name="connections" msgid="8098440723172028350">"Veze"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Dodaj vezu"</string>
-    <string name="recent" msgid="2659189233141493004">"Nedavni"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Nedavna ažuriranja"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> račun"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Snimi fotografiju"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Snimi novu fotografiju"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Odaberi fotografiju"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Odaberi novu fotografiju"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Odaberi sve"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Poništi odabir svega"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Dodaj novo"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Dodaj organizaciju"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Oznaka"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Promijeni"</string>
-    <string name="description_star" msgid="2605854427360036550">"favorit"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Uredi kontakt"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Odustani"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Natrag"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zatvaranje"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Želite li povezati trenutačni kontakt s odabranim kontaktom?"</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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Dodaj u Moje kontakte"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Direktorij <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Postavke"</string>
     <string name="menu_settings" msgid="377929915873428211">"Postavke"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Dodaj kontaktima"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Dodavanje kontaktu"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Zatvori"</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="7122002148518724139">"Uključi godinu"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Učitavanje..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Izradi novi kontakt"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Dodaj račun"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Uvezi"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Izrada nove oznake…"</string>
@@ -250,14 +187,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Odbaci"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Odustani"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Želite li odbaciti prilagodbe?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Pretraživanje kontakata"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Uklanjanje kontakata"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Moj lokalni profil"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Moj <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profil"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Prikaz svih kontakata"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Očuvajte sigurnost svojih kontakata čak i ako izgubite telefon, sinkronizirajte ih mrežnom uslugom."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Dodajte račun"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Odvojite jednu minutu da biste dodali račun koji će na Googleu sigurnosno kopirati sve vaše kontakte."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novi kontakti spremat će se na račun <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Odaberite zadani račun za nove kontakte:"</string>
@@ -276,13 +209,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Pokaži manje"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Nedavno"</string>
     <string name="about_card_title" msgid="2920942314212825637">"O kartici"</string>
-    <string name="send_message" msgid="8938418965550543196">"Pošalji poruku"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Stvaranje osobne kopije..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Sutra"</string>
     <string name="today" msgid="8041090779381781781">"Danas"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Danas u <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Sutra u <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Događaj bez naslova)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Postavi"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -292,20 +224,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Web-lokacija"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Događaj"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Odnos"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Račun"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Ime"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-adresa"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknite da bi se alat za uređivanje kontakta proširio."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknite da bi se alat za uređivanje kontakta sažeo."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"upute do lokacije"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"nedavni sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknite za odgovor"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"nedavni sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknite za odgovor"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"dolazno"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"odlazno"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"propušteno"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"nedavni poziv. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Više polja"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Promjena fotografije kontakta"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Dodavanje fotografije kontakta"</string>
@@ -313,45 +241,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Otvaranje alata za uređivanje nije uspjelo."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Spremi na račun"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Inform. o kontaktu na računu <xliff:g id="ACCOUNT">%s</xliff:g> ne mogu se uređivati"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Trenutačno se sprema na <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dvaput dodirnite da biste odabrali neki drugi račun."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="one">Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="few">Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Povezani kontakti (<xliff:g id="COUNT">%d</xliff:g>)"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"POVEŽI KONTAKTE"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ODUSTANI"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> mogući duplikat</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> moguća duplikata</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mogućih duplikata</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> povezani kontakt</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> povezana kontakta</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> povezanih kontakata</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ovaj kontakt"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mogući duplikati"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Ti bi se kontakti mogli odnositi na istu osobu. Možete ih povezati u jedan kontakt."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Povezani kontakti"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"S vaših računa"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Odabir fotografije"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"S računa <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Izbriši <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Izbriši <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Izbriši <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Slika s računa <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> nije odabrana"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotografija s računa <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> odabrana"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Fotografija s nepoznatog računa nije odabrana"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Fotografija s nepoznatog računa odabrana"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Prijedlozi"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Otvaranje ladice za navigaciju"</string>
@@ -420,11 +316,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Direktorij"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Poslovni direktorij"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Svi kontakti"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Pronađeno je više od ovoliko kontakata: <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Brzi kontakt za korisnika <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Bez imena)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Često kontaktirani"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Prikaži kontakt"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Svi kontakti s telefonskim brojevima"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Poslovni kontakti"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Prikaži ažuriranja"</string>
@@ -432,7 +326,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Ime"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nadimak"</string>
-    <string name="full_name" msgid="6602579550613988977">"Ime"</string>
     <string name="name_given" msgid="4280790853455320619">"Ime"</string>
     <string name="name_family" msgid="7466985689626017037">"Prezime"</string>
     <string name="name_prefix" msgid="59756378548779822">"Prefiks imena"</string>
@@ -465,8 +358,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Pošaljite e-poruku na <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-pošta"</string>
     <string name="postal_street" msgid="8133143961580058972">"Ulica"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Poštanski sandučić"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Susjedstvo"</string>
     <string name="postal_city" msgid="6597491300084895548">"Grad"</string>
     <string name="postal_region" msgid="6045263193478437672">"Država"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Poštanski broj"</string>
@@ -504,8 +395,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Više grupa..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Uklanjanje grupe \"<xliff:g id="GROUP">%s</xliff:g>\" iz sinkronizacije uklonit će i sve negrupirane kontakte iz sinkronizacije."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Spremanje opcija prikaza..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Gotovo"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Odustani"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Prilagođeni prikaz"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Spremite uvezene kontakte na račun:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM kartica"</string>
@@ -527,18 +416,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Otkazati izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Uvoz/izvoz kartice vCard nije otkazan"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Nepoznata pogreška."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Datoteku \"<xliff:g id="FILE_NAME">%s</xliff:g>\" nije moguće otvoriti radi: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Datoteku \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" nije moguće otvoriti radi: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Alat za izvoz ne može se pokrenuti; razlog: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nema kontakata koji se mogu izvoziti."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Onemogućili ste obavezno dopuštenje."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Tijekom izvoza došlo je do pogreške zbog: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Obavezan naziv datoteke predug je (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O pogreška"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nema dovoljno memorije. Datoteka je možda prevelika."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Iz neočekivanog razloga nije moguće analizirati vCard datoteku."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format nije podržan."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Neuspješno prikupljanje meta-informacija danih datoteka kartice vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Uvoz jedne ili više datoteka nije uspio (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Završetak izvoza datoteke <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Dovršen je izvoz kontakata."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Dovršen je izvoz kontakata. Kliknite obavijest za dijeljenje kontakata."</string>
@@ -547,29 +432,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Izvoz podataka o kontaktu"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Podaci kontakata izvoze se."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Dohvaćanje podataka iz baze podataka nije uspjelo."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Nema kontakata koji se mogu izvoziti. Ako na svojem telefonu imate kontakte, neki davatelji podataka možda ne dopuštaju izvoz kontakata s tog telefona."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nema kontakata koji se mogu izvesti."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Sastavljač za vCard nije se ispravno pokrenuo."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Izvoz nije uspio"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Podaci o kontaktu nisu izvezeni.\nRazlog: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Uvoz <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Čitanje podataka vCarda nije uspjelo"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Čitanje podataka vCard otkazano je"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Završetak uvoza kartice vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> otkazan je"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Datoteka <xliff:g id="FILENAME">%s</xliff:g> uskoro će biti uvezena."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Datoteka će uskoro biti uvezena."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Zahtjev za uvoz formata vCard odbijen je. Pokušajte ponovo kasnije."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Datoteka <xliff:g id="FILENAME">%s</xliff:g> uskoro će biti izvezena."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Datoteka će se uskoro izvesti."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakti će se uskoro izvesti."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Zahtjev za izvoz formata vCard odbijen je. Pokušajte ponovo kasnije."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Spremanje vCard datoteka u predmemoriju za lokalnu privremenu pohranu. Stvarni uvoz uskoro će početi."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Uvoz vCard datoteke nije uspio."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt NFC-om"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Izvesti kontakte?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Spremanje u predmemoriju"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Uvoz <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Uvoz <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Izvoz u .vcf datoteku"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Poredano po"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ime"</string>
@@ -582,8 +463,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Moje informacije"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Postavite svoj profil"</string>
     <string name="setting_about" msgid="7014388749752042863">"O kontaktima"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Dijeli vidljive kontakte"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Nije uspjelo dijeljenje vidljivih kontakata"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Dijeljenje omiljenih kontakata"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Dijeljenje svih kontakata"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Dijeljenje kontakata nije uspjelo."</string>
@@ -593,14 +472,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nema kontakata za dijeljenje."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakti za prikaz"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakti za prikaz"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Prilagodba prikaza"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Prilagodba prikaza"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Spremanje"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Pretražite kontakte"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriti"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Nema kontakata."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Briši često kontaktirane"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Odaberi SIM karticu"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Upravljanje računima"</string>
     <string name="menu_import" msgid="6107961135813836467">"Uvoz"</string>
     <string name="menu_export" msgid="2658783911863503902">"Izvoz"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokirani brojevi"</string>
@@ -608,20 +483,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> preko izvora <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"zaustavi pretraživanje"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Brisanje pretraživanja"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opcije prikaza kontakata"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Račun"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Uvijek upotrebljavaj za pozive"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Poziv putem usluge"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Poziv uz bilješku"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Napišite bilješku koju ćete poslati uz poziv..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"POŠALJI I NAZOVI"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepročitana stavka. </item>
-      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepročitane stavke. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nepročitanih stavki. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Međuverzija"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licence otvorenog koda"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Pojedinosti o licenci za softver otvorenog koda"</string>
@@ -635,8 +503,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Izbriši"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Tri točke"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ovaj je prečac onemogućen"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt je uklonjen"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Uvezi"</string>
@@ -660,4 +528,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Nema veze"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Prikaži više"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Dovršen je uvoz SIM kartice"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Uvoz nije uspio"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Uvoz kontakata sa SIM kartice nije moguć"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Uvoz SIM kontakata"</string>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 4c717fd..20bbc71 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Névjegyek"</string>
     <string name="contactsList" msgid="8661624236494819731">"Címtár"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Névjegy hozzáadása"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Névjegy"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Közvetlen tárcsázás"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Közvetlen üzenet"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Válasszon névjegyet"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Válasszon számot a híváshoz"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Válasszon számot az üzenethez"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Névjegy kiválasztása"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Hozzáadás névjegyhez"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Névjegy kiválasztása"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Választás"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Új névjegy létrehozása"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Névjegy adatai"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Információ"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Frissítések"</string>
     <string name="searchHint" msgid="8482945356247760701">"Keresés a névjegyek között"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Névjegy megtekintése"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Hozzáadás a kedvencekhez"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Eltávolítás a kedvencek közül"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Eltávolítva a kedvencek közül"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Parancsikon létrehozása"</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>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Szétválasztás"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Névjegyek eltávolítása"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Címke átnevezése"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Névjegyek kiválasztása"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Névjegyek hozzáadása"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Eltávolítás a címkéről"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Névjegy hozzáadása"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Új létrehozása…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Címke létrehozása"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Szeretné több névjegyre szétbontani ezt a névjegyet?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Szétválasztás"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Szeretné menteni a végrehajtott módosításokat, és több névjeggyé szétbontani ezt a névjegyet?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Mentés"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Névjegyek társítása"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Válassza ki a névjegyet, amelyet a következővel szeretne társítani: <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> összekapcsolva"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> névjegy</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> névjegy · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> névjegy · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> névjegy · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> névjegy · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"A Google rendszeréből"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Innen: <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"A névjegy törlésével több fiókból is töröl adatokat."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Törli ezt a névjegyet?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Törlés"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Módosítások elvetése"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"A névjegy nem létezik."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Névjegy hozzáadva a kezdőképernyőhöz"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> hozzáadva a kezdőképernyőhöz"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Új névjegy létrehozása"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Új névjegy létrehozása"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Nem állnak rendelkezésre képek a táblagépen."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nincsenek elérhető képek a telefonon."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Ismerős fotója"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Egyéni címkenév"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Hívások közvetlen átirányítása a hangpostára"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Fénykép törlése"</string>
     <string name="noContacts" msgid="2228592924476426108">"A névjegylista üres"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Nincsenek címkék."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Csoportok létrehozásához szükség van egy fiókra."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Nincs ilyen címkéjű névjegy"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"A fiókban nincsenek névjegyek"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"A névjegylista üres"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Hiba történt az ismerős mentése során"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nem sikerült menteni a névjegyfotó módosításait"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nem sikerült betölteni a címkét"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Címke mentve"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Címke törölve"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Címke létrehozva"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nem hozhat létre címkét"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Üzenet küldése"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Névjegyek kiválasztása"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Küldés"</string>
-    <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" 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" 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="5948889261993124839">"Összes"</string>
-    <string name="callBack" msgid="5498224409038809224">"Visszahívás"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Hívásismétlés"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Visszahívás"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Hozzáadja a(z) \"<xliff:g id="EMAIL">%s</xliff:g>\"címet a Címtárhoz?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plusz"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> névjegy"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Ismerősök nevei"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Nincs megfelelő alkalmazás a művelet elvégzésére."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kattintással visszatér az előző képernyőre"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Telefonszám hozzáadása"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"E-mail-cím hozzáadása"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Címke neve"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Audiocsevegés"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videocsevegés"</string>
-    <string name="connections" msgid="8098440723172028350">"Kapcsolatok"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Kapcsolat hozzáadása"</string>
-    <string name="recent" msgid="2659189233141493004">"Legújabbak"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Legújabb frissítések"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> névjegy"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-fiók"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Fotó készítése"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Új fénykép készítése"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Fotó kiválasztása"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Új fotó kiválasztá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>
-    <string name="menu_select_all" msgid="621719255150713545">"Összes kijelölése"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Összes kijelölés megszüntetése"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Új hozzáadása"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Szervezet hozzáadása"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dátum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Címke"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Módosítás"</string>
-    <string name="description_star" msgid="2605854427360036550">"kedvenc"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Névjegy szerkesztése"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Mégse"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Vissza"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"bezárás"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Társítja a jelenlegi és a kijelölt névjegyet?"</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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Hozzáadás a Címtárhoz"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Mappa: <xliff:g id="TYPE">%1$s</xliff:g>"</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="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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Hozzáadása a névjegyekhez"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Hozzáadás névjegyhez"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Bezárás"</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="7122002148518724139">"Az év szerepeltetése"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Névjegy"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Betöltés..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Új névjegy létrehozása"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Fiók hozzáadása"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importálás"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Új létrehozása…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Elvetés"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Mégse"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Elveti a személyre szabott elemeket?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> -- <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Keresés a névjegyek között"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Névjegyek eltávolítása"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Helyi profilom"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profilom"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Az összes névjegy megjelenítése"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Tartsa névjegyeit biztonságban akkor is, ha elveszíti a telefont: szinkronizáljon egy online szolgáltatással."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Fiók hozzáadása"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Adjon hozzá egy fiókot, amellyel biztonsági mentést készíthet a névjegyeiről a Google rendszerében."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Az új névjegyek mentésének helye: <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Válasszon ki egy alapértelmezett fiókot az új névjegyek számára"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Kevesebb megjelenítése"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Legutóbbiak"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Névjegy"</string>
-    <string name="send_message" msgid="8938418965550543196">"Üzenet küldése"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Személyes másolat készítése..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Holnap"</string>
     <string name="today" msgid="8041090779381781781">"Ma"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Ma <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Holnap <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Névtelen esemény)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Beállítás"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Azonnali üzenetküldés"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Webhely"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Esemény"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Viszony"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Fiók"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Név"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Kattintson a névjegyszerkesztő kibontásához."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kattintson a névjegyszerkesztő összecsukásához."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"útvonalterv a helyhez"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS a közelmúltban. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kattintson, ha választ szeretne küldeni"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"SMS a közelmúltban. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kattintson, ha választ szeretne küldeni"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"bejövő"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"kimenő"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"nem fogadott"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"hívás a közelmúltban. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"További mezők"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Névjegyfotó lecserélése"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Névjegyfotó felvétele"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Nem sikerült megnyitni a szerkesztőt."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Mentés ide"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"A(z) <xliff:g id="ACCOUNT">%s</xliff:g> névjegyadatai nem szerkeszthetők"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Jelenleg a(z) <xliff:g id="ACCOUNT_NAME">%s</xliff:g>fiókba menti a névjegyet. Koppintson duplán másik fiók kiválasztásához."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Társított névjegyek (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Társított névjegy</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> összekapcsolt névjegy"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"NÉVJEGYEK TÁRSÍTÁSA"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"MÉGSE"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> lehetséges ismétlődő névjegy</item>
-      <item quantity="one">1 lehetséges ismétlődő névjegy</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> társított névjegy</item>
-      <item quantity="one">1 társított névjegy</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ez a névjegy"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Lehetséges ismétlődések"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Lehet, hogy ezek a névjegyek ugyanahhoz a személyhez tartoznak. Lehetőség van a névjegyek egyesítésére."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Összekapcsolt névjegyek"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Az Ön fiókjaiból"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Fotó kiválasztása"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Innen: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"A(z) <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> törlése"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"A(z) <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> törlése"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"A(z) <xliff:g id="DATA_KIND">%s</xliff:g> törlése"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"A következőtől származó fotó nincs kiválasztva: <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"A következőtől származó fotó kiválasztva: <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Az ismeretlen fiókból származó kép nincs kiválasztva"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Ismeretlen fiókból származó kép kiválasztva"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Javaslatok"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Új"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Navigációs fiók kinyitása"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Mappa"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Munkahelyi névjegyek címtára"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Összes névjegy"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Több mint <xliff:g id="COUNT">%d</xliff:g> találat."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> gyors elérése"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Nincs név)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Gyakran keresett"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Névjegy megtekintése"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Minden névjegy telefonszámokkal"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Munkaprofilhoz tartozó névjegyek"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Frissítések"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Név"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Becenév"</string>
-    <string name="full_name" msgid="6602579550613988977">"Név"</string>
     <string name="name_given" msgid="4280790853455320619">"Utónév"</string>
     <string name="name_family" msgid="7466985689626017037">"Családnév"</string>
     <string name="name_prefix" msgid="59756378548779822">"Név előtagja"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"E-mail: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-mail küldése"</string>
     <string name="postal_street" msgid="8133143961580058972">"Utca"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Postafiók"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Környék"</string>
     <string name="postal_city" msgid="6597491300084895548">"Település"</string>
     <string name="postal_region" msgid="6045263193478437672">"Állapot"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Irányítószám"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"További csoportok..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Ha leállítja a(z) \"<xliff:g id="GROUP">%s</xliff:g>\" csoport szinkronizálását, ugyanez történik a nem csoportosított névjegyekkel is."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Megjelenítési beállítások mentése..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Kész"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Mégse"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Személyre szabott nézet"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Importált névjegyek mentési helye:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-kártya"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Megszakítja <xliff:g id="FILENAME">%s</xliff:g> exportálását?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard imp./exp. megszakítása sikertelen"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Ismeretlen hiba."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"A(z) \"<xliff:g id="FILE_NAME">%s</xliff:g>\" fájl nem nyitható meg: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"A(z) \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" fájl nem nyitható meg: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nem sikerült elindítani az exportálót: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nincs exportálható névjegy."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Letiltott egy szükséges engedélyt."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Hiba történt az exportálás során: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"A fájlnév túl hosszú (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O hiba"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nincs elég memória. Lehet, hogy túl nagy a fájl."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Váratlan ok miatt nem sikerült a vCard szintaktikai elemzése."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"A formátum nem támogatott."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Nem sikerült begyűjteni a vCard-fájl(ok) metaadatait."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Egy vagy több fájl nem importálható (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"A(z) <xliff:g id="FILENAME">%s</xliff:g> exportálása befejeződött."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"A névjegyek exportálása befejeződött."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Az exportálás befejeződött. A névjegyek megosztásához kattintson az értesítésre."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Névjegyadatok exportálása"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"A névjegyadatok exportálása folyamatban van."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nem sikerült lekérni az adatbázis-információkat."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Nincsenek exportálható névjegyek. Ha vannak névjegyek a telefonján, akkor előfordulhat, hogy az adatszolgáltató nem teszi lehetővé a névjegyek exportálását a telefonról."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nincsenek exportálható névjegyek."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"A vCard-készítő nem megfelelően indult el."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Sikertelen export"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Nem sikerült a névjegyadatok exportálása.\nOk: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importálás - <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nem sikerült beolvasni a vCard adatait."</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"A vCard-adatok beolvasása megszakítva"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"A(z) <xliff:g id="FILENAME">%s</xliff:g> vCard importálása befejeződött"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"A(z) <xliff:g id="FILENAME">%s</xliff:g> importálása megszakítva"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"A(z) <xliff:g id="FILENAME">%s</xliff:g> hamarosan importálásra kerül."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"A fájl importálása hamarosan megtörténik."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"A vCard-importálási kérelem elutasítva. Próbálja újra később."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"A(z) <xliff:g id="FILENAME">%s</xliff:g> hamarosan exportálásra kerül."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"A fájl exportálása hamarosan megtörténik."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"A névjegyek exportálása hamarosan megtörténik."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"A vCard-exportálási kérelem elutasítva. Próbálja újra később."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kapcsolat"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard(ok) mentése az ideiglenes helyi tárolóba. A tényleges importálás hamarosan megkezdődik."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Nem sikerült a vCard importálása."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC-n kapott névjegy"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Exportálni szeretné?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Gyorsítótárazás"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importálás - <xliff:g id="TOTAL_NUMBER">%s</xliff:g>/<xliff:g id="CURRENT_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importálás - <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>/<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exportálás .vcf fájlba"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Rendezés"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Utónév"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Saját adatok"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Profil beállítása"</string>
     <string name="setting_about" msgid="7014388749752042863">"A névjegyekről"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Látható névjegyek megosztása"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Nem sikerült megosztani a látható névjegyeket."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Kedvenc névjegyek megosztása"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Az összes névjegy megosztása"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Nem sikerült megosztani a névjegyeket."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nincsenek megosztható névjegyek."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Megjelenítendő névjegyek"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Megjelenítendő névjegyek"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Személyre szabott nézet megadása"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Nézet személyre szabása"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Mentés"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Névjegyek keresése"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Kedvencek"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Nincsenek névjegyek"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Gyakran keresettek törlése"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM kártya kiválasztása"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Fiókok kezelése"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importálás"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exportálás"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Letiltott számok"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> - <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"keresés leállítása"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Keresés törlése"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Névjegy megjelenítési lehetőségei"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Fiók"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Mindig ezt használja hívásokhoz"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Hívás a következővel:"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Hívás üzenettel"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Írjon üzenetet, amelyet elküldhetünk a hívással együtt…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"KÜLDÉS és HÍVÁS"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="LIMIT">%2$s</xliff:g>/<xliff:g id="COUNT">%1$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> olvasatlan elem. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> olvasatlan elem. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Build verziószáma"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Nyílt forráskódú licencek"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"A nyílt forráskódú szoftverekhez kapcsolódó licenc részletei"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Törlés"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Három pont"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> másodperc"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> perc, <xliff:g id="SECONDS">%s</xliff:g> mp"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> óra, <xliff:g id="MINUTES_1">%s</xliff:g> perc, <xliff:g id="SECONDS">%s</xliff:g> mp"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> perc, <xliff:g id="SECONDS">%2$s</xliff:g> mp"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> óra, <xliff:g id="MINUTES_1">%2$s</xliff:g> perc, <xliff:g id="SECONDS">%3$s</xliff:g> mp"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"A parancsikon le van tiltva"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Névjegy eltávolítva"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importálás"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Nincs kapcsolat"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Több megjelenítése"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"A SIM-kártya importálása befejeződött"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Sikertelen importálás"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nem sikerült importálni a névjegyeket a SIM-kártyáról"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM-kártya importálása folyamatban"</string>
 </resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 2c6c4fc..b097794 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Կոնտակտներ"</string>
     <string name="contactsList" msgid="8661624236494819731">"Կոնտակտներ"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Ավելացնել կոտակտ"</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">"Ընտրել SMS-ի համարը"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Կոնտակտի ընտրում"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Ավելացնել կոնտակտին"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Ընտրել կոնտակտ"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Ընտրել"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Ստեղծել նոր կոնտակտ"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Մանրամասներ կոնտակտի մասին"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Ջնջել"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Փոխել լուսանկարը"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Ստեղծել դյուրանցում"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Զանգել կոնտակտին"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Հաղորդագրել կոնտակտին"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Միավորման չեղարկում"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Հեռացնել կոնտակտները"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Վերանվանել պիտակը"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Ընտրեք կոնտակտներ"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Ավելացնել կոնտակտներ"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Հեռացնել պիտակից"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Ավելացնել կոնտակտ"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Ստեղծել նոր…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Ստեղծել պիտակ"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Տրոհե՞լ այս կոնտակտը մի քանի կոնտակտների:"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Տրոհել"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Պահե՞լ արդեն իսկ կատարված փոփոխությունները և տրոհել այս կոնտակտը մի քանի կոնտակտների:"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Պահել"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Միակցել կոնտակտները"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Ընտրեք կոնտակտը, որը ցանկանում եք միակցել <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> կոնտակտը կցվեց"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> կոնտակտ</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> կոնտակտ · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contacts · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> կոնտակտ · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google-ից"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> հաշվից"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Եթե ջնջեք այս կոնտակտը, կջնջվեն տվյալներ մի քանի հաշիվներից։"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Ջնջե՞լ այս կոնտակտը:"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Ջնջել"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Հրաժարվել փոփոխություններից"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Կոնտակտը գոյություն չունի:"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Կոնտակտն ավելացվեց հիմնական էկրանին:"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> կոնտակտն ավելացվեց հիմնական էկրանին:"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Ստեղծել նոր կոնտակտ"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Ստեղծել նոր կոնտակտ"</string>
     <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="2228592924476426108">"Կոնտակտների ցանկը դատարկ է"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Պիտակներ չկան"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Խմբեր ստեղծելու համար դուք պետք է հաշիվ ունենաք:"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Այս պիտակով կոնտակտներ չկան"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Այս հաշվում կոնտակտներ չկան"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Կոնտակտների ցանկը դատարկ է"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Չհաջողվեց պահել կոնտակտը"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Չհաջողվեց պահել կոնտակտի լուսանկարի փոփոխությունները"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Չհաջողվեց բեռնել պիտակը"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Պիտակը պահվեց"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Պիտակը ջնջվեց"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Պիտակը ստեղծվեց"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Չհաջողվեց պիտակ ստեղծել"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Ուղարկել հաղորդագրություն"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Ընտրեք կոնտակտներ"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Ուղարկել"</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="5948889261993124839">"Բոլորը"</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_plus_button" msgid="515164827856229880">"գումարել"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>-ը <xliff:g id="TOTAL_NUMBER">%s</xliff:g> կոնտակտից"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Ձեր կոնտակտների անունները"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Պիտակի անունը"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> հաշիվ"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Պիտակ"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Փոխել"</string>
-    <string name="description_star" msgid="2605854427360036550">"ընտրյալ"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Փոփոխել կոնտակտը"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Չեղարկել"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Հետ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"փակել"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Կապե՞լ այս կոնտակտը ընտրված կոնտակտի հետ:"</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="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="7122002148518724139">"Ներառել տարին"</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="4347232421410561500">"Ավելացնել հաշիվ"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Ներմուծել"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Ստեղծել նոր…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Անտեսել"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Չեղարկել"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Չեղարկե՞լ փոփոխությունները:"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Որոնեք կոնտակտներ"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Կոնտակտների ջնջում"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Իմ տեղային պրոֆիլը"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Իմ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> պրոֆիլը"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Ցուցադրվում են բոլոր կոնտակտները"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Պահեք ձեր կոնտակտները ապահով, նույնիսկ եթե կորցնեք ձեր հեռախոսը. համաժամեցրեք առցանց ծառայության հետ:"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Ավելացնել հաշիվ"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Ավելացրեք հաշիվ, որի միջոցով ձեր կոնտակտները կպահուստավորվեն Google-ում:"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Նոր կոնտակտները կպահվեն <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> հաշվում:"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Ընտրեք կանխադրված հաշիվ նոր կոնտակտների համար՝"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Կոծկել"</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="288549957278065542">"Ստեղծվում է անձնական պատճենը..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"վերջին SMS-ը՝ <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>, <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"վերջին զանգը՝ <xliff:g id="CALL_TYPE">%1$s</xliff:g>, <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Լրացուցիչ դաշտեր"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Փոխել կոնտակտի լուսանկարը"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Ավելացնել կոնտակտի լուսանկարը"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Չհաջողվեց բացել խմբագրիչը:"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Պահվում է այստեղ՝"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> հաշվի կոնտակտային տվյալները ենթակա չեն փոփոխման:"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Ներկայումս պահվում է <xliff:g id="ACCOUNT_NAME">%s</xliff:g> հաշվում: Կրկնակի հպեք՝ մեկ այլ հաշիվ ընտրելու համար:"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="one">Linked contacts (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Միակցված կոնտակտներ (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> կապված կոնտակտ"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ՄԻԱԿՑԵԼ ԿՈՆՏԱԿՏՆԵՐԸ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ՉԵՂԱՐԿԵԼ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> հնարավոր կրկնօրինակ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> հնարավոր կրկնօրինակ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> կապված կոնտակտ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> կապված կոնտակտ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Այս կոնտակտը"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Հնարավոր կրկնօրինակներ"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Այս կոնտակտները հնարավոր է միևնույն մարդու կոնտակտներ են։ Կարող եք դրանք միակցել և ստեղծել մեկ կոնտակտ։"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Կցված կոնտակտներ"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Ձեր հաշիվներից"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Ընտրել լուսանկար"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> հաշվից"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Ջնջել <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Ջնջել <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Ջնջել <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> հաշվի լուսանկարը չի նշվել"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> հաշվի լուսանկարը նշվել է"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Անհայտ հաշվից լուսանկարն ընտրված չէ"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Անհայտ հաշվից լուսանկարն ընտրված է"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Առաջարկներ"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Նոր"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Բացել նավարկման դարակը"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Գրացուցակ"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Աշխատանքային գրացուցակ"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Բոլոր կոնտակտները"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Գտնվել են ավելի քան <xliff:g id="COUNT">%d</xliff:g>:"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Արագ հաղորդակցում <xliff:g id="NAME">%1$s</xliff:g>-ի հետ"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Անանուն)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Հաճախակի հաղորդակցվածները"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Դիտել կոնտակտը"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Բոլոր հեռախոսահամարներով կոնտակտները"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Աշխատանքային պրոֆիլի կոնտակտներ"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Դիտել թարմացումները"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM քարտ"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Անունը"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Կեղծանուն"</string>
-    <string name="full_name" msgid="6602579550613988977">"Անուն և ազգանուն"</string>
     <string name="name_given" msgid="4280790853455320619">"Անուն"</string>
     <string name="name_family" msgid="7466985689626017037">"Ազգանուն"</string>
     <string name="name_prefix" msgid="59756378548779822">"Անվան նախածանց"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Ուղարկել էլեկտրոնային նամակ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-ին"</string>
     <string name="email" msgid="5668400997660065897">"Նամակագրել"</string>
     <string name="postal_street" msgid="8133143961580058972">"Փողոց"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Բաժանորդային արկղ"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Շրջակայք"</string>
     <string name="postal_city" msgid="6597491300084895548">"Քաղաք"</string>
     <string name="postal_region" msgid="6045263193478437672">"Նահանգ"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Փոստային կոդ"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Այլ խմբեր..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"«<xliff:g id="GROUP">%s</xliff:g>»-ի հեռացումը համաժամեցումից նաև կհեռացնի ցանկացած չխմբավորված կոնտակտ համաժամեցումից:"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Ցուցադրման ընտրանքները պահվում են..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Պատրաստ է"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Չեղարկել"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Անհատականացված դիտակերպ"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Պահել ներմուծված կոնտակտներն այստեղ՝"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM քարտից"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Չեղարկե՞լ <xliff:g id="FILENAME">%s</xliff:g>-ի արտահանումը"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Հնարավոր չէ չեղարկել vCard-ի ներմուծումը/արտահանումը"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Անհայտ սխալ:"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Հնարավոր չէ բացել \"<xliff:g id="FILE_NAME">%s</xliff:g>\"-ը. պատճառը` <xliff:g id="EXACT_REASON">%s</xliff:g>:"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Հնարավոր չէ բացել \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\"-ը. պատճառը` <xliff:g id="EXACT_REASON">%2$s</xliff:g>:"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Հնարավոր չէ մեկնարկել արտահանողը. պատճառը` «<xliff:g id="EXACT_REASON">%s</xliff:g>»:"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Արտահանելի կոնտակտ չկա:"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Դուք անջատել եք անհրաժեշտ թույլտվությունը:"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Արտահանման ընթացքում տեղի է ունեցել սխալ. պատճառը` «<xliff:g id="EXACT_REASON">%s</xliff:g>»:"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Պահանջվող ֆայլի անունը շատ երկար է («<xliff:g id="FILENAME">%s</xliff:g>»):"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O սխալ"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Հիշողությունը բավարար չէ: Հնարավոր է` ֆայլը չափազանց մեծ է:"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Չնախատեսված պատճառով vCard-ը հնարավոր չէ վերծանել:"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Ձևաչափը չի աջակցվում:"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Հնարավոր չէ հավաքագրել տվյալ vCard ֆայլի(երի) մետա տեղեկատվությունը:"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Հնարավոր չէ ներմուծել մեկ կամ ավելի ֆայլեր (%s):"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g>-ի արտահանումն ավարտվեց"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Կոնտակտների արտահանումն ավարտվեց:"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Կոնտակտներն արտահանվեցին: Սեղմեք ծանուցումը՝ դրանցով կիսվելու համար:"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Կոնտակտային տվյալների արտահանում"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Կոնտակտային տվյալներն արտահանվում են:"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Հնարավոր չէ ստանալ տվյալների շտեմարանի տեղեկատվությունը:"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Արտահանելի կոնտակտներ չկան: Եթե դուք իրականում ունեք կոնտակտներ ձեր հեռախոսում, ապա հնարավոր է` որոշ տվյալների մատակարարներ չեն թույլատրում կոնտակտների արտահանումը հեռախոսից:"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Արտահանելու կոնտակտներ չկան:"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard-ի կազմիչը ճիշտ չէ մեկնարկել:"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Հնարավոր չէ արտահանել"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Կոնտակտային տվյալները չեն արտահանվել:\nՊատճառը՝ «<xliff:g id="FAIL_REASON">%s</xliff:g>»"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g>-ը ներմուծվում է"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Հնարավոր չէ ընթերցել vCard-ի տվյալները"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard-ի տվյալների ընթերցումը չեղարկվեց"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g>-ի ներմուծումը vCard ավարտվեց"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g>-ի ներմուծումը չեղարկվեց"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g>-ը շուտով կներմուծվի:"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Ֆայլը շուտով կներմուծվի:"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard-ի ներմուծման հայցը մերժվեց: Փորձեք կրկին ավելի ուշ:"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g>-ը կարտահանվի շուտով:"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Ֆայլը շուտով կարտահանվի:"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Կոնտակտները շուտով կարտահանվեն:"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard-ի արտահանման հայցը մերժվել է: Կրկին փորեք ավելի ուշ:"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"կոնտակտ"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard(եր)-ի քեշավորում տեղային ժամանակավոր պահոց: Ներմուծումը կսկսվի շուտով:"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Հնարավոր չէ ներմուծել vCard-ը:"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC-ով ստացված կոտակտ"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Արտահանե՞լ կոնտկատները"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Քեշավորում"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%s</xliff:g> : <xliff:g id="NAME">%s</xliff:g>-ի ներմուծում"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> : <xliff:g id="NAME">%3$s</xliff:g>-ի ներմուծում"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Արտահանել .vcf ֆայլ"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Դասավորել ըստ"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Անվան"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Իմ մասին"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Կարգավորել պրոֆիլը"</string>
     <string name="setting_about" msgid="7014388749752042863">"Կոնտակտների մասին"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Տարածել տեսանելի կոնտակտները"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Չհաջողվեց կիսվել տեսանելի կոնտակտներով:"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Կիսվել նախընտրած կոնտակտներով"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Կիսվել բոլոր կոնտակտներով"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Չհաջողվեց կիսվել կոնտակտներով:"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Հասանելի կոնտակտներ չկան։"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Կոնտակտների զտիչ"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Կոնտակտների զտիչ"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Կարգավորել տեսքը"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Դիտակերպի անհատականացում"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Պահել"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Կոնտակտների որոնում"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Ընտրյալներ"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Կոնտակտներ չկան:"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Մաքրել ամենաշատ զանգվածները"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Ընտրեք SIM քարտը"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Հաշիվների կառավարում"</string>
     <string name="menu_import" msgid="6107961135813836467">"Ներմուծել"</string>
     <string name="menu_export" msgid="2658783911863503902">"Արտահանել"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Արգելափակված համարներ"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g>-ով"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"դադարեցնել որոնումը"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Մաքրել որոնման դաշտը"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Կոնտակտների ցուցադրման ընտրանքները"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Հաշիվ"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Միշտ օգտագործել սա՝ զանգերի համար"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Զանգել հետևյալով՝"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Գրառումով զանգ"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Մուտքագրեք գրառում՝ զանգի հետ ուղարկելու համար…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ՈՒՂԱՐԿԵԼ ԵՎ ԶԱՆԳԵԼ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>: <xliff:g id="COUNT_3">%2$d</xliff:g> unread items. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>: <xliff:g id="COUNT_3">%2$d</xliff:g> չընթերցված տարր: </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Պատրաստման տարբերակը"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Բաց կոդով ծրագրակազմի արտոնագրեր"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Բաց կոդով ծրագրակազմի արտոնագրերի մանրամասներ"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Ջնջել"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Բազմակետ"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> վ"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> ր <xliff:g id="SECONDS">%s</xliff:g> վ"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ժ <xliff:g id="MINUTES_1">%s</xliff:g> ր <xliff:g id="SECONDS">%s</xliff:g> վ"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> ր <xliff:g id="SECONDS">%2$s</xliff:g> վ"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ժ <xliff:g id="MINUTES_1">%2$s</xliff:g> ր <xliff:g id="SECONDS">%3$s</xliff:g> վ"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Այս դյուրանցումն անջատվել է"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Կոնտակտը հեռացվել է"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Ներմուծել"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Կապ չկա"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM քարտ"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Ցուցադրել ավելի շատ"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM քարտի ներմուծումն ավարտվեց"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Ներմուծման սխալ"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Չհաջողվեց կոնտակտներ ներմուծել SIM քարտից"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM քարտի ներմուծում"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 70188d8..54709e7 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontak"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontak"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Tambahkan kontak"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontak"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Panggilan langsung"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Pesan langsung"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Pilih pintasan kontak"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Pilih nomor untuk dipanggil"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Pilih nomor untuk dikirimi pesan"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Memilih kontak"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Tambahkan ke kontak"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Pilih kontak"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Pilih"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Buat kontak baru"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Detail kontak"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Tentang"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Pembaruan"</string>
     <string name="searchHint" msgid="8482945356247760701">"Telusuri kontak"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Lihat kontak"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Tambahkan ke favorit"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Hapus dari favorit"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Dibuang dari favorit"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Buat pintasan"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Hubungi kontak"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"SMS kontak"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Batalkan tautan"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Hapus kontak"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Ganti nama label"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Pilih kontak"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Tambahkan kontak"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Hapus dari label"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Tambahkan kontak"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Buat baru…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Buat label"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Batalkan tautannya menjadi beberapa kontak?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Batalkan tautan"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Ingin menyimpan perubahan yang sudah dilakukan dan membatalkan tautan dengan kontak ini menjadi beberapa kontak?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Simpan"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Tautkan kontak"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Pilih kontak yang ingin Anda tautkan 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ditautkan"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontak</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontak · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontak · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontak · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontak · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Dari Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Dari <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Menghapus kontak ini akan menghapus detail dari beberapa akun."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Hapus kontak ini?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Hapus"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Buang perubahan"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontak tidak ada."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontak ditambahkan ke layar Utama."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ditambahkan ke layar Utama."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Buat kontak baru"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Buat kontak baru"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Tidak ada gambar yang tersedia pada tablet."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Tidak ada gambar pada ponsel."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto kontak"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nama label khusus"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Kirim panggilan ke kotak pesan secara langsung"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Hapus foto"</string>
     <string name="noContacts" msgid="2228592924476426108">"Daftar kontak Anda kosong"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Tidak ada label."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Untuk membuat grup, Anda memerlukan sebuah akun."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Tidak ada kontak dengan label ini"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Tidak ada kontak di akun ini"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Daftar kontak Anda kosong"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kesalahan saat menyimpan kontak"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Tidak dapat menyimpan perubahan foto kontak"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Gagal memuat label"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Label disimpan"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label dihapus"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Label dibuat"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Tidak dapat membuat label"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Kirim pesan"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Pilih Kontak"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Kirim"</string>
-    <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" 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" 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="5948889261993124839">"Semua"</string>
-    <string name="callBack" msgid="5498224409038809224">"Hubungi kembali"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Hubungi sekali lagi"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Panggilan kembali"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Tambahkan \"<xliff:g id="EMAIL">%s</xliff:g>\" ke kontak?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> dari <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontak"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nama kontak Anda"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Tidak ada apl yang ditemukan untuk menangani tindakan ini."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klik untuk kembali ke layar sebelumnya"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Tambahkan nomor telepon"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Tambahkan email"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nama label"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Obrolan suara"</string>
     <string name="video_chat" msgid="1872255818640336072">"Obrolan video"</string>
-    <string name="connections" msgid="8098440723172028350">"Hubungan"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Tambahkan hubungan"</string>
-    <string name="recent" msgid="2659189233141493004">"Terbaru"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Pembaruan terkini"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontak"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Akun <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Ambil foto"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Ambil foto baru"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Pilih foto"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Pilih foto baru"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Pilih semua"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Batal pilih semua"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Tambah baru"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Tambahkan organisasi"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tanggal"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Beri Label"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Ganti"</string>
-    <string name="description_star" msgid="2605854427360036550">"favorit"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Edit kontak"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Batal"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Kembali"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"tutup"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Tautkan 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Tambahkan ke Kontak Saya"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Direktori <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Setelan"</string>
     <string name="menu_settings" msgid="377929915873428211">"Setelan"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Tambahkan ke kontak"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Tambahkan ke kontak"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Tutup"</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="7122002148518724139">"Sertakan tahun"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontak"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Memuat..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Buat kontak baru"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Tambahkan akun"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Impor"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Buat baru…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Buang"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Batal"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Hapus penyesuaian?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Telusuri kontak"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Hapus kontak"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Profil lokal saya"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> saya"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Menampilkan semua kontak"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Tetap amankan kontak Anda jika kehilangan ponsel: sinkronkan dengan layanan online."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Tambahkan akun"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Luangkan waktu untuk menambahkan akun yang akan mencadangkan kontak Anda ke Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Kontak baru akan disimpan ke <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Pilih akun default untuk kontak baru:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Lihat lebih sedikit"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Terbaru"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Tentang"</string>
-    <string name="send_message" msgid="8938418965550543196">"Kirim pesan"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Membuat salinan pribadi..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Besok"</string>
     <string name="today" msgid="8041090779381781781">"Hari ini"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Hari ini pukul <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Besok pukul <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Acara tanpa judul)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Setel"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Situs web"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Acara"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Hubungan"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Akun"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nama"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telepon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik untuk meluaskan editor kontak."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik untuk menciutkan editor kontak."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"petunjuk arah ke lokasi"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms terbaru. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik untuk menanggapi"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms terbaru. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik untuk menanggapi"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"masuk"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"keluar"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"tak terjawab"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"panggilan telepon terbaru. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Bidang lainnya"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Ubah foto kontak"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Tambahkan foto kontak"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Gagal membuka editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Menyimpan ke"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Info kontak dari <xliff:g id="ACCOUNT">%s</xliff:g> tidak dapat diedit"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Saat ini menyimpan ke <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Tap dua kali untuk memilih akun lain."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Kontak tertaut (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Kontak tertaut</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> kontak tertaut"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"TAUTKAN KONTAK"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"BATAL"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Kemungkinan duplikat</item>
-      <item quantity="one">1 Kemungkinan duplikat</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontak tertaut</item>
-      <item quantity="one">1 kontak tertaut</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Kontak ini"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Kemungkinan duplikat"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Semua kontak ini mungkin orang yang sama. Anda dapat menautkannya sebagai satu kontak."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Kontak yang ditautkan"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Dari akun Anda"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Pilih foto"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Dari <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Hapus <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Hapus <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Hapus <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto dari <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>tidak dicentang"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto dari <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>dicentang"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto dari akun tak dikenal tidak dicentang"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto dari akun tak dikenal dicentang"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Saran"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Baru"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Buka panel samping navigasi"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Direktori"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Direktori kerja"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Semua kontak"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Ditemukan lebih dari <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Kontak cepat untuk <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Tanpa nama)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Paling sering dihubungi"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Lihat kontak"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Semua kontak dengan nomor telepon"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontak profil kerja"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Lihat pembaruan"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nama"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nama panggilan"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nama"</string>
     <string name="name_given" msgid="4280790853455320619">"Nama depan"</string>
     <string name="name_family" msgid="7466985689626017037">"Nama belakang"</string>
     <string name="name_prefix" msgid="59756378548779822">"Awalan nama"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Kirim email ke <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Email"</string>
     <string name="postal_street" msgid="8133143961580058972">"Jalan"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Kotak pos"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Lingkungan"</string>
     <string name="postal_city" msgid="6597491300084895548">"Kota"</string>
     <string name="postal_region" msgid="6045263193478437672">"Neg. Bagian/Prov"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Kode pos"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Grup lainnya..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Menghapus \"<xliff:g id="GROUP">%s</xliff:g>\" dari sinkronisasi juga akan menghapus setiap kontak yang tidak berada dalam grup dari sinkronisasi."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Menyimpan opsi tampilan..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Selesai"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Batal"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Tampilan khusus"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Simpan kontak yang diimpor ke:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Kartu SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Batalkan ekspor <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Tidak dpt membatalkan impor/ekspor vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Kesalahan tidak dikenal."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Tidak dapat membuka \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Tidak dapat membuka \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Tidak dapat memulai pengeskpor: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Tidak ada kontak yang dapat diekspor."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Anda telah menonaktifkan izin yang diperlukan."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Terjadi kesalahan saat ekspor: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Nama file yang diperlukan terlalu panjang (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Kesalahan I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Memori tidak cukup. File mungkin terlalu besar."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Tidak dapat mengurai vCard karena alasan yang tak terduga."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format tidak didukung."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Tidak dapat mengumpulkan informasi meta dari file vCard yang diberikan."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Satu file atau lebih tidak dapat diimpor (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Selesai mengekspor <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Selesai mengekspor kontak."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Selesai mengekspor kontak, klik notifikasi untuk membagikan kontak."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Mengekspor kontak"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Data kontak sedang diekspor."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Tidak dapat memperoleh informasi basis data."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Tidak ada kontak yang dapat diekspor. Jika Anda menyimpan kontak pada ponsel, beberapa penyedia data tidak mengizinkan kontak diekspor dari ponsel."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Tidak ada kontak yang dapat diekspor."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Penyusun vCard tidak memulai dengan semestinya."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Tak dapat mengekspor"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontak tidak diekspor.\nAlasan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Mengimpor <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Tidak dapat membaca data vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Membaca data vCard dibatalkan"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Selesai mengimpor vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Mengimpor <xliff:g id="FILENAME">%s</xliff:g> dibatalkan"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> akan segera diimpor."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"File akan diimpor segera."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Permintaan impor vCard ditolak. Coba lagi nanti."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> akan segera diekspor."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"File akan segera diekspor."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontak akan segera diekspor."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Permintaan ekspor vCard ditolak. Coba lagi nanti."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontak"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Menyimpan vCard ke cache untuk penyimpanan lokal sementara. Impor yang sebenarnya akan segera dimulai."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Tidak dapat mengimpor vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontak yang diterima lewat NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Ekspor kontak?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Menyimpan ke cache"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Mengimpor <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Mengimpor <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Ekspor ke file .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Urutkan menurut"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nama depan"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Info saya"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Siapkan profil Anda"</string>
     <string name="setting_about" msgid="7014388749752042863">"Tentang Kontak"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Bagikan kontak yang terlihat"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Gagal membagikan kontak yang terlihat."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Bagikan kontak favorit"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Bagikan semua kontak"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Gagal membagikan kontak."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Tidak ada kontak untuk dibagikan."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontak untuk ditampilkan"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontak untuk ditampilkan"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Tentukan tampilan khusus"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Sesuaikan tampilan"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Simpan"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Telusuri kontak"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favorit"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Tidak ada kontak."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Hapus yang sering"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Pilih kartu SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Kelola akun"</string>
     <string name="menu_import" msgid="6107961135813836467">"Impor"</string>
     <string name="menu_export" msgid="2658783911863503902">"Ekspor"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Nomor yang diblokir"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> melalui <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"hentikan penelusuran"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Hapus penelusuran"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opsi tampilan kontak"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Akun"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Selalu gunakan ini untuk telepon"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Telepon dengan"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Telepon dengan catatan"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Ketik catatan untuk dikirim dengan panggilan telepon..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"KIRIM &amp; PANGGILAN"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> item belum dibaca. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> item belum dibaca. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versi build"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Lisensi sumber terbuka"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detail lisensi untuk perangkat lunak sumber terbuka"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Hapus"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Elipsis"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> dtk"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> mnt <xliff:g id="SECONDS">%s</xliff:g> dtk"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> j <xliff:g id="MINUTES_1">%s</xliff:g> mnt <xliff:g id="SECONDS">%s</xliff:g> dtk"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> mnt <xliff:g id="SECONDS">%2$s</xliff:g> dtk"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> j <xliff:g id="MINUTES_1">%2$s</xliff:g> mnt <xliff:g id="SECONDS">%3$s</xliff:g> dtk"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Pintasan ini telah dinonaktifkan"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontak telah dihapus"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Impor"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Tidak ada sambungan"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Tampilkan lebih banyak"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Selesai mengimpor kartu SIM"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Impor gagal"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Tidak dapat mengimpor kontak dari kartu SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Mengimpor SIM"</string>
 </resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 7b0d196..4431d02 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Tengiliðir"</string>
     <string name="contactsList" msgid="8661624236494819731">"Tengiliðir"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Bæta tengilið við"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Tengiliður"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Bein lína"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Bein skilaboð"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Veldu tengilið fyrir flýtileið"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Veldu númer til að hringja í"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Veldu númer til að senda skilaboð til"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Veldu tengilið"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Bæta við tengilið"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Velja tengilið"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Velja"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Búa til nýjan tengilið"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Upplýsingar um tengilið"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Um"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Uppfærslur"</string>
     <string name="searchHint" msgid="8482945356247760701">"Leita í tengiliðum"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Skoða tengilið"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Bæta við uppáhald"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Fjarlægja úr uppáhaldi"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Fjarlægt úr uppáhaldi"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Búa til flýtileið"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Hringja í tengilið"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Senda tengilið textaskilaboð"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Skipta upp"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Fjarlægja tengiliði"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Endurnefna flokk"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Velja tengiliði"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Bæta tengiliðum við"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Taka úr flokki"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Bæta tengilið við"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Búa til nýjan…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Búa til flokk"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Skipta þessum tengilið upp í fleiri tengiliði?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Skipta upp"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Viltu vista breytingarnar sem þegar hafa verið gerðar og skipta þessum tengilið upp í fleiri tengiliði?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Vista"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Tengja tengiliði saman"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Veldu tengiliðinn sem þú vilt tengja við <xliff:g id="NAME">%s</xliff:g>:"</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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> tengt"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> tengiliðir</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> tengiliður · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> tengiliðir · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> tengiliður · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> tengiliðir · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Af Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Af <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Ef þessum tengilið er eytt verður upplýsingum eytt af mörgum reikningum."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Eyða þessum tengilið?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Eyða"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Hætta við breytingar"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Tengiliðurinn er ekki til."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Tengilið bætt á heimaskjá."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> bætt á heimaskjá."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Búa til nýjan tengilið"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Búa til nýjan tengilið"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Engar myndir eru tiltækar í spjaldtölvunni."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Engar myndir eru tiltækar í símanum."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Mynd tengiliðar"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Sérsniðinn flokkur"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Senda símtöl beint í talhólfið"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Fjarlægja mynd"</string>
     <string name="noContacts" msgid="2228592924476426108">"Listinn yfir tengiliði er tómur"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Engir flokkar."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Þú þarft að vera með reikning til að geta búið til hópa."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Engir tengiliðir í þessum flokki"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Engir tengiliðir á þessum reikningi"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Listinn yfir tengiliði er tómur"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Villa við að vista tengilið"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ekki var hægt að vista breytingar á mynd tengiliðar"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Ekki tókst að hlaða flokk"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Flokkur vistaður"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Flokki eytt"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Flokkur búinn til"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Ekki tókst að stofna flokkinn"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Senda skilaboð"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Velja tengiliði"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Senda"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> tengiliður með símanúmer</item>
-      <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" 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" 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="5948889261993124839">"Allir"</string>
-    <string name="callBack" msgid="5498224409038809224">"Hringja til baka"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Hringja aftur"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Hringja til baka"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Bæta „<xliff:g id="EMAIL">%s</xliff:g>“ við tengiliði?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plús"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> af <xliff:g id="TOTAL_NUMBER">%s</xliff:g> tengiliðum"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nöfn tengiliðanna þinna"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Ekkert forrit fannst sem getur framkvæmt þessa aðgerð."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Smelltu til að fara aftur á fyrri skjá"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Bæta við símanúmeri"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Bæta við netfangi"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Heiti flokks"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Símtalsspjall"</string>
     <string name="video_chat" msgid="1872255818640336072">"Myndspjall"</string>
-    <string name="connections" msgid="8098440723172028350">"Tengingar"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Bæta tengingu við"</string>
-    <string name="recent" msgid="2659189233141493004">"Nýlegt"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Nýlegar uppfærslur"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> tengiliður"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> reikningur"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Taka mynd"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Taka nýja mynd"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Velja mynd"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Velja nýja mynd"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Velja alla"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Velja enga"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Bæta nýjum við"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Bæta fyrirtæki við"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dagsetning"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Flokkur"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Breyta"</string>
-    <string name="description_star" msgid="2605854427360036550">"uppáhald"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Breyta tengilið"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Hætta við"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Til baka"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"loka"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Viltu tengja saman 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Bæta við tengiliði"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Skrá <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Stillingar"</string>
     <string name="menu_settings" msgid="377929915873428211">"Stillingar"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Bæta við tengiliði"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Bæta við tengilið"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Loka"</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="7122002148518724139">"Hafa árið með"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Tengiliður"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Hleður…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Búa til nýjan tengilið"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Bæta reikningi við"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Flytja inn"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Búa til nýjan…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Fleygja"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Hætta við"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Fleygja sérstillingum?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Leita í tengiliðum"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Fjarlægja tengiliði"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Staðbundinn prófíll"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> prófíllinn minn"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Allir tengiliðir sýndir"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Ekki glata tengiliðunum þótt þú týnir símanum: Samstilltu þá við netþjónustu."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Bættu reikningi við"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Gefðu þér tíma til að bæta reikningi við sem mun taka afrit af tengiliðunum þínum yfir á Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nýir tengiliðir verða vistaðir á <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Veldu sjálfgefinn reikning fyrir nýja tengiliði:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Minnka"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Nýlegt"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Um"</string>
-    <string name="send_message" msgid="8938418965550543196">"Senda skilaboð"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Býr til afrit til einkanota…"</string>
     <string name="tomorrow" msgid="6241969467795308581">"Á morgun"</string>
     <string name="today" msgid="8041090779381781781">"Í dag"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Í dag klukkan <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Á morgun klukkan <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
-    <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%s</xliff:g> kl. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
+    <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g> kl. <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Ónefndur viðburður)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Nota"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Spjall"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Vefsvæði"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Viðburður"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Tengsl"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Reikningur"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nafn"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Netfang"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Sími"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Smelltu til að stækka tengiliðaritilinn."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Smelltu til að draga saman tengiliðaritilinn."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"leiðarlýsing að stað"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"nýleg sms-skilaboð. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. smelltu til að svara"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"nýleg sms-skilaboð. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. smelltu til að svara"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"móttekið"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"hringt"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ósvarað"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"nýlegt símtal. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Fleiri reitir"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Skipta um mynd tengiliðar"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Setja inn mynd tengiliðar"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Mistókst að opna ritilinn."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Vista í"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Ekki er hægt að breyta tengiliðaupplýsingum af <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Vistar núna á <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Ýttu tvisvar til að velja annan reikning."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="one">Tengdir tengiliðir (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Tengdir tengiliðir (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> tengdir tengiliðir"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"TENGJA TENGILIÐI SAMAN"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"HÆTTA VIÐ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> möguleg tvítekning</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mögulegar tvítekningar</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> tengdur tengiliður</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> tengdir tengiliðir</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Þessi tengiliður"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mögulegar tvítekningar"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Hugsanlegt er að þessir tengiliðir séu sama manneskjan. Þú getur tengt þá saman í einn tengilið."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Tengdir tengiliðir"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Af reikningunum þínum"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Velja mynd"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Af <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Eyða <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Eyða <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Eyða <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Mynd frá <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ekki valin"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Mynd frá <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>valin"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Mynd af óþekktum reikningi ekki valin"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Mynd af óþekktum reikningi valin"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Tillögur"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nýtt"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Opna yfirlitsskúffu"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Skrá"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Vinnuskrá"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Allir tengiliðir"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Yfir <xliff:g id="COUNT">%d</xliff:g> fundust."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Flýtitengiliður fyrir <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Nafn vantar)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Oft haft samband við"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Skoða tengilið"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Allir tengiliðir með símanúmer"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Tengiliðir í vinnusniði"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Skoða uppfærslur"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nafn"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Gælunafn"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nafn"</string>
     <string name="name_given" msgid="4280790853455320619">"Fornafn"</string>
     <string name="name_family" msgid="7466985689626017037">"Eftirnafn"</string>
     <string name="name_prefix" msgid="59756378548779822">"Forskeyti nafns"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Senda <xliff:g id="CUSTOM_LABEL">%s</xliff:g> tölvupóst"</string>
     <string name="email" msgid="5668400997660065897">"Netfang"</string>
     <string name="postal_street" msgid="8133143961580058972">"Gata"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Pósthólf"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Hverfi"</string>
     <string name="postal_city" msgid="6597491300084895548">"Borg"</string>
     <string name="postal_region" msgid="6045263193478437672">"Ríki"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Póstnúmer"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Fleiri hópar…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Ef hópurinn „<xliff:g id="GROUP">%s</xliff:g>“ er fjarlægður úr samstillingu verður samstillingu einnig hætt á öllum tengiliðum sem ekki eru í hóp."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Vistar birtingarvalkosti…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Lokið"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Hætta við"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Sérsniðið yfirlit"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Vista innflutta tengiliði á:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-korti"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Hætta við útflutning á <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Ekki tókst að hætta við flutning vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Óþekkt villa."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Ekki tókst að opna „<xliff:g id="FILE_NAME">%s</xliff:g>“: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Ekki tókst að opna „<xliff:g id="FILE_NAME">%1$s</xliff:g>“: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Ekki tókst að ræsa útflutningsverkfærið: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Engir tengiliðir sem flytja má út."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Þú hefur gert nauðsynlegt leyfi óvirkt."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Villa kom upp við útflutninginn: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Skráarheitið er of langt („<xliff:g id="FILENAME">%s</xliff:g>“)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Inntaks-/úttaksvilla"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Ekki nægt minni. Skráin kann að vera of stór."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Ekki tókst að þátta vCard-skrána, af óþekktri ástæðu."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Ekki er stuðningur við sniðið."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Ekki tókst að safna lýsigögnum fyrir uppgefna(r) vCard-skrá(r)."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Ekki tókst að flytja inn eina eða fleiri skrár (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Útflutningi á <xliff:g id="FILENAME">%s</xliff:g> lokið."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Útflutningi tengiliða lokið."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Útflutningi tengiliða lokið, smelltu á tilkynninguna til að deila tengiliðum."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Flytur út tengiliðagögn"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Verið er að flytja út tengiliðagögn."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Ekki tókst að sækja upplýsingar úr gagnagrunni."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Engir tengiliðir til útflutnings. Ef þú ert með tengiliði í símanum getur verið að vissar gagnaveitur leyfi ekki útflutning tengiliða úr símanum."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Engir tengiliðir sem flytja má út."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Ræsing vCard-skrifviðmótsins tókst ekki."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Útflutningur mistókst"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Tengiliðagögn voru ekki flutt út.\nÁstæða: „<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Flytur inn <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Ekki tókst að lesa gögn úr vCard-skrá"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Hætt við lestur vCard-gagna"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Innflutningi lokið á vCard-skránni <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Hætt við innflutning á <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> verður flutt inn innan skamms."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Skráin verður flutt inn innan skamms."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Beiðni um innflutning vCard-skrár hafnað. Reyndu aftur síðar."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> verður flutt út innan skamms."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Skráin verður flutt út innan skamms."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Tengiliðir verða fluttir út eftir smástund."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Beiðni um útflutning vCard-skrár hafnað. Reyndu aftur síðar."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"tengiliður"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Setur vCard í skyndiminni í staðbundinni geymslu. Raunverulegur innflutningur hefst innan skamms."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Ekki tókst að flytja vCard-skrá inn."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Tengiliður móttekinn um NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Flytja út tengiliði?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Setur í skyndiminni"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Flytur inn <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Flytur inn <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Flytja út í .vcf-skrá"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Raða eftir"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Fornafn"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Mínar upplýsingar"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Settu upp snið"</string>
     <string name="setting_about" msgid="7014388749752042863">"Um Tengiliði"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Deila sýnilegum tengiliðum"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Mistókst að deila sýnilegum tengiliðum."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Deila eftirlætistengiliðum"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Deila öllum tengiliðum"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Ekki tókst að deila tengiliðum."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Engir tengiliðir til að deila."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Tengiliðir til að birta"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Tengiliðir til að birta"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Stilla sérsniðið yfirlit"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Sérsníða yfirlit"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Vista"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Leita að tengiliðum"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Uppáhald"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Engir tengiliðir."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Hreinsa algenga tengiliði"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Veldu SIM-kort"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Umsjón með reikningum"</string>
     <string name="menu_import" msgid="6107961135813836467">"Flytja inn"</string>
     <string name="menu_export" msgid="2658783911863503902">"Flytja út"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Númer á bannlista"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> í gegnum <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"hætta leit"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Hreinsa leit"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Birtingarkostir fyrir tengiliði"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Reikningur"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Nota þetta alltaf fyrir símtöl"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Hringja með"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Símtal með texta"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Sláðu inn texta til að senda með símtalinu..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"SENDA OG HRINGJA"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> ólesið atriði. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> ólesin atriði. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Útgáfa smíðar"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Leyfi opins kóða"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Leyfisupplýsingar fyrir hugbúnað með opnum kóða"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Eyða"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Þrípunktur"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> m. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> klst. <xliff:g id="MINUTES_1">%s</xliff:g> mín. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> m. <xliff:g id="SECONDS">%2$s</xliff:g> sek."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> klst. <xliff:g id="MINUTES_1">%2$s</xliff:g> mín. <xliff:g id="SECONDS">%3$s</xliff:g> sek."</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Þessi flýtileið hefur verið gerð óvirk"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Tengiliður var fjarlægður"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Flytja inn"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Engin tenging"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Sýna meira"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Lauk við að flytja inn SIM-kort"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Innflutningur mistókst"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Gat ekki flutt inn tengiliði af SIM-korti"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Flytur inn SIM-kort"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 8fe777d..de4b6a5 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contatti"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contatti"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Aggiungi contatto"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Contatto"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Composizione diretta"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Messaggio diretto"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Scegli una scorciatoia contatto"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Scegli un numero da chiamare"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Scegli un numero a cui inviare il messaggio"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Scegli contatto"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Aggiungi al contatto"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Scegli un contatto"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Seleziona"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Crea nuovo contatto"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Dettagli contatto"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Informazioni"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Aggiornamenti"</string>
     <string name="searchHint" msgid="8482945356247760701">"Cerca contatti"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Visualizza contatto"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Aggiungi ai preferiti"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Rimuovi dai preferiti"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Rimosso dai preferiti"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Crea scorciatoia"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Chiama"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Invia SMS"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Scollega"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Rimuovi contatti"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Rinomina etichetta"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Seleziona contatti"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Aggiungi contatti"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Rimuovi da etichetta"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Aggiungi contatto"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Crea nuova…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Crea etichetta"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Scollegare questo contatto in diversi contatti?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Scollega"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Vuoi salvare le modifiche già apportate e scollegare il contatto in diversi contatti?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Salva"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Collega contatti"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Scegli il contatto che desideri collegare 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> collegati"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contatto</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contatti · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contatto · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contatti · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contatto · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Di Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Da <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"L\'eliminazione di questo contatto comporterà l\'eliminazione di dati da più account."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Eliminare questo contatto?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Elimina"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Ignora modifiche"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Contatto non esistente."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contatto aggiunto alla schermata Home."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> aggiunto alla schermata Home."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Crea nuovo contatto"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Crea nuovo contatto"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Nessuna foto disponibile sul tablet."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nessuna foto disponibile."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto del contatto"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nome etichetta personalizzata"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Inoltra chiamate direttamente alla segreteria"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Rimuovi foto"</string>
     <string name="noContacts" msgid="2228592924476426108">"L\'elenco dei contatti è vuoto"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Nessuna etichetta."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Per creare gruppi è necessario un account."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Nessun contatto con questa etichetta"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Nessun contatto in questo account"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"L\'elenco dei contatti è vuoto"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Errore durante il salvataggio del contatto"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Impossibile salvare le modifiche alla foto del contatto"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Impossibile caricare l\'etichetta"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etichetta salvata"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etichetta eliminata"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etichetta creata"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Impossibile creare l\'etichetta"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Invia messaggio"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Scegli contatti"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Invia"</string>
-    <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" 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" 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="5948889261993124839">"Tutti"</string>
-    <string name="callBack" msgid="5498224409038809224">"Richiama"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Richiama"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Chiama numero"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Aggiungi \"<xliff:g id="EMAIL">%s</xliff:g>\" ai contatti?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"più"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> contatti su <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"I nomi dei tuoi contatti"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Nessuna applicazione trovata per gestire questa azione."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Fai clic per tornare alla schermata precedente"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Aggiungi numero di telefono"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Aggiungi email"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nome etichetta"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Chat vocale"</string>
     <string name="video_chat" msgid="1872255818640336072">"Chat video"</string>
-    <string name="connections" msgid="8098440723172028350">"Connessioni"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Aggiungi connessione"</string>
-    <string name="recent" msgid="2659189233141493004">"Recenti"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Aggiornamenti recenti"</string>
     <string name="account_type_format" msgid="718948015590343010">"Contatto <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Account <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Scatta foto"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Scatta nuova foto"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Scegli foto"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Seleziona nuova foto"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Seleziona tutto"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Deseleziona tutto"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Aggiungi nuovo"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Aggiungi organizzazione"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etichetta"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Modifica"</string>
-    <string name="description_star" msgid="2605854427360036550">"preferiti"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Modifica contatto"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Annulla"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Indietro"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"chiudi"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Collegare 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Aggiungi ai contatti personali"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Directory <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Impostazioni"</string>
     <string name="menu_settings" msgid="377929915873428211">"Impostazioni"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Aggiungi a contatti"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Aggiungi al contatto"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Chiudi"</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="7122002148518724139">"Includi l\'anno"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Contatto"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Caricamento..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Crea nuovo contatto"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Aggiungi account"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importa"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Crea nuova…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Ignora"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Annulla"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Ignorare le personalizzazioni?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Cerca contatti"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Rimuovi contatti"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Il mio profilo locale"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Il mio profilo <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Sono visualizzati tutti i contatti"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Tieni al sicuro i tuoi contatti anche se perdi il telefono: sincronizzali con un servizio online."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Aggiungi un account"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Dedica un minuto del tuo tempo per aggiungere un account per eseguire il backup dei tuoi contatti in Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"I nuovi contatti verranno salvati nell\'account <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Scegli un account predefinito per i nuovi contatti:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Mostra meno"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Recenti"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Informazioni"</string>
-    <string name="send_message" msgid="8938418965550543196">"Invia messaggio"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Creazione di una copia personale..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Domani"</string>
     <string name="today" msgid="8041090779381781781">"Oggi"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Oggi alle ore <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Domani alle ore <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Evento senza titolo)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Imposta"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Chat"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Sito web"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relazione"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Account"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefono"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Fai clic per espandere l\'editor contatti."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Fai clic per comprimere l\'editor contatti."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"indicazioni per la posizione"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. fai clic per rispondere"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. fai clic per rispondere"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"in arrivo"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"in uscita"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"senza risposta"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"chiamata recente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Altri campi"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Cambia foto del contatto"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Aggiungi foto al contatto"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Impossibile aprire l\'editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Salvataggio in:"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Le informazioni di contatto di <xliff:g id="ACCOUNT">%s</xliff:g> non sono modificabili"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"I contatti vengono salvati in <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Tocca due volte per scegliere un altro account."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Contatti collegati (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Contatto collegato</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contatti collegati"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"COLLEGA CONTATTI"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANNULLA"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> possibili duplicati</item>
-      <item quantity="one">1 possibile duplicato</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatti collegati</item>
-      <item quantity="one">1 contatto collegato</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Questo contatto"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possibili duplicati"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Questi contatti potrebbero riguardare la stessa persona. Puoi collegarli per creare un unico contatto."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Contatti collegati"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Dei tuoi account"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Scegli foto"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Da <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Elimina <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Elimina <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Elimina <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto di <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> non selezionata"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto di <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> selezionata"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto di un account sconosciuto non selezionata"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto di un account sconosciuto selezionata"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Suggerimenti"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nuovo"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Apri riquadro di navigazione a scomparsa"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Directory"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Directory di lavoro"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Tutti i contatti"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Ne sono stati trovati più di <xliff:g id="COUNT">%d</xliff:g>"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Contatto rapido per <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Nessun nome)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contattati spesso"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Visualizza contatto"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Tutti i contatti con numeri di telefono"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Contatti del profilo di lavoro"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Visualizza aggiornamenti"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nickname"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nome"</string>
     <string name="name_given" msgid="4280790853455320619">"Nome"</string>
     <string name="name_family" msgid="7466985689626017037">"Cognome"</string>
     <string name="name_prefix" msgid="59756378548779822">"Prefisso nome"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Invia un\'email a <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Email"</string>
     <string name="postal_street" msgid="8133143961580058972">"Indirizzo postale"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Casella postale"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Zona"</string>
     <string name="postal_city" msgid="6597491300084895548">"Città"</string>
     <string name="postal_region" msgid="6045263193478437672">"Provincia"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Codice postale"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Altri gruppi..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Se rimuovi \"<xliff:g id="GROUP">%s</xliff:g>\" dalla sincronizzazione, verranno rimossi anche gli eventuali contatti separati."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Salvataggio opzioni di visualizzazione..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Salva"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Annulla"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Visualizzazione personalizzata"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Salva i contatti importati in:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Scheda SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Annullare l\'esportazione di <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Annullam. import./esport. vCard non riuscito"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Errore sconosciuto."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Apertura di \"<xliff:g id="FILE_NAME">%s</xliff:g>\" non riuscita: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Apertura di \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" non riuscita: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Avvio dell\'utilità di esportazione non riuscito: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nessun contatto esportabile."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Hai disattivato un\'autorizzazione obbligatoria."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Si è verificato un errore durante l\'esportazione: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Il nome file richiesto è troppo lungo (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Errore I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Memoria insufficiente. Il file potrebbe essere troppo grande."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Analisi vCard non riuscita per motivo imprevisto."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Il formato non è supportato."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Raccolta dei metadati dei file vCard specificati non riuscita."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Importazione di uno o più file non riuscita (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Esportazione di <xliff:g id="FILENAME">%s</xliff:g> terminata."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Esportazione dei contatti terminata."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Esportazione dei contatti terminata. Fai clic sulla notifica per condividere i contatti."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Esportazione dati di contatto"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Esportazione dei dati dei contatti in corso."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Recupero informazioni database non riuscito."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Non sono presenti contatti esportabili. Se hai contatti sul telefono, è possibile che alcuni fornitori di dati non consentano l\'esportazione dei contatti dal telefono."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Non ci sono contatti esportabili."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Il compositore di vCard non si è avviato correttamente."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Impossibile esportare"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"I dati dei contatti non sono stati esportati.\nMotivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importazione di <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Lettura dati vCard non riuscita"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Lettura dati vCard annullata"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importazione vCard <xliff:g id="FILENAME">%s</xliff:g> terminata"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importazione di <xliff:g id="FILENAME">%s</xliff:g> annullata"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"La vCard <xliff:g id="FILENAME">%s</xliff:g> verrà importata a breve."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Il file sarà importato a breve."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Richiesta importazione vCard rifiutata. Riprova più tardi."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"La vCard <xliff:g id="FILENAME">%s</xliff:g> verrà esportata a breve."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Il file verrà esportato a breve."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"I contatti verranno esportati a breve."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Richiesta esportazione vCard rifiutata. Riprova più tardi."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contatto"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Memorizzazione delle vCard nella cache di archiviazione temporanea locale. L\'importazione reale inizierà a breve."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Importazione vCard non riuscita."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contatto ricevuto via NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Esportare contatti?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Memorizzazione nella cache"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importazione di <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importazione di <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Esporta in file .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordina per"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nome"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"I miei dati"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Configura il tuo profilo"</string>
     <string name="setting_about" msgid="7014388749752042863">"Informazioni su Contatti"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Condividi contatti visibili"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Impossibile condividere i contatti visibili."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Condividi i contatti preferiti"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Condividi tutti i contatti"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Impossibile condividere i contatti."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nessun contatto da condividere."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contatti da visualizzare"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contatti da visualizzare"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Def. visualizz. personalizzata"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Personalizza visualizzazione"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Salva"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Cerca contatti"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Preferiti"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Nessun contatto."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Cancella frequenti"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Seleziona scheda SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Gestisci account"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importa"</string>
     <string name="menu_export" msgid="2658783911863503902">"Esporta"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Numeri bloccati"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> tramite <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"interrompi ricerca"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Cancella ricerca"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opzioni visualizzazione contatti"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Account"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Usa sempre questa per chiamare"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Chiama con"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Chiama e invia una nota"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Digita una nota da inviare con la chiamata…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"INVIA E CHIAMA"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> elementi da leggere. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> elemento da leggere. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versione build"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenze open source"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Dettagli delle licenze per il software open source"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Cancella"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellissi"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> m <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> m <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> m <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> m <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Questa scorciatoia è stata disattivata"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Contatto rimosso"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importa"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Nessuna connessione"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Mostra altro"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importazione della scheda SIM completata"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Importazione non riuscita"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Impossibile importare i contatti dalla scheda SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importazione della SIM"</string>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 62f0ffe..833b134 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"אנשי קשר"</string>
     <string name="contactsList" msgid="8661624236494819731">"אנשי קשר"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"הוסף איש קשר"</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="shortcutActivityTitle" msgid="1504383567778497348">"בחירת איש קשר"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"הוסף לאיש קשר"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"בחר איש קשר"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"בחר"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"צור איש קשר חדש"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"פרטי איש קשר"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"מחיקה"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"החלפת תמונה"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"יצירת קיצור דרך"</string>
-    <string name="menu_call" msgid="3992595586042260618">"שיחה לאיש קשר"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"הודעת טקסט לאיש קשר"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"ביטול קישור"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"הסרה של אנשי הקשר"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"שינוי שם התווית"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"בחירת אנשי קשר"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"הוספת אנשי קשר"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"הסרה מהתווית"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"הוספת איש קשר"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"תווית חדשה…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"יצירת תווית"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"האם לבטל את הקישור של איש הקשר הזה לאנשי קשר מרובים?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"בטל קישור"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"האם ברצונך לשמור את השינויים שכבר ביצעת ולבטל את הקישור של איש הקשר הזה לאנשי קשר מרובים?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"שמירה"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"קישור אנשי קשר"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"בחר את איש הקשר שברצונך לקשר עם <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> מקושר/ת"</string>
@@ -87,10 +78,10 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> איש קשר</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="two"><xliff:g id="COUNT_2">%d</xliff:g> אנשי קשר · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="many"><xliff:g id="COUNT_2">%d</xliff:g> אנשי קשר · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> אנשי קשר · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> איש קשר · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="two"><xliff:g id="COUNT_2">%1$d</xliff:g> אנשי קשר · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> אנשי קשר · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> אנשי קשר · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> איש קשר · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"‏מ-Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"מ-<xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -107,21 +98,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"מחיקת איש קשר זה תמחק פרטים מחשבונות מרובים."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"האם למחוק את איש הקשר הזה?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"מחק"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"ביטול שינויים"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"איש הקשר לא קיים."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"איש הקשר נוסף למסך דף הבית."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> נוסף למסך דף הבית."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"צור איש קשר חדש"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"צור איש קשר חדש"</string>
     <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="2228592924476426108">"רשימת אנשי הקשר שלך ריקה"</string>
-    <string name="noGroups" msgid="4607906327968232225">"אין תוויות."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"כדי ליצור קבוצות, נחוץ חשבון."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"אין אנשי קשר עם התווית הזו"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"אין אנשי קשר בחשבון הזה"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"רשימת אנשי הקשר שלך ריקה"</string>
@@ -134,7 +119,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"שגיאה בשמירת איש הקשר"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"לא ניתן היה לשמור את השינויים בתמונה של איש הקשר"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"טעינת התווית נכשלה"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"התווית נשמרה"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"התווית נמחקה"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"התווית נוצרה"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"לא ניתן ליצור את התווית"</string>
@@ -149,35 +133,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"שלח הודעה"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"בחר אנשי קשר"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"שליחה"</string>
-    <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" 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" 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="5948889261993124839">"הכל"</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_plus_button" msgid="515164827856229880">"חיבור"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> מתוך <xliff:g id="TOTAL_NUMBER">%s</xliff:g> אנשי קשר"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"השמות של אנשי הקשר"</string>
-    <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>
@@ -198,52 +156,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"שם התווית"</string>
     <string name="audio_chat" msgid="2535716629358298691">"צ\'אט קולי"</string>
     <string name="video_chat" msgid="1872255818640336072">"Hangout"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"חשבון <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"תווית"</string>
-    <string name="change_photo" msgid="8530597935483526383">"שנה"</string>
-    <string name="description_star" msgid="2605854427360036550">"מועדף"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"ערוך איש קשר"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"ביטול"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"הקודם"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"סגירה"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"לקשר את איש הקשר הנוכחי לאיש הקשר שנבחר?"</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="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="7122002148518724139">"ציין שנה"</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="4347232421410561500">"הוסף חשבון"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"ייבא"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"צור חדשה…"</string>
@@ -257,14 +191,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"מחק"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ביטול"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"האם לבטל את ההתאמות האישיות?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"חיפוש אנשי קשר"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"הסרה של אנשי הקשר"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"הפרופיל המקומי שלי"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"פרופיל <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> שלי"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"מציג את כל אנשי הקשר"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"דאג שלא תאבד את אנשי הקשר שלך גם אם הטלפון שלך יאבד: בצע סנכרון עם שירות מקוון."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"הוסף חשבון"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"‏הקדש דקה כדי להוסיף חשבון Google שבו תגבה את אנשי הקשר שלך."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"אנשי קשר חדשים יישמרו ב-<xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"בחר חשבון ברירת מחדל לאנשי קשר חדשים:"</string>
@@ -283,13 +213,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"הצג פחות"</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="288549957278065542">"יוצר עותק אישי..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>‏, <xliff:g id="TIME_INTERVAL">%2$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">"הודעות מיידיות"</string>
@@ -299,20 +228,16 @@
     <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="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_sms" msgid="1666389577263317445">"‏הודעת SMS אחרונה. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>‏. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>‏. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"שיחה אחרונה. <xliff:g id="CALL_TYPE">%1$s</xliff:g>‏. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>‏. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"שדות נוספים"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"שנה את התמונה של איש הקשר"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"הוסף תמונה לאיש הקשר"</string>
@@ -320,49 +245,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"לא ניתן היה לפתוח את העורך."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"לשמירה ב-"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"לא ניתן לערוך את פרטי איש הקשר מהחשבון <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"המידע יישמר ב-<xliff:g id="ACCOUNT_NAME">%s</xliff:g>. הקש פעמיים כדי לבחור חשבון אחר."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> אנשי קשר מקושרים"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g>‏ (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"קשר אנשי קשר"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"בטל"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <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>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <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>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"איש קשר זה"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"כפילויות אפשריות"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"ייתכן שאנשי הקשר האלו הם אותו אדם. תוכל לקשר אותם ביחד כאיש קשר יחיד."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"אנשי קשר מקושרים"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"מהחשבונות שלך"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"בחירת תמונה"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"מאת <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"מחק את <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"מחק את <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"מחק <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"תמונה מ-<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>לא סומנה"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"תמונה מ-<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>סומנה"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"לא סומנה תמונה מחשבון לא ידוע"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"סומנה תמונה מחשבון לא ידוע"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"הצעות"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"חדש"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"פתח את חלונית ההזזה לניווט"</string>
@@ -431,11 +320,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"ספריה"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"ספריית עבודה"</string>
     <string name="local_search_label" msgid="2551177578246113614">"כל אנשי הקשר"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"נמצאו יותר מ-<xliff:g id="COUNT">%d</xliff:g> פריטים."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"קשר מהיר עבור <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(ללא שם)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"בקשר לעתים קרובות"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"הצג איש קשר"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"כל אנשי הקשר עם מספרי טלפון"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"אנשי קשר מהעבודה"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"הצג עדכונים"</string>
@@ -443,7 +330,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"שם"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"כינוי"</string>
-    <string name="full_name" msgid="6602579550613988977">"שם"</string>
     <string name="name_given" msgid="4280790853455320619">"שם פרטי"</string>
     <string name="name_family" msgid="7466985689626017037">"שם משפחה"</string>
     <string name="name_prefix" msgid="59756378548779822">"קידומת שם"</string>
@@ -476,8 +362,6 @@
     <string name="email_custom" msgid="5536404237099078802">"שלח אימייל אל <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"אימייל"</string>
     <string name="postal_street" msgid="8133143961580058972">"רחוב"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"תא דואר"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"שכונה"</string>
     <string name="postal_city" msgid="6597491300084895548">"עיר"</string>
     <string name="postal_region" msgid="6045263193478437672">"מדינה"</string>
     <string name="postal_postcode" msgid="572136414136673751">"מיקוד"</string>
@@ -515,8 +399,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"קבוצות נוספות…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"הסרת \"<xliff:g id="GROUP">%s</xliff:g>\" מהסנכרון תסיר מהסנכרון גם אנשי קשר שאינם מקובצים."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"שומר אפשרויות תצוגה..."</string>
-    <string name="menu_done" msgid="796017761764190697">"סיום"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"ביטול"</string>
     <string name="listCustomView" msgid="1840624396582117590">"תצוגה מותאמת אישית"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"איפה יישמרו אנשי הקשר שמיובאים:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"‏כרטיס SIM"</string>
@@ -540,18 +422,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"לבטל את הייצוא של <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"‏לא ניתן לבטל ייבוא/ייצוא של vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"שגיאה לא ידועה."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"לא ניתן לפתוח את \"<xliff:g id="FILE_NAME">%s</xliff:g>\"‏: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"לא ניתן לפתוח את \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\"‏: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"לא ניתן להפעיל את המייצא: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"אין אנשי קשר הניתנים לייצוא."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"השבתת הרשאה נדרשת."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"אירעה שגיאה במהלך הייצוא: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"שם הקובץ הדרוש ארוך מדי (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"שגיאת קלט/פלט"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"אין מספיק זיכרון. ייתכן שהקובץ גדול מדי."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"‏אין אפשרות לנתח את ה-vCard מסיבה בלתי צפויה."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"הפורמט אינו נתמך."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"‏לא ניתן לאסוף מטא-מידע של קבצים נתונים של vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"‏לא ניתן לייבא קובץ אחד או יותר (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"הייצוא של <xliff:g id="FILENAME">%s</xliff:g> הסתיים."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"הייצוא של אנשי הקשר הסתיים."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"היצוא של אנשי הקשר הסתיים. לחץ על ההודעה כדי לשתף אנשי קשר."</string>
@@ -560,29 +438,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"מייצא נתונים של אנשי קשר"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"ייצוא הנתונים של אנשי הקשר מתבצע."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"לא ניתן לקבל מידע ממסד הנתונים."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"אין אנשי קשר הניתנים לייצוא. אם מוגדרים אנשי קשר בטלפון שלך, ייתכן שספקי נתונים מסוימים אינם מאפשרים ייצוא של אנשי קשר מהטלפון."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"אין אנשי קשר שניתן לייצא."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"‏יישום היצירה של ה-vCard לא הופעל כהלכה."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"לא ניתן לייצא"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"נתוני אנשי הקשר לא יוצאו.\nסיבה: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"מייבא את <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"‏לא ניתן לקרוא נתוני vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"‏קריאת נתוני ה-VCard בוטלה"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"‏הייבוא של vCard בשם <xliff:g id="FILENAME">%s</xliff:g> הסתיים"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"הייבוא של <xliff:g id="FILENAME">%s</xliff:g> בוטל"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"הייבוא של <xliff:g id="FILENAME">%s</xliff:g> יתבצע בהקדם."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"הייבוא של הקובץ יתבצע בהקדם."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"‏הבקשה לייבוא ה-vCard נדחתה. נסה שוב מאוחר יותר."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"הייצוא של <xliff:g id="FILENAME">%s</xliff:g> יתבצע בהקדם."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ייצוא הקובץ יבוצע בהקדם."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"הייצוא של אנשי הקשר יבוצע בהקדם."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"‏הבקשה לייצוא ה-vCard נדחתה. נסה שוב מאוחר יותר."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"איש קשר"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"‏קובצי ה-vCard נשמרים כקבצים באחסון מקומי זמני. הייבוא בפועל יחל בקרוב."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"‏לא ניתן לייבא את ה-vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"‏איש הקשר התקבל באמצעות NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"לייצא את אנשי הקשר?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"הופך לקובץ שמור"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"מייבא <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"מייבא <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"‏יצא לקובץ ‎.vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"מיין לפי"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"שם פרטי"</string>
@@ -595,8 +469,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"המידע שלי"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"הגדרת הפרופיל שלך"</string>
     <string name="setting_about" msgid="7014388749752042863">"מידע על אנשי הקשר"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"שתף אנשי קשר גלויים"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"לא ניתן היה לשתף את אנשי הקשר הגלויים."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"שתף את אנשי הקשר המועדפים"</string>
     <string name="share_contacts" msgid="8109287987498711664">"שתף את כל אנשי הקשר"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"לא ניתן היה לשתף את אנשי הקשר."</string>
@@ -606,14 +478,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"אין אנשי קשר שניתן לשתף."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"אנשי קשר להצגה"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"אנשי קשר להצגה"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"הגדרת תצוגה מותאמת אישית"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"התאמה אישית של התצוגה"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"שמירה"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"חפש אנשי קשר"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"מועדפים"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"אין אנשי קשר."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"מחיקת אנשי קשר קבועים"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"‏בחירת כרטיס SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"ניהול החשבונות"</string>
     <string name="menu_import" msgid="6107961135813836467">"ייבוא"</string>
     <string name="menu_export" msgid="2658783911863503902">"ייצוא"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"מספרים חסומים"</string>
@@ -621,21 +489,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> באמצעות <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"הפסק לחפש"</string>
     <string name="description_clear_search" msgid="688023606766232904">"נקה חיפוש"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"אפשרויות הצגה של אנשי הקשר"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"חשבון"</string>
     <string name="set_default_account" msgid="4311613760725609801">"השתמש תמיד לשיחות"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"התקשר באמצעות"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"התקשר עם הערה"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"הזן את ההערה שתישלח עם השיחה..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"שלח והתקשר"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="two"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> פריטים שלא נקראו. </item>
-      <item quantity="many"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> פריטים שלא נקראו. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> פריטים שלא נקראו. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> פריט שלא נקרא. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"‏גרסת Build"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"רישיונות קוד פתוח"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"פרטי רישיון לתוכנות קוד פתוח"</string>
@@ -649,8 +509,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"מחיקה"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"שלוש נקודות"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> דקות ו-<xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> שעות, <xliff:g id="MINUTES_1">%s</xliff:g> דקות ו-<xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> דקות ו-<xliff:g id="SECONDS">%2$s</xliff:g> שניות"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> שעות, <xliff:g id="MINUTES_1">%2$s</xliff:g> דקות ו-<xliff:g id="SECONDS">%3$s</xliff:g> שניות"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"קיצור הדרך הזה הושבת"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"איש הקשר הוסר"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"ייבא"</string>
@@ -675,4 +535,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"אין חיבור"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"‏כרטיס SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"הצג עוד"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"‏הייבוא מכרטיס ה-SIM הסתיים"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"הייבוא נכשל"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"‏לא ניתן היה לייבא את אנשי הקשר מכרטיס ה-SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"‏הייבוא מכרטיס ה-SIM מתבצע"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 7cebb8b..8344512 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"連絡先"</string>
     <string name="contactsList" msgid="8661624236494819731">"連絡先"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"連絡先を追加"</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="shortcutActivityTitle" msgid="1504383567778497348">"連絡先を選択"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"連絡先に追加"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"連絡先を選択"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"選択"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"新しい連絡先を作成"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"連絡先情報"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"削除"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"写真を変更"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"ショートカットを作成"</string>
-    <string name="menu_call" msgid="3992595586042260618">"連絡先に発信"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"連絡先にSMS"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"リンクを解除"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"連絡先を削除"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"ラベル名を変更"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"連絡先を選択"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"連絡先を追加"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"ラベルから削除"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"連絡先を追加"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"新規作成…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ラベルを作成"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"この連絡先を複数の連絡先にリンク解除しますか？"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"リンク解除"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ここまでの変更を保存してこの連絡先を複数の連絡先にリンク解除しますか？"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"保存"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"連絡先をリンク"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> さんが連絡先をリンクしました"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 件の連絡先</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> 件の連絡先 · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 件の連絡先 · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> 件の連絡先 · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 件の連絡先 · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google アカウントから"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> から"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"この連絡先を削除すると複数のアカウントから詳細情報が削除されます。"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"この連絡先を削除しますか？"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"削除"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"変更を破棄"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"連絡先が存在しません。"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"連絡先をホーム画面に追加しました。"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g>をホーム画面に追加しました。"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"連絡先を新規登録"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"新しい連絡先を作成"</string>
     <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="2228592924476426108">"連絡先リストが空です"</string>
-    <string name="noGroups" msgid="4607906327968232225">"ラベルはありません。"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"グループを作成するにはアカウントが必要です。"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"このラベルを使用している連絡先はいません"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"このアカウントに保存されている連絡先はありません"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"連絡先リストが空です"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"連絡先の保存中にエラーが発生しました"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"連絡先の写真の変更を保存できませんでした"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ラベルを読み込めませんでした"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"ラベルを保存しました"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ラベルを削除しました"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"ラベルを作成しました"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"ラベルを作成できません"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"メッセージを送信"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"連絡先の選択"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"送信"</string>
-    <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" 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" 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="5948889261993124839">"すべて"</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_plus_button" msgid="515164827856229880">"プラス"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>件のファイル"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"連絡先の名前"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"ラベル名"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>のアカウント"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"ラベル"</string>
-    <string name="change_photo" msgid="8530597935483526383">"変更"</string>
-    <string name="description_star" msgid="2605854427360036550">"お気に入り"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"連絡先の編集"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"キャンセル"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"戻る"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"閉じる"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"現在の連絡先を選択した連絡先にリンクしますか？"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"選択した連絡先の編集に切り替えますか？これまでに入力した情報はコピーされます。"</string>
-    <string name="menu_copyContact" msgid="1573960845106822639">"Myコンタクトにコピー"</string>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Myコンタクトに追加"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"ディレクトリ<xliff:g id="TYPE">%1$s</xliff:g>"</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="7122002148518724139">"年を含める"</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="4347232421410561500">"アカウントを追加"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"インポート"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"新規作成…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"破棄"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"キャンセル"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"カスタマイズを破棄しますか？"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"連絡先を検索"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"連絡先の削除"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"ローカルプロファイル"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>のプロファイル"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"すべての連絡先を表示しています"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"モバイル端末を紛失したときにも連絡先を保護するため、オンラインサービスと同期させます。"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"アカウントの追加"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"アカウントを追加すると、連絡先を Google にバックアップできるようになります。"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"新しい連絡先を<xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>に保存します"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"新しい連絡先のデフォルトアカウントを選択してください。"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"一部を表示"</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="288549957278065542">"個人用コピーを作成しています..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>の<xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"最近のSMS。<xliff:g id="MESSAGE_BODY">%1$s</xliff:g>。<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>。<xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"最近の通話。<xliff:g id="CALL_TYPE">%1$s</xliff:g>。<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>。<xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"その他の項目"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"連絡先の写真を変更"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"連絡先の写真を追加"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"エディタを開けませんでした。"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"保存先"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> から取得した連絡先情報は編集できません"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"現在、連絡先は <xliff:g id="ACCOUNT_NAME">%s</xliff:g> に保存される設定になっています。ダブルタップすると別のアカウントを選択できます。"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">リンクされた連絡先（<xliff:g id="COUNT">%d</xliff:g> 件）</item>
-      <item quantity="one">リンクされた連絡先</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g>件のリンクされた連絡先"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g>（<xliff:g id="PHONETIC_NAME">%s</xliff:g>）"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"連絡先をリンク"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"キャンセル"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other">重複の可能性のある連絡先（<xliff:g id="COUNT">%d</xliff:g>件）</item>
-      <item quantity="one">重複の可能性のある連絡先（1件）</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g>件のリンクされた連絡先</item>
-      <item quantity="one">1件のリンクされた連絡先</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">（<xliff:g id="COUNT">%d</xliff:g>）</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"この連絡先"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"重複の可能性"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"これらの連絡先は同一人物である可能性があります。リンクして1つの連絡先にまとめることができます。"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"リンクされた連絡先"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"アカウントの写真"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"写真の選択"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"送信元: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>を削除"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>を削除"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>を削除"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> の写真は選択されていません"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> の写真は選択されています"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"不明なアカウントの写真は選択されていません"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"不明なアカウントの写真が選択されています"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"候補"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"New"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"ナビゲーションドロワーを開く"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"ディレクトリ"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"仕事用の連絡先リスト"</string>
     <string name="local_search_label" msgid="2551177578246113614">"すべての連絡先"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g>件以上見つかりました。"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g>さんのクイックコンタクト"</string>
     <string name="missing_name" msgid="8745511583852904385">"（名前なし）"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"よく使う連絡先"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"連絡先を表示"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"電話番号のあるすべての連絡先"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"仕事用プロファイルの連絡先"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"更新情報を表示"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"名前"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ニックネーム"</string>
-    <string name="full_name" msgid="6602579550613988977">"名前"</string>
     <string name="name_given" msgid="4280790853455320619">"名"</string>
     <string name="name_family" msgid="7466985689626017037">"姓"</string>
     <string name="name_prefix" msgid="59756378548779822">"敬称（名前の前）"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>宛にメールを送信"</string>
     <string name="email" msgid="5668400997660065897">"メール"</string>
     <string name="postal_street" msgid="8133143961580058972">"番地"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"私書箱"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"街区 (中国等で使用)"</string>
     <string name="postal_city" msgid="6597491300084895548">"市区町村"</string>
     <string name="postal_region" msgid="6045263193478437672">"都道府県"</string>
     <string name="postal_postcode" msgid="572136414136673751">"郵便番号"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"他のグループ..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"「<xliff:g id="GROUP">%s</xliff:g>」を同期から除外すると、グループに含まれない連絡先もすべて同期から除外されます。"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"表示オプションを保存中..."</string>
-    <string name="menu_done" msgid="796017761764190697">"完了"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"キャンセル"</string>
     <string name="listCustomView" msgid="1840624396582117590">"カスタムビュー"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"インポートした連絡先の保存先:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM カード"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g>のエクスポートをキャンセルしますか？"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCardインポート/エクスポート取り消し不可"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"不明なエラーです。"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"「<xliff:g id="FILE_NAME">%s</xliff:g>」を開けませんでした: <xliff:g id="EXACT_REASON">%s</xliff:g>。"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"「<xliff:g id="FILE_NAME">%1$s</xliff:g>」を開けませんでした: <xliff:g id="EXACT_REASON">%2$s</xliff:g>。"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"エクスポータを起動できませんでした: 「<xliff:g id="EXACT_REASON">%s</xliff:g>」。"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"エクスポートできる連絡先がありません。"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"必要な権限が無効になっています。"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"エクスポート中にエラーが発生しました: 「<xliff:g id="EXACT_REASON">%s</xliff:g>」。"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"ファイル名（必須）が長すぎます（「<xliff:g id="FILENAME">%s</xliff:g>」）。"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"送受信エラー"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"メモリが不足しています。ファイルが大きすぎる可能性があります。"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"予期しない理由によりvCardを解析できませんでした。"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"このフォーマットには対応していません。"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"指定されたvCardファイルのメタ情報を取得できませんでした。"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"1つ以上のファイルをインポートできませんでした（%s）。"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g>のエクスポートが完了しました。"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"連絡先のエクスポートを完了しました。"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"連絡先のエクスポートを完了しました。通知をタップして連絡先を共有してください。"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"連絡先データのエクスポート"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"連絡先データをエクスポートしています。"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"データベース情報を取得できませんでした。"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"エクスポートできる連絡先がありません。モバイル端末に連絡先がある場合でも、データプロバイダによってはモバイル端末から連絡先をエクスポートできないことがあります。"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"エクスポートできる連絡先がありません。"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCardコンポーザーが正しく起動しませんでした。"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"エクスポート失敗"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"連絡先データはエクスポートされませんでした。\n理由: 「<xliff:g id="FAIL_REASON">%s</xliff:g>」"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g>をインポート中"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCardデータを読み取れませんでした"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCardデータの読取をキャンセルしました"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard<xliff:g id="FILENAME">%s</xliff:g>のインポートが終了しました"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g>のインポートをキャンセルしました"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g>はまもなくインポートされます。"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ファイルはまもなくインポートされます。"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCardのインポートリクエストは拒否されました。しばらくしてからもう一度お試しください。"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g>はまもなくエクスポートされます。"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ファイルのエクスポートをまもなく開始します。"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"連絡先のエクスポートをまもなく開始します。"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCardのエクスポートリクエストは拒否されました。しばらくしてからもう一度お試しください。"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"連絡先"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCardをローカル一時ストレージにキャッシュしています。まもなくインポート処理を開始します。"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCardをインポートできませんでした。"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC受信の連絡先"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"エクスポートしますか？"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"キャッシュしています"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>件（<xliff:g id="NAME">%s</xliff:g>）をインポート中"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>件（<xliff:g id="NAME">%3$s</xliff:g>）をインポート中"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf にエクスポート"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"並べ替え"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"名"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"ユーザー情報"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"プロファイルのセットアップ"</string>
     <string name="setting_about" msgid="7014388749752042863">"連絡先について"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"表示可能な連絡先を共有"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"表示可能な連絡先を共有できませんでした。"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"お気に入りの連絡先を共有"</string>
     <string name="share_contacts" msgid="8109287987498711664">"すべての連絡先を共有"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"連絡先を共有できませんでした。"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"共有する連絡先がありません。"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"表示する連絡先"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"表示する連絡先"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"カスタムビューの設定"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"ビューをカスタマイズ"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"保存"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"連絡先を検索"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"お気入り"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"連絡先はありません。"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"よく使う連絡先のクリア"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIMカードを選択"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"アカウントを管理"</string>
     <string name="menu_import" msgid="6107961135813836467">"インポート"</string>
     <string name="menu_export" msgid="2658783911863503902">"エクスポート"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"ブロックした番号"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>、<xliff:g id="SOURCE">%2$s</xliff:g>経由"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"検索を停止"</string>
     <string name="description_clear_search" msgid="688023606766232904">"検索をクリア"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"連絡先表示オプション"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"アカウント"</string>
     <string name="set_default_account" msgid="4311613760725609801">"この SIM を常に通話に使用する"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"発信用の端末アカウントを選択してください"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"メモを添付して発信"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"発信時に送信するメモを入力..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"送信と発信"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>。<xliff:g id="COUNT_3">%2$d</xliff:g> 件の未読アイテム。 </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>。<xliff:g id="COUNT_1">%2$d</xliff:g> 件の未読アイテム。 </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"ビルド バージョン"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"オープンソース ライセンス"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"オープンソース ソフトウェアのライセンスの詳細"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"削除"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"省略記号"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> 時間 <xliff:g id="MINUTES_1">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> 分 <xliff:g id="SECONDS">%2$s</xliff:g> 秒"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> 時間 <xliff:g id="MINUTES_1">%2$s</xliff:g> 分 <xliff:g id="SECONDS">%3$s</xliff:g> 秒"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"このショートカットは無効になっています"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"この連絡先は削除されました"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"インポート"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"ネットワークに接続されていません"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"もっと見る"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM カードからインポートしました"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"インポートに失敗しました"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM カードの連絡先をインポートできませんでした"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM からインポートしています"</string>
 </resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 6365c17..8132a29 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"კონტაქტები"</string>
     <string name="contactsList" msgid="8661624236494819731">"კონტაქტები"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"კონტაქტის დამატება"</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="shortcutActivityTitle" msgid="1504383567778497348">"კონტაქტის არჩევა"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"კონტაქტზე დამატება"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"კონტაქტის არჩევა"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"არჩევა"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ახალი კონტაქტის შექმნა"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"კონტაქტის დეტალები"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"წაშლა"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"ფოტოს გამოცვლა"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"მალსახმობის შექმნა"</string>
-    <string name="menu_call" msgid="3992595586042260618">"დარეკვა კონტაქტთან"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"ტექსტური შეტყობინების გაგზავნა კონტაქტისთვის"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"მიბმის გაუქმება"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"კონტაქტების წაშლა"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"ლეიბლის გადარქმევა"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"კონტაქტების არჩევა"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"კონტაქტების დამატება"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"ლეიბლიდან ამოშლა"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"კონტაქტის დამატება"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"ახლის შექმნა…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ლეიბლის შექმნა"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"გსურთ მიბმის გაუქმება და ამ კონტაქტის რამდენიმე კონტაქტად დაშლა?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"მიბმის გაუქმება"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"გსურთ უკვე შეტანილი ცვლილებების შენახვა და მიბმის გაუქმებით ამ კონტაქტის რამდენიმე კონტაქტად დაშლა?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"შენახვა"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"კონტაქტების მიბმა"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"აირჩიეთ კონტაქტი, რომელიც გსურთ, მიაბათ <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> დაკავშირებულია"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> კონტაქტი</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> კონტაქტი · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> კონტაქტი · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> კონტაქტი · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> კონტაქტი · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google-იდან"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g>-იდან"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ამ კონტაქტის წაშლის შემთხვევაში, რამდენიმე ანგარიშიდან მიღებული ინფორმაცია წაიშლება."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"გსურთ ამ კონტაქტის წაშლა?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"წაშლა"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"ცვლილებების გაუქმება"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"კონტაქტი არ არსებობს."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"კონტაქტი დაემატა მთავარ ეკრანს."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> დაემატა მთავარ ეკრანს."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"ახალი კონტაქტის შექმნა"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"ახალი კონტაქტის შექმნა"</string>
     <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="2228592924476426108">"თქვენი კონტაქტების სია ცარიელია"</string>
-    <string name="noGroups" msgid="4607906327968232225">"ლეიბლები არ არის."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"ჯგუფების შესაქმნელად გესაჭიროებათ ანგარიში."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"კონტაქტი ამ ლეიბლით არ არსებობს"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"ამ ანგარიშში კონტაქტები არ არის"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"თქვენი კონტაქტების სია ცარიელია"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"კონტაქტის შენახვისას მოხდა შეცდომა"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"კონტაქტის ფოტოს ცვლილებების შენახვა ვერ მოხერხდა"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ლეიბლი ვერ ჩაიტვირთა"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"ლეიბლი შენახულია"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ლეიბლი წაშლილია"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"ლეიბლი შექმნილია"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"ლეიბლის შექმნა შეუძლებელია"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"შეტყობინების გაგზავნა"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"აირჩიეთ კონტაქტები"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"გაგზავნა"</string>
-    <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" 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" 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="5948889261993124839">"ყველა"</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_plus_button" msgid="515164827856229880">"პლუსი"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> (სულ <xliff:g id="TOTAL_NUMBER">%s</xliff:g> კონტაქტიდან)"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"თქვენი კონტაქტების სახელები"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"ლეიბლის სახელი"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-ის ანგარიში"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"ლეიბლი"</string>
-    <string name="change_photo" msgid="8530597935483526383">"შეცვლა"</string>
-    <string name="description_star" msgid="2605854427360036550">"რჩეული"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"კონტაქტის რედაქტირება"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"გაუქმება"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"უკან"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"დახურვა"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"გსურთ მიმდინარე და არჩეული კონტაქტების მიბმა?"</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="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="7122002148518724139">"წელის ჩათვლით"</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="4347232421410561500">"ანგარიშის დამატება"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"იმპორტი"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"ახლის შექმნა…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ცვლ.უარყოფა"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"გაუქმება"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"გსურთ მორგებული პარამეტრების გაუქმება?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"კონტაქტების ძიება"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"კონტაქტების წაშლა"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"ჩემი ადგილობრივი პროფილი"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"ჩემი <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> პროფილი"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"ყველა კონტაქტის ჩვენება"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"შეინახეთ თქვენი კონტაქტები საიმედოდ ტელეფონის დაკარგვის შემთხვევაშიც კი: მოახდინეთ სინქრონიზაცია ონლაინ სერვისთან."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ანგარიშის დამატება"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"დაუთმეთ ორიოდე წუთი ანგარიშის დამატებას, რომლითაც შეიქმნება თქვენი კონტაქტების სარეზერვო ასლები Google-ში."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ახალი კონტაქტები შეინახება აქ: <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"აირჩიეთ ნაგულისხმევი ანგარიში ახალი კონტაქტებისთვის:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ნაკლების ჩვენება"</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="288549957278065542">"პირადი ასლის შექმნა…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"ბოლო sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"ბოლო ზარი. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"სხვა ველები"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"კონტაქტის ფოტოს შეცვლა"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"კონტაქტის ფოტოს დამატება"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"რედაქტორი ვერ გაიხსნა."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"ინახება აქ:"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"კონტაქტის ინფორმაცია <xliff:g id="ACCOUNT">%s</xliff:g>-იდან ვერ დარედაქტირდება"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"ამჟამად ინახება <xliff:g id="ACCOUNT_NAME">%s</xliff:g>-ში. ორმაგად შეეხეთ სხვა ანგარიშის ასარჩევად."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">დაკავშირებული კონტაქტები (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">დაკავშირებული კონტაქტი</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> მიბმული კონტაქტი"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"კონტაქტების მიბმა"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"გაუქმება"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> შესაძლო დუბლიკატი</item>
-      <item quantity="one">1 შესაძლო დუბლიკატი</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> მიბმული კონტაქტი</item>
-      <item quantity="one">1 მიბმული კონტაქტი</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ეს კონტაქტი"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"შესაძლო დუბლიკატები"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"ეს კონტაქტები შეიძლება ერთი და იგივე პიროვნება იყოს. შეგიძლიათ მიბმის მეშვეობით მათი ერთ კონტაქტად გაერთიანება."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"დაკავშირებული კონტაქტები"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"თქვენი ანგარიშებიდან"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"აირჩიეთ ფოტო"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g>-დან"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"წაიშალოს <xliff:g id="DATA_KIND">%s</xliff:g> (<xliff:g id="DATA_TYPE">%s </xliff:g>)"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"წაიშალოს <xliff:g id="DATA_KIND">%2$s</xliff:g> (<xliff:g id="DATA_TYPE">%1$s </xliff:g>)"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"წაიშალოს <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"ფოტო <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>-დან არ არის მონიშნული"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"ფოტო <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>-დან მონიშნულია"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"ფოტო უცნობი ანგარიშიდან არ არის მონიშნული"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"ფოტო უცნობი ანგარიშიდან მონიშნულია"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"შეთავაზებები"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"ახალი"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"ნავიგაციის უჯრის გახსნა"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"კატალოგი"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"სამსახურის კატალოგი"</string>
     <string name="local_search_label" msgid="2551177578246113614">"ყველა კონტაქტი"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"ნაპოვნია <xliff:g id="COUNT">%d</xliff:g>-ზე მეტი."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"სწრაფი კონტაქტი <xliff:g id="NAME">%1$s</xliff:g>-თან"</string>
     <string name="missing_name" msgid="8745511583852904385">"(სახელის გარეშე)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"ხშირი კონტაქტები"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"კონტაქტის ნახვა"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"ყველა ტელეფონის ნომრიანი კონტაქტი"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"სამსახურის პროფილის კონტაქტები"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"განახლებების ნახვა"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"სახელი"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"მეტსახელი"</string>
-    <string name="full_name" msgid="6602579550613988977">"სახელი"</string>
     <string name="name_given" msgid="4280790853455320619">"სახელი"</string>
     <string name="name_family" msgid="7466985689626017037">"გვარი"</string>
     <string name="name_prefix" msgid="59756378548779822">"სახელის პრეფიქსი"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"ელფოსტის გაგზავნა <xliff:g id="CUSTOM_LABEL">%s</xliff:g>-ზე"</string>
     <string name="email" msgid="5668400997660065897">"ელფოსტის გაგზავნა"</string>
     <string name="postal_street" msgid="8133143961580058972">"ქუჩა"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"საფოსტო ყუთი"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"უბანი"</string>
     <string name="postal_city" msgid="6597491300084895548">"ქალაქი"</string>
     <string name="postal_region" msgid="6045263193478437672">"შტატი"</string>
     <string name="postal_postcode" msgid="572136414136673751">"ZIP-კოდი"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"სხვა ჯგუფები…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"სინქრონიზაციიდან „<xliff:g id="GROUP">%s</xliff:g>“-ის ამოშლა წაშლის ყველა დაუჯგუფებელ კონტაქტს."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"ეკრანის პარამეტრების შენახვა…"</string>
-    <string name="menu_done" msgid="796017761764190697">"დასრულდა"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"გაუქმება"</string>
     <string name="listCustomView" msgid="1840624396582117590">"მორგებული ხედი"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"იმპორტირებული კონტაქტების შენახვა აქ:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM ბარათიდან"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"გსურთ <xliff:g id="FILENAME">%s</xliff:g>-ის ექსპორტის გაუქმება?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard-ის იმპორტი/ექსპორტი ვერ მოხერხდა"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"უცნობი შეცდომა."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"„<xliff:g id="FILE_NAME">%s</xliff:g>“ ვერ გაიხსნა: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"„<xliff:g id="FILE_NAME">%1$s</xliff:g>“ ვერ გაიხსნა: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ექსპორტერის გაშვება ვერ მოხერხდა: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ექსპორტირებადი კონტაქტი არ არსებობს."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"თქვენ გათიშული გაქვთ მოთხოვნილი ნებართვა."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"ექსპორტი ვერ მოხერხდა: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"მოთხოვნილი ფაილის სახელი ძალიან გრძელია („<xliff:g id="FILENAME">%s</xliff:g>“)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O შეცდომა"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"მეხსიერება არასაკმარისია. შესაძლოა ფაილი ძალიან დიდია."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"vCard ფაილის გარჩევა ვერ მოხერხდა რომელიღაც მოულოდნელი მიზეზით."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"ეს ფორმატი მხარდაუჭერელია."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"მოცემული vCard ფაილ(ებ)ის მეტა ინფორმაციის შეგროვება ვერ მოხერხდა."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"ერთი ან მეტი ფაილის იმპორტი ვერ მოხერხდა (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g>-ის ექსპორტი დასრულდა."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"კონტაქტების ექსპორტი დასრულდა."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"კონტაქტების ექსპორტი დასრულდა. კონტაქტების გასაზიარებლად, შეეხეთ შეტყობინებას."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"კონტაქტების მონაცემთა ექსპორტი"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"მიმდინარეობს კონტაქტების მონაცემების ექსპორტი."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"მონაცემთა ბაზის ინფორმაციის მიღება ვერ მოხერხდა."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"ექსპორტირებადი კონტაქტები არ მოიპოვება. თუ კონტაქტები ნამდვილად არის თქვენს ტელეფონში, შესაძლოა ზოგიერთი მონაცემთა მომწოდებელი არ იძლევა ტელეფონიდან მათი ექსპორტის უფლებას."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ექსპორტირებადი კონტაქტები არ არის."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard კომპოზიტორი გაშვებულია არასწორად."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ექსპორტი ჩაიშალა."</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"კონტაქტების მონაცემები არ არის ექსპორტირებული.\nმიზეზი: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"იმპორტირდება <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard მონაცემთა წაკითხვა ვერ მოხერხდა"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard მონაცემთა წაკითხვა გაუქმდა"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g>-ის იმპორტი დასრულდა"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g>-ის იმპორტი გაუქმდა"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> მალე იმპორტირდება."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ამ ფაილის იმპორტი მალე შესრულდება."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard-ის იმპორტის მოთხოვნა უარყოფილია. სცადეთ მოგვიანებით."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> მალე ექსპორტირდება."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ამ ფაილის ექსპორტი მალე შესრულდება."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"კონტაქტების ექსპორტი მალე განხორციელდება."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard-ის ექსპორტის მოთხოვნა უარყოფილია. სცადეთ მოგვიანებით."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"კონტაქტი"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"მიმდინარეობს vCard ფაილ(ებ)ის ქეშირება დროებით ადგილობრივ მეხსიერებაში. ფაქტიური იმპორტი დაიწყება მალე."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard-ის იმპორტი ვერ მოხერხდა."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"კონტაქტი NFC-ით"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"გსურთ კონტაქტების ექსპორტი?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"ქეშირება"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"მიმდინარეობს იმპორტი <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"მიმდინარეობს იმპორტი <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"ექსპორტი .vcf ფაილში"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"დალაგება:"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"სახელით"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"ჩემი ინფორმაცია"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"თქვენი პროფილის დაყენება"</string>
     <string name="setting_about" msgid="7014388749752042863">"კონტაქტების შესახებ"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"ხილული კონტაქტების გაზიარება"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"ხილული კონტაქტების გაზიარება ვერ მოხერხდა."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"რჩეული კონტაქტების გაზიარება"</string>
     <string name="share_contacts" msgid="8109287987498711664">"ყველა კონტაქტის გაზიარება"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"კონტაქტების გაზიარება ვერ მოხერხდა."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"გასაზიარებელი კონტაქტები არ არის."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"საჩვენებელი კონტაქტები"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"საჩვენებელი კონტაქტები"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"მორგებ.ხედის განსაზღვრა"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"ხედის პარამეტრების დაყენება"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"შენახვა"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"კონტაქტებში ძიება"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"რჩეულები"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"კონტაქტები არ არის."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"ხშირი კონტაქტების წაშლა"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"აირჩიეთ SIM ბარათი"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"ანგარიშების მართვა"</string>
     <string name="menu_import" msgid="6107961135813836467">"იმპორტი"</string>
     <string name="menu_export" msgid="2658783911863503902">"ექსპორტი"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"დაბლოკილი ნომრები"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g>-ის მეშვეობით"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"ძიების შეჩერება"</string>
     <string name="description_clear_search" msgid="688023606766232904">"ძიების გასუფთავება"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"კონტაქტის ჩვენების ვარიანტები"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"ანგარიში"</string>
     <string name="set_default_account" msgid="4311613760725609801">"ზარებისთვის მუდამ ამის გამოყენება"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"დარეკვა ანგარიშით"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"ზარი შენიშვნასთან ერთად"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"აკრიფეთ ჩანიშვნა ზართან ერთად გასაგზავნად…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"გაგზავნა და დარეკვა"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> წაუკითხავი ერთეული. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> წაუკითხავი ერთეული. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"ანაწყობის ვერსია"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"ღია კოდის ლიცენზიები"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ღია კოდის პროგრამული უზრუნველყოფის ლიცენზირების დეტალები"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"წაშლა"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"სამწერტილი"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> წმ."</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> წთ. და <xliff:g id="SECONDS">%s</xliff:g> წმ."</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> სთ. <xliff:g id="MINUTES_1">%s</xliff:g> წთ. <xliff:g id="SECONDS">%s</xliff:g> წმ."</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> წთ. და <xliff:g id="SECONDS">%2$s</xliff:g> წმ."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> სთ. <xliff:g id="MINUTES_1">%2$s</xliff:g> წთ. <xliff:g id="SECONDS">%3$s</xliff:g> წმ."</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ეს მალსახმობი გათიშულია"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"კონტაქტი წაშლილია"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"იმპორტი"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"კავშირი არ არის"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"მეტის ჩვენება"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM ბარათის იმპორტი დასრულდა"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"იმპორტი ვერ შესრულდა"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM ბარათიდან კონტაქტების იმპორტი ვერ შესრულდა"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"მიმდინარეობს SIM-ის იმპორტი"</string>
 </resources>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 84f789a..52f1859 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Контактілер"</string>
     <string name="contactsList" msgid="8661624236494819731">"Контактілер"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Контакт қосу"</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="shortcutActivityTitle" msgid="1504383567778497348">"Контактіні таңдау"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Контактілерге қосу"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Контакт таңдау"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Таңдау"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Жаңа контакт жасау"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Контакт егжей-тегжейі"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Жою"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Фотосуретті өзгерту"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Таңбаша жасау"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Контактіге қоңырау шалу"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Контактіге мәтін-хабар жіберу"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Ажырату"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Контактілерді жою"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Белгінің атын өзгерту"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Контактілер таңдау"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Контактілерді қосу"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Белгіден алып тастау"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Контакт қосу"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Жаңасын жасау…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Белгі жасау"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Осы контакт байланысын жойып, бірнеше контактіге бөлу керек пе?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Байланысты жою"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Енгізіп қойған өзгертулерді сақтау және осы контакт байланысын жойып, бірнеше контактіге бөлу керек пе?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Сақтау"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Контактілерді байланыстыру"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> байланыстырылды"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> контакт</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> контакт· <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> контакт· <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> контакт· <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> контакт· <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google есептік жазбасынан"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> есептік жазбасынан"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Бұл контактіні жою бірнеше есептік жазбадан мәліметтерді жояды."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Осы контактіні жою керек пе?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Жою"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Өзгертулерден бас тарту"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Мұндай контакт жоқ."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контакт негізгі экранға қосылды."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> негізгі экранға қосылды."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Жаңа контакт құру"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Жаңа контакт құру"</string>
     <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="2228592924476426108">"Контактілер тізімі бос"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Белгілер жоқ."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Топтар жасақтау үшін есептік жазба қажет."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Осы белгісі бар контактілер жоқ"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Бұл есептік жазбада контактілер жоқ"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Контактілер тізімі бос"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Контактіні сақтау қатесі"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Контакт суретінің өзгерістері сақталмады"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Белгі жүктелген жоқ"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Белгі сақталды"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Белгі жойылған"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Белгі жасалды"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Белгі жасау мүмкін болмады"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Хабарды жіберу"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Контактілерді таңдау"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Жіберу"</string>
-    <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" 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" 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="5948889261993124839">"Барлығы"</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_plus_button" msgid="515164827856229880">"қосу"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>, барлық <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контактілерден"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Контактілеріңіздің аттары"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Белгі атауы"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> есептік жазбасы"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Белгі"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Өзгерту"</string>
-    <string name="description_star" msgid="2605854427360036550">"сүйікті"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Контактіні жөндеу"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Жабу"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Артқа"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"жабу"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Ағымдағы контактіні таңдалған контактімен байланыстыру керек пе?"</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="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="7122002148518724139">"Жылды қосу"</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="4347232421410561500">"Есептік жазба қосу"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Импорттау"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Жаңасын жасау…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Алып тастау"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Бас тарту"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Таңдалған параметрлерді сақтау қажет емес пе?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Контактілерді іздеу"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Контактілерді жою"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Менің жергілікті профайлым"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Менің <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> профайлым"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Барлық контактілер көрсетілуде"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Телефоныңыз жоғалған жағдайда контактілеріңізді сақтап қалыңыз: желі қызметімен синхрондаңыз."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Есептік жазба қосу"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Google-ға контактілеріңіздің сақтық көшірмесін жасайтын есептік жазба қосу үшін бір минут уақыт бөліңіз."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Жаңа контактілер <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> есептік жазбасында сақталады."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Жаңа контактілерге арналған әдепкі есептік жазбаны таңдаңыз:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Азырақ көру"</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="288549957278065542">"Жеке көшірме жасау…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"жақындағы sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"жақындағы қоңырау. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Тағы"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Контакт суретін өзгерту"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Контакт суретін қосу"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Өңдегішті ашу мүмкін болмады."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Cақтау:"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> контакт деректері өзгертілмейді"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Қазір <xliff:g id="ACCOUNT_NAME">%s</xliff:g> есептік жазбасына сақталуда. Басқа есептік жазбаны таңдау үшін, екі рет түртіңіз."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Байланысты контактілер (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Байланысты контакт</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> байланыстырылған контакт"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"КОНТАКТІЛЕРДІ БАЙЛАНЫСТЫРУ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"БАС ТАРТУ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ықтимал көшірме</item>
-      <item quantity="one">1 ықтимал көшірме</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> байланыстырылған контакт</item>
-      <item quantity="one">1 байланыстырылған контакт</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Осы контакт"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Ықтимал көшірмелер"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Бұл контактілер бір адам болуы мүмкін. Оларды бір контактіге біріктіруге болады."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Байланысты контактілер"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Есептік жазбаларыңыздан"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Фотосуретті таңдау"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Кімнен: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> жою"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> жою"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> жою"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ішіндегі фотосуретке құсбелгі қойылмаған"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ішіндегі фотосуретке құсбелгі қойылған"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Белгісіз есептік жазбадан алынған фотосуретке құсбелгі қойылмады"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Белгісіз есептік жазбадан алынған фотосуретке құсбелгі қойылды"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Ұсыныстар"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Жаңа"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Жылжу тақтасын ашу"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Каталог"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Жұмыс каталогы"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Барлық контактілер"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> шамасынан артық табылды."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> үшін жылдам байланыс"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Атаусыз)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Жиі хабарласатындар"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Контактіні көру"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Телефон нөмірі бар барлық контактілер"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Жұмыс профилінің контактілері"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Жаңартуларды көру"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Аты"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Лақап ат"</string>
-    <string name="full_name" msgid="6602579550613988977">"Аты"</string>
     <string name="name_given" msgid="4280790853455320619">"Аты"</string>
     <string name="name_family" msgid="7466985689626017037">"Тегі"</string>
     <string name="name_prefix" msgid="59756378548779822">"Аттың префиксі"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> поштасына хат жіберу"</string>
     <string name="email" msgid="5668400997660065897">"Электрондық пошта"</string>
     <string name="postal_street" msgid="8133143961580058972">"Көше"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Пошта жәшігі"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Аудан"</string>
     <string name="postal_city" msgid="6597491300084895548">"Қала"</string>
     <string name="postal_region" msgid="6045263193478437672">"Штат"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Индекс"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Қосымша топтар…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" синхрондаудан алынса, топталмаған контактілер де синхрондаудан алынады."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Дисплей опцияларын сақтау…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Дайын"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Өшіру"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Реттелген көрініс"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Импортталған контактілерді келесіге сақтау:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM картасы"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> экспорттау тоқтатылсын ба?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard импорттау/экспорттау тоқтатылмады"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Белгісіз қате."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" файлын аша алмады: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" файлын аша алмады: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Экспорттаушыны қосу мүмкін болмады: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Экспортталатын контакт жоқ."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Сіз міндетті рұқсатты өшірдіңіз."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Экспорттау кезінде қателік орын алды: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Қажетті файл атауы тым ұзақ (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O қатесі"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Жад жеткіліксіз. Файл тым үлкен болуы мүмкін."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"vCard картасын талдау күтпеген себеппен мүмкін болмады."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Форматқа қолдау көрсетілмейді."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Осы vCard файлдары туралы мета ақпарат жинай алмады."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Бір немесе бірнеше карталарды импорттау мүмкін болмады (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> экспорттау аяқталды."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Контактілер экспортталып болды."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Контактілерді экспорттау аяқталды, контактілерді бөлісу үшін хабарландыруды басыңыз."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Контакт деректері экспортталуда"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Контактінің деректері экспортталуда."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Дерекқор ақпаратын ала алмады."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Экспорттауға болатын контактілер жоқ. Телефоныңызда контактілер болса, кейбір дерек жабдықтаушылары контактілердің телефоннан экспортталуына рұқсат бермейді."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Экспортталатын контактілер жоқ."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard редакторы дұрыс қосылмады."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Экспорттай алмады"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Контакт деректері экспортталмады. \nСебебі: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> импортталуда"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard деректерін оқи алмады"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard деректерін оқу тоқтатылды"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vCard файлын импорттау аяқталды"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> импорттау тоқтатылды"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> жуық арада импортталады."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Файл жуық арада импортталады."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard импорттау өтініші қабылданбады. Кейінірек қайталап көріңіз."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> жуық арада экспортталады."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Файл қысқа уақыттан кейін экспортталады."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Контактілер жуық арада экспортталады."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard экспорттау өтініші қабылданбады. Кейінірек қайталап көріңіз."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"контакт"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard карталарын жергілікті уақытша жадқа кэштеу. Импорттау жуық арада басталады."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard экспорттау мүмкін болмады."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC арқ. алынған"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Контактілер экспортталсын ба?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Кэштеу"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g>/<xliff:g id="CURRENT_NUMBER">%s</xliff:g> импортталуда: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>/<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> импортталуда: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf файлына экспорттау"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Сұрыптау шарты"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Аты"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Ақпаратым"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Профильді орнату"</string>
     <string name="setting_about" msgid="7014388749752042863">"Контактілер туралы"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Көрінетін контактілерді бөлісу"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Көрінетін контактілерді бөлісу сәтсіз аяқталды."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Таңдаулы контактілерді бөлісу"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Барлық контактілерді бөлісу"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Контактілерді бөлісу сәтсіз аяқталды."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Бөлісетін контактілер жоқ."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Көрсетілетін контактілер"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Көрсетілетін контактілер"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Реттелген көріністі анықтау"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Көрінісін өзгерту"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Сақтау"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Контактілерді іздеу"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Таңдаулылар"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Ешқандай контактілер жоқ."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Жиі хабарласатындарды өшіру"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM картасын таңдау"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Есептік жазбаларды басқару"</string>
     <string name="menu_import" msgid="6107961135813836467">"Импорттау"</string>
     <string name="menu_export" msgid="2658783911863503902">"Экспорттау"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Бөгелген нөмірлер"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g> арқылы"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"іздеуді тоқтату"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Іздеуді өшіру"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Контактілерді көрсету опциялары"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Есептік жазба"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Осыны қоңырауларға ылғи пайдалану"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Келесімен қоңырау шалу"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Ескертпе бар қоңырау"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Қоңыраумен жіберілетін мәтінді теріңіз..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ЖІБЕРУ ЖӘНЕ ҚОҢЫРАУ СОҒУ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> оқылмаған элемент. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> оқылмаған элемент. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Жинақ нұсқасы"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Ашық бастапқы код лицензиялары"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Ашық бастапқы код бағдарламасына арналған лицензия туралы мәліметтер"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Жою"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Көп нүкте"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> сағ <xliff:g id="MINUTES_1">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мин <xliff:g id="SECONDS">%2$s</xliff:g> сек"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> сағ <xliff:g id="MINUTES_1">%2$s</xliff:g> мин <xliff:g id="SECONDS">%3$s</xliff:g> сек"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Бұл белгіше өшірілген"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Контакт жойылған"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Импорттау"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Байланыс жоқ"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Тағы көрсету"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM картасын импорттау аяқталды"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Импорттау мүмкін болмады"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Контактілерді SIM картасынан импорттау мүмкін болмады"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM картасы импортталуда"</string>
 </resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 3dc47d2..b532340 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"ទំនាក់ទំនង"</string>
     <string name="contactsList" msgid="8661624236494819731">"ទំនាក់ទំនង"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"បញ្ចូល​​ទំនាក់ទំនង"</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="shortcutActivityTitle" msgid="1504383567778497348">"ជ្រើសរើស​ទំនាក់ទំនង"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"បញ្ចូល​​ទៅ​ទំនាក់ទំនង"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ជ្រើសរើស​ទំនាក់ទំនង"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ជ្រើស"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"បង្កើត​ទំនាក់ទំនង​ថ្មី"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"ព័ត៌មាន​លម្អិត​របស់​ទំនាក់ទំនង"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"លុប"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"ប្ដូររូបថត"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"បង្កើត​ផ្លូវកាត់"</string>
-    <string name="menu_call" msgid="3992595586042260618">"ហៅ​ទំនាក់ទំនង"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"អត្ថបទ​ទំនាក់ទំនង"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"ផ្តាច់"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"ដក​​ទំនាក់ទំនង​ចេញ"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"ប្ដូរឈ្មោះស្លាក"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"ជ្រើស​រើសទំនាក់ទំនង"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"បញ្ចូល​​ទំនាក់ទំនង"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"លុប​ចេញ​ពី​ស្លាក"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"បញ្ចូល​​ទំនាក់ទំនង"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"បង្កើត​ថ្មី..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"បង្កើតស្លាក"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"ផ្តាច់ទំនាក់ទំនងនេះទៅជាទំនាក់ទំនងច្រើន?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ផ្តាច់"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"តើអ្នកចង់រក្សាទុកការផ្លាស់ប្តូរដែលអ្នកបានធ្វើឡើង និងផ្តាច់ទំនាក់ទំនងនេះទៅជាទំនាក់ទំនងច្រើនដែរទេ?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"រក្សាទុក"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"តភ្ជាប់ទំនាក់ទំនង"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ជ្រើសរើសទំនាក់ទំនងដែលអ្នកចង់តភ្ជាប់ជាមួយ <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"បាន​ចូលចិត្ត <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -83,8 +74,8 @@
       <item quantity="one">ទំនាក់ទំនង <xliff:g id="COUNT_0">%d</xliff:g></item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other">ទំនាក់ទំនង <xliff:g id="COUNT_2">%d</xliff:g> · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one">ទំនាក់ទំនង <xliff:g id="COUNT_0">%d</xliff:g> · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other">ទំនាក់ទំនង <xliff:g id="COUNT_2">%1$d</xliff:g> · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one">ទំនាក់ទំនង <xliff:g id="COUNT_0">%1$d</xliff:g> · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"ពី Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"ពី <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ការលុបទំនាក់ទំនងនេះនឹងលុបព័ត៌មានលម្អិតពីគណនីច្រើន"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"លុបទំនាក់ទំនងនេះ?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"លុប"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"បោះបង់​ការ​ផ្លាស់ប្ដូរ"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"មិន​មាន​ទំនាក់ទំនង។"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"បានបញ្ចូល​ទំនាក់ទំនងទៅអេក្រង់ដើម"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"បានបញ្ចូល​ <xliff:g id="NAME">%s</xliff:g> ទៅអេក្រង់ដើម"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"បង្កើត​ទំនាក់ទំនង​ថ្មី"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"បង្កើត​ទំនាក់ទំនង​ថ្មី"</string>
     <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="2228592924476426108">"បញ្ជីទំនាក់ទំនងរបស់អ្នកគឺទទេ"</string>
-    <string name="noGroups" msgid="4607906327968232225">"គ្មានស្លាក។"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"ដើម្បី​បង្កើត​ក្រុម​អ្នក​ចាំបាច់​ត្រូវ​មាន​គណនី​មួយ។"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"មិន​មាន​ទំនាក់ទំនង​ដែល​មាន​ស្លាក​នេះ"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"មិនមានទំនាក់ទំនង​នៅ​ក្នុងគណនីនេះ​ទេ"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"បញ្ជីទំនាក់ទំនងរបស់អ្នកគឺទទេ"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"មាន​បញ្ហា​រក្សាទុក​ទំនាក់ទំនង"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"មិនអាចរក្សាទុកការប្ដូររូបថតទំនាក់ទំនង​បាន​ទេ"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"បាន​បរាជ័យ​ក្នុង​ការ​ផ្ទុក​ស្លាក"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"បាន​រក្សាទុក​ស្លាក"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"បានលុបស្លាក"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"បាន​បង្កើត​ស្លាក"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"មិនអាចបង្កើតស្លាក"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"ផ្ញើ​សារ"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"ជ្រើសរើស​​ទំនាក់ទំនង"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"ផ្ញើ"</string>
-    <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" 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" 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="5948889261993124839">"ទាំងអស់"</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_plus_button" msgid="515164827856229880">"បូក"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> នៃ​ទំនាក់ទំនង <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"ឈ្មោះ​នៃ​ទំនាក់ទំនង​របស់​អ្នក"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"ឈ្មោះស្លាក"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"គណនី <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"ស្លាក"</string>
-    <string name="change_photo" msgid="8530597935483526383">"ផ្លាស់ប្ដូរ"</string>
-    <string name="description_star" msgid="2605854427360036550">"សំណព្វ"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"កែ​ទំនាក់ទំនង"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"បោះបង់"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"ថយក្រោយ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"បិទ"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"តភ្ជាប់ទំនាក់ទំនងបច្ចុប្បន្នជាមួយទំនាក់ទំនងដែលបានជ្រើស?"</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="activity_title_settings" msgid="5464130076132770781">"ការ​កំណត់"</string>
     <string name="menu_settings" msgid="377929915873428211">"ការ​កំណត់"</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>
     <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="7122002148518724139">"រួមបញ្ចូលឆ្នាំ"</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="4347232421410561500">"បញ្ចូលគណនី"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"នាំចូល"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"បង្កើត​ថ្មី..."</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"បោះបង់"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"បោះ​បង់​"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"បោះបង់ការប្ដូរតាមបំណង​ដែរ ឬ​ទេ?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"ស្វែងរក​ទំនាក់ទំនង"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"ដក​ទំនាក់ទំនង​ចេញ"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"ប្រវត្តិរូប​មូលដ្ឋាន​របស់​ខ្ញុំ"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"ប្រវត្តិរូប <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> របស់​ខ្ញុំ"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"បង្ហាញ​ទំនាក់ទំនង​ទាំងអស់"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"រក្សាទុក​ទំនាក់ទំនង​របស់​អ្នក​យ៉ាង​មាន​សុវត្ថិភាព ទោះបីជា​អ្នក​បាត់​ទូរស័ព្ទ​ក៏ដោយ៖ ធ្វើ​សមកាលកម្ម​ជាមួយ​សេវាកម្ម​លើ​បណ្ដាញ។"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"បន្ថែម​គណនី"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"ចំណាយ​ពេល​មួយ​​ភ្លែត​ ដើម្បី​បញ្ចូល​​គណនី​ដែល​នឹង​បម្រុងទុក​ទំនាក់ទំនងរបស់អ្នក​​ទៅក្នុង Google។"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ទំនាក់ទំនងថ្មីនឹងត្រូវបានរក្សាទុកទៅក្នុង <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ជ្រើសគណនីលំនាំដើមសម្រាប់ទំនាក់ទំនងថ្មី៖"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"​មើល​តិច​ជាង"</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="288549957278065542">"កំពុង​បង្កើត​ច្បាប់​ចម្លង​ផ្ទាល់​ខ្លួន..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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">"សារ​ខ្លៗ​ថ្មី។ <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_sms" msgid="1666389577263317445">"សារ​ខ្លៗ​ថ្មី។ <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"ការ​ហៅ​ថ្មី​។ <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"ប្រអប់​បន្ថែម"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"ផ្លាស់ប្ដូរ​រូបថត​ទំនាក់ទំនង"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"បញ្ចូល​រូបថត​ទំនាក់ទំនង"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"មិន​អាច​បើក​កម្មវិធី​កែសម្រួល​បាន​ទេ។"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"រក្សាទុកទៅ"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"ព័ត៌មាន​អំពី​ទំនាក់ទំនង​ពី <xliff:g id="ACCOUNT">%s</xliff:g> មិន​អាច​កែ​សម្រួល​បាន​ទេ"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"កំពុង​រក្សាទុក​ទៅ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> នៅ​ពេល​នេះ។ សូម​ចុច​ពីរ​ដង ដើម្បី​ជ្រើសយក​គណនី​ផ្សេង។"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">ទំនាក់ទំនងដែលបានតភ្ជាប់ (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">ទំនាក់ទំនងដែលបានតភ្ជាប់</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"ទំនាក់ទំនងដែលបានតភ្ជាប់ <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ភ្ជាប់ទំនាក់ទំនង"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"បោះបង់"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other">អាចមានស្ទួន <xliff:g id="COUNT">%d</xliff:g></item>
-      <item quantity="one">អាចមានស្ទួន 1</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">ទំនាក់ទំនងដែលបានតភ្ជាប់ <xliff:g id="COUNT">%d</xliff:g></item>
-      <item quantity="one">ទំនាក់ទំនងដែលបានតភ្ជាប់ 1</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ទំនាក់ទំនងនេះ"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"អាចនឹងស្ទួន"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"ទំនាក់ទំនងទាំងនេះប្រហែលជាមនុស្សតែមួយ។ អ្នកអាចតភ្ជាប់ពួកគេជាមួយគ្នាឲ្យទៅជាទំនាក់ទំនងទោលបាន។"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"ទំនាក់ទំនងដែលបានតភ្ជាប់"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"ពីគណនីរបស់អ្នក"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"ជ្រើសរើសរូបថត"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"ពី <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"លុប <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"លុប <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"លុប <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"មិនបានជ្រើសរូបថតពី <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> នោះទេ"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"បានជ្រើសរូបថតពី <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"មិនបានជ្រើសរូបថតពីគណនីមិនស្គាល់ទេ"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"បានជ្រើសរូបថតពីគណនីមិនស្គាល់"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"ការ​ណែនាំ"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"ថ្មី"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"បើក​ផ្ទាំង​រុករក"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"ថត"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"ថតកន្លែងការងារ"</string>
     <string name="local_search_label" msgid="2551177578246113614">"ទំនាក់ទំនង​ទាំងអស់"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"បាន​រក​ឃើញ​ច្រើនជាង <xliff:g id="COUNT">%d</xliff:g> ។"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"ទំនាក់ទំនង​រហ័ស​សម្រាប់ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(គ្មាន​ឈ្មោះ)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"បាន​ទាក់ទង​ញឹកញាប់"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"មើល​ទំនាក់ទំនង"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"ទំនាក់ទំនង​ទាំងអស់​ដែល​មាន​លេខ​ទូរស័ព្ទ"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"ទំនាក់ទំនងប្រវត្តិរូបការងារ"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"មើល​បច្ចុប្បន្នភាព"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"ឈ្មោះ"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"សម្មតិនាម"</string>
-    <string name="full_name" msgid="6602579550613988977">"ឈ្មោះ"</string>
     <string name="name_given" msgid="4280790853455320619">"នាម​ខ្លួន"</string>
     <string name="name_family" msgid="7466985689626017037">"នាម​ត្រកូល"</string>
     <string name="name_prefix" msgid="59756378548779822">"បុព្វបទ​ឈ្មោះ"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"ផ្ញើ​អ៊ីមែល​ទៅ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"អ៊ីមែល"</string>
     <string name="postal_street" msgid="8133143961580058972">"ផ្លូវ"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"ប្រអប់​សំបុត្រ"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"អ្នក​ជិត​ខាង"</string>
     <string name="postal_city" msgid="6597491300084895548">"ទីក្រុង"</string>
     <string name="postal_region" msgid="6045263193478437672">"រដ្ឋ"</string>
     <string name="postal_postcode" msgid="572136414136673751">"លេខ​កូដ​តំបន់"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"ក្រុម​ច្រើន​ទៀត..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ការ​លុប \"<xliff:g id="GROUP">%s</xliff:g>\" ចេញពី​សមកាលកម្ម​វា​ក៏​នឹង​លុប​ទំនាក់ទំនង​ដែល​មិន​នៅ​ក្នុង​ក្រុម​ចេញពី​សមកាលកម្ម​ផង​ដែរ។"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"កំពុង​រក្សាទុក​ជម្រើស​បង្ហាញ..."</string>
-    <string name="menu_done" msgid="796017761764190697">"រួចរាល់"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"បោះ​បង់​"</string>
     <string name="listCustomView" msgid="1840624396582117590">"ទិដ្ឋភាព​​ផ្ទាល់ខ្លួន"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"រក្សាទំនាក់ទំនងដែលបាននាំចូលទៅ៖"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"ស៊ីមកាត"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"បោះបង់​ការ​នាំចេញ <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"មិន​អាច​បោះបង់​ការ​នាំចេញ/នាំចូល vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"មិន​ស្គាល់​កំហុស។"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"មិន​អាច​បើក \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g> ។"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"មិន​អាច​បើក \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g> ។"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"មិន​អាច​ចាប់ផ្ដើម​ម​ការ​នាំចេញ​៖ \"<xliff:g id="EXACT_REASON">%s</xliff:g>\" ។"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"មិន​មាន​ទំនាក់ទំនង​ដើម្បី​នាំចេញ។"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"អ្នកបានបិទសិទ្ធិអនុញ្ញាតដែលតម្រូវឲ្យមាន។"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"មាន​កំហុស​កើត​ឡើង​ពេល​នាំចេញ៖ \"<xliff:g id="EXACT_REASON">%s</xliff:g>\" ។"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"ឈ្មោះ​ឯកសារ​ដែល​បាន​ទាមទារ​គឺ​វែង​ពេក (\"<xliff:g id="FILENAME">%s</xliff:g>\") ។"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"កំហុស I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"អង្គ​ចងចាំ​មិន​គ្រប់គ្រាន់។ ឯកសារ​ប្រហែលជា​ធំ​ពេក។"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"មិន​អាច​ញែក vCard ដោយសារ​ហេតុផល​មិន​រំពឹង​ទុក។"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"មិន​គាំទ្រ​ទ្រង់ទ្រាយ។"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"មិន​អាច​ប្រមូល​ព័ត៌មាន​មេតា​របស់​ឯកសារ vCard(s) ដែល​បាន​ផ្ដល់។"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"មាន​ឯកសារ​មួយ ឬ​ច្រើន​ដែល​មិន​អាច​នាំចូល (%s) ។"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"បាន​បញ្ចប់​ការ​នាំចេញ <xliff:g id="FILENAME">%s</xliff:g> ។"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"បានបញ្ចប់ការនាំចេញទំនាក់ទំនង។"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"បានបញ្ចប់ការនាំចេញទំនាក់ទំនង សូមចុចលើការជូនដំណឹង ដើម្បីចែករំលែកទំនាក់ទំនង"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"កំពុង​នាំចេញ​ព័ត៌មាន​ទំនាក់ទំនង"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"ទិន្នន័យចំណាំកំពុងត្រូវបាននាំចេញ"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"មិន​អាច​យក​ព័ត៌មាន​មូលដ្ឋាន​ទិន្នន័យ។"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"មិន​មាន​ទំនាក់​ទំនង​ដើម្បី​នាំចេញ។ ប្រសិនបើ​អ្នក​ពិតជា​មាន​ទំនាក់ទំនង​នៅ​ក្នុង​កុំព្យូទ័រ​បន្ទះ​របស់​អ្នក​មែន នោះ​អាច​ដោយសារតែ​ក្រុមហ៊ុន​ផ្ដល់​ទិន្នន័យ​មួយ​ចំនួន​មិន​អនុញ្ញាត​ឲ្យ​នាំចេញ។"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"មិន​មាន​ទំនាក់ទំនង​ដែល​អាច​នាំចេញ​ទេ។"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"មិន​បាន​ចាប់ផ្ដើម​កម្មវិធី​តែង vCard ដោយ​​ត្រឹមត្រូវ។"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"មិន​អាច​នាំចេញ"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"មិន​បាន​នាំចេញ​ទិន្នន័យ​ទំនាក់ទំនង។\nមូលហេតុ៖ \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"ការ​នាំចូល <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"មិន​អាច​អាន​ទិន្នន័យ vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"បាន​បោះបង់​ការ​អាន​ទិន្នន័យ vCard"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"បាន​បញ្ចប់​ការ​នាំចូល vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"បាន​បោះបង់​ការ​នាំ​ចូល <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"នឹង​នាំចូល <xliff:g id="FILENAME">%s</xliff:g> ក្នុង​ពេល​ឆាប់ៗ។"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"នឹង​នាំចូល​ឯកសារ​ក្នុង​ពេល​ឆាប់ៗ។"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"បាន​បដិសេធ​សំណើ​នាំចូល vCard ។ សូម​ព្យាយាម​ម្ដងទៀត​នៅ​ពេល​ក្រោយ​។"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"នឹង​នាំចេញ <xliff:g id="FILENAME">%s</xliff:g> ក្នុង​ពេល​ឆាប់ៗ។"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"នឺងនាំចេញឯកសារក្នុងពេលឆាប់ៗ។"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"ទំនាក់ទំនងនឹងត្រូវបាននាំចេញក្នុងពេលបន្តិចទៀតនេះ។"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"បាន​បដិសេធ​សំណើ​នាំចេញ vCard ។ សូម​ព្យាយាម​ម្ដងទៀត​នៅ​ពេល​ក្រោយ។"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"ទំនាក់ទំនង"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"ការ​ផ្ទុក vCard(s​) ទៅកាន់​ឧបករណ៍​ផ្ទុក​ប​បណ្ដោះអាសន្ន​មូលដ្ឋាន។ ការ​នាំចូល​ពិតប្រាកដ​នឹង​ចាប់ផ្ដើម​ម​ឆាប់ៗ។"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"មិន​អាច​នាំចូល vCard ។"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"ទំនាក់ទំនង​ដែល​បាន​ទទួល​តាម NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"នាំចេញ​ទំនាក់ទំនង?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"ការ​ផ្ទុក​ក្នុង​ឃ្លាំង​សម្ងាត់"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"កំពុង​នាំចូល <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>៖ <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"កំពុង​នាំចូល <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>៖ <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"នាំចេញទៅឯកសារ .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"តម្រៀបតាម"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"នាម​ខ្លួន"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"ព័ត៌មាន​របស់​ខ្ញុំ"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"រៀបចំ​ប្រវត្តិរូប​របស់​អ្នក"</string>
     <string name="setting_about" msgid="7014388749752042863">"អំពីទំនាក់ទំនង"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"ចែករំលែក​ទំនាក់ទំនង​ដែល​អាច​មើល​ឃើញ"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"ការចែករំលែកទំនាក់ទំនងដែល​មើលឃើញ​មិន​បាន​សម្រេច។"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ចែករំលែកទំនាក់ទំនង​ដែល​ចូលចិត្ត"</string>
     <string name="share_contacts" msgid="8109287987498711664">"ចែករំលែកទំនាក់ទំនងទាំងអស់"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"ការចែករំលែកទំនាក់ទំនង​មិន​បាន​សម្រេច។"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"មិនមានទំនាក់ទំនងដើម្បីចែករំលែកទេ។"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"ទំនាក់ទំនង​ដែល​ត្រូវ​បង្ហាញ"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ទំនាក់ទំនង​ដែល​ត្រូវ​បង្ហាញ"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"កំណត់ទិដ្ឋភាពផ្ទាល់ខ្លួន"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"ប្ដូរ​ការ​មើល​តាមបំណង"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"រក្សាទុក"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"ស្វែងរកទំនាក់ទំនង"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"សំណព្វ"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"មិន​មាន​ទំនាក់ទំនង។"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"សម្អាត​ញឹកញាប់"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"ជ្រើស​ស៊ី​ម​កាត"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"គ្រប់គ្រង​គណនី"</string>
     <string name="menu_import" msgid="6107961135813836467">"នាំចូល"</string>
     <string name="menu_export" msgid="2658783911863503902">"នាំ​ចេញ"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"លេខបានរារាំង"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> តាម​រយៈ <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"បញ្ឈប់​ការ​ស្វែងរក"</string>
     <string name="description_clear_search" msgid="688023606766232904">"សម្អាត​ការ​ស្វែងរក"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"ជម្រើស​បង្ហាញ​ទំនាក់ទំនង"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"គណនី"</string>
     <string name="set_default_account" msgid="4311613760725609801">"ប្រើ​វា​សម្រាប់​ការ​ហៅ​ជា​និច្ច"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"ហៅ​ជាមួយ"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"ការហៅព្រមជាមួយចំណាំ"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"បញ្ចូលចំណាំដែលត្រូវផ្ញើជាមួយការហៅទូរសព្ទ..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ផ្ញើ &amp; ហៅទូរស័ព្ទ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>។ <xliff:g id="COUNT_3">%2$d</xliff:g> ធាតុមិន​បាន​អាន​​។ </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>។ ធាតុមិនបានអាន <xliff:g id="COUNT_1">%2$d</xliff:g> </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"កំណែបង្កើត"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"អាជ្ញាប័ណ្ណ​ប្រភព​កូដ​ចំហ"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"សេចក្ដីលម្អិតអាជ្ញាប័ណ្ណសម្រាប់កម្មវិធីប្រភពកូដ​ចំហ"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"លុប"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"សញ្ញា​ចុចបី"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> វិនាទី"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> នាទី <xliff:g id="SECONDS">%s</xliff:g> វិនាទី"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ម៉ោង <xliff:g id="MINUTES_1">%s</xliff:g> នាទី <xliff:g id="SECONDS">%s</xliff:g> វិនាទី"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> នាទី <xliff:g id="SECONDS">%2$s</xliff:g> វិនាទី"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ម៉ោង <xliff:g id="MINUTES_1">%2$s</xliff:g> នាទី <xliff:g id="SECONDS">%3$s</xliff:g> វិនាទី"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ផ្លូវកាត់នេះត្រូវបានបិទ"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"ទំនាក់ទំនងត្រូវបាន​លុប​ចេញ"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"នាំចូល"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"គ្មាន​ការ​តភ្ជាប់"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"បង្ហាញ​ជា​ច្រើន"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"បាន​បញ្ចប់​នាំចូល​ទំនាក់ទំនង​ក្នុង​ស៊ីមកាត"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"ការ​នាំចូល​មិន​បាន​សម្រេច"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"មិន​អាច​នាំចូល​ទំនាក់ទំនង​ពី​ស៊ីម​កាត​បាន​ទេ"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"កំពុង​នាំចូល​ទំនាក់ទំនង​​ពី SIM"</string>
 </resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index f0774e1..506ac81 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"ಸಂಪರ್ಕಗಳು"</string>
     <string name="contactsList" msgid="8661624236494819731">"ಸಂಪರ್ಕಗಳು"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"ಸಂಪರ್ಕ ಸೇರಿಸಿ"</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="shortcutActivityTitle" msgid="1504383567778497348">"ಸಂಪರ್ಕ ಆಯ್ಕೆ ಮಾಡಿ"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"ಸಂಪರ್ಕಕ್ಕೆ ಸೇರಿಸು"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ಸಂಪರ್ಕ ಆಯ್ಕೆ ಮಾಡಿ"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ಆಯ್ಕೆಮಾಡಿ"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ಹೊಸ ಸಂಪರ್ಕ ರಚಿಸಿ"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"ಸಂಪರ್ಕ ವಿವರಗಳು"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"ಅಳಿಸಿ"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"ಫೋಟೋ ಬದಲಾಯಿಸಿ"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"ಶಾರ್ಟ್‌ಕಟ್ ರಚಿಸಿ"</string>
-    <string name="menu_call" msgid="3992595586042260618">"ಕರೆಯ ಸಂಪರ್ಕ"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"ಪಠ್ಯ ಸಂಪರ್ಕ"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"ಅನ್‌ಲಿಂಕ್‌"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"ಸಂಪರ್ಕಗಳನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"ಲೇಬಲ್‌ ಮರುಹೆಸರಿಸಿ"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"ಸಂಪರ್ಕಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"ಸಂಪರ್ಕಗಳನ್ನು ಸೇರಿಸಿ"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"ಲೇಬಲ್‌ನಿಂದ ತೆಗೆದುಹಾಕಿ"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"ಸಂಪರ್ಕ ಸೇರಿಸಿ"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"ಹೊಸದನ್ನು ರಚಿಸಿ…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ಲೇಬಲ್‌ ರಚಿಸಿ"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"ಬಹು ಸಂಪರ್ಕಗಳಲ್ಲಿನ ಈ ಸಂಪರ್ಕವನ್ನು ಅನ್‌ಲಿಂಕ್ ಮಾಡುವುದೇ?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ಅನ್‌ಲಿಂಕ್‌"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ನೀವು ಈಗಾಗಲೇ ಮಾಡಲಾದ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲು ಮತ್ತು ಬಹು ಸಂಪರ್ಕಗಳಲ್ಲಿನ ಈ ಸಂಪರ್ಕವನ್ನು ಲಿಂಕ್ ರದ್ದುಮಾಡಲು ಬಯಸುವಿರಾ?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"ಉಳಿಸು"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"ಲಿಂಕ್ ಸಂಪರ್ಕಗಳು"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ನೀವು <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ಲಿಂಕ್ ಮಾಡಲಾಗಿದೆ"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ಸಂಪರ್ಕಗಳು</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> ಸಂಪರ್ಕಗಳು · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> ಸಂಪರ್ಕಗಳು · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> ಸಂಪರ್ಕಗಳು · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ಸಂಪರ್ಕಗಳು · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google ನಿಂದ"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g>ಖಾತೆಯಿಂದ"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ಈ ಸಂಪರ್ಕವನ್ನು ಅಳಿಸುವುದರಿಂದ ಅದಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ವಿವರಗಳನ್ನು ಬಹು ಖಾತೆಗಳಿಂದ ಅಳಿಸಲಾಗುತ್ತದೆ."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"ಈ ಸಂಪರ್ಕವನ್ನು ಅಳಿಸುವುದೇ?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ಅಳಿಸಿ"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"ಬದಲಾವಣೆಗಳನ್ನು ತ್ಯಜಿಸು"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"ಸಂಪರ್ಕವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"ಸಂಪರ್ಕವನ್ನು ಮುಖಪುಟ ಪರದೆಗೆ ಸೇರಿಸಲಾಗಿದೆ."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ಅನ್ನು ಮುಖಪುಟ ಪರದೆಗೆ ಸೇರಿಸಲಾಗಿದೆ."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"ಹೊಸ ಸಂಪರ್ಕ ರಚಿಸಿ"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"ಹೊಸ ಸಂಪರ್ಕ ರಚಿಸಿ"</string>
     <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="2228592924476426108">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಪಟ್ಟಿಯು ಖಾಲಿಯಾಗಿದೆ"</string>
-    <string name="noGroups" msgid="4607906327968232225">"ಯಾವುದೇ ಲೇಬಲ್‌ಗಳಿಲ್ಲ."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"ಗುಂಪುಗಳನ್ನು ರಚಿಸಲು ನಿಮಗೆ ಖಾತೆಯ ಅಗತ್ಯವಿದೆ."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"ಈ ಲೇಬಲ್‌ ಹೊಂದಿರುವ ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"ಈ ಖಾತೆಯಲ್ಲಿ ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"ನಿಮ್ಮ ಸಂಪರ್ಕಗಳ ಪಟ್ಟಿಯು ಖಾಲಿಯಾಗಿದೆ"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"ಸಂಪರ್ಕವನ್ನು ಉಳಿಸುವಲ್ಲಿ ದೋಷ"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"ಸಂಪರ್ಕ ಫೋಟೋ ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲಾಗಲಿಲ್ಲ"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ಲೇಬಲ್ ಲೋಡ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"ಲೇಬಲ್ ಉಳಿಸಲಾಗಿದೆ"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ಲೇಬಲ್ ಅಳಿಸಲಾಗಿದೆ"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"ಲೇಬಲ್ ರಚಿಸಲಾಗಿದೆ"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"ಲೇಬಲ್‌ ರಚಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"ಸಂದೇಶ ಕಳುಹಿಸಿ"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"ಸಂಪರ್ಕಗಳನ್ನು ಆಯ್ಕೆ ಮಾಡಿ"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"ಕಳುಹಿಸಿ"</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="5948889261993124839">"ಎಲ್ಲಾ"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"ಲೇಬಲ್‌ ಹೆಸರು"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ಖಾತೆ"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"ಲೇಬಲ್"</string>
-    <string name="change_photo" msgid="8530597935483526383">"ಬದಲಾಯಿಸು"</string>
-    <string name="description_star" msgid="2605854427360036550">"ಮೆಚ್ಚಿನ"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"ಸಂಪರ್ಕವನ್ನು ಎಡಿಟ್ ಮಾಡಿ"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"ರದ್ದುಮಾಡಿ"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"ಹಿಂದೆ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ಮುಚ್ಚು"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"ಪ್ರಸ್ತುತ ಸಂಪರ್ಕವನ್ನು ಆಯ್ಕೆಮಾಡಿದ ಸಂಪರ್ಕದೊಂದಿಗೆ ಲಿಂಕ್ ಮಾಡುವುದೇ?"</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="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="7122002148518724139">"ವರ್ಷವನ್ನು ಸೇರಿಸಿ"</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="4347232421410561500">"ಖಾತೆ ಸೇರಿಸಿ"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"ಆಮದು ಮಾಡಿ"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"ಹೊಸದನ್ನು ರಚಿಸಿ…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ತ್ಯಜಿಸು"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ರದ್ದುಮಾಡಿ"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"ಕಸ್ಟಮೈಸೇಶನ್‌ಗಳನ್ನು ತ್ಯಜಿಸುವುದೇ?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"ಸಂಪರ್ಕಗಳನ್ನು ಹುಡುಕಿ"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"ಸಂಪರ್ಕಗಳನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"ನನ್ನ ಸ್ಥಳೀಯ ಪ್ರೊಫೈಲ್"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"ನನ್ನ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ಪ್ರೊಫೈಲ್‌"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"ಎಲ್ಲ ಸಂಪರ್ಕಗಳನ್ನು ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತಿದೆ"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"ನಿಮ್ಮ ಫೋನ್‌ ಅನ್ನು ಕಳೆದುಕೊಂಡರೂ ಸಹ ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಸುರಕ್ಷಿತವಾಗಿ ಇರಿಸಿಕೊಳ್ಳಿ: ಆನ್‌‌ಲೈನ್‌ ಸೇವೆಯೊಂದಿಗೆ ಸಿಂಕ್ರೊನೈಸ್ ಮಾಡಿ."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ಖಾತೆಯೊಂದನ್ನು ಸೇರಿಸು"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Google ಗೆ ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಬ್ಯಾಕಪ್‌ ಮಾಡುವಂತಹ ಖಾತೆಯನ್ನು ಸೇರಿಸಲು ಒಂದು ನಿಮಿಷ ವ್ಯಯಿಸಿ."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ಹೊಸ ಸಂಪರ್ಕಗಳನ್ನು <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ಗೆ ಉಳಿಸಲಾಗುತ್ತದೆ."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ಹೊಸ ಸಂಪರ್ಕಗಳಿಗೆ ಡಿಫಾಲ್ಟ್ ಖಾತೆ ಆಯ್ಕೆಮಾಡಿ:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ಕಡಿಮೆ ನೋಡಿ"</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="288549957278065542">"ವೈಯಕ್ತಿಕ ಪ್ರತಿಯನ್ನು ರಚಿಸಲಾಗುತ್ತಿದೆ…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"ಇತ್ತೀಚಿನ sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"ಇತ್ತೀಚಿನ ಕರೆ. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"ಇನ್ನಷ್ಟು ಫೀಲ್ಡ್‌ಗಳು"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"ಸಂಪರ್ಕ ಫೋಟೋವನ್ನು ಬದಲಿಸಿ"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"ಸಂಪರ್ಕ ಫೋಟೋವನ್ನು ಸೇರಿಸಿ"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"ಸಂಪಾದಕವನ್ನು ತೆರೆಯಲು ವಿಫಲವಾಗಿದೆ."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"ಇದಕ್ಕೆ ಉಳಿಸಲಾಗುತ್ತಿದೆ"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> ನಲ್ಲಿನ ಸಂಪರ್ಕದ ಮಾಹಿತಿಯು ಎಡಿಟ್ ಮಾಡಲು ಆಗುವುದಿಲ್ಲ"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"ಪ್ರಸ್ತುತ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> ಖಾತೆಗೆ ಉಳಿಸಲಾಗುತ್ತಿದೆ. ಬೇರೆ ಖಾತೆಯನ್ನು ಆಯ್ಕೆಮಾಡಲು ಡಬಲ್ ಟ್ಯಾಪ್ ಮಾಡಿ."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ಲಿಂಕ್ ಸಂಪರ್ಕಗಳು"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ರದ್ದುಮಾಡಿ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ಸಂಭವನೀಯ ನಕಲುಗಳು</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ಸಂಭವನೀಯ ನಕಲುಗಳು</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ಈ ಸಂಪರ್ಕ"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ಸಂಭವನೀಯ ನಕಲಿಗಳು"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"ಈ ಸಂಪರ್ಕಗಳು ಅದೇ ವ್ಯಕ್ತಿಯದ್ದಾಗಿರಬಹುದು. ನೀವು ಅವುಗಳನ್ನು ಏಕ ಸಂಪರ್ಕವಾಗಿ ಒಟ್ಟಿಗೆ ಲಿಂಕ್ ಮಾಡಬಹುದು."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"ಲಿಂಕ್ ಮಾಡಲಾದ ಸಂಪರ್ಕಗಳು"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"ನಿಮ್ಮ ಖಾತೆಗಳಿಂದ"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"ಫೋಟೋ ಆಯ್ಕೆಮಾಡಿ"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> ನಿಂದ"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> ಅಳಿಸಿ"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> ಅಳಿಸಿ"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ಅಳಿಸಿ"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="USER_NAME">%s </xliff:g><xliff:g id="ACCOUNT_TYPE">%s </xliff:g> ಅವರಿಂದ ಫೋಟೋ ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="USER_NAME">%s </xliff:g><xliff:g id="ACCOUNT_TYPE">%s </xliff:g> ಅವರಿಂದ ಫೋಟೋ ಗುರುತಿಸಲಾಗಿದೆ"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"ಅಪರಿಚಿತ ಖಾತೆಯಿಂದ ಫೋಟೋವನ್ನು ಗುರುತಿಸಲಾಗಿಲ್ಲ"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"ಅಪರಿಚಿತ ಖಾತೆಯಿಂದ ಫೋಟೋವನ್ನು ಗುರುತಿಸಲಾಗಿದೆ"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"ಸಲಹೆಗಳು"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"ಹೊಸತು"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"ನ್ಯಾವಿಗೇಶನ್ ಡ್ರಾಯರ್ ತೆರೆಯಿರಿ"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"ಡೈರೆಕ್ಟರಿ"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"ಕೆಲಸದ ಡೈರೆಕ್ಟರಿ"</string>
     <string name="local_search_label" msgid="2551177578246113614">"ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳು"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> ಕ್ಕಿಂತಲೂ ಹೆಚ್ಚು ಕಂಡುಬಂದಿದೆ."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> ಅವರಿಗೆ ತ್ವರಿತ ಸಂಪರ್ಕ"</string>
     <string name="missing_name" msgid="8745511583852904385">"(ಯಾವುದೇ ಹೆಸರಿಲ್ಲ)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"ಪದೇ ಪದೇ ಸಂಪರ್ಕಿಸಿರುವುದು"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"ಸಂಪರ್ಕವನ್ನು ವೀಕ್ಷಿಸಿ"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"ಫೋನ್‌ ಸಂಖ್ಯೆಗಳೊಂದಿಗೆ ಎಲ್ಲ ಸಂಪರ್ಕಗಳು"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಸಂಪರ್ಕಗಳು"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"ಅಪ್‌ಡೇಟ್‌ಗಳನ್ನು ವೀಕ್ಷಿಸಿ"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"ಸಿಮ್"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"ಹೆಸರು"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ಅಡ್ಡಹೆಸರು"</string>
-    <string name="full_name" msgid="6602579550613988977">"ಹೆಸರು"</string>
     <string name="name_given" msgid="4280790853455320619">"ಮೊದಲ ಹೆಸರು"</string>
     <string name="name_family" msgid="7466985689626017037">"ಕೊನೆಯ ಹೆಸರು"</string>
     <string name="name_prefix" msgid="59756378548779822">"ಹೆಸರಿನ ಪೂರ್ವಪ್ರತ್ಯಯ"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ಇಮೇಲ್‌ ಮಾಡಿ"</string>
     <string name="email" msgid="5668400997660065897">"ಇಮೇಲ್"</string>
     <string name="postal_street" msgid="8133143961580058972">"ಗಲ್ಲಿ"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"PO ಬಾಕ್ಸ್‌"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"ನೆರೆಹೊರೆ"</string>
     <string name="postal_city" msgid="6597491300084895548">"ನಗರ"</string>
     <string name="postal_region" msgid="6045263193478437672">"ರಾಜ್ಯ"</string>
     <string name="postal_postcode" msgid="572136414136673751">"ಪಿನ್ ಕೋಡ್"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"ಇನ್ನಷ್ಟು ಗುಂಪುಗಳು…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ಸಿಂಕ್‌ನಿಂದ \"<xliff:g id="GROUP">%s</xliff:g>\" ಅನ್ನು ತೆಗೆದುಹಾಕುವುದರಿಂದ ಸಿಂಕ್‌ನಿಂದ ಯಾವುದೇ ಗುಂಪು ಮಾಡದಿರುವ ಸಂಪರ್ಕಗಳನ್ನು ಸಹ ತೆಗೆದುಹಾಕುತ್ತದೆ."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"ಪ್ರದರ್ಶನ ಆಯ್ಕೆಗಳನ್ನು ಉಳಿಸಲಾಗುತ್ತಿದೆ..."</string>
-    <string name="menu_done" msgid="796017761764190697">"ಮುಗಿದಿದೆ"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"ರದ್ದುಮಾಡಿ"</string>
     <string name="listCustomView" msgid="1840624396582117590">"ಕಸ್ಟಮೈಸ್ ವೀಕ್ಷಣೆ"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"ಆಮದಾದ ಸಂಪರ್ಕಗಳನ್ನು ಇಲ್ಲಿ ಉಳಿಸಿ:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"ಸಿಮ್‌ ಕಾರ್ಡ್"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> ರಫ್ತು ಮಾಡುವುದನ್ನು ರದ್ದುಗೊಳಿಸುವುದೇ?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard ಆಮದು/ರಫ್ತು ರದ್ದುಗೊಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"ಅಪರಿಚಿತ ದೋಷ."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" ಅನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ಅನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ರಫ್ತುದಾರರನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ಯಾವುದೇ ರಫ್ತುಮಾಡಬಹುದಾದ ಸಂಪರ್ಕವಿಲ್ಲ."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"ನೀವು ಅಗತ್ಯವಿರುವ ಅನುಮತಿಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿರುವಿರಿ."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"ರಫ್ತು ಮಾಡುವ ಸಂದರ್ಭದಲ್ಲಿ ದೋಷವೊಂದು ಕಂಡುಬಂದಿದೆ: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"ಅಗತ್ಯವಿರುವ ಫೈಲ್‌‌ ಹೆಸರು ತುಂಬಾ ದೊಡ್ಡದಾಗಿದೆ (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ದೋಷ"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"ಸಾಕಷ್ಟು ಮೆಮೊರಿ ಇಲ್ಲ. ಫೈಲ್‌ ತುಂಬಾ ದೊಡ್ಡದಾಗಿರಬಹುದು."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"ಅನಿರೀಕ್ಷಿತ ಕಾರಣದಿಂದಾಗಿ vCard ಅನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"ಈ ಫಾರ್ಮ್ಯಾಟ್ ಬೆಂಬಲಿತವಾಗಿಲ್ಲ."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"ನೀಡಿದ vCard ಫೈಲ್‌(ಗಳ) ಮೆಟಾ ಮಾಹಿತಿಯನ್ನು ಸಂಗ್ರಹಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"ಒಂದು ಅಥವಾ ಹೆಚ್ಚಿನ ಫೈಲ್‌ಗಳನ್ನು ಆಮದು ಮಾಡಲಾಗುವುದಿಲ್ಲ (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> ರಫ್ತು ಮುಗಿದಿದೆ."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"ಸಂಪರ್ಕಗಳ ರಫ್ತು ಮಾಡುವಿಕೆ ಮುಗಿದಿದೆ."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"ಸಂಪರ್ಕಗಳನ್ನು ರಪ್ತು ಮಾಡುವುದನ್ನು ಮುಕ್ತಾಯಗೊಳಿಸಲಾಗಿದೆ, ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಅಧಿಸೂಚನೆ ಕ್ಲಿಕ್ ಮಾಡಿ."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ರಫ್ತುಮಾಡಲಾಗುತ್ತಿದೆ"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ಆಮದು ಮಾಡಲಾಗುತ್ತಿದೆ."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ಡೇಟಾಬೇಸ್ ಮಾಹಿತಿಯನ್ನು ಪಡೆಯಲಾಗಲಿಲ್ಲ."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"ಯಾವುದೇ ರಫ್ತುಮಾಡಿದ ಸಂಪರ್ಕಗಳಿಲ್ಲ. ನಿಮ್ಮ ಫೋನ್‌ನಲ್ಲಿ ನೀವು ಸಂಪರ್ಕಗಳನ್ನು ಹೊಂದಿದ್ದರೆ, ಫೋನ್‌ನಿಂದ ರಫ್ತು ಮಾಡಲಿರುವ ಸಂಪರ್ಕಗಳಿಗೆ ಕೆಲವು ಡೇಟಾ ಪೂರೈಕೆದಾರರು ಅನುಮತಿ ನೀಡದಿರಬಹುದು."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ಯಾವುದೇ ರಫ್ತುಮಾಡಬಹುದಾದ ಸಂಪರ್ಕಗಳು ಇಲ್ಲ."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard ಸಂಯೋಜಕ ಸರಿಯಾಗಿ ಪ್ರಾರಂಭವಾಗಿಲ್ಲ."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ರಫ್ತು ಮಾಡಲಾಗುವುದಿಲ್ಲ"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"ಸಂಪರ್ಕ ಡೇಟಾವನ್ನು ರಫ್ತು ಮಾಡಲಾಗಿಲ್ಲ.\nಕಾರಣ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> ಆಮದು ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard ಡೇಟಾವನ್ನು ಓದಲಾಗಲಿಲ್ಲ"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard ಡೇಟಾ ಓದುವಿಕೆ ರದ್ದಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vCard ಆಮದು ಮುಕ್ತಾಯಗೊಂಡಿದೆ"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ಆಮದು ರದ್ದುಪಡಿಸಲಾಗಿದೆ"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ಅನ್ನು ಸ್ವಲ್ಪ ಸಮಯದಲ್ಲಿ ಆಮದು ಮಾಡಲಾಗುತ್ತದೆ."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ಫೈಲ್‌ ಅನ್ನು ಸ್ವಲ್ಪ ಸಮಯದಲ್ಲಿ ಆಮದು ಮಾಡಲಾಗುತ್ತದೆ."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard ಆಮದು ವಿನಂತಿಯನ್ನು ತಿರಸ್ಕರಿಸಲಾಗಿದೆ. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> ಸ್ವಲ್ಪ ಸಮಯದಲ್ಲಿ ರಫ್ತು ಮಾಡಲಾಗುತ್ತದೆ."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ಫೈಲ್‌ ಅನ್ನು ಸ್ವಲ್ಪ ಸಮಯದಲ್ಲಿ ರಪ್ತು ಮಾಡಲಾಗುತ್ತದೆ."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"ಸಂಪರ್ಕಗಳನ್ನು ಶೀಘ್ರದಲ್ಲೇ ರಪ್ತು ಮಾಡಲಾಗುತ್ತದೆ."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard ರಫ್ತು ವಿನಂತಿಯನ್ನು ತಿರಸ್ಕರಿಸಲಾಗಿದೆ. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"ಸಂಪರ್ಕ"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"ಸ್ಥಳೀಯ ತಾತ್ಕಾಲಿಕ ಸಂಗ್ರಹಣೆಗೆ vCard(ಗಳು) ಅನ್ನು ಸಂಗ್ರಹ ಮಾಡಲಾಗುತ್ತಿದೆ. ನಿಜವಾದ ಆಮದು ಶೀಘ್ರದಲ್ಲೇ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard ಆಮದು ಮಾಡಲಾಗಿಲ್ಲ."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC ಮೂಲಕ ಸ್ವೀಕರಿಸಲಾದ ಸಂಪರ್ಕ"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"ಸಂಪರ್ಕಗಳನ್ನು ರವಾನಿಸುವುದೇ?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"ಸಂಗ್ರಹಿಸಲಾಗುತ್ತಿದೆ"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> ಆಮದು ಮಾಡಲಾಗುತ್ತಿದೆ: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> ಆಮದು ಮಾಡಲಾಗುತ್ತಿದೆ: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf ಫೈಲ್‌ಗೆ ರಫ್ತು ಮಾಡಿ"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"ಈ ಪ್ರಕಾರ ವಿಂಗಡಿಸಿ"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"ಮೊದಲ ಹೆಸರು"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"ನನ್ನ ಮಾಹಿತಿ"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"ನಿಮ್ಮ ಪ್ರೊಫೈಲ್ ಹೊಂದಿಸಿ"</string>
     <string name="setting_about" msgid="7014388749752042863">"ಸಂಪರ್ಕಗಳ ಕುರಿತು"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"ಗೋಚರಿಸುವ ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"ಗೋಚರಿಸುವ ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ವಿಫಲವಾಗಿದೆ."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ಮೆಚ್ಚಿನ ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ"</string>
     <string name="share_contacts" msgid="8109287987498711664">"ಎಲ್ಲ ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಿ"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"ಸಂಪರ್ಕಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ವಿಫಲವಾಗಿದೆ."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"ಹಂಚಿಕೊಳ್ಳಲು ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"ಪ್ರದರ್ಶಿಸಲು ಸಂಪರ್ಕಗಳು"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ಪ್ರದರ್ಶಿಸಲು ಸಂಪರ್ಕಗಳು"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"ಕಸ್ಟಮೈಸ್ ವೀಕ್ಷಣೆ ವಿವರಿಸಿ"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"ವೀಕ್ಷಣೆಯನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"ಉಳಿಸು"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"ಸಂಪರ್ಕಗಳನ್ನು ಹುಡುಕಿ"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"ಮೆಚ್ಚಿನವುಗಳು"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"ಯಾವುದೇ ಸಂಪರ್ಕಗಳಿಲ್ಲ."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"ಪುನರಾವರ್ತನೆಗಳನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"ಸಿಮ್‌ ಕಾರ್ಡ್ ಆಯ್ಕೆಮಾಡಿ"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"ಖಾತೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ"</string>
     <string name="menu_import" msgid="6107961135813836467">"ಆಮದು ಮಾಡಿ"</string>
     <string name="menu_export" msgid="2658783911863503902">"ರಫ್ತು ಮಾಡು"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"ನಿರ್ಬಂಧಿಸಲಾದ ಸಂಖ್ಯೆಗಳು"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g> ಮೂಲಕ"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"ಹುಡುಕಾಟವನ್ನು ನಿಲ್ಲಿಸಿ"</string>
     <string name="description_clear_search" msgid="688023606766232904">"ಹುಡುಕಾಟವನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"ಸಂಪರ್ಕ ಪ್ರದರ್ಶನ ಆಯ್ಕೆಗಳು"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"ಖಾತೆ"</string>
     <string name="set_default_account" msgid="4311613760725609801">"ಕರೆಗಳನ್ನು ಮಾಡಲು ಯಾವಾಗಲೂ ಇದನ್ನು ಬಳಸಿ"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"ಇದರೊಂದಿಗೆ ಕರೆ ಮಾಡಿ"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"ಟಿಪ್ಪಣಿಯೊಂದಿಗೆ ಕರೆ"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"ಕರೆ ಕಳುಹಿಸಲು ಟಿಪ್ಪಣಿಯನ್ನು ಟೈಪ್ ಮಾಡಿ ..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ಕಳುಹಿಸು ಮತ್ತು ಕರೆಮಾಡು"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> ಓದದಿರುವ ಐಟಂಗಳು. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> ಓದದಿರುವ ಐಟಂಗಳು. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"ಬಿಲ್ಡ್ ಆವೃತ್ತಿ"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"ತೆರೆದ ಮೂಲ ಪರವಾನಗಿಗಳು"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ಮುಕ್ತ ಮೂಲ ಸಾಫ್ಟ್‌ವೇರ್‌ಗಾಗಿ ಪರವಾನಗಿ ವಿವರಗಳು"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"ಅಳಿಸಿ"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"ಎಲಿಪ್ಸಿಸ್"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ಸೆ"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> ನಿಮಿ <xliff:g id="SECONDS">%s</xliff:g> ಸೆ"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ಗಂ <xliff:g id="MINUTES_1">%s</xliff:g> ನಿಮಿಷ <xliff:g id="SECONDS">%s</xliff:g> ಸೆ"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> ನಿಮಿ <xliff:g id="SECONDS">%2$s</xliff:g> ಸೆ"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ಗಂ <xliff:g id="MINUTES_1">%2$s</xliff:g> ನಿಮಿಷ <xliff:g id="SECONDS">%3$s</xliff:g> ಸೆ"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ಈ ಶಾರ್ಟ್‌ಕಟ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"ಸಂಪರ್ಕವನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"ಆಮದು"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"ಯಾವುದೇ ಸಂಪರ್ಕವಿಲ್ಲ"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"ಸಿಮ್"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"ಇನ್ನಷ್ಟು ತೋರಿಸಿ"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"ಸಿಮ್ ಕಾರ್ಡ್ ಆಮದು ಮುಕ್ತಾಯಗೊಂಡಿದೆ"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"ಆಮದು ವಿಫಲವಾಗಿದೆ"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"ಸಿಮ್‌ ಕಾರ್ಡ್‌ನಿಂದ ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"ಸಿಮ್‌ ಆಮದು ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 59c4741..125b7ba 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"주소록"</string>
     <string name="contactsList" msgid="8661624236494819731">"주소록"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"연락처 추가"</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="shortcutActivityTitle" msgid="1504383567778497348">"연락처 선택"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"연락처에 추가"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"연락처 선택"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"선택"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"새 연락처 만들기"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"연락처 세부정보"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"삭제"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"사진 변경"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"바로가기 만들기"</string>
-    <string name="menu_call" msgid="3992595586042260618">"연락처로 전화 걸기"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"연락처에 문자 보내기"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"연결 해제"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"연락처 삭제"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"라벨 이름 바꾸기"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"연락처 선택"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"연락처 추가"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"라벨에서 삭제"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"연락처 추가"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"새로 만들기…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"라벨 만들기"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"이 연락처를 여러 연락처로 연결 해제하시겠습니까?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"연결 해제"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"이미 변경한 내용을 저장하고 이 연락처를 여러 연락처로 연결 해제하시겠습니까?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"저장"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"연락처 연결"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> 연결됨"</string>
@@ -83,8 +74,8 @@
       <item quantity="one">연락처 <xliff:g id="COUNT_0">%d</xliff:g>개</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other">연락처 <xliff:g id="COUNT_2">%d</xliff:g>개 · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one">연락처 <xliff:g id="COUNT_0">%d</xliff:g>개 · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other">연락처 <xliff:g id="COUNT_2">%1$d</xliff:g>개 · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one">연락처 <xliff:g id="COUNT_0">%1$d</xliff:g>개 · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google에서 제공"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> 계정 연락처"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"이 연락처를 삭제하면 여러 계정의 세부정보가 삭제됩니다."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"이 연락처를 삭제하시겠습니까?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"삭제"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"변경사항 삭제"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"연락처가 없습니다."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"연락처가 메인 스크린에 추가되었습니다."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g>님이 메인 스크린에 추가되었습니다."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"새 연락처 만들기"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"새 연락처 만들기"</string>
     <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="2228592924476426108">"연락처 목록이 비어 있음"</string>
-    <string name="noGroups" msgid="4607906327968232225">"라벨이 없습니다."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"그룹을 만들려면 계정이 필요합니다."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"이 라벨에 연락처 없음"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"이 계정에 연락처 없음"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"연락처 목록이 비어 있음"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"연락처를 저장하는 중에 오류가 발생했습니다."</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"연락처 사진 변경사항을 저장하지 못했습니다."</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"라벨을 로드하지 못함"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"라벨을 저장했습니다."</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"라벨이 삭제되었습니다."</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"라벨 생성됨"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"라벨을 만들 수 없습니다."</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"메시지 보내기"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"연락처 선택"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"보내기"</string>
-    <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" 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" 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="5948889261993124839">"모두"</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_plus_button" msgid="515164827856229880">"더하기"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"연락처 <xliff:g id="CURRENT_NUMBER">%s</xliff:g>개(총 <xliff:g id="TOTAL_NUMBER">%s</xliff:g>개) 내보내는 중"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"연락처 명단"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"라벨 이름"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> 계정"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"라벨"</string>
-    <string name="change_photo" msgid="8530597935483526383">"변경"</string>
-    <string name="description_star" msgid="2605854427360036550">"즐겨찾기"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"연락처 수정"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"취소"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"뒤로"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"닫기"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"이 연락처와 선택한 연락처를 연결하시겠습니까?"</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="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="7122002148518724139">"연도 포함"</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="4347232421410561500">"계정 추가"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"가져오기"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"새로 만들기…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"삭제"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"취소"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"맞춤설정을 취소하시겠습니까?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"연락처 검색"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"연락처 삭제"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"내 로컬 프로필"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"내 <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> 프로필"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"모든 연락처 표시"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"온라인 서비스와 동기화되므로 휴대전화를 잃어버려도 주소록을 안전하게 유지할 수 있습니다."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"계정 추가"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"잠시 시간을 내어 연락처를 Google에 백업할 계정을 추가하세요."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"새 연락처가 <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>에 저장됩니다."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"새 연락처에 대한 기본 계정 선택:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"간략히 보기"</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="288549957278065542">"개인 사본 작성 중..."</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="TIME_INTERVAL">%s</xliff:g>, <xliff:g id="DATE">%s</xliff:g>"</string>
+    <string name="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="TIME_INTERVAL">%2$s</xliff:g>, <xliff:g id="DATE">%1$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"최근 SMS 내역은 다음과 같습니다. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"최근 통화내역은 다음과 같습니다. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"입력란 더보기"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"연락처 사진 변경"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"연락처 사진 추가"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"편집기를 열지 못했습니다."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"다음에 저장"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g>의 연락처 정보는 수정할 수 없습니다."</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"현재 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>에 저장 중입니다. 다른 계정을 선택하려면 두 번 탭하세요."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">연결된 연락처(<xliff:g id="COUNT">%d</xliff:g>개)</item>
-      <item quantity="one">연결된 연락처</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"연결된 연락처 <xliff:g id="COUNT">%d</xliff:g>개"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g>(<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"연락처 연결"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"취소"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other">중복된 것으로 보이는 연락처 <xliff:g id="COUNT">%d</xliff:g>개</item>
-      <item quantity="one">중복된 것으로 보이는 연락처 1개</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">연결된 연락처 <xliff:g id="COUNT">%d</xliff:g>개</item>
-      <item quantity="one">연결된 연락처 1개</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>개)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"이 연락처"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"중복된 것으로 보이는 연락처"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"이 연락처는 같은 사람일 수 있습니다. 이 연락처들을 하나의 연락처로 연결할 수 있습니다."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"연결된 연락처"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"내 계정의 프로필 사진"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"사진 선택"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"저장된 계정: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> 삭제"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> 삭제"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> 삭제"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>의 사진 선택 안됨"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>의 사진 선택됨"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"알 수 없는 계정의 사진이 선택되지 않음"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"알 수 없는 계정의 사진이 선택됨"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"추천"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"New"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"탐색 창 열기"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"디렉토리"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"직장 디렉토리"</string>
     <string name="local_search_label" msgid="2551177578246113614">"모든 연락처"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g>개 이상 찾았습니다."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g>님의 빠른 주소록"</string>
     <string name="missing_name" msgid="8745511583852904385">"(이름 없음)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"자주 연락하는 사람들의 연락처"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"연락처 보기"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"전화번호가 포함된 모든 연락처"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"직장 프로필 연락처"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"업데이트 보기"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"이름"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"닉네임"</string>
-    <string name="full_name" msgid="6602579550613988977">"이름"</string>
     <string name="name_given" msgid="4280790853455320619">"이름"</string>
     <string name="name_family" msgid="7466985689626017037">"성"</string>
     <string name="name_prefix" msgid="59756378548779822">"경칭"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>에 이메일 보내기"</string>
     <string name="email" msgid="5668400997660065897">"이메일"</string>
     <string name="postal_street" msgid="8133143961580058972">"번지"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"사서함"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"인근 지역"</string>
     <string name="postal_city" msgid="6597491300084895548">"시/군/구"</string>
     <string name="postal_region" msgid="6045263193478437672">"시/도"</string>
     <string name="postal_postcode" msgid="572136414136673751">"우편번호"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"그룹 더보기..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\'<xliff:g id="GROUP">%s</xliff:g>\'을(를) 동기화에서 제거하면 그룹화되지 않은 연락처도 동기화에서 제거됩니다."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"표시 옵션 저장 중...."</string>
-    <string name="menu_done" msgid="796017761764190697">"완료"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"취소"</string>
     <string name="listCustomView" msgid="1840624396582117590">"맞춤설정 보기"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"가져온 주소록을 저장할 계정:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM 카드"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> 내보내기를 취소하시겠습니까?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard 가져오기/내보내기를 취소하지 못했습니다."</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"알 수 없는 오류입니다."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\'<xliff:g id="FILE_NAME">%s</xliff:g>\'을(를) 열 수 없습니다(이유: <xliff:g id="EXACT_REASON">%s</xliff:g>)."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\'<xliff:g id="FILE_NAME">%1$s</xliff:g>\'을(를) 열 수 없습니다(이유: <xliff:g id="EXACT_REASON">%2$s</xliff:g>)."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"내보내기를 시작하지 못했습니다(이유: \'<xliff:g id="EXACT_REASON">%s</xliff:g>\')."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"내보낼 수 있는 연락처가 없습니다."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"필수 권한을 사용 중지했습니다."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"내보내는 중에 오류가 발생했습니다(이유: \'<xliff:g id="EXACT_REASON">%s</xliff:g>\')."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"필수 파일 이름이 너무 깁니다(\'<xliff:g id="FILENAME">%s</xliff:g>\')."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O 오류"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"메모리가 부족합니다. 파일이 너무 크기 때문일 수 있습니다."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"예기치 못한 이유로 인해 vCard를 구문분석하지 못했습니다."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"지원되지 않는 형식입니다."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"지정한 vCard 파일에 대한 메타 정보를 수집하지 못했습니다."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"하나 이상의 파일을 가져오지 못했습니다(%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> 내보내기 완료됨"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"연락처 내보내기 완료"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"연락처 내보내기가 끝나면 알림을 클릭하여 연락처를 공유하세요."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"연락처 데이터 내보내기"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"연락처 데이터를 내보내는 중입니다."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"데이터베이스 정보를 가져오지 못했습니다."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"내보낼 수 있는 연락처가 없습니다. 휴대전화에 연락처가 있다면 일부 데이터 제공업체에서 연락처를 휴대전화에서 내보내지 못하도록 했기 때문일 수 있습니다."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"내보낼 수 있는 연락처가 없습니다."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard 작성기가 제대로 시작되지 않았습니다."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"내보내기 실패"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"주소록 데이터를 내보내지 못했습니다.\n(이유: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\')"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> 가져오는 중"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard 데이터를 읽지 못했습니다."</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard 데이터 읽기 취소"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vCard 가져오기 완료"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> 가져오기 취소"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g>을(를) 곧 가져옵니다."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"파일을 곧 가져옵니다."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard 가져오기 요청이 거부되었습니다. 나중에 다시 시도해 주세요."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g>을(를) 곧 내보냅니다."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"파일을 곧 내보냅니다."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"곧 연락처를 내보냅니다."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard 내보내기 요청이 거부되었습니다. 나중에 다시 시도해 주세요."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"연락처"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard를 로컬 임시 저장공간에 캐시하는 중입니다. 곧 가져오기가 시작됩니다."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard를 가져오지 못했습니다."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC를 통해 받은 연락처"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"주소록을 내보내시겠습니까?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"캐시"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> 가져오는 중: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 가져오는 중: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".VCF 파일로 내보내기"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"정렬 기준"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"이름"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"내 정보"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"프로필 설정"</string>
     <string name="setting_about" msgid="7014388749752042863">"주소록 정보"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"표시되는 연락처 모두 공유"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"표시되는 연락처를 공유하지 못했습니다."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"자주 사용하는 연락처 공유"</string>
     <string name="share_contacts" msgid="8109287987498711664">"모든 연락처 공유"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"연락처를 공유할 수 없습니다."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"공유할 연락처가 없습니다."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"표시할 연락처"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"표시할 연락처"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"맞춤설정 보기 정의"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"보기 맞춤설정"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"저장"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"연락처 검색"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"즐겨찾기"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"연락처가 없습니다."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"자주 연락하는 사람들 목록 삭제"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM 카드 선택"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"계정 관리"</string>
     <string name="menu_import" msgid="6107961135813836467">"가져오기"</string>
     <string name="menu_export" msgid="2658783911863503902">"내보내기"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"차단된 번호"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>(출처: <xliff:g id="SOURCE">%2$s</xliff:g>)"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"검색 중지"</string>
     <string name="description_clear_search" msgid="688023606766232904">"검색창 지우기"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"연락처 표시 옵션"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"계정"</string>
     <string name="set_default_account" msgid="4311613760725609801">"통화에 항상 사용"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"전화 걸 때 사용할 계정"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"메모가 포함된 통화"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"통화에 함께 전송할 메모를 입력하세요."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"보내기 및 통화"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. 읽지 않은 항목 <xliff:g id="COUNT_3">%2$d</xliff:g>개 </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. 읽지 않은 항목 <xliff:g id="COUNT_1">%2$d</xliff:g>개 </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"빌드 버전"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"오픈소스 라이선스"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"오픈소스 소프트웨어 라이선스 세부정보"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"삭제"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"생략 기호"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g>초"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g>분 <xliff:g id="SECONDS">%s</xliff:g>초"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g>시간 <xliff:g id="MINUTES_1">%s</xliff:g>분 <xliff:g id="SECONDS">%s</xliff:g>초"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g>분 <xliff:g id="SECONDS">%2$s</xliff:g>초"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g>시간 <xliff:g id="MINUTES_1">%2$s</xliff:g>분 <xliff:g id="SECONDS">%3$s</xliff:g>초"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"이 바로가기는 사용 중지되었습니다."</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"연락처가 삭제되었습니다."</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"가져오기"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"연결되지 않음"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"더보기"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM 카드 가져오기 완료"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"가져오기 실패"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM 카드에서 연락처를 가져올 수 없습니다."</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM 가져오는 중"</string>
 </resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index f2c2f67..b955bc8 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Байланыштар"</string>
     <string name="contactsList" msgid="8661624236494819731">"Байланыштар"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Байланыш кошуу"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Байланыш"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Түз чалуу"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Түз SMS"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Тез чалуу үчүн байланыш тандаңыз"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Чалуу үчүн номер тандаңыз"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Билдирүү жөнөтүлө турган номерди тандоо"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Байланышты тандоо"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Байланышка кошуу"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Байланыш тандоо"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Тандоо"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Жаңы байланыш түзүү"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Байланыштын чоо-жайы"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Жок кылуу"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Сүрөттү өзгөртүү"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Шилтеме түзүү"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Байланышка чалуу"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Байланышка SMS жазуу"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Ажыратуу"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Байланыштарды алып салуу"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Энбелгинин аталышын өзгөртүү"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Байланыштарды тандоо"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Байланыштарды кошуу"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Энбелгиден алып салуу"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Байланыш кошуу"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Жаңысын түзүү..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Энбелги түзүү"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Бул байланыш ажыратылсынбы?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Ажыратуу"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Сиз киргизген өзгөртүүлөрдү сактап, бул байланышты бир нече байланышка ажыраткыңыз келеби?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Сактоо"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Байланыштрд бириктрүү"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> байланыштырылды"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> байланыш</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> байланыш · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> байланыш · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> байланыш · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> байланыш · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google каттоо эсебинен"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> каттоо эсбнен"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Бул байланыш жок кылынса, анын бир нече каттоо эсебиндеги чоо-жайы өчүп калат."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Бул байланыш жок кылынсынбы?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Жок кылуу"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Өзгөрүүлөрдү жарактан чыгаруу"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Мындай байланыш жок."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Байланыш башкы экранга кошулду."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> Башкы экранга кошулду."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Жаңы байланыш түзүү"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Жаңы байланыш түзүү"</string>
     <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="2228592924476426108">"Байланыштар тизмеңиз бош"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Эч кандай энбелги жок"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Топторду түзүш үчүн эсеп керек."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Бул энбелги коюлган бир дагы байланыш жок"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Бул каттоо эсебинде эч кандай байланыш жок"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Байланыштар тизмеңиз бош"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Байланышты сактоодогу ката."</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Байланыштын сүрөт өзгөрүүлөрү сакталган жок."</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Энбелги жүктөлгөн жок"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Энбелги сакталды"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Энбелги жок кылынды"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Энбелги түзүлдү"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Энбелги түзүлгөн жок"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Билдирүү жөнөтүү"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Байланыштарды тандоо"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Жөнөтүү"</string>
-    <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" 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" 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="5948889261993124839">"Бардыгы"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Энбелгинин аталышы"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> каттоо эсеби"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Энбелги"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Өзгөртүү"</string>
-    <string name="description_star" msgid="2605854427360036550">"сүйүктүү"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Байланышты түзөтүү"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Жок"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Артка"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"жабуу"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Учурдагы байланыш тандалган байланышка шилтемеленсинби?"</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="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="7122002148518724139">"Жылы көрсөтүлсүн"</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="4347232421410561500">"Каттоо эсебин кошуу"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Импорттоо"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Жаңысын түзүү..."</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Жарактан чыгаруу"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Баш тартуу"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Өзгөртүүлөр жокко чыгарылсынбы?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Байланыштардан издеп көрүңүз"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Байланыштарды алып салуу"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Менин жергиликтүү профайлым"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Менин <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> профайлым"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Бардык байланыштарды көрсөтүү"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Телефонуңузду жоготсоңуз дагы, байланыштарыңызды жоготпоңуз: онлайн кызмат менен синхрондоңуз."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Кошуу"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Байланыштарыңыздын камдык көчүрмөсүн Google\'га сактоо үчүн каттоо эсебин кошуңуз."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Жаңы байланыштар <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ичине сакталат."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Жаңы байланыштар үчүн демейки каттоо эсебин тандаңыз:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Азыраак көрүү"</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="288549957278065542">"Жеке көчүрмөсүн түзүү…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"акыркы sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"акыркы чалуу. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Калган талааларды көрсөтүү"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Байланыштын сүрөтүн өзгөртүү"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Байланыштын сүрөтүн кошуу"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Түзөткүч ачылбай калды."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Төмөнкүгө сакталууда"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Байланыш маалыматын түзөтүүгө болбойт: <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Учурда <xliff:g id="ACCOUNT_NAME">%s</xliff:g> ичине сакталууда. Башка каттоо эсебин тандоо үчүн эки жолу таптаңыз."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Бириктирилген байланыштар (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Бириктирилген байланыш</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> байланыш шилтемеленген"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"БАЙЛАНЫШТАРДЫ ШИЛТЕМЕЛӨӨ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ЖОК"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Жупнуска кылса болот</item>
-      <item quantity="one">1 Жупнуска кылса болот</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> шилтемеленген байланыш</item>
-      <item quantity="one">1 шилтемеленген байланыш</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ушул байланыш"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Булар жупнуска болушу мүмкүн"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Бул байланыштар бир эле адам болушу мүмкүн. Аларды жалгыз байланыш кылып бириктирсеңиз болот."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Бириктирилген байланыштар"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Каттоо эсептериңизден"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Сүрөт тандаңыз"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> дегенден"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> жок кылуу"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> жок кылуу"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> жок кылуу"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> дегенден сүрөт белгиленген жк"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> дегенден сүрөт белгиленди"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Белгисиз каттоо эсебинен келген сүрөт тандалган жок"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Белгисиз каттоо эсебинен келген сүрөт тандалды"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Сунуштар"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Жаңы"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Чабыттоо суурмасын ачуу"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Каталог"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Жумуш профилиндеги байланыштар китепчеси"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Бардык байланыштар"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> ашык табылды."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> үчүн тез байланышуу"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Аты жок)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Көп байланышып турган"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Байланыштын чоо-жайын карап көрүү"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Телефон номерлери бар бардык байланыштар"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Жумуш профилиндеги байланыштар"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Жаңыртууларды көрүү"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM-карта"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Аты"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Ылакап аты"</string>
-    <string name="full_name" msgid="6602579550613988977">"Аты"</string>
     <string name="name_given" msgid="4280790853455320619">"Аты"</string>
     <string name="name_family" msgid="7466985689626017037">"Фамилиясы"</string>
     <string name="name_prefix" msgid="59756378548779822">"Атынын префикси"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> электрондук кат жөнөтүү"</string>
     <string name="email" msgid="5668400997660065897">"Электрондук почта"</string>
     <string name="postal_street" msgid="8133143961580058972">"Көчөсү"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Абоненттик почта кутусу"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Району"</string>
     <string name="postal_city" msgid="6597491300084895548">"Шаары"</string>
     <string name="postal_region" msgid="6045263193478437672">"Штаты"</string>
     <string name="postal_postcode" msgid="572136414136673751">"ZIP коду"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Дагы топтор…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" тобун шайкештирүүдөн алып салуу топко кирбеген башка байланыштарды дагы шайкештирүүдөн чыгарып салат."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Көрсөтүү параметрлери сакталууда…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Бүттү"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Баш тартуу"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Ылайыкташтырылган көрүнүш"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Өткөрүлүп алынган байланыштар төмөнкүгө сакталсын:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-карта"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> файлын экспорттоо токтотулсунбу?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard файлдарын импорттоо/экспорттоо токтотулган жок."</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Белгисиз ката."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" ачылбай жатат: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ачылбай жатат: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Экспорттоо башталбай жатат: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Экспортко жарактуу байланыш жок."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Керектүү уруксатты өчүрүп койгонсуз."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Экспорттоо учурунда ката кетти: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Талап кылынган файлдын аты өтө узун (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O катасы"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Эстутум жетишсиз. Файл өтө чоң окшойт."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Аныкталбаган себептерден улам vCard файлынын синтаксикалык анализи аткарылбай жатат."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Бул формат колдоого алынбайт."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Берилген vCard файл(дар)ынын мета маалыматтарын чогултуу мүмкүн болбой жатат."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Бир же эки файл өткөрүлүп алынбай жатат (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> өткөрүлүп бүттү."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Байланыштар өткөрүлүп бүттү."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Байланыштар өткөрүлүп берилди. Байланыштар менен бөлүшүү үчүн эскертмени басыңыз."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Байланыштын чоо-жайы өткөрүлүп берилүүдө"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Байланыштын дайындары өткөрүлүп берилүүдө."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Дайындар базасынын маалыматтары алынбай койду."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Экспорттоло турган байланыштар жок. Эгер байланыштар телефонуңузда болсо, айрым дайындарды камсыздоочулар байланыштарды телефондон экспорттоого жол бербеши мүмкүн."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Экспортко жарактуу байланыш жок."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard түзүүчү туура эмес иштеп баштады."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Экспорттой албады"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Байланыш маалыматтары өткөрүлүп берилген жок.\nСебеби: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> өткөрүлүп алынууда"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard файдарынын дайындарын окуу мүмкүн эмес"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard файлдарынын дайындарын окуу токтотулду"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vCard импорттолуп бүттү"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> файлын импорттоо токтотулду"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> бир аздан кийин өткөрүлүп алынат."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Файл бир аздан кийин өткөрүлүп алынат."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard файлдарынын өткөрүп берүү талабы четке кагылды. Кийинчерээк кайра аракет кылып көрүңүз."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> бир аздан кийин өткөрүлүп берилет."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Файл бир аздан кийин өткөрүлүп берилет."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Байланыштар жакында өткөрүлүп берилет."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard файлдарын өткөрүп берүү талабы четке кагылды. Кийинчерээк кайра аракет кылып көрүңүз."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"байланыш"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard файл(дар)ы жергиликтүү убактылуу сактагычка кэштелип жатат. Андан соң, өткөрүп алуу башталат."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard файлдары өткөрүлүп алынган жок."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC аркылуу"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Байланыштар өткөрүлүп берилсинби?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Кэштөө"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g> өткөрүп алынууда"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g> өткөрүп алынууда"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf файлына өткөрүп берүү"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Төмөнкү боюнча иргөө"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Аты"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Өзүм жөнүндө маалымат"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Профилди жөндөө"</string>
     <string name="setting_about" msgid="7014388749752042863">"Байланыштар жөнүндө"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Көрүнүктүү байланыштарды бөлүшүү"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Көрүнүктүү байланыштар бөлүшүлбөй койду."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Сүйүктүү байланыштарды бөлүшүү"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Бардык байланыштар менен бөлүшүү"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Байланыштар бөлүшүлбөй койду."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Бөлүшө турган байланыш жок."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Көрсөтүлүүчү байланыштар"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Көрсөтүлүүчү байланыштар"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Ылайыкташтырылган көрүнүштү жөндөө"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Көрүнүштү ыңгайлаштыруу"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Сактоо"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Байланыштарды издеңиз"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Cүйүктүүлөр"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Эч бир байланыш жок."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Көп чалуулар тизмесин тазалоо"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM карта тандаңыз"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Каттоо эсептерин башкаруу"</string>
     <string name="menu_import" msgid="6107961135813836467">"Өткөрүп алуу"</string>
     <string name="menu_export" msgid="2658783911863503902">"Өткөрүп берүү"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Бөгөттөлгөн номерлер"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g> аркылуу"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"издөөнү токтотуу"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Издөөнү тазалоо"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Байланышты көрсөтүү параметрлери"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Каттоо эсеби"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Чалууларда ар дайым бул колдонулсун"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Төмөнкү менен чалуу"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Кыска жазуу менен чалуу"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Чалуу менен жөнөтүлө турган кыска жазууну териңиз…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ЖӨНӨТҮҮ ЖАНА ЧАЛУУ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> нерсе окула элек. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> нерсе окула элек. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Куралма версиясы"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Баштапкы коду ачык программалардын уруксаттамалары"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Баштапкы коду ачык программалардын уруксаттамаларынын чоо-жайы"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Жок кылуу"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Эллипс"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мүн. <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> с <xliff:g id="MINUTES_1">%s</xliff:g> мүн <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мүн. <xliff:g id="SECONDS">%2$s</xliff:g> сек"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> с <xliff:g id="MINUTES_1">%2$s</xliff:g> мүн <xliff:g id="SECONDS">%3$s</xliff:g> сек"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Кыска жол өчүрүлдү"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Байланыш алынып салынган"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Өткөрүп алуу"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Байланыш жок"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-карта"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Дагы көрсөтүү"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM-картадан өткөрүп алуу аяктады"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Импорттолбой калды"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM-картадан байланыштар импорттолбой койду"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM-картадан өткөрүлүп алынууда"</string>
 </resources>
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
index 5e2744a..64b87e9 100644
--- a/res/values-land/dimens.xml
+++ b/res/values-land/dimens.xml
@@ -14,14 +14,8 @@
      limitations under the License.
 -->
 <resources>
-    <dimen name="dialpad_digits_height">66dip</dimen>
-    <dimen name="dialpad_digits_text_size">28sp</dimen>
-    <dimen name="dialpad_digits_margin_bottom">50dip</dimen>
     <dimen name="editor_type_label_width">120dip</dimen>
 
-    <!-- Top margin of the text message when provider status is busy -->
-    <dimen name="update_contact_list_top_margin">120dp</dimen>
-
     <!-- Top padding for the image for empty group view-->
     <dimen name="empty_group_view_image_padding_top">0dp</dimen>
 
diff --git a/res/values-land/integers.xml b/res/values-land/integers.xml
index 4b26d4c..bc490bb 100644
--- a/res/values-land/integers.xml
+++ b/res/values-land/integers.xml
@@ -23,8 +23,6 @@
     <!-- Top margin ratio for the image for empty account view -->
     <integer name="empty_account_view_image_margin_divisor">6</integer>
 
-    <integer name="contact_tile_column_count_in_favorites">3</integer>
-
     <!-- The number of characters in the snippet before we need to tokenize and ellipse. -->
     <integer name="snippet_length_before_tokenize">60</integer>
 </resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 4b52822..14b0f9c 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"ລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="contactsList" msgid="8661624236494819731">"ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"ເພີ່ມລາຍຊື່ຜູ້ຕິດຕໍ່"</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="shortcutActivityTitle" msgid="1504383567778497348">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"ເພີ່ມໃສ່​ລາຍຊື່​ຜູ່ຕິດຕໍ່"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ເລືອກ"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"ລາຍລະອຽດລາຍຊື່ຜູ່ຕິດຕໍ່"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"ລຶບ"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"ປ່ຽນຮູບ"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"ສ້າງທາງລັດ"</string>
-    <string name="menu_call" msgid="3992595586042260618">"ໂທຫາລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"ສົ່ງຂໍ້ຄວາມຫາລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"ບໍ່ລິ້ງ"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"ລຶບລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"ປ່ຽນຊື່ປ້າຍກຳກັບ"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"ເພີ່ມລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"ລຶບອອກຈາກປ້າຍກຳກັບ"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"ເພີ່ມເປັນລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"ສ້າງໃໝ່…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ສ້າງປ້າຍກຳກັບ"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"ຖອນ​ລິ້ງລາຍຊື່ຕິດຕໍ່ນີ້ໄປ​ໃສ່ຫຼາຍລາຍຊື່ຕິດຕໍ່ບໍ?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ບໍ່ລິ້ງ"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ທ່ານ​ຢາກ​ຈະ​ບັນ​ທຶກ​ການ​ປ່ຽນ​ແປງ​ທີ່​ທ່ານ​ປ່ຽນ​ແປງ​ແລ້ວ ແລະ ຖອນລິ້ງ​​ລາຍ​ຊື່​ຕິດ​ຕໍ່ນີ້​ໄປ​ໃສ່​ຫຼາຍ​ລາຍ​ຊື່​ຕິດ​ຕໍ່ບໍ?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"ບັນທຶກ"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"ລິ້ງ​ລາຍ​ຊື່​​ຜູ້ຕິດ​ຕໍ່"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ທ່ານຕ້ອງການລິ້ງກັບ <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"ເຊື່ອມໂຍງ <xliff:g id="NAME">%s</xliff:g> ແລ້ວ"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ລາຍ​ຊື່ຜູ້ຕິດຕໍ່</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> ລາຍຊື່ຜູ້ຕິດຕໍ່ · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ລາຍຊື່ຜູ້ຕິດຕໍ່ · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ລາຍຊື່ຜູ້ຕິດຕໍ່ · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ລາຍຊື່ຜູ້ຕິດຕໍ່ · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"ຈາກ Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"ຈາກ <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ການລຶບລາຍຊື່ຕິດຕໍ່ນີ້ຈະລຶບຂໍ້ມູນຈາກຫຼາຍບັນຊີ."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"ລຶບລາຍ​ຊື່​ຕິດ​ຕໍ່​ນີ້ບໍ?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"​ລຶບ"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"ຍົກເລີກການແກ້ໄຂ"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"ເພີ່ມລາຍຊື່ຕິດຕໍ່ໃສ່ໜ້າຈໍຫຼັກແລ້ວ."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ເພີ່ມ​ໃສ່​ໜ້າ​ຈໍ​ຫຼັກ​ແລ້ວ."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"ສ້າງລາຍຊື່ຜູ້ຕິດຕໍ່ໃໝ່"</string>
     <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="2228592924476426108">"ລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງທ່ານຫວ່າງເປົ່າ"</string>
-    <string name="noGroups" msgid="4607906327968232225">"ບໍ່ມີປ້າຍກຳກັບ."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"ເພື່ອສ້າງກຸ່ມ ທ່ານຈະຕ້ອງມີບັນຊີກ່ອນ."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ມີປ້າຍກຳກັບນີ້"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່ໃນບັນຊີນີ້"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"ລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງທ່ານຫວ່າງເປົ່າ"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"ເກີດຄວາມຜິດພາດໃນການບັນທຶກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"ບໍ່ສາມາດບັນທຶກການປ່ຽນແປງຮູບລາຍຊື່ຜູ້ຕິດຕໍ່ໄດ້"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ໂຫຼດປ້າຍກຳກັບບໍ່ສຳເລັດ"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"ບັນທຶກປ້າຍກຳກັບແລ້ວ"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ລຶບປ້າຍກຳກັບແລ້ວ"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"ສ້າງປ້າຍກຳກັບແລ້ວ"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"ບໍ່ສາມາດສ້າງປ້າຍກຳກັບໄດ້"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"ສົ່ງຂໍ້ຄວາມ"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"ເລືອກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"ສົ່ງ"</string>
-    <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" 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" 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="5948889261993124839">"ທັງໝົດ"</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_plus_button" msgid="515164827856229880">"ບວກ"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"ລາຍຊື່ຜູ່ຕິດຕໍ່ <xliff:g id="CURRENT_NUMBER">%s</xliff:g> ຈາກທັງໝົດ  <xliff:g id="TOTAL_NUMBER">%s</xliff:g> ລາຍຊື່"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"ຊື່ຂອງລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງທ່ານ"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"ຊື່ປ້າຍກຳກັບ"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ບັນ​ຊີ"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"ປ້າຍກຳກັບ"</string>
-    <string name="change_photo" msgid="8530597935483526383">"ປ່ຽນແປງ"</string>
-    <string name="description_star" msgid="2605854427360036550">"ໝາຍດາວ"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"ແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"ຍົກເລີກ"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"ກັບຄືນ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ປິດ"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"ລິ້ງລາຍຊື່ຜູ້ຕິດຕໍ່ປະ​ຈະ​ບັນກັບລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ເລືອກ​ໄວ້?"</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="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="7122002148518724139">"ລວມ​ປີ​ນຳ"</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="4347232421410561500">"ເພີ່ມບັນຊີ"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"ນຳເຂົ້າ"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"ສ້າງໃໝ່…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ຍົກເລີກ"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ຍົກເລີກ"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"ປິດການປັບແຕ່ງບໍ?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"ຊອກຫາລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"ລຶບລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"ໂປຣໄຟລ໌ໃນອຸປະກອນຂອງຂ້ອຍ"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"ໂປຣໄຟລ໌ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ຂອງຂ້ອຍ"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"ສະແດງລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"ເກັບຮັກສາລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງທ່ານໄວ້ຢ່າງປອດໄພ ເຖິງແມ່ນວ່າໂທລະສັບຂອງທ່ານຈະເສຍກໍຕາມ ດ້ວຍການຊິ້ງຂໍ້ມູນກັບບໍລິການອອນລາຍ."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ເພີ່ມບັນຊີ"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"ໃຊ້ເວລາເລັກນ້ອຍເພື່ອເພີ່ມບັນຊີທີ່ຈະໃຊ້ສຳຮອງຂໍ້ມູນລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງທ່ານໄປໃສ່ Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ໃໝ່​ຈະ​ຖືກ​ບັນ​ທຶກ​ໃສ່ <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ເລືອກ​ບັນ​ຊີ​ເລີ່ມຕົ້ນ​ສຳ​ລັບ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ໃໝ່:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"​​ເບິ່ງ​ໜ້ອຍ​ລົງ"</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="288549957278065542">"ກຳລັງສ້າງສຳເນົາສ່ວນໂຕ..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"SMS ຫຼ້າ​ສຸດ. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"ການ​ໂທຫຼ້າ​ສຸດ. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"ຊ່ອງຂໍ້ມູນເພີ່ມເຕີມ"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"ປ່ຽນລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"ເພີ່ມລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"ເປີດຕົວຕັດຕໍ່ບໍ່ສຳເລັດ."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"ກຳລັງບັນທຶກໃສ່"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"ຂໍ້ມູນລາຍຊື່ຜູ້ຕິດຕໍ່ຈາກ <xliff:g id="ACCOUNT">%s</xliff:g> ແມ່ນບໍ່ສາມາດແກ້ໄຂໄດ້"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"ຕອນນີ້ກຳລັງບັນທຶກໃສ່ <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. ແຕະສອງເທື່ອເພື່ອເລືອກບັນຊີອື່ນ."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">ລາຍຊື່ຕິດຕໍ່ທີ່ລິ້ງແລ້ວ (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">ລາຍຊື່ຕິດຕໍ່ທີ່ລິ້ງແລ້ວ</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> ລາ​ຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ລິ້ງ​ລາຍ​ຊື່​ຕິດ​ຕໍ່"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ຍົກ​ເລີກ​"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ການ​ຊ້ຳ​ກັນ​ທີ່​ເປັນ​ໄປ​ໄດ້</item>
-      <item quantity="one">1 ການ​ຊ້ຳ​ກັນ​ທີ່​ເປັນ​ໄປ​ໄດ້</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ລາຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ</item>
-      <item quantity="one">1 ລາຍ​ຊື່​ຕິດ​ຕໍ່​ລິ້ງ​ແລ້ວ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ນີ້"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ເປັນ​ໄປ​ໄດ້​ວ່າມີ​ການ​ຊ້ຳ​ກັນ"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ເຫຼົ່າ​ນີ້​ອາດ​ຈະ​ເປັນ​ຄົນ​ດຽວ​ກັນ. ທ່ານ​ສາ​ມາດ​ລິ້ງ​ພວກ​ມັນ​ເຂົ້າ​ກັນ​ເປັນ​ບັນ​ຊີ​ດຽວ​ໄດ້."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"ລາຍຊື່ຕິດຕໍ່ທີ່ລິ້ງແລ້ວ"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"ຈາກ​ບັນ​ຊີ​ຂອງ​ທ່ານ"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"ເລືອກ​ຮູບ"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"ຈາກ <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"ລຶບ <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"ລຶບ <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"ລຶບ <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"ຮູບຖ່າຍ​ຈາກ <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ບໍ່​ໄດ້​ຮັບ​ການກວດ"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"ຮູບຖ່າຍ​ຈາກ <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ໄດ້​ຮັບ​ການກວດ​ແລ້ວ"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"ບໍ່ໄດ້ໝາຍເອົາຮູບຖ່າຍຈາກບັນຊີທີ່ບໍ່ຮູ້ຈັກແລ້ວ"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"ໝາຍເອົາຮູບຖ່າຍຈາກບັນຊີທີ່ບໍ່ຮູ້ຈັກແລ້ວ"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"ຄຳແນະນຳ"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"ໃໝ່"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"ເປີດແຖບການນຳທາງ"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"ໄດເຣັກທໍຣີ"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"ໄດເຣັກທໍຣີບ່ອນເຮັດວຽກ"</string>
     <string name="local_search_label" msgid="2551177578246113614">"ລາຍຊື່ຜູ້ຕິດຕໍ່ທັງໝົດ"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"ພົບຫຼາຍກວ່າ <xliff:g id="COUNT">%d</xliff:g> ລາຍການ."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"ຂໍ້ມູນຕິດຕໍ່ດ່ວນສຳລັບ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(ບໍ່ມີຊື່)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"ລາຍຊື່ທີ່ຕິດຕໍ່ເລື້ອຍໆ"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"ເບິ່ງລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດທີ່ມີເບີໂທລະສັບ"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"ລາຍຊື່ຜູ້ຕິດຕໍ່ຂອງໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"ເບິ່ງອັບເດດ"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"ຊື່"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ຊື່ຫຼິ້ນ"</string>
-    <string name="full_name" msgid="6602579550613988977">"ຊື່"</string>
     <string name="name_given" msgid="4280790853455320619">"ຊື່"</string>
     <string name="name_family" msgid="7466985689626017037">"ນາມສະກຸນ"</string>
     <string name="name_prefix" msgid="59756378548779822">"ຄຳນຳໜ້າຊື່"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"ສົ່ງອີເມວຫາ <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"ອີເມວ"</string>
     <string name="postal_street" msgid="8133143961580058972">"ຖະໜົນ"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"ຕູ້ໄປສະນີ:"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"ບໍລິເວນໃກ້ຄຽງ"</string>
     <string name="postal_city" msgid="6597491300084895548">"ເມືອງ"</string>
     <string name="postal_region" msgid="6045263193478437672">"ລັດ"</string>
     <string name="postal_postcode" msgid="572136414136673751">"ລະຫັດ ZIP"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"ກຸ່ມເພີ່ມເຕີມ..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ການລຶບກຸ່ມ \"<xliff:g id="GROUP">%s</xliff:g>\" ອອກຈາກການຊິ້ງຂໍ້ມູນ ຈະເປັນການລຶບລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ບໍ່ໄດ້ຢູ່ໃນກຸ່ມ ອອກຈາກການຊິ້ງຂໍ້ມູນນຳ."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"ກຳລັງບັນທຶກໂຕເລືອກການສະແດງຜົນ..."</string>
-    <string name="menu_done" msgid="796017761764190697">"ແລ້ວໆ"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"ຍົກເລີກ"</string>
     <string name="listCustomView" msgid="1840624396582117590">"ມຸມມອງແບບປັບແຕ່ງ"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"ບັນທຶກລາຍຊື່ຕິດຕໍ່ນຳເຂົ້າແລ້ວໃສ່:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"ຊິມກາດ"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"ຍົກເລີກການສົ່ງອອກ <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"ບໍ່ສາມາດຍົກເລີກການ ນຳເຂົ້າ/ສົ່ງອອກ vCard ໄດ້"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"ຄວາມຜິດພາດທີ່ບໍ່ຮູ້ເຫດຜົນ."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"ບໍ່ສາມາດເປີດ \"<xliff:g id="FILE_NAME">%s</xliff:g>\" ໄດ້: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"ບໍ່ສາມາດເປີດ \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ໄດ້: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ບໍ່ສາມາດເລີ່ມໂປຣແກຣມສົ່ງອອກໄດ້: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ບໍ່ມີລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ສາມາດສົ່ງອອກໄດ້."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"ທ່ານປິດການນຳໃຊ້ສິດອະນຸຍາດທີ່ຈຳເປັນໄວ້ແລ້ວ."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"ເກີດຄວາມຜິດພາດໃນລະຫວ່າງການສົ່ງອອກ: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"ຊື່ທີ່ຕ້ອງການນັ້ນຍາວເກີນໄປ (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ຜິດພາດ"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"ໜ່ວຍຄວາມຈຳບໍ່ພໍ. ເປັນໄປໄດ້ວ່າໄຟລ໌ອາດໃຫຍ່ເກີນໄປ."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"ບໍ່ສາມາດວິເຄາະຂໍ້ມູນ vCard ເນື່ອງຈາກເຫດຜົນທີ່ບໍ່ຄາດຄິດ."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"ບໍ່ຮອງຮັບຮູບແບບທີ່ເລືອກ."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"ບໍ່ສາມາດເກັບກຳຂໍ້ມູນ meta ຂອງໄຟລ໌ vCard ທີ່ລະບຸໄດ້."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"ມີນຶ່ງໄຟລ໌ ຫຼືຫຼາຍກວ່ານັ້ນບໍ່ສາມາດຖືກນຳເຂົ້າໄດ້ (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"ການສົ່ງອອກ <xliff:g id="FILENAME">%s</xliff:g> ສິ້ນສຸດແລ້ວ."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"ສຳເລັດການສົ່ງອອກລາຍຊື່ອແລ້ວ."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"ເມື່ອສຳເລັດການສົ່ງອອກລາຍຊື່ຜູ້ຕິດຕໍ່ແລ້ວ, ໃຫ້ຄລິກການແຈ້ງເຕືອນເພື່ອແບ່ງປັນລາຍຊື່ຜູ້ຕິດຕໍ່."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"ກຳລັງສົ່ງອອກຂໍ້ມູນລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"ຂໍ້ມູນລາຍຊື່ຜູ້ຕິດຕໍ່ກຳລັງຖືກສົ່ງອອກ."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ບໍ່ສາມາດດຶງຂໍ້ມູນຂອງຖານຂໍ້ມູນ."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"ບໍ່ມີລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ສາມາດສົ່ງອອກໄດ້. ຫາກທ່ານມີລາຍຊື່ຜູ່ຕິດຕໍ່ໃນໂທລະສັບຂອງທ່ານ ແຕ່ບໍ່ສາມາດສົ່ງອອກໄດ້ ກໍອາດເປັນເພາະບາງຜູ່ໃຫ້ບໍລິການຂໍ້ມູນບໍ່ອະນຸຍາດ ໃຫ້ສົ່ງລາຍຊື່ຜູ່ຕິດຕໍ່ອອກຈາກໂທລະສັບໄດ້."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ສາມາດສົ່ງອອກໄດ້."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"ໂປຣແກຣມຂຽນ vCard ຖືກເລີ່ມຢ່າງບໍ່ຖືກຕ້ອງ."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ບໍ່​ສາ​ມາດ​ສົ່ງ​ອອກໄດ້"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"ບໍ່ໄດ້ສົ່ງຂໍ້ມູນລາຍຊື່ຜູ່ຕິດຕໍ່ອອກເທື່ອ.\nເຫດຜົນ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"ກຳລັງນຳເຂົ້າ <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"ບໍ່ສາມາດອ່ານຂໍ້ມູນ vCard ໄດ້"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"ການອ່ານຂໍ້ມູນ vCard ຖືກຍົກເລີກແລ້ວ"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"ສິ້ນສຸດການນຳເຂົ້າໄຟລ໌ vCard <xliff:g id="FILENAME">%s</xliff:g> ແລ້ວ"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"ການນຳເຂົ້າ <xliff:g id="FILENAME">%s</xliff:g> ຖືກຍົກເລີກແລ້ວ"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ຈະຖືກນຳເຂົ້າໄວໆນີ້."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ໄຟລ໌ຈະຖືກນຳເຂົ້າໃນໄວໆນີ້."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"ຄຳຂໍການນຳເຂົ້າ vCard ຖືກປະຕິເສດ. ກະລຸນາລອງໃໝ່ໃນພາຍຫຼັງ."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> ຈະຖືກສົ່ງອອກໄວໆນີ້."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ໄຟລ໌ຈະຖືກສົ່ງອອກໄວໆນີ້."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"ລາຍຊື່ຜູ້ຕິດຕໍ່ຈະຖືກສົ່ງອອກໃນໄວໆນີ້."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"ຄຳຂໍການສົ່ງ vCard ອອກ ຖືກປະຕິເສດ. ກະລຸນາລອງໃໝ່ໃນພາຍຫຼັງ."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"ກຳລັງເກັບຂໍ້ມູນ vCard ໃສ່ບ່ອນຈັດເກັບຂໍ້ມູນຊົ່ວຄາວໃນອຸປະກອນ. ການນຳເຂົ້າຈະເລີ່ມຂຶ້ນໃນໄວໆນີ້."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"ບໍ່ສາມາດນຳເຂົ້າ vCard ໄດ້."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ໄດ້ຮັບຜ່ານ NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"ສົ່ງອອກລາຍຊື່ຜູ່ຕິດຕໍ່?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"ກຳລັງເກັບຂໍ້ມູນ"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"ກຳລັງນຳເຂົ້າ <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"ກຳລັງນຳເຂົ້າ <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"ສົ່ງອອກຫາໄຟລ໌ .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"ຮຽງລຳດັບຕາມ"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"ຊື່"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"ຂໍ້ມູນຂອງຂ້ອຍ"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"ຕັ້ງຄ່າໂປຣໄຟລ໌ຂອງທ່ານ"</string>
     <string name="setting_about" msgid="7014388749752042863">"ກ່ຽວກັບລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"ແບ່ງປັນລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ເບິ່ງເຫັນໄດ້"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"ແບ່ງປັນລາຍຊື່ຕິດຕໍ່ສາມາດເຫັນໄດ້ບໍ່ສຳເລັດ."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ແບ່ງປັນລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ມັກ"</string>
     <string name="share_contacts" msgid="8109287987498711664">"ແບ່ງປັນທຸກລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"ແບ່ງປັນລາຍຊື່ຜູ້ຕິດຕໍ່ບໍ່ສຳເລັດ."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່ທີ່ຈະແບ່ງປັນ."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"ລາຍຊື່ຜູ້ຕິດຕໍ່ເພື່ອສະແດງ"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທີ່ຈະສະແດງ"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"ກຳນົດມຸມມອງແບບປັບແຕ່ງ"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"ປັບແຕ່ງມຸມມອງ"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"ບັນທຶກ"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"ຊອກຫາລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"ລາຍການທີ່ມັກ"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"ບໍ່ມີລາຍຊື່ຜູ້ຕິດຕໍ່."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"ລຶບລາຍຊື່ທີ່ຕິດຕໍ່ເລື້ອຍໆ"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"ເລືອກ SIM ກາດ"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"ຈັດການບັນຊີ"</string>
     <string name="menu_import" msgid="6107961135813836467">"ນຳເຂົ້າ"</string>
     <string name="menu_export" msgid="2658783911863503902">"ສົ່ງອອກ"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"ເບີໂທທີ່ບລັອກໄວ້"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> ຜ່ານ <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"ຢຸດການຊອກຫາ"</string>
     <string name="description_clear_search" msgid="688023606766232904">"ລຶບ​ການ​ຊອກ​ຫາ"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"ຕົວເລືອກການສະແດງລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"ບັນຊີ"</string>
     <string name="set_default_account" msgid="4311613760725609801">"ໃຊ້ຊິມນີ້ເພື່ອການໂທທຸກເທື່ອ"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"ໂທດ້ວຍ"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"ໂທດ້ວຍບັນທຶກ"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"ພິມບັນທຶກເພື່ອສົ່ງດ້ວຍການໂທ..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ສົ່ງ ແລະ ໂທ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> ລາຍການບໍ່ທັນໄດ້ອ່ານ. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> ລາຍການບໍ່ທັນໄດ້ອ່ານ. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"ເວີຊັນສ້າງ"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"ໃບອະນຸຍາດໂອເພນຊອດ"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ລາຍລະອຽດໃບອະນຸຍາດໂອເພນຊອດ"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"ລຶບ"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"ເຄື່ອງໝາຍສາມຈໍ້າ"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ວິ"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> ນທ <xliff:g id="SECONDS">%s</xliff:g> ວິ"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ຊມ <xliff:g id="MINUTES_1">%s</xliff:g> ນທ <xliff:g id="SECONDS">%s</xliff:g> ວິ"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> ນທ <xliff:g id="SECONDS">%2$s</xliff:g> ວິ"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ຊມ <xliff:g id="MINUTES_1">%2$s</xliff:g> ນທ <xliff:g id="SECONDS">%3$s</xliff:g> ວິ"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ທາງລັດນີ້ຖືກປິດການນຳໃຊ້ແລ້ວ"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"ລຶບລາຍຊື່ຜູ້ຕິດຕໍ່ອອກແລ້ວ"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"ນຳເຂົ້າ"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"ບໍ່ມີການເຊື່ອມຕໍ່"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"ຊິມ"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"ສະແດງເພີ່ມເຕີມ"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"ນຳເຂົ້າ SIM ສຳເລັດແລ້ວ"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"ນຳເຂົ້າບໍ່ສຳເລັດ"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"ບໍ່ສາມາດນຳເຂົ້າລາຍຊື່ຜູ້ຕິດຕໍ່ຈາກຊິມກາດໄດ້"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"ກຳລັງນຳເຂົ້າຈາກ SIM"</string>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index e0a1770..67f28d5 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontaktai"</string>
     <string name="contactsList" msgid="8661624236494819731">"Adresinė"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Pridėti kontaktą"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Adresatas"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Tiesioginis numerio rinkimas"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Tiesioginis pranešimas"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Pasirinkti adresato nuorodą"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Pasirinkite numerį, kuriuo skambinsite"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Pasirinkti numerį, kuriuo bus siunčiamas pranešimas"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Pasirinkti kontaktą"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Pridėti prie kontakto"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Pasirinkti kontaktą"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Pasirinkti"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Kurti naują kontaktą"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Išsami adresato informacija"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Apie"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Naujiniai"</string>
     <string name="searchHint" msgid="8482945356247760701">"Ieškoti adresatų"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Žiūrėti adresatą"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Pridėti prie adresyno"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Pašalinti iš adresyno"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Pašalinta iš mėgstamiausių"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Sukurti spartųjį klavišą"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Skambinti adresatui"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Siųsti pranešimą adresatui"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Atsieti"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Pašalinti kontaktus"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Pervardyti etiketę"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Pasirinkti kontaktus"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Pridėti kontaktų"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Pašalinti iš etiketės grupės"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Pridėti kontaktą"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Sukurti naują..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Sukurti etiketę"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Atsieti šį kontaktą suskaidant į kelis kontaktus?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Atsieti"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Ar norite išsaugoti jau atliktus pakeitimus ir atsieti šį kontaktą suskaidydami į kelis kontaktus?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Išsaugoti"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontaktų susiejimas"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"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 kontaktai"</string>
     <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> susietas (-a)"</string>
@@ -87,10 +78,10 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktų</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> kontaktas   <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> kontaktai   <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="many"><xliff:g id="COUNT_2">%d</xliff:g> kontakto   <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontaktų   <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktas   <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktai   <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakto   <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktų   <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Iš „Google“"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Iš <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -107,21 +98,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Ištrynus šį kontaktą, bus ištrinta kelių paskyrų informacija."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Ištrinti šį kontaktą?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Ištrinti"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Atmesti pakeitimus"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontaktas neegzistuoja."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontaktas pridėtas prie pagrindinio ekrano."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> pridėtas (-a) prie pagrindinio ekrano."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Kurti naują kontaktą"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Kurti naują kontaktą"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Jokie paveikslėliai nepasiekiami naudojant planšetinį kompiuterį."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Telefone nėra galimų paveikslėlių."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakto nuotrauka"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Tinkintas etiketės pavadinimas"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Skambinti tiesiogiai į balso paštą"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Pašalinti nuotrauką"</string>
     <string name="noContacts" msgid="2228592924476426108">"Kontaktų sąrašas tuščias"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Nėra jokių etikečių."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Jums reikia paskyros, kad galėtumėte kurti grupes."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Nėra kontaktų su šia etikete"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Šioje paskyroje nėra jokių kontaktų"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Kontaktų sąrašas tuščias"</string>
@@ -134,7 +119,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Išsaugant kontaktą įvyko klaida"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nepavyko išsaugoti kontakto nuotraukos pakeitimų"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nepavyko įkelti etiketės"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etiketė išsaugota"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiketė ištrinta"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etiketė sukurta"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nepavyko sukurti etiketės"</string>
@@ -149,35 +133,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Siųsti pranešimą"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kontaktų pasirinkimas"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Siųsti"</string>
-    <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" 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" 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="5948889261993124839">"Visi"</string>
-    <string name="callBack" msgid="5498224409038809224">"Perskambinti"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Skambinti dar kartą"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Grįžtamasis skambutis"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Pridėti „<xliff:g id="EMAIL">%s</xliff:g>“ prie adresatų?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plius"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> iš <xliff:g id="TOTAL_NUMBER">%s</xliff:g> adresatų"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Kontaktų vardai"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Nerasta jokių programų šiam veiksmui apdoroti."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Spustelėkite, kad grįžtumėte į ankstesnį ekraną"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Pridėti telefono numerį"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Pridėti el. pašto adresą"</string>
@@ -198,52 +156,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etiketės pavad."</string>
     <string name="audio_chat" msgid="2535716629358298691">"Balso pokalbis"</string>
     <string name="video_chat" msgid="1872255818640336072">"Vaizdo pokalbis"</string>
-    <string name="connections" msgid="8098440723172028350">"Ryšiai"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Pridėti ryšį"</string>
-    <string name="recent" msgid="2659189233141493004">"Naujausi"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Vėliausi naujiniai"</string>
     <string name="account_type_format" msgid="718948015590343010">"„<xliff:g id="SOURCE">%1$s</xliff:g>“ kontaktas"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"„<xliff:g id="SOURCE">%1$s</xliff:g>“ paskyra"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Fotografuoti"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Iš naujo fotografuoti"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Pasirinkti nuotrauką"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Pasirinkti naują nuotrauką"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Pasirinkti visus"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Atšaukti visų pasirinkimą"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Pridėti naują"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Pridėti organizaciją"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiketė"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Pakeisti"</string>
-    <string name="description_star" msgid="2605854427360036550">"įtraukti į adresyną"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Redaguoti kontaktą"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Atšaukti"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Atgal"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"uždaryti"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Susieti 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Pridėti prie „Mano kontaktų“"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"„<xliff:g id="TYPE">%1$s</xliff:g>“ katalogas"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Nustatymai"</string>
     <string name="menu_settings" msgid="377929915873428211">"Nustatymai"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Pridėti prie kontaktų"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Pridėti prie kontakto"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Uždaryti"</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="7122002148518724139">"Įtraukti metus"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontaktas"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Įkeliama..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Sukurti naują kontaktą"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Pridėti paskyrą"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importuoti"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Sukurti naują..."</string>
@@ -257,14 +191,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Atmesti"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Atšaukti"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Atmesti tinkinimo veiksmus?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Ieškokite kontaktų"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Pašalinti kontaktus"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Mano vietos profilis"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Mano „<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>“ profilis"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Pateikiami visi kontaktai"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Užtikrinkite kontaktų saugumą net praradę telefoną: sinchronizuokite su internetine paslauga."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Pridėti paskyrą"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Skirkite šiek tiek laiko ir pridėkite paskyrą, kurią naudojant bus kuriama atsarginė kontaktų kopija sistemoje „Google“."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nauji kontaktai bus išsaugoti paskyroje <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Pasirinkite numatytąją naujų kontaktų paskyrą:"</string>
@@ -283,13 +213,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Žr. mažiau"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Naujausi"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Apie"</string>
-    <string name="send_message" msgid="8938418965550543196">"Siųsti pranešimą"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Kuriama asmeninė kopija..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Rytoj"</string>
     <string name="today" msgid="8041090779381781781">"Šiandien"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Šiandien, <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Rytoj, <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Įvykis be pavadinimo)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Nustatyti"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"TP"</string>
@@ -299,20 +228,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Svetainė"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Įvykis"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Ryšys"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Paskyra"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Vardas"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"El. paštas"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefonas"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Spustelėkite, kad išskleistumėte kontaktų redagavimo priemonę."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Spustelėkite, kad sutrauktumėte kontaktų redagavimo priemonę."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"nuorodos į vietovę"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"Neseniai atsiuntė SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Spustelėkite, kad atsakytumėte."</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"Neseniai atsiuntė SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Spustelėkite, kad atsakytumėte."</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"gaunamieji"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"siunčiamieji"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"praleistieji"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"Neseniai skambino. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Daugiau laukų"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Pakeisti kontakto nuotrauką"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Pridėti kontakto nuotrauką"</string>
@@ -320,49 +245,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Nepavyko atidaryti redagavimo priemonės."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Išsaugoma"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontakto informacijos iš <xliff:g id="ACCOUNT">%s</xliff:g> redaguoti negalima"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Šiuo metu išsaugoma paskyroje <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dukart palieskite, kad pasirinktumėte kitą paskyrą."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="one">Susieti kontaktai (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="few">Susieti kontaktai (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="many">Susieti kontaktai (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Susieti kontaktai (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Susietų kontaktų: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"SUSIETI KONTAKTUS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ATŠAUKTI"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> galima tiksli kopija</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> galimos tikslios kopijos</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> galimos tikslios kopijos</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> galimų tikslių kopijų</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> susietas kontaktas</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> susieti kontaktai</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> susieto kontakto</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> susietų kontaktų</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Šis kontaktas"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Galimos tikslios kopijos"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Šie kontaktai gali būti tas pats asmuo. Galite juos susieti kaip vieną kontaktą."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Susieti kontaktai"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Iš jūsų paskyrų"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Pasirinkti nuotrauką"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Iš <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Ištrinti <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Ištrinti <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Ištrinti <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Nuotrauka iš <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> nepažymėta"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Nuotrauka iš <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> pažymėta"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Nepažymėta nuotrauka iš nežinomos paskyros"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Pažymėta nuotrauka iš nežinomos paskyros"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Pasiūlymai"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Naujiena"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Atidaryti naršymo skydelį"</string>
@@ -431,11 +320,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Katalogas"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Darbo katalogas"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Visi kontaktai"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Rasta daugiau nei <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Spartusis <xliff:g id="NAME">%1$s</xliff:g> kontaktas"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Nėra pavadinimo)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Dažnai susisiekiama"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Peržiūrėti kontaktą"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Visi kontaktai su telefonų numeriais"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Darbo profilio kontaktai"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Žiūrėti naujinius"</string>
@@ -443,7 +330,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Pavadinimas"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Slapyvardis"</string>
-    <string name="full_name" msgid="6602579550613988977">"Vardas"</string>
     <string name="name_given" msgid="4280790853455320619">"Vardas"</string>
     <string name="name_family" msgid="7466985689626017037">"Pavardė"</string>
     <string name="name_prefix" msgid="59756378548779822">"Priešvardis"</string>
@@ -476,8 +362,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Siųsti el. laišką adresu <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Siųsti el. paštu"</string>
     <string name="postal_street" msgid="8133143961580058972">"Gatvė"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Pašto dėžutė"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Kaimynystė"</string>
     <string name="postal_city" msgid="6597491300084895548">"Miestas"</string>
     <string name="postal_region" msgid="6045263193478437672">"Būsena"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Pašto kodas"</string>
@@ -515,8 +399,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Daugiau grupių..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Iš sinchronizavimo pašalinus „<xliff:g id="GROUP">%s</xliff:g>“, bus pašalinti ir nesugrupuoti kontaktai."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Išsaugomos pateikties parinktys..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Atlikta"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Atšaukti"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Tinkintas rodinys"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Importuotus kontaktus išsaugoti paskyroje:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM kortelė"</string>
@@ -540,18 +422,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Atšaukti <xliff:g id="FILENAME">%s</xliff:g> eksportavimą?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nepavyko atš. „vCard“ imp. / eksp."</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Nežinoma klaida."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nepavyko atidaryti „<xliff:g id="FILE_NAME">%s</xliff:g>“: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nepavyko atidaryti „<xliff:g id="FILE_NAME">%1$s</xliff:g>“: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nepavyko inicijuoti eksportavimo priemonės: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nėra eksportuojamo kontakto."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Išjungėte būtiną leidimą."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Eksportuojant įvyko klaida: „<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Reikalingo failo pavadinimas per ilgas („<xliff:g id="FILENAME">%s</xliff:g>“)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Įvesties / išvesties klaida"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nepakanka atminties. Gali būti, kad failas per didelis."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Dėl netikėtos priežasties nepavyko išanalizuoti el. vizitinės kortelės."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formatas nepalaikomas."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Nepavyko surinkti pateikto (-ų) „vCard“ failo (-ų) metainformacijos."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Nepavyko importuoti vieno ar daugiau failų (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Baigta eksportuoti „<xliff:g id="FILENAME">%s</xliff:g>“."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Baigta eksportuoti kontaktus."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktai baigti eksportuoti. Spustelėkite pranešimą ir bendrinkite kontaktus."</string>
@@ -560,29 +438,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Eksportuojami adresatų duomenys"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktų duomenys eksportuojami."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nepavyko gauti duomenų bazės informacijos."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Nėra eksportuojamų kontaktų. Jei telefone yra kontaktų, kai kurie duomenų paslaugų teikėjai gali neleisti eksportuoti kontaktų iš telefono."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nėra jokių eksportuotinų kontaktų."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"El. vizitinių kortelių rengyklė nebuvo tinkamai paleista."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Nepavyko eksportuoti"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontakto duomenys nebuvo eksportuoti.\nPriežastis: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importuojama <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nepavyko nuskaityti „vCard“ duomenų"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"El. vizit. kort. duomenų skaitymas atš."</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Baigtas „<xliff:g id="FILENAME">%s</xliff:g>“ el. vizitinės kortelės importavimas"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Atšauktas <xliff:g id="FILENAME">%s</xliff:g> importavimas"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> bus netrukus importuotas."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Failas bus netrukus importuotas."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"El. vizitinės kortelės importavimo užklausa atmesta. Bandykite vėliau."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> bus netrukus eksportuotas."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Failas bus eksportuotas netrukus."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Netrukus kontaktai bus eksportuoti."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"El. vizitinės kortelės eksportavimo užklausa buvo atmesta. Bandykite vėliau."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontaktas"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"El. vizitinė (-ės) kortelė (-ės) padedama (-os) į vietinę laikinąją atmintinę. Netrukus bus pradėtas tikrasis importavimas."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Nepavyko importuoti el. vizit. kortelės."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Gauta per ALR"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Eksp. kontaktus?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Dedama į talpyklą…"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importuojama <xliff:g id="CURRENT_NUMBER">%s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importuojama <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Eksportuoti į .vcf failą"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Rūšiuoti pagal"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Vardas"</string>
@@ -595,8 +469,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Mano informacija"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Nustatykite profilį"</string>
     <string name="setting_about" msgid="7014388749752042863">"Apie Kontaktus"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Bendrinti matomus adresatus"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Nepavyko bendrinti matomų kontaktų."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Bendrinti mėgstamiausius kontaktus"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Bendrinti visus kontaktus"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Nepavyko bendrinti kontaktų."</string>
@@ -606,14 +478,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nėra bendrintinų kontaktų."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Pateiktini kontaktai"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Pateiktini kontaktai"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Apibrėžti tinkintą rodinį"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Rodinio tinkinimas"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Išsaugoti"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Ieškokite kontaktų"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Adresynas"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Kontaktų nėra."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Valyti dažniausiai naudojamus"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Pasirinkti SIM kortelę"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Tvarkyti paskyras"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importuoti"</string>
     <string name="menu_export" msgid="2658783911863503902">"Eksportuoti"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Užblokuoti numeriai"</string>
@@ -621,21 +489,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> naudojant „<xliff:g id="SOURCE">%2$s</xliff:g>“"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"sustabdyti paiešką"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Išvalyti paiešką"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Kontaktų pateikties parinktys"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Paskyra"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Visada naudoti tai skambučiams"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Skambinkite naudodami"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Skambutis su užrašu"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Įveskite užrašą, kurį norite išsiųsti skambindami..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"SIŲSTI IR SKAMBINTI"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> „<xliff:g id="TITLE_2">%1$s</xliff:g>“. <xliff:g id="COUNT_3">%2$d</xliff:g> neskaitytas elementas. </item>
-      <item quantity="few"> „<xliff:g id="TITLE_2">%1$s</xliff:g>“. <xliff:g id="COUNT_3">%2$d</xliff:g> neskaityti elementai. </item>
-      <item quantity="many"> „<xliff:g id="TITLE_2">%1$s</xliff:g>“. <xliff:g id="COUNT_3">%2$d</xliff:g> neskaityto elemento. </item>
-      <item quantity="other"> „<xliff:g id="TITLE_2">%1$s</xliff:g>“. <xliff:g id="COUNT_3">%2$d</xliff:g> neskaitytų elementų. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versija"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Atvirojo šaltinio licencijos"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Išsami atvirojo šaltinio programinės įrangos licencijos informacija"</string>
@@ -649,8 +509,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Ištrinti"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Daugtaškis"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek."</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> val. <xliff:g id="MINUTES_1">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sek."</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> sek."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> val. <xliff:g id="MINUTES_1">%2$s</xliff:g> min. <xliff:g id="SECONDS">%3$s</xliff:g> sek."</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Šis spartusis klavišas išjungtas"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontaktas pašalintas"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importuoti"</string>
@@ -675,4 +535,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Nėra ryšio"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM kort."</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Rodyti daugiau"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM kortelės kontaktai importuoti"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Nepavyko importuoti"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nepavyko importuoti kontaktų iš SIM kortelės"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importuojami SIM kortelės kontaktai"</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 57697ba..6cd8b02 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontaktpersonas"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontaktpersonas"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Pievienot kontaktpersonu"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontaktpersona"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Tiešais zvans"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Tiešais ziņojums"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Izvēlieties kontaktpersonas saīsni"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Izvēlieties numuru, uz kuru zvanīt"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Izvēlieties numuru, uz kuru sūtīt īsziņu"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kontaktpersonas izvēle"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Pievienot kontaktpersonai"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontaktpersonas izvēle"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Atlasīt"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Izveidojiet jaunu kontaktpersonu"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Informācija par kontaktpersonu"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Par"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Atjaunināj."</string>
     <string name="searchHint" msgid="8482945356247760701">"Meklēt kontaktpersonas"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Skatīt kontaktpersonu"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Pievienot izlasei"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Noņemt no izlases"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Noņemts no izlases"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Izveidot saīsni"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Zvanīt kontaktpersonai"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Sūtīt īsziņu kontaktpersonai"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Atsaistīt"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Noņemt kontaktpersonas"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Pārdēvēt iezīmi"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Atlasīt kontaktpersonas"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Pievienot kontaktpersonas"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Noņemt no iezīmes"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Pievienot kontaktpersonu"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Izveidot jaunu…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Izveidot iezīmi"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Vai atsaistīt šo kontaktpersonu un sadalīt vairākās kontaktpersonās?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Atsaistīt"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Vai vēlaties saglabāt veiktās izmaiņas, atsaistīt šo kontaktpersonu un sadalīt vairākās kontaktpersonās?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Saglabāt"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontaktu saistīšana"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Izvēlieties kontaktpersonu, kuru vēlaties saistīt ar vārdu <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ir saistīts"</string>
@@ -85,9 +76,9 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> kontaktpersonas</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="zero"><xliff:g id="COUNT_2">%d</xliff:g> kontaktpersonas (<xliff:g id="ACCOUNT_3">%s</xliff:g>)</item>
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> kontaktpersona (<xliff:g id="ACCOUNT_3">%s</xliff:g>)</item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontaktpersonas (<xliff:g id="ACCOUNT_3">%s</xliff:g>)</item>
+      <item quantity="zero"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktpersonas (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktpersona (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktpersonas (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"No Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"No konta <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -104,21 +95,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Dzēšot šo kontaktpersonu, tiks dzēsta informācija no vairākiem kontiem."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Vai dzēst šo kontaktpersonu?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Dzēst"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Atmest izmaiņas"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Šāda kontaktpersona nepastāv."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontaktpersona ir pievienota sākuma ekrānam."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontaktpersona <xliff:g id="NAME">%s</xliff:g> ir pievienota sākuma ekrānam."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Izveidot jaunu kontaktpersonu"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Izveidot jaunu kontaktpersonu"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Planšetdatorā nav pieejams neviens attēls."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Tālrunī nav pieejams neviens attēls."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontaktpersonas fotoattēls"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Pielāgots iezīmes nosaukums"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Pāradresēt zvanus tieši uz balss pastu"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Noņemt fotoattēlu"</string>
     <string name="noContacts" msgid="2228592924476426108">"Jūsu kontaktpersonu saraksts ir tukšs."</string>
-    <string name="noGroups" msgid="4607906327968232225">"Nav iezīmju."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Lai izveidotu grupas, ir nepieciešams konts."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Nav nevienas kontaktpersonas ar šo iezīmi."</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Šajā kontā nav nevienas kontaktpersonas."</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Jūsu kontaktpersonu saraksts ir tukšs."</string>
@@ -131,7 +116,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Saglabājot kontaktpersonu, radās kļūda."</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nevarēja saglabāt kontaktpersonas fotoattēla izmaiņas."</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Neizdevās ielādēt iezīmi"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Iezīme ir saglabāta."</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Iezīme izdzēsta"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Iezīme izveidota"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nevar izveidot iezīmi"</string>
@@ -146,32 +130,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Sūtīt ziņojumu"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kontaktpersonu izvēle"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Sūtīt"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> kontaktpersonas ar tālruņa numuriem</item>
-      <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" 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" 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="5948889261993124839">"Visas"</string>
-    <string name="callBack" msgid="5498224409038809224">"Atzvanīt"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Zvanīt vēlreiz"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Atzvanīt"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Vai pievienot “<xliff:g id="EMAIL">%s</xliff:g>” kontaktpersonām?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"pluss"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> no <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktpersonas(-ām)"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Kontaktpersonu vārdi"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Netika atrasta neviena lietotne šīs darbības veikšanai."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Noklikšķiniet, lai atgrieztos iepriekšējā ekrānā."</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Pievienojiet tālruņa numuru"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Pievienojiet e-pasta adresi"</string>
@@ -191,52 +152,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nosaukums"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Balss tērzēšana"</string>
     <string name="video_chat" msgid="1872255818640336072">"Video tērzēšana"</string>
-    <string name="connections" msgid="8098440723172028350">"Savienojumi"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Pievienot savienojumu"</string>
-    <string name="recent" msgid="2659189233141493004">"Jaunākās"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Nesen veiktie atj."</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontaktpersona"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> konts"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Uzņemt fotoattēlu"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Uzņemt jaunu fotoattēlu"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Izvēlēties fotoattēlu"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Atlasīt jaunu fotoattēlu"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Atlasīt visas"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Noņemt atlasi visam"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Pievienot jaunu"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Pievienot organizāciju"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datums"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Iezīme"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Mainīt"</string>
-    <string name="description_star" msgid="2605854427360036550">"izlase"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Kontaktpersonu rediģēšana"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Atcelt"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Atpakaļ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"aizvērt"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vai saistīt 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Pievienot mapē Manas kontaktpersonas"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Katalogs <xliff:g id="TYPE">%1$s</xliff:g>"</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="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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Piev. kontaktpersonām"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Pievienot kontaktpersonai"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Aizvērt"</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="7122002148518724139">"Iekļaut gadu"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontaktpersona"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Notiek ielāde..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Izveidot jaunu kontaktpersonu"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Pievienot kontu"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importēt"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Izveidot jaunu…"</string>
@@ -250,14 +187,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Atmest"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Atcelt"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Vai atmest pielāgojumus?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> — <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Meklēt kontaktpersonas"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Kontaktpersonu noņemšana"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Mans vietējais profils"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Mans <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profils"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Tiek attēlotas visas kontaktpersonas"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Nodrošinieties pret kontaktpersonu zudumu pat tālruņa nozaudēšanas gadījumā — sinhronizējiet informāciju ar tiešsaistes pakalpojumu."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Konta pievienošana"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Veltiet brīdi laika, lai pievienotu kontu un savas kontaktpersonas dublētu ar Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Jaunas kontaktpersonas tiks saglabātas kontā <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Izvēlieties noklusējuma kontu, kurā saglabāt jaunās kontaktpersonas:"</string>
@@ -276,13 +209,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Skatīt mazāk"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Nesenie"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Par"</string>
-    <string name="send_message" msgid="8938418965550543196">"Sūtīt ziņojumu"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Notiek personīgā eksemplāra izveide..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Rīt"</string>
     <string name="today" msgid="8041090779381781781">"Šodien"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Šodien plkst. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Rīt plkst. <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Pasākums bez nosaukuma)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Iestatīt"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Tūlītējā ziņojumapmaiņa"</string>
@@ -292,20 +224,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Vietne"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Pasākums"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Saistība"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Konts"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nosaukums"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-pasta adrese"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Tālrunis"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Noklikšķiniet, lai izvērstu kontaktpersonu redaktoru."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Noklikšķiniet, lai sakļautu kontaktpersonu redaktoru."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"norādes uz atrašanās vietu"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"Nesen saņemta īsziņa. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Noklikšķiniet, lai atbildētu."</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"Nesen saņemta īsziņa. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Noklikšķiniet, lai atbildētu."</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"ienākošs"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"izejošs"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"neatbildēts"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"Nesen saņemts zvans. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Vairāk lauku"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Mainīt kontaktpersonas fotoattēlu"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Pievienot kontaktpersonas fotoattēlu"</string>
@@ -313,45 +241,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Neizdevās atvērt redaktoru."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Tiks saglabāts šajā kontā:"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Konta <xliff:g id="ACCOUNT">%s</xliff:g> kontaktinformāciju nevar rediģēt"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Pašlaik notiek saglabāšana kontā <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Veiciet dubultskārienu, lai izvēlētos citu kontu."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="zero">Saistītās kontaktpersonas (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Saistītās kontaktpersonas (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Saistītās kontaktpersonas (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> saistītas kontaktpersonas"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"SAISTĪT KONTAKTPERSONAS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ATCELT"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> iespējami dublikāti</item>
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> iespējams dublikāts</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> iespējami dublikāti</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="zero"><xliff:g id="COUNT">%d</xliff:g> saistītu kontaktpersonu</item>
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> saistīta kontaktpersona</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> saistītas kontaktpersonas</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="zero">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Šī kontaktpersona"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Iespējamie dublikāti"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Iespējams, šīs kontaktpersonas ir viena un tā pati persona. Varat tās apvienot vienā kontaktpersonā."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Saistītās kontaktpersonas"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"No jūsu kontiem"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Fotoattēla izvēle"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"No: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Dzēst: <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Dzēst: <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Dzēst: <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotoattēls no <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> nav atlasīts."</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotoattēls no <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ir atlasīts."</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Nav atzīmēts fotoattēls no nezināma konta"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Atzīmēts fotoattēls no nezināma konta"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Ieteikumi"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Jauns"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Atvērt navigācijas atvilktni"</string>
@@ -420,11 +316,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Katalogs"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Darba katalogs"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Visas kontaktpersonas"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Ir atrastas vairāk nekā <xliff:g id="COUNT">%d</xliff:g> kontaktpersonas."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Ātrā saziņa ar kontaktpersonu <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(nav vārda)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Bieža saziņa"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Skatīt kontaktpersonu"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Visas kontaktpersonas ar tālruņa numuriem"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontaktpersonas darba profilā"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Skatīt atjaunināj."</string>
@@ -432,7 +326,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Vārds"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Segvārds"</string>
-    <string name="full_name" msgid="6602579550613988977">"Vārds"</string>
     <string name="name_given" msgid="4280790853455320619">"Vārds"</string>
     <string name="name_family" msgid="7466985689626017037">"Uzvārds"</string>
     <string name="name_prefix" msgid="59756378548779822">"Uzruna"</string>
@@ -465,8 +358,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Sūtīt e-pasta ziņojumu: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Sūtīt e-pasta ziņojumu"</string>
     <string name="postal_street" msgid="8133143961580058972">"Iela"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Abonenta kastīte"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Apkaime"</string>
     <string name="postal_city" msgid="6597491300084895548">"Pilsēta"</string>
     <string name="postal_region" msgid="6045263193478437672">"Štats"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Pasta indekss"</string>
@@ -504,8 +395,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Vairāk grupu..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Pārtraucot grupas <xliff:g id="GROUP">%s</xliff:g> sinhronizāciju, tiks pārtraukta arī visu negrupēto kontaktpersonu sinhronizācija."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Notiek attēlojuma opciju saglabāšana..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Gatavs"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Atcelt"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Pielāgots skatījums"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Saglabāt importētās kontaktpersonas šeit:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM karte"</string>
@@ -527,18 +416,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vai atcelt faila <xliff:g id="FILENAME">%s</xliff:g> eksportēšanu?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nevarēja atcelt vCard f. import./eksp."</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Nezināma kļūda."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nevarēja atvērt failu <xliff:g id="FILE_NAME">%s</xliff:g>: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nevarēja atvērt failu <xliff:g id="FILE_NAME">%1$s</xliff:g>: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nevarēja startēt eksportētāju: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nav nevienas eksportējamas kontaktpersonas."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Jūs esat atspējojis obligātu atļauju."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Eksportēšanas laikā radās kļūda: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Faila nosaukums ir pārāk garš (<xliff:g id="FILENAME">%s</xliff:g>)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Ievades/izvades kļūda."</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Atmiņā nepietiek vietas. Iespējams, fails ir pārāk liels."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Neparedzēta iemesla dēļ nevarēja parsēt vCard failu."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Šāds formāts netiek atbalstīts."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Nevarēja iegūt metainformāciju par konkrēto(-ajiem) vCard failu(-iem)."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Nevarēja importēt vienu vai vairākus failus (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Faila <xliff:g id="FILENAME">%s</xliff:g> eksportēšana pabeigta"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontaktpersonu eksportēšana ir pabeigta."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktpersonu eksportēšana ir pabeigta. Lai kopīgotu kontaktpersonas, noklikšķiniet uz paziņojuma."</string>
@@ -547,29 +432,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontaktpersonu datu eksportēšana"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktpersonu dati tiek eksportēti."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nevarēja iegūt informāciju no datu bāzes."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Nav nevienas eksportējamas kontaktpersonas. Ja jūsu tālrunī ir saglabātas kontaktpersonas, iespējams, jūsu datu pakalpojumu sniedzējs neļauj eksportēt kontaktpersonas no tālruņa."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nav eksportējamu kontaktpersonu."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Netika pareizi startēts vCard veidotājs."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Nevarēja eksportēt"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontaktpersonas dati netika eksportēti.\nIemesls: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Notiek imp.: <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nevarēja nolasīt vCard datus."</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Atcelta vCard datu lasīšana"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard faila <xliff:g id="FILENAME">%s</xliff:g> importēšana ir pabeigta"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Faila <xliff:g id="FILENAME">%s</xliff:g> importēšana atcelta"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Fails <xliff:g id="FILENAME">%s</xliff:g> tiks drīzumā importēts."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fails drīzumā tiks importēts."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Tika noraidīts vCard faila importēšanas pieprasījums. Vēlāk mēģiniet vēlreiz."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Fails <xliff:g id="FILENAME">%s</xliff:g> tiks drīzumā eksportēts."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Fails drīz tiks eksportēts."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktpersonas drīz tiks eksportētas."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Tika noraidīts vCard faila eksportēšanas pieprasījums. Vēlāk mēģiniet vēlreiz."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontaktpersona"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Notiek vCard failu saglabāšana vietējā pagaidu atmiņā. Importēšana tiks sākta pēc neilga brīža."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Nevarēja importēt vCard datus."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"No NFC saņ. kontaktinf."</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Vai eksp. kontaktp.?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Notiek saglabāšana kešatmiņā"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importē <xliff:g id="CURRENT_NUMBER">%s</xliff:g> no <xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importē <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> no <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Eksportēt .vcf failā"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Kārtot pēc:"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Vārds"</string>
@@ -582,8 +463,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Mana informācija"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Iestatiet savu profilu"</string>
     <string name="setting_about" msgid="7014388749752042863">"Par lietotni Kontaktpersonas"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Kopīgot redzamās kontaktpersonas"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Neizdevās kopīgot redzamās kontaktpersonas."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Kopīgot izlases kontaktpersonas"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Kopīgot visas kontaktpersonas"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Neizdevās kopīgot kontaktpersonas."</string>
@@ -593,14 +472,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nav nevienas kopīgojamas kontaktpersonas."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Attēlojamās kontaktpersonas"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Attēlojamās kontaktpers."</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Pielāgota skatījuma definēšana"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Skata pielāgošana"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Saglabāt"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Meklēt kontaktpersonas"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Izlase"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Nav kontaktpersonu."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Dzēst bieži lietotos kontaktus"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Atlasiet SIM karti"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Pārvaldīt kontus"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importēt"</string>
     <string name="menu_export" msgid="2658783911863503902">"Eksportēt"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Bloķētie numuri"</string>
@@ -608,20 +483,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>, izmantojot <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"pārtraukt meklēšanu"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Notīrīt meklēšanas lauku"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Kontaktpersonu rādīšanas opcijas"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Konts"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Vienmēr izmantot zvaniem"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Zvanīšana"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Zvanīt ar piezīmi"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Ievadiet piezīmi, ko nosūtīt ar zvanu…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"SŪTĪT un ZVANĪT"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> no <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="zero"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nelasītu vienumu. </item>
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nelasīts vienums. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nelasīti vienumi. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versija"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Atklātā pirmkoda licences"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licences informācija par atklātā pirmkoda programmatūru"</string>
@@ -635,8 +503,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Dzēst"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Daudzpunkte"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Šī saīsne ir atspējota."</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontaktpersona tika noņemta."</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importēt"</string>
@@ -660,4 +528,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Nav savienojuma"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Rādīt vairāk"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM kartes importēšana pabeigta"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Importēšana neizdevās"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nevarēja importēt kontaktpersonas no SIM kartes."</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Notiek SIM kartes importēšana"</string>
 </resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 375b449..eaa4cb0 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Контакти"</string>
     <string name="contactsList" msgid="8661624236494819731">"Контакти"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Додајте контакт"</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="shortcutActivityTitle" msgid="1504383567778497348">"Избирање контакт"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Додајте на контакт"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Одбери контакт"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Изберете"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Создај нов контакт"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Детали на контактот"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Избриши"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Промени фотографија"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Создај кратенка"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Повикај контакт"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Испрати текстуална порака на контакт"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Раздели"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Отстрани контакти"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Преименувај ја етикетата"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Избери контакти"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Додај контакти"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Отстрани од етикетата"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Додај контакт"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Создај нова…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Создај етикета"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Да се раздели контактот на повеќе контакти?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Раздели"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Дали сакате да ги зачувате измените што веќе ги направивте и да го разделите контактот на повеќе контакти?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Зачувај"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Поврзи контакти"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Изберете го контактот што сакате да го поврзете со <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> е поврзан"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакти</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> контакт · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> контакти · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> контакт · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> контакти · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Од Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Од <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Со бришење на овој контакт ќе се избришат детали од повеќе сметки."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Да се избрише овој контакт?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Избриши"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Отфрли ги промените"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Контактот не постои."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контактот е додаден на Почетен екран."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Контактот <xliff:g id="NAME">%s</xliff:g> е додаден на Почетен екран."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Создај нов контакт"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Создај нов контакт"</string>
     <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="2228592924476426108">"Списокот со контакти е празен"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Нема етикети."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"За да создадете групи ви треба сметка."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Нема контакти со етикетава"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Нема контакти во сметкава"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Списокот со контакти е празен"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Грешка при зачувување на контактот"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Не можеше да се зачуваат промените на фотографијата на контактот"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Етикетата не успеа да се вчита"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Етикетата е зачувана"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Етикетата е избришана"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Етикетата е создадена"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Етикетата не може да се создаде"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Испратете порака"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Изберете контакти"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Испрати"</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="5948889261993124839">"Сите"</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_plus_button" msgid="515164827856229880">"плус"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> од <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контакти"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Имиња на вашите контакти"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Име на етикета"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"Сметка на <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Етикета"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Промени"</string>
-    <string name="description_star" msgid="2605854427360036550">"омилено"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Уреди контакт"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Откажи"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Назад"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"затвори"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Да се поврзе тековниот контакт со избраниот контакт?"</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="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="7122002148518724139">"Вклучи година"</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="4347232421410561500">"Додај сметка"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Увези"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Создајте нова…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Отфрли"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Откажи"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Да се отфрлат приспособувањата?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Пребарајте контакти"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Отстрани контакти"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Мој локален профил"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Мој профил на <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Прикажување на сите контакти"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Чувајте ги вашите контакти безбедни дури и ако го изгубите вашиот телефон: синхронизирајте се со онлајн услуга."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Додај сметка"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Одвојте малку време за додавање сметка за правење резервна копија на вашите контакти на Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Новите контакти ќе се зачуваат на <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Изберете стандардна сметка за новите контакти:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Погледни помалку"</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="288549957278065542">"Се создава лична копија..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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">"E-пошта"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Телефон"</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_sms" msgid="1666389577263317445">"неодамнешна SMS-порака. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"неодамнешен повик. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Повеќе полиња"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Променете фотографија за контакт"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Додајте фотографија за контакт"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Не успеа да го отвори уредникот."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Се зачувува на"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Инфо. за контакт од <xliff:g id="ACCOUNT">%s</xliff:g> не може да се уредуваат"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Моментално се зачувува на <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Допрете двапати за да изберете друга сметка."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> поврзани контакти"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ПОВРЗИ КОНТАКТИ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ОТКАЖИ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> можен дупликат</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> можни дупликати</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> поврзан контакт</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> поврзани контакти</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Овој контакт"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Можни дупликати"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Овие контакти можеби се на истото лице. Може да ги споите во еден контакт."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Поврзани контакти"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Од вашите сметки"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Избери фотографија"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Од <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Избриши <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Избриши <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Избриши <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Фотографијата од <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>не е избрана"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Фотографијата од <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>е избрана"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Не е избрана фотографија од непозната сметка"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Избрана е фотографија од непозната сметка"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Предлози"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Ново"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Отворете фиока за навигација"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Адресар"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Работен адресар"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Сите контакти"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Најдени се преку <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Брз контакт за <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Без име)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Често контактирани"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Прикажи контакт"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Сите контакти со телефонски броеви"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Контакти на службениот профил"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Прикажи ажурирања"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Име"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Прекар"</string>
-    <string name="full_name" msgid="6602579550613988977">"Име"</string>
     <string name="name_given" msgid="4280790853455320619">"Име"</string>
     <string name="name_family" msgid="7466985689626017037">"Презиме"</string>
     <string name="name_prefix" msgid="59756378548779822">"Претставка на име"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Испратете е-пошта на <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-пошта"</string>
     <string name="postal_street" msgid="8133143961580058972">"Улица"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Поштенски фах"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Соседство"</string>
     <string name="postal_city" msgid="6597491300084895548">"Град"</string>
     <string name="postal_region" msgid="6045263193478437672">"Држава"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Поштенски број"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Повеќе групи…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Со отстранувањето на „<xliff:g id="GROUP">%s</xliff:g>“ од синхронизирање, ќе се отстранат и сите негрупирани контакти од синхронизирање."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Се зачувуваат опциите на екранот…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Готово"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Откажи"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Приспособен приказ"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Зачувајте ги увезените контакти на:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-картичка"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Да се откаже извозот на <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Не може да се откаже увоз/извоз на vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Непозната грешка."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"„<xliff:g id="FILE_NAME">%s</xliff:g>“ не можеше да се отвори: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"„<xliff:g id="FILE_NAME">%1$s</xliff:g>“ не можеше да се отвори: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Не можеше да се вклучи извозникот: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Нема контакт на кој може да се изврши извоз."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Оневозможивте потребна дозвола."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Настанаи грешка при извоз: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Бараното име на датотеката е премногу долго („<xliff:g id="FILENAME">%s</xliff:g>“)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O грешка"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Нема доволно меморија. Датотеката е можеби премногу голема."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"vCard не можеше да се разложи од неочекувана причина."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Форматот не е поддржан."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Не можеше да собере метаинформации за дадени датотеки на vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Една или повеќе датотеки не можеше да се увезат (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Заврши извозот на <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Извозот на контакти заврши."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Извозот на контакти заврши. Кликнете на известувањето за споделување контакти."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Се врши извоз на податоци за контакт"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Во моментов се врши извоз на податоците за контакт."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Не можеше да добие информации за базата на податоци."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Нема контакти на кои може да се изврши извоз. Ако имате контакти на вашиот телефон, некои оператори може да не дозволуваат извоз на контактите од телефонот."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Нема контакти за извезување."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Композиторот на vCard не започна правилно."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Не е можен извоз"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Извозот на податоците за контакт не се изврши.\nПричина: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Се врши увоз на <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Не можеше да прочита податоци од vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Читањето податоци од vCard е откажано"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Заврши увозот на vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Увезувањето на <xliff:g id="FILENAME">%s</xliff:g> е откажано"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Ќе се изврши увоз на <xliff:g id="FILENAME">%s</xliff:g> наскоро."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Ќе се изврши увоз на датотеката наскоро."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Барањето за увоз на vCard беше одбиено. Обидете се повторно подоцна."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Ќе се изврши извоз на <xliff:g id="FILENAME">%s</xliff:g> наскоро."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Ќе се изврши извоз на датотеката наскоро."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Наскоро ќе се изврши извоз на контактите."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Барањето за извоз на vCard беше одбиено. Обидете се повторно подоцна."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"контакт"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Се кешираат vCard(s) во локалната привремена меморија. Реалниот увоз ќе започне наскоро."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Не можеше да се изврши увоз на vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Контакт од NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Да се изврши извоз на контакти?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Кеширање"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Се врши увоз на <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Се врши увоз на <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Извези во датотеката .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Подредете по"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Име"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Мои информации"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Поставете го профилот"</string>
     <string name="setting_about" msgid="7014388749752042863">"За „Контакти“"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Споделете видливи контакти"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Споделувањето на видливите контакти не успеа."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Споделете омилени контакти"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Споделете ги сите контакти"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Споделувањето на контактите не успеа."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Нема контакти за споделување."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Контакти за прикажување"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Контакти за прикажување"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Дефинирајте приспособен приказ"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Приспособување на приказ"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Зачувај"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Пребарајте контакти"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Омилени"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Нема контакти."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Исчисти чести"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Изберете СИМ-картичка"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Управувај со сметки"</string>
     <string name="menu_import" msgid="6107961135813836467">"Изврши увоз"</string>
     <string name="menu_export" msgid="2658783911863503902">"Изврши извоз"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Блокирани броеви"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"на <xliff:g id="DATE">%1$s</xliff:g> од <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"сопри пребарување"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Исчисти го полето за пребарување"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Опции за прикажување контакт"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Сметка"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Секогаш користи го ова за повици"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Повикајте со"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Повикајте со белешка"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Напишете белешка за да ја испратите со повикот…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ИСПРАТИ И ПОВИКАЈ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитана ставка. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитани ставки. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Верзија"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Лиценци за софтвер со отворен код"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Детали за лиценцата за софтвер со отворен код"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Избриши"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Три точки"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек."</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> час <xliff:g id="MINUTES_1">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мин. <xliff:g id="SECONDS">%2$s</xliff:g> сек."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> час <xliff:g id="MINUTES_1">%2$s</xliff:g> мин. <xliff:g id="SECONDS">%3$s</xliff:g> сек."</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Кратенкава е оневозможена"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Контактот е отстранет"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Увези"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Нема мрежа"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Прикажи повеќе"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Увезувањето на SIM-картичката заврши"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Увезувањето не успеа"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Не можеше да се увезат контакти од SIM-картичката"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Се увезува SIM"</string>
 </resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index b238cc2..c851a52 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"വിലാസങ്ങൾ"</string>
     <string name="contactsList" msgid="8661624236494819731">"വിലാസങ്ങൾ"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"കോൺടാക്റ്റ് ചേർക്കുക"</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="shortcutActivityTitle" msgid="1504383567778497348">"കോൺടാക്‌റ്റ് തിരഞ്ഞെടുക്കുക"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"കോണ്‍‌ടാക്റ്റിലേക്ക് ചേര്‍ക്കുക"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"കോൺടാക്റ്റ് തിരഞ്ഞെടുക്കൂ"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"തിരഞ്ഞെടുക്കുക"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"പുതിയകോൺടാക്റ്റ് സൃഷ്‌ടിക്കൂ"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"കോൺടാക്റ്റ് വിശദാംശങ്ങൾ"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"ഇല്ലാതാക്കുക"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"ഫോട്ടോ മാറ്റുക"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"കുറുക്കുവഴി സൃഷ്‌ടിക്കുക"</string>
-    <string name="menu_call" msgid="3992595586042260618">"കോൺടാക്റ്റിനെ വിളിക്കുക"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"കോൺടാക്റ്റിന് വാചകസന്ദേശമയയ്‌ക്കുക"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"അൺലിങ്കുചെയ്യുക"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"കോൺടാക്‌റ്റുകൾ നീക്കംചെയ്യൂ"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"ലേബലിന്റെ പേരുമാറ്റുക"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"കോണ്‍‌ടാക്റ്റുകൾ തിരഞ്ഞെടുക്കുക"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"കോൺടാക്റ്റുകൾ ചേർക്കുക"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"ലേബ‌ലിൽ നിന്ന് നീക്കംചെയ്യുക"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"കോൺടാക്റ്റ് ചേർക്കുക"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"പുതിയത് സൃഷ്‌ടിക്കുക…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ലേബല്‍ സൃഷ്ടിക്കുക"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"ഈ കോൺടാക്റ്റ് ഒന്നിലധികം കോൺടാക്റ്റുകളായി അൺലിങ്കുചെയ്യണോ?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"അൺലിങ്കുചെയ്യുക"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"നിങ്ങൾ ഇതിനകം വരുത്തിയിട്ടുള്ള മാറ്റങ്ങൾ സംരക്ഷിക്കാനും ഒന്നിലധികം കോൺടാക്റ്റുകളായി ഈ കോൺടാക്റ്റ് അൺലിങ്കുചെയ്യാനും താൽപ്പര്യപ്പെടുന്നുണ്ടോ?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"സംരക്ഷിക്കുക"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"കോണ്ടാക്റ്റുകൾ ലിങ്കുചെയ്യൂ"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ലിങ്കുചെയ്‌തു"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> കോൺടാക്റ്റ്</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> കോൺടാക്‌റ്റുകൾ · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> കോൺടാക്‌റ്റ് · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> കോൺടാക്‌റ്റുകൾ · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> കോൺടാക്‌റ്റ് · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google-ൽ നിന്നുള്ളവ"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> അക്കൗണ്ടിൽ നിന്നുള്ളവ"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ഈ കോൺടാക്റ്റ് ഇല്ലാതാക്കുന്നതുവഴി ഒന്നിലധികം അക്കൗണ്ടുകളിൽ നിന്നുള്ള വിശദാംശങ്ങൾ ഇല്ലാതാക്കപ്പെടും."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"ഈ കോൺടാക്റ്റ് ഇല്ലാതാക്കണോ?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ഇല്ലാതാക്കുക"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"മാറ്റങ്ങള്‍‌ നിരാകരിക്കുക"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"കോൺടാക്റ്റ് നിലവിലില്ല."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"ഹോം സ്ക്രീനിലേക്ക് കോൺടാക്റ്റ് ചേർത്തു."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"ഹോം സ്ക്രീനിലേക്ക് <xliff:g id="NAME">%s</xliff:g> ചേർത്തു."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"പുതിയകോൺടാക്റ്റ് സൃഷ്‌ടിക്കൂ"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"പുതിയകോൺടാക്റ്റ് സൃഷ്‌ടിക്കൂ"</string>
     <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="2228592924476426108">"നിങ്ങളുടെ കോൺടാക്‌റ്റ് ലിസ്‌റ്റ് ശൂന്യമാണ്"</string>
-    <string name="noGroups" msgid="4607906327968232225">"ലേബലുകളൊന്നുമില്ല."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"ഗ്രൂപ്പുകൾ സൃഷ്‌ടിക്കാൻ നിങ്ങൾക്ക് ഒരു അക്കൗണ്ട് ആവശ്യമാണ്."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"ഈ ലേബലുള്ള കോൺടാക്‌റ്റുകളൊന്നുമില്ല"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"ഈ അക്കൗണ്ടിൽ കോൺടാക്‌റ്റുകളൊന്നുമില്ല"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"നിങ്ങളുടെ കോൺടാക്‌റ്റ് ലിസ്‌റ്റ് ശൂന്യമാണ്"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"കോൺടാക്റ്റ് സംരക്ഷിക്കുന്നതില്‍ പിശക്"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"കോൺടാക്റ്റ് ഫോട്ടോയിലെ മാറ്റങ്ങൾ സംരക്ഷിക്കാനായില്ല"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ലേബൽ ലോഡുചെയ്യുന്നത് പരാജയപ്പെട്ടു"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"ലേബൽ സംരക്ഷിച്ചു"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ലേബൽ ഇല്ലാതാക്കി"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"ലേബൽ സൃഷ്‌ടിച്ചു"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"ലേബൽ സൃഷ്‌ടിക്കാൻ കഴിയുന്നില്ല"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"സന്ദേശം അയയ്‌ക്കുക"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"കോണ്‍‌ടാക്റ്റുകള്‍ തിരഞ്ഞെടുക്കുക"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"അയയ്‌ക്കുക"</string>
-    <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" 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" 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="5948889261993124839">"എല്ലാം"</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_plus_button" msgid="515164827856229880">"പ്ലസ്"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%s</xliff:g> കോൺടാക്റ്റുകൾ"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"നിങ്ങളുടെ കോൺടാക്റ്റുകളുടെ പേരുകൾ"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"ലേബല്‍ പേര്"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> അക്കൗണ്ട്"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"ലേബൽ"</string>
-    <string name="change_photo" msgid="8530597935483526383">"മാറ്റുക"</string>
-    <string name="description_star" msgid="2605854427360036550">"പ്രിയപ്പെട്ടതാക്കുക"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"കോൺടാ‌ക്‌റ്റ് തിരുത്തുക"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"റദ്ദാക്കുക"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"മടങ്ങുക"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"അടയ്‌ക്കുക"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"തിരഞ്ഞെടുത്ത കോൺടാക്റ്റുമായി നിലവിലെ കോൺടാക്റ്റ് ലിങ്കുചെയ്യണോ?"</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="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="7122002148518724139">"വർഷം ഉൾപ്പെടുത്തുക"</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="4347232421410561500">"അക്കൗണ്ട് ചേർക്കുക"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"ഇമ്പോർട്ടുചെയ്യുക"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"പുതിയത് സൃഷ്‌ടിക്കുക…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"നിരസിക്കുക"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"റദ്ദാക്കൂ"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"ഇഷ്‌ടാനുസൃതമാക്കലുകൾ നിരസിക്കണോ?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"കോണ്‍‌ടാക്റ്റുകള്‍ തിരയുക"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"കോൺടാക്‌റ്റുകൾ നീക്കംചെയ്യൂ"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"എന്റെ പ്രാദേശിക പ്രൊഫൈൽ"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"എന്റെ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> പ്രൊഫൈൽ"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"എല്ലാ കോൺടാക്റ്റുകളും പ്രദർശിപ്പിക്കുന്നു"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"നിങ്ങൾക്ക് ഫോൺ നഷ്‌ടമാകുകയാണെങ്കിൽപ്പോലും നിങ്ങളുടെ കോൺടാക്റ്റുകൾ സുരക്ഷിതമായി സൂക്ഷിക്കുക: ഒരു ഓൺലൈൻ സേവനവുമായി സമന്വയിപ്പിക്കുക."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ഒരു അക്കൗണ്ട് ചേർക്കുക"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"കുറച്ചുസമയമെടുത്ത് ഒരു അക്കൗണ്ട് ചേർക്കുക, അത് Google-ൽ നിങ്ങളുടെ കോൺടാക്‌റ്റുകളുടെ ബായ്‌ക്കപ്പെടുക്കുന്നതിനിടയാക്കും."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"പുതിയ കോൺടാക്റ്റുകൾ <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> എന്ന അക്കൗണ്ടിലേക്ക് സംരക്ഷിക്കപ്പെടും."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"പുതിയ കോൺടാക്റ്റുകൾക്ക് ഒരു ഡിഫോൾട്ട് അക്കൗണ്ട് തിരഞ്ഞെടുക്കുക:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"കുറച്ച് കാണുക"</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="288549957278065542">"ഒരു വ്യക്തിഗത പകർപ്പ് സൃഷ്‌ടിക്കുന്നു…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"പുതിയ sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"പുതിയ കോൾ. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"കൂടുതൽ ഫീൽഡുകൾ"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"കോൺടാക്‌റ്റ് ഫോട്ടോ മാറ്റുക"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"കോൺടാക്‌റ്റ് ഫോട്ടോ ചേർക്കുക"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"എഡിറ്റർ തുറക്കുന്നത് പരാജയപ്പെട്ടു."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"ഇതിലേക്ക് സംരക്ഷിക്കുന്നു"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> എന്നതിലുള്ള കോൺടാക്‌റ്റ്‌ എഡിറ്റുചെയ്യാനാവില്ല"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"നിലവിൽ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> എന്ന അക്കൗണ്ടിലേക്ക് സംരക്ഷിക്കുന്നു. മറ്റൊരു അക്കൗണ്ടിലേക്ക് സംരക്ഷിക്കാൻ രണ്ടുതവണ ടാപ്പുചെയ്യുക."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">ലിങ്കുചെയ്ത കോൺടാക്റ്റുകൾ (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">ലിങ്കുചെയ്ത കോൺടാക്റ്റ്</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"ലിങ്കുചെയ്ത <xliff:g id="COUNT">%d</xliff:g> കോൺടാക്റ്റുകൾ"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"കോണ്ടാക്റ്റുകൾ ലിങ്കുചെയ്യൂ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"റദ്ദാക്കുക"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other">സാധ്യതയുള്ള <xliff:g id="COUNT">%d</xliff:g> ഡ്യൂപ്ലിക്കേറ്റുകൾ</item>
-      <item quantity="one">സാധ്യതയുള്ള ഒരു ഡ്യൂപ്ലിക്കേറ്റ്</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">ലിങ്കുചെയ്ത <xliff:g id="COUNT">%d</xliff:g> കോൺടാക്റ്റുകൾ</item>
-      <item quantity="one">ലിങ്കുചെയ്ത ഒരു കോൺടാക്റ്റ്</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ഈ കോൺടാക്റ്റ്"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"സാധ്യതയുള്ള ഡ്യൂപ്ലിക്കേറ്റുകൾ"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"ഈ കോൺടാക്റ്റുകൾ, ഒരേ വ്യക്തി ആയേക്കാം, ഒരൊറ്റ കോൺടാക്റ്റായി നിങ്ങൾക്കിവ ലിങ്കുചെയ്യാവുന്നതാണ്."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"ലിങ്കുചെയ്ത കോൺടാക്റ്റുകൾ"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"നിങ്ങളുടെ അക്കൗണ്ടുകളിൽ നിന്നും"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"ഫോട്ടോ തിരഞ്ഞെടുക്കുക"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> എന്നതിൽ നിന്ന്"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> ഇല്ലാതാക്കുക"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> ഇല്ലാതാക്കുക"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ഇല്ലാതാക്കുക"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> എന്നതിൽ നിന്നുള്ള ഫോട്ടോ ചെക്കുചെയ്തില്ല"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> എന്നതിൽ നിന്നുള്ള ഫോട്ടോ ചെക്കുചെയ്തു"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"തിരിച്ചറിയാനാകാത്ത അക്കൗണ്ടിൽ നിന്നുള്ള ഫോട്ടോ തിരഞ്ഞെടുത്തിട്ടില്ല"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"തിരിച്ചറിയാനാകാത്ത അക്കൗണ്ടിൽ നിന്നുള്ള ഫോട്ടോ തിരഞ്ഞെടുത്തു"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"നിര്‍ദ്ദേശങ്ങള്‍"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"പുതിയത്"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"നാവിഗേഷൻ ഡ്രോയർ തുറക്കുക"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"ഡയറക്‌ടറി"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"ഔദ്യോഗിക ഡയറക്‌ടറി"</string>
     <string name="local_search_label" msgid="2551177578246113614">"എല്ലാ കോൺടാക്റ്റുകളും"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g>-ൽ കൂടുതൽ കണ്ടെത്തി."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> എന്നയാളുടെ ദ്രുത കോൺടാക്റ്റ്"</string>
     <string name="missing_name" msgid="8745511583852904385">"(പേരില്ല)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"പതിവായി കോൺടാക്റ്റുചെയ്യുന്നവർ"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"കോൺടാക്റ്റ് കാണുക"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"ഫോൺ നമ്പറുകളുള്ള എല്ലാ കോൺടാക്റ്റുകളും"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"ഔദ്യോഗിക പ്രൊഫൈൽ കോൺടാക്റ്റുകൾ"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"അപ്‌ഡേറ്റുകള്‍ കാണുക"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"സിം"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"പേര്"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"വിളിപ്പേര്"</string>
-    <string name="full_name" msgid="6602579550613988977">"പേര്"</string>
     <string name="name_given" msgid="4280790853455320619">"ഫസ്റ്റ് നെയിം"</string>
     <string name="name_family" msgid="7466985689626017037">"ലാസ്റ്റ് നെയിം"</string>
     <string name="name_prefix" msgid="59756378548779822">"പേരിന്റെ പ്രിഫിക്‌സ്"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> എന്നതിലേക്ക് ഇമെയിൽ അയയ്‌ക്കുക"</string>
     <string name="email" msgid="5668400997660065897">"ഇമെയില്‍"</string>
     <string name="postal_street" msgid="8133143961580058972">"സ്ട്രീറ്റ്"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"PO ബോക്സ്"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"സമീപസ്ഥലം"</string>
     <string name="postal_city" msgid="6597491300084895548">"നഗരം"</string>
     <string name="postal_region" msgid="6045263193478437672">"സംസ്ഥാനം"</string>
     <string name="postal_postcode" msgid="572136414136673751">"തപാൽ കോഡ്"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"കൂടുതൽ ഗ്രൂപ്പുകൾ…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"സമന്വയത്തിൽ നിന്നും \"<xliff:g id="GROUP">%s</xliff:g>\" നീക്കംചെയ്യുന്നത്, സമന്വയത്തിൽ നിന്നും ഗ്രൂപ്പുചെയ്യാത്ത എല്ലാ കോൺടാക്റ്റുകളേയും നീക്കംചെയ്യുന്നതിനിടയാക്കും."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"ഡിസ്‌പ്ലേ ഓപ്‌ഷനുകൾ സംരക്ഷിക്കുന്നു…"</string>
-    <string name="menu_done" msgid="796017761764190697">"പൂർത്തിയായി"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"റദ്ദാക്കുക"</string>
     <string name="listCustomView" msgid="1840624396582117590">"ഇഷ്‌ടാനുസൃത കാഴ്‌ച"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"ഇമ്പോർട്ടുചെയ്ത കോൺടാക്റ്റുകൾ ഇനിപ്പറയുന്നതിലേക്ക് സംരക്ഷിക്കുക:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"സിം കാർഡ്‌"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> എന്നത് എക്‌സ്‌പോർട്ടുചെയ്യുന്നത് റദ്ദാക്കണോ?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard ഇമ്പോർട്ടുചെയ്യൽ/എക്‌സ്‌പോർട്ടുചെയ്യൽ റദ്ദാക്കാനായില്ല"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"അജ്ഞാത പിശക്."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" തുറക്കാനായില്ല: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" തുറക്കാനായില്ല: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"എക്‌സ്‌പോർട്ടർ ആരംഭിക്കാനായില്ല: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"എക്‌സ്‌പോർട്ടുചെയ്യാനാകുന്ന കോൺടാക്റ്റ് ഒന്നുമില്ല."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"ആവശ്യമായ ഒരു അനുമതി നിങ്ങൾ പ്രവർത്തനരഹിതമാക്കി."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"എക്‌സ്‌പോർട്ടുചെയ്യുമ്പോൾ ഒരു പിശക് സംഭവിച്ചു: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"ആവശ്യമായ ഫയലിന്റെ പേര് ദൈർഘ്യമേറിയതാണ് (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O പിശക്"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"ആവശ്യമായ മെമ്മറിയില്ല. ഫയൽ വളരെ വലുതായിരിക്കാം."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"ഒരു അപ്രതീക്ഷിത കാരണത്താൽ vCard പാഴ്‌സുചെയ്യാനായില്ല."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"ഫോർമാറ്റിനെ പിന്തുണയ്‌ക്കില്ല."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"നൽകിയിരിക്കുന്ന vCard ഫയലിന്റെ (ഫയലുകളുടെ) മെറ്റ വിവരം ശേഖരിക്കാനായില്ല."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"ഒന്നോ അതിലധികമോ ഫയലുകൾ ഇമ്പോർട്ടുചെയ്യാനായില്ല (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> എക്‌സ്‌പോർട്ടുചെയ്യൽ പൂർത്തിയായി."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"കോൺടാക്റ്റുകൾ എക്‌സ്‌പോർട്ടുചെയ്യൽ പൂർത്തിയായി."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"കോൺടാക്റ്റുകൾ എക്‌സ്‌പോർട്ടുചെയ്യൽ പൂർത്തിയായി, കോൺടാക്റ്റുകൾ പങ്കിടുന്നതിന് അറിയിപ്പിൽ ക്ലിക്കുചെയ്യുക."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"കോൺടാക്റ്റ് ഡാറ്റ എക്‌സ്‌പോർട്ടുചെയ്യുന്നു"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"കോൺടാക്റ്റ് ഡാറ്റ എക്സ്പോർട്ടുചെയ്യുകയാണ്."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ഡാറ്റാബേസ് വിവരം നേടാനായില്ല."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"എക്‌സ്‌പോർട്ടുചെയ്യാനാകുന്ന കോൺടാക്റ്റുകളൊന്നുമില്ല. നിങ്ങളുടെ ഫോണിൽ കോൺടാക്റ്റുകളുണ്ടെങ്കിൽ, ഫോണിൽ നിന്നും കോൺടാക്റ്റുകൾ എക്‌സ്‌പോർട്ടുചെയ്യാൻ ചില സേവന ദാതാക്കൾ അനുവദിക്കാനിടയില്ല."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"എക്‌സ്‌പോർട്ടുചെയ്യാനാകുന്ന കോൺടാക്റ്റുകളൊന്നുമില്ല."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard കമ്പോസർ ശരിയായി ആരംഭിച്ചില്ല."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"എക്‌സ്‌പോർട്ടുചെയ്യാനായില്ല"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"കോൺടാക്റ്റ് ഡാറ്റ എക്‌സ്‌പോർട്ടുചെയ്‌തില്ല.\nകാരണം: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> എന്നയാളെ ഇമ്പോർട്ടുചെയ്യുന്നു"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard ഡാറ്റ വായിക്കാനായില്ല"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard ഡാറ്റ വായിക്കുന്നത് റദ്ദാക്കി"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> ഇമ്പോർട്ടുചെയ്യൽ പൂർത്തിയായി"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ഇമ്പോർട്ടുചെയ്യൽ റദ്ദാക്കി"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> എന്നത് ഉടൻ ഇമ്പോർട്ടുചെയ്യും."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ഫയൽ ഉടൻ ഇമ്പോർട്ടുചെയ്യും."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard ഇമ്പോർട്ടുചെയ്യൽ അഭ്യർത്ഥന നിരസിച്ചു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> എന്നത് ഉടൻ എക്‌സ്‌പോർട്ടുചെയ്യും."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ഫയൽ ഉടൻ എക്സ്പോർട്ടുചെയ്യും."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"കോൺടാക്റ്റുകൾ താമസിയാതെ എക്സ്പോർട്ടുചെയ്യും."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard എക്‌സ്‌പോർട്ടുചെയ്യൽ അഭ്യർത്ഥന നിരസിച്ചു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"കോൺടാക്റ്റ്"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"പ്രാദേശിക താൽക്കാലിക സംഭരണത്തിലേക്ക് vCard (vCard-കൾ) കാഷെ ചെയ്യുന്നു. യഥാർത്ഥ ഇമ്പോർട്ടുചെയ്യൽ ഉടൻ ആരംഭിക്കും."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard ഇമ്പോർട്ടുചെയ്യാനായില്ല."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC മുഖേന ലഭിച്ച കോൺടാക്റ്റ്"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"കോൺടാക്റ്റുകൾ എക്‌സ്‌പോർട്ടുചെയ്യണോ?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"കാഷെ ചെയ്യൽ"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> ഇമ്പോർട്ടുചെയ്യുന്നു: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> ഇമ്പോർട്ടുചെയ്യുന്നു: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf ഫയലിലേക്ക് എക്സ്പോർട്ട് ചെയ്യൂ"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"ഇപ്രകാരം അടുക്കുക"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"ഫസ്റ്റ് നെയിം"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"എന്റെ വിവരം"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"നിങ്ങളുടെ പ്രൊഫൈൽ സജ്ജമാക്കുക"</string>
     <string name="setting_about" msgid="7014388749752042863">"കോണ്‍ടാക്റ്റുകളെ കുറിച്ച്"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"ദൃശ്യമായ കോൺടാക്റ്റുകൾ പങ്കിടുക"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"ദൃശ്യമായ കോൺടാക്റ്റുകൾ പങ്കിടുന്നത് പരാജയപ്പെട്ടു."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"പ്രിയപ്പെട്ട കോൺടാക്റ്റുകൾ പങ്കിടുക"</string>
     <string name="share_contacts" msgid="8109287987498711664">"എല്ലാ കോൺടാക്റ്റുകളും പങ്കിടുക"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"കോൺടാക്റ്റുകൾ പങ്കിടുന്നത് പരാജയം."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"പങ്കിടാൻ കോൺടാക്റ്റുകളൊന്നും ഇല്ല."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"ദൃശ്യമാക്കേണ്ട കോൺടാക്റ്റുകൾ"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ദൃശ്യമാക്കേണ്ട കോൺടാക്റ്റുകൾ"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"ഇഷ്‌ടാനുസൃതമാക്കിയ കാഴ്‌ച നിർവ്വചിക്കുക"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"കാഴ്‌ച ഇഷ്‌ടാനുസൃതമാക്കുക"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"സംരക്ഷിക്കുക"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"കോണ്‍‌ടാക്റ്റുകള്‍ തിരയുക"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"പ്രിയപ്പെട്ടവ"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"കോൺടാക്റ്റുകൾ ഒന്നുമില്ല."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"സ്ഥിരംവിളിക്കുന്നവരെ മായ്‌ക്കൂ"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"സിം കാർഡ് തിരഞ്ഞെടുക്കുക"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"മാനേജുചെയ്യുക"</string>
     <string name="menu_import" msgid="6107961135813836467">"ഇമ്പോർട്ടുചെയ്യുക"</string>
     <string name="menu_export" msgid="2658783911863503902">"എക്‌സ്‌പോർട്ട് ചെയ്യുക"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"ബ്ലോക്കുചെയ്ത നമ്പറുകൾ"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> വഴി <xliff:g id="DATE">%1$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"തിരയൽ നിർത്തുക"</string>
     <string name="description_clear_search" msgid="688023606766232904">"തിരയൽ മായ്ക്കുക"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"കോൺടാക്‌റ്റ് ഡിസ്പ്ലേ ഓപ്ഷനുകൾ"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"അക്കൗണ്ട്"</string>
     <string name="set_default_account" msgid="4311613760725609801">"ഇത് എല്ലായ്‌പ്പോഴും കോളുകൾക്കായി ഉപയോഗിക്കുക"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"ഇത് ഉപയോഗിച്ച് വിളിക്കുക"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"കുറിപ്പിനൊപ്പം വിളിക്കുക"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"കോളിനൊപ്പം അയയ്‌ക്കാൻ ഒരു കുറിപ്പ് ടൈപ്പുചെയ്യുക..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"അയയ്ക്കുക, വിളിക്കുക"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> വായിക്കാത്ത ഇനങ്ങൾ. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> വായിക്കാത്ത ഇനം. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"ബിൽഡ് പതിപ്പ്"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"ഓപ്പൺ സോഴ്‌സ് ലൈസൻസുകൾ"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ഓപ്പൺ സോഴ്‌സ് സോഫ്റ്റ്‌വെയറിനായുള്ള ലൈസൻസ് വിശദാംശങ്ങൾ"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"ഇല്ലാതാക്കുക"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"എല്ലിപ്‌സിസ്"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> സെ."</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> മി <xliff:g id="SECONDS">%s</xliff:g> സെ"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> മണിക്കൂർ <xliff:g id="MINUTES_1">%s</xliff:g> മിനിറ്റ് <xliff:g id="SECONDS">%s</xliff:g> സെക്കൻഡ്"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> മി <xliff:g id="SECONDS">%2$s</xliff:g> സെ"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> മണിക്കൂർ <xliff:g id="MINUTES_1">%2$s</xliff:g> മിനിറ്റ് <xliff:g id="SECONDS">%3$s</xliff:g> സെക്കൻഡ്"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ഈ കുറുക്കുവഴി പ്രവർത്തനരഹിതമാക്കി"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"കോൺടാക്‌റ്റ് നീക്കംചെയ്‌തു"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"ഇമ്പോർട്ടുചെയ്യുക"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"കണക്ഷനൊന്നുമില്ല"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"സിം"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"കൂടുതൽ കാണിക്കൂ"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"സിം കാർഡ് ഇമ്പോർട്ടുചെയ്‌തു"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"ഇമ്പോർട്ടുചെയ്യൽ പരാജയപ്പെട്ടു"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"സിം കാർഡിൽ നിന്ന്‌ കോൺടാക്‌റ്റുകൾ ഇമ്പോർട്ടുചെയ്യാനായില്ല"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"സിം കോൺടാക്റ്റുകൾ ഇമ്പോർട്ടുചെയ്യുന്നു"</string>
 </resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 727716b..7cd1326 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Харилцагчид"</string>
     <string name="contactsList" msgid="8661624236494819731">"Харилцагчид"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Харилцагч нэмэх"</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="shortcutActivityTitle" msgid="1504383567778497348">"Харилцагч сонгох"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Харилцагчид нэмэх"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Харилцагч сонгоно уу"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Сонгох"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Шинэ харилцагч үүсгэх"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Харилцагчийн мэдээлэл"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Устгах"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Зураг солих"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Товчлол үүсгэх"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Харилцагч руу залгах"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Харилцагч руу зурвас илгээх"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Холбоосыг салгах"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Харилцагчдыг арилгах"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Шошгын нэрийг өөрчлөх"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Харилцагчдыг сонгох"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Харилцагч нэмэх"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Шошгоос хасах"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Харилцагч нэмэх"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Шинийг үүсгэх..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Шошго үүсгэх"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Энэ харилцагчийн хаягийг олон харилцагч болгон салгах уу?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Салгах"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Та энэ харилцагчийн жагсаалтыг салгаад, олон харилцагч болгосон өөрчлөлтийг хадгалах уу?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Хадгалах"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Харилцагчийн жагсаалтыг холбох"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g>-г холбосон"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> харилцагч</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> харилцагч · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> харилцагч · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> харилцагч · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> харилцагч · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google-с"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g>-с"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Энэ харилцагчийг устгаснаар хэд хэдэн бүртгэлийн мэдээллийг устгах болно."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Энэ харилцагчийг устгах уу?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Устгах"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Өөрчлөлтүүдийг цуцлах"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Харилцагч байхгүй байна."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Харилцагчийг нүүр хуудсанд нэмсэн."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g>-г нүүр хуудсанд нэмсэн."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Шинэ харилцагч үүсгэх"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Шинэ харилцагч үүсгэх"</string>
     <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="2228592924476426108">"Таны харилцагчдын жагсаалт хоосон байна"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Шошго байхгүй."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Бүлгэм үүсгэхийн тулд танд бүртгэл хэрэгтэй."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Ийм шошготой харилцагч байхгүй"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Энэ бүртгэлд харилцагч байхгүй байна"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Таны харилцагчдын жагсаалт хоосон байна"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Харилцагчийг хадгалахад алдаа гарсан"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Харилцагчийн зургийн өөрчлөлтийг хадгалж чадсангүй"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Шошгыг ачаалж чадсангүй"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Шошгыг хадгалсан"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Шошгыг устгасан"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Шошго үүсгэсэн"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Шошго үүсгэх боломжгүй"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Зурвас илгээх"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Харилцагчдыг сонгоно уу"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Илгээх"</string>
-    <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" 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" 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="5948889261993124839">"Бүгд"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Шошгын нэр"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> бүртгэл"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Шошго"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Солих"</string>
-    <string name="description_star" msgid="2605854427360036550">"дуртай"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Харилцагчийг засварлах"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Цуцлах"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Буцах"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"хаах"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Энэ харилцагчийг сонгосон харилцагчтай холбох уу?"</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="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="7122002148518724139">"Жил оруулах"</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="4347232421410561500">"Бүртгэл нэмэх"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Импортлох"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Шинийг үүсгэх..."</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Устгах"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Цуцлах"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Тохируулгыг устгах уу?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Харилцагчдаас хайх"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Харилцагчдыг арилгах"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Миний дотоод профайл"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Миний <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> профайл"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Бүх харилцагчийг харуулж байна"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Утсаа гээсэн ч харилцагчдаа найдвартай хадгалаарай: онлайн үйлчилгээгээр синк хийгээрэй."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Бүртгэл нэмэх"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Өөрийн харилцагчдыг Google дээр нөөцлөхийн тулд бүртгэл нэмэхэд нэг минут зарцуулна уу."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Шинэ харилцагчийн хаягийг <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>-д хадгална."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Шинэ харилцагчид өгөгдмөл бүртгэл сонгох:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Цөөнийг харах"</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="288549957278065542">"Хувийн хуулбар үүсгэж байна…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"саяхны sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"саяхны дуудлага. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Нэмэлт талбар"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Харилцагчийн зургийг өөрчлөх"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Харилцагчийн зураг нэмэх"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Засварлагчийг нээж чадсангүй."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Хадгалж байна"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g>-н харилцагчийн мэдээллийг засварлах боломжгүй"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Одоогоор <xliff:g id="ACCOUNT_NAME">%s</xliff:g>-д хадгалж байна. Өөр бүртгэл сонгохын тулд хоёр товшино уу."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Холбогдсон харилцагч (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Холбогдсон харилцагч</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> холбосон харилцагч"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ХАРИЛЦАГЧДЫГ ХОЛБОХ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ЦУЦЛАХ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> боломжит хуулбар</item>
-      <item quantity="one">1 боломжит хуулбар</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> холбогдсон харилцагч</item>
-      <item quantity="one">1 холбогдсон харилцагч</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Энэ харилцагч"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Боломжит хуулбар"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Эдгээр харилцагчийн хаяг нь ижил хүн байж болзошгүй. Та нэг харилцагчийн хаяг болгон холбох боломжтой."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Холбогдсон харилцагчид"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Таны бүртгэлээс"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Зураг сонгох"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Илгээгч: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>-г устгах"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>-г устгах"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>-г устгах"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>-н зургийг сонгоогүй"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>-н зургийг сонгосон"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Үл мэдэгдэх бүртгэлийн зургийг сонгоогүй"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Үл мэдэгдэх бүртгэлийн зургийг сонгосон"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Санал болголт"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Шинэ"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Навигацын шургуулгыг нээх"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Директор"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Ажлын лавлагаа"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Бүх харилцагчид"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g>-с олон олдлоо."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g>-тай шууд холбогдох"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Нэр байхгүй)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Байнга холбоо барьдаг"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Харилцагчийг харах"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Утасны дугаартай бүх харилцагчид"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Ажлын профайлын харилцагч"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Шинэчлэлтүүдийг харах"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"СИМ"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Нэр"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Хоч"</string>
-    <string name="full_name" msgid="6602579550613988977">"Нэр"</string>
     <string name="name_given" msgid="4280790853455320619">"Өөрийн нэр"</string>
     <string name="name_family" msgid="7466985689626017037">"Овог"</string>
     <string name="name_prefix" msgid="59756378548779822">"Нэрний урьдитгал"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> руу имэйлдэх"</string>
     <string name="email" msgid="5668400997660065897">"Имэйл"</string>
     <string name="postal_street" msgid="8133143961580058972">"Гудамж"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"ШХ"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Хөрш"</string>
     <string name="postal_city" msgid="6597491300084895548">"Хот"</string>
     <string name="postal_region" msgid="6045263193478437672">"Муж улс"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Зип код"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Өөр бүлгэмүүд…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\"-г синкээс хассанаар бүлгэмээс хасагдсан бүх харилцагчдыг мөн синкээс хасах болно."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Харуулах тохиргоог хадгалж байна…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Дууссан"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Цуцлах"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Тусгай харагдац"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Импортолсон харилцагчийн хаягийг хадгалах:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM карт"</string>
@@ -514,20 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g>-г экспорт хийхийг цуцлах уу?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard импорт/экспорт хийхийг цуцлаж чадсангүй"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Тодорхойгүй алдаа."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\"-г нээж чадсангүй: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\"-г нээж чадсангүй: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Экспорт хийгчийг эхлүүлж чадсангүй: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Экспорт хийж болох харилцагч байхгүй."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Та шаардлагатай зөвшөөрлийг идэвхгүй болгосон байна."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Экспорт хийх явцад алдаа гарсан: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Шаардагдах файлын нэр хэт урт (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O алдаа"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Санах ой хүрэхгүй байна. Файл хэт том байж магадгүй."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Тодорхойгүй шалтгаанаар vCard-г задлаж чадсангүй."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Формат нь дэмжигдэхгүй байна."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Өгөгдсөн vCard файлын мета мэдээллийг цуглуулж чадсангүй."</string>
-    <!-- String.format failed for translation -->
-    <!-- no translation found for fail_reason_failed_to_read_files (5823434810622484922) -->
-    <skip />
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g>-г экспорт хийж дууссан."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Харилцагчдыг экспортолж дууслаа."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Харилцагчдыг экспортолж дууссан. Харилцагчдыг хуваалцахын тулд мэдэгдлийг дарна уу."</string>
@@ -536,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Харилцагчийн өгөгдлийг экспорт хийж байна"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Харилцагчийн датаг экспортолсон."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Өгөгдлийн сангийн мэдээллийг авч чадсангүй"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Экспорт хийж болох харилцагчид алга байна. Хэрэв та утсандаа харилцагчидтай байгаа бол зарим өгөгдөл нийлүүлэгчээс харилцагчдын мэдээллийг утаснаас экспорт хийхийг зөвшөөрөхгүй байж магадгүй."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Экспортлох харилцагчид байхгүй байна."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard бичигч зохих ёсоор эхэлсэнгүй."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Экспорт хийж чадсангүй"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Харилцагчийн өгөгдлийг экспорт хийгээгүй.\nШалтгаан: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g>-г импорт хийж байна"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard өгөгдлийг уншиж чадсангүй"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard өгөгдөл уншихыг цуцлав"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> -г импорт хийж дуусав"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g>-г импорт хийхийг цуцлав"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g>-г удахгүй импорт хийх болно."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Файлыг удахгүй импорт хийх болно."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard импорт хийх хүсэлтийг зөвшөөрсөнгүй. Дараа дахин оролдоно уу."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g>-г удахгүй экспорт хийх болно."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Энэ файлыг удахгүй экспортлох болно."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Харилцагчдыг удахгүй экспортлох болно."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard экспорт хийх хүсэлтийг зөвшөөрсөнгүй. Дараа дахин оролдоно уу."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"харилцагч"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard-г дотоод түр санд кеш хийж байна. Удахгүй бодитоор импорт хийж эхлэх болно."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard-г импорт хийж чадсангүй."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC-р хүлээн авсан харилцагч"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Харилцагчдыг экспорт хийх үү?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Кеш хийж байна"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Импорт хийж байна <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Импорт хийж байна <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf файл болгож экспортлох"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Эрэмбэлэх"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Өөрийн нэр"</string>
@@ -571,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Миний мэдээлэл"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Өөрийн профайлыг тохируулна уу"</string>
     <string name="setting_about" msgid="7014388749752042863">"Харилцагчдын тухай"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Харагдах харилцагчдыг хуваалцах"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Харагдаж байгаа харилцагчдыг хуваалцаж чадсангүй."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Дуртай харилцагчдаа хуваалцах"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Бүх харилцагчдыг хуваалцах"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Харилцагчдыг хуваалцаж чадсангүй."</string>
@@ -582,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Хуваалцах харилцагчид байхгүй байна."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Харуулах харилцагчид"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Харуулах харилцагчид"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Тусгай харагдацыг тодорхойлох"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Харагдацыг тааруулах"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Хадгалах"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Харилцагч хайх"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Таалагддаг"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Харилцагч байхгүй."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Байнга харилцсаныг арилгах"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM карт сонгоно уу"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Бүртгэлийг удирдах"</string>
     <string name="menu_import" msgid="6107961135813836467">"Импортлох"</string>
     <string name="menu_export" msgid="2658783911863503902">"Экспортлох"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Блоклосон дугаар"</string>
@@ -597,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g>-р"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"хайлтыг зогсоох"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Хайлтыг цэвэрлэх"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Харилцагчийг харуулах сонголт"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Бүртгэл"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Дуудлагад байнга үүнийг ашиглах"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Залгах"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Тэмдэглэл бүхий дуудлага хийх"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Дуудлагаар илгээх тэмдэглэл бичнэ үү..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ИЛГЭЭХ &amp; ЗАЛГАХ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> уншаагүй зүйл. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> уншаагүй зүйл. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Боловсруулсан хувилбар"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Нээлттэй эхийн лиценз"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Нээлттэй эхийн програм хангамжийн лицензийн мэдээлэл"</string>
@@ -623,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Устгах"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Эллипс"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> цаг <xliff:g id="MINUTES_1">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мин <xliff:g id="SECONDS">%2$s</xliff:g> сек"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> цаг <xliff:g id="MINUTES_1">%2$s</xliff:g> мин <xliff:g id="SECONDS">%3$s</xliff:g> сек"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Энэ товчилборыг идэвхгүй болгосон"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Харилцагчийг хассан"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Импортлох"</string>
@@ -647,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Холболт байхгүй"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Дэлгэрэнгүй үзэх"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM картыг импорт хийж дууссан"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Импортолж чадсангүй"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM картнаас харилцагчдыг импортолж чадсангүй"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM-г импорт хийж байна"</string>
 </resources>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index 023f8df..b3430b7 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"संपर्क"</string>
     <string name="contactsList" msgid="8661624236494819731">"संपर्क"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"संपर्क जोडा"</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="shortcutActivityTitle" msgid="1504383567778497348">"संपर्क निवडा"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"संपर्कामध्ये जोडा"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"संपर्क निवडा"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"निवडा"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"नवीन संपर्क तयार करा"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"संपर्क तपशील"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"हटवा"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"फोटो बदला"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"शॉर्टकट तयार करा"</string>
-    <string name="menu_call" msgid="3992595586042260618">"संपर्कास कॉल करा"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"संपर्कास मजकूर पाठवा"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"दुवा रद्द करा"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"संपर्क काढा"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"लेबल पुनर्नामित करा"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"संपर्क निवडा"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"संपर्क जोडा"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"लेबलवरून काढा"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"संपर्क जोडा"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"नवीन तयार करा…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"लेबल तयार करा"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"एकाधिक संपर्कांमध्‍ये या संपर्काचा दुवा रद्द करायचा?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"दुवा रद्द करा"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"आपण आधीपासून केलेले बदल आपण जतन करू आणि एकाधिक संपर्कांमध्‍ये या संपर्काचा दुवा रद्द करू इच्छिता?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"जतन करा"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"संपर्कांचा दुवा साधा"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"आपण <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> चा दुवा जोडला"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> संपर्क</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> संपर्क · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> संपर्क · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> संपर्क · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> संपर्क · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google वरील"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> मधील"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"हा संपर्क हटविल्याने एकाधिक खात्‍यांमधून तपशील हटविले जातील."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"हा संपर्क हटवायचा?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"हटवा"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"बदल टाकून द्या"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"संपर्क अस्तित्वात नाही."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"संपर्क मुख्‍यपृष्‍ठावर जोडला."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ना मुख्‍यपृष्‍ठावर जोडले."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"नवीन संपर्क तयार करा"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"नवीन संपर्क तयार करा"</string>
     <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="2228592924476426108">"आपली संपर्क सूची रिक्त आहे"</string>
-    <string name="noGroups" msgid="4607906327968232225">"लेबलेे नाहीत."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"गट तयार करण्‍यासाठी आपल्‍याला खात्‍याची आवश्‍यकता अाहे."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"या लेबलसह कोणतेही संपर्क नाहीत"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"या खात्यामध्ये कोणतेही संपर्क नाहीत"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"आपली संपर्क सूची रिक्त आहे"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"संपर्क जतन करताना त्रुटी"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"संपर्क फोटो बदल जतन करणे शक्य झाले नाही"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"लेबल लोड करण्यात अयशस्वी झाले"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"लेबल जतन केले"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"लेबल हटविले"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"लेबल तयार केले"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"लेबल तयार करू शकत नाही"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"संदेश पाठवा"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"संपर्क निवडा"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"पाठवा"</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="5948889261993124839">"सर्व"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"लेबल नाव"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> खाते"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"लेबल"</string>
-    <string name="change_photo" msgid="8530597935483526383">"बदला"</string>
-    <string name="description_star" msgid="2605854427360036550">"आवडते"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"संपर्क संपादित करा"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"रद्द करा"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"परत"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"बंद करा"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"वर्तमान संपर्काचा निवडलेल्‍या संपर्कासह दुवा जोडायचा?"</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="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="7122002148518724139">"वर्ष समाविष्‍ट करा"</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="4347232421410561500">"खाते जोडा"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"आयात करा"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"नवीन तयार करा…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"टाकून द्या"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"रद्द करा"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"सानुकूलीकरणेे टाकूून द्यायची?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"संपर्क शोधा"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"संपर्क काढा"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"माझे स्थानिक प्रोफाइल"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"माझे <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> प्रोफाईल"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"सर्व संपर्क प्रदर्शित करीत आहे"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"आपण आपला फोन गमावला तरीही आपले संपर्क सुरक्षित ठेवा: ऑनलाइन सेवेसह संकालित करा."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"खाते जोडा"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Google वर आपल्या संपर्कांचा बॅक अप घेणारे खाते जोडण्‍यासाठी एक मिनिट घ्या."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"नवीन संपर्क <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> वर जतन केले जातील."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"नवीन संपर्कांसाठी एक डीफॉल्ट खाते निवडा:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"कमी पहा"</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="288549957278065542">"वैयक्तिक प्रत तयार करीत आहे..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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">"अलीकडील एसएमएस. <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_sms" msgid="1666389577263317445">"अलीकडील एसएमएस. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"अलीकडील कॉल. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"आणखी फील्ड"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"संपर्क फोटो बदला"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"संपर्क फोटो जोडा"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"संपादक उघडण्यात अयशस्वी."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"यावर जतन करीत आहे"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> वरील संपर्क माहिती संपादनयोग्य नाही"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"सध्या <xliff:g id="ACCOUNT_NAME">%s</xliff:g> मध्ये जतन करीत आहे. भिन्न खाते निवडण्यासाठी दोनदा टॅप करा."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> दुवा जोडलेले संपर्क"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"संपर्कांचा दुवा साधा"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"रद्द करा"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> संभाव्य डुप्लिकेट</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> संभाव्य डुप्लिकेट</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> दुवा साधलेला संपर्क</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> दुवा साधलेले संपर्क</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"हा संपर्क"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"संभाव्य डुप्लिकेट"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"हे संपर्क म्हणजे कदाचित एकच व्यक्ती असू शकते. आपण त्या सर्वांना एकल दुवा म्हणून एकत्र जोडू शकता."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"दुवा साधलेले संपर्क"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"आपल्‍या खात्यांमधून"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"फोटो निवडा"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> कडील"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> हटवा"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> हटवा"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> हटवा"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>कडील फोटो चेक केला नाही"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>कडील फोटो चेक केला"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"अज्ञात खात्यामधील फोटो चेक केला नाही"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"अज्ञात खात्यामधील फोटो चेक केला"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"सूचना"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"नवीन"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"नेव्हिगेशन ड्रॉवर उघडा"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"निर्देशिका"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"कार्य निर्देशिका"</string>
     <string name="local_search_label" msgid="2551177578246113614">"सर्व संपर्क"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> पेक्षा जास्त आढळले."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> साठी द्रुत संपर्क"</string>
     <string name="missing_name" msgid="8745511583852904385">"(नाव नाही)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"वारंवार संपर्क केलेले"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"संपर्क पहा"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"फोन नंबरसह सर्व संपर्क"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"कार्य प्रोफाईल संपर्क"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"अद्यतने पहा"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"सिम"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"नाव"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"टोपणनाव"</string>
-    <string name="full_name" msgid="6602579550613988977">"नाव"</string>
     <string name="name_given" msgid="4280790853455320619">"नाव"</string>
     <string name="name_family" msgid="7466985689626017037">"आडनाव"</string>
     <string name="name_prefix" msgid="59756378548779822">"नाव प्रत्यय"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> वर ईमेल करा"</string>
     <string name="email" msgid="5668400997660065897">"ईमेल"</string>
     <string name="postal_street" msgid="8133143961580058972">"मार्ग"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"PO बॉक्स"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"अतिपरिचित क्षेत्र"</string>
     <string name="postal_city" msgid="6597491300084895548">"शहर"</string>
     <string name="postal_region" msgid="6045263193478437672">"राज्य"</string>
     <string name="postal_postcode" msgid="572136414136673751">"पिनकोड"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"अधिक गट..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"संकालन करा मधून \"<xliff:g id="GROUP">%s</xliff:g>\" हटविल्‍याने संकालन करा मधून कोणत्‍याही गटबद्ध न केलेल्‍या संपर्कांना देखील हटवेल."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"प्रदर्शन पर्याय जतन करत आहे…"</string>
-    <string name="menu_done" msgid="796017761764190697">"पूर्ण झाले"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"रद्द करा"</string>
     <string name="listCustomView" msgid="1840624396582117590">"सानुकूलित दृश्य"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"आयात केलेले संपर्क यावर जतन करा:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"सिम कार्ड"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> चे निर्यात रद्द करायचे?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard आयात/निर्यात रद्द करू शकल नाही"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"अज्ञात त्रुटी."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" उघडू शकलो नाही: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" उघडू शकलो नाही: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"निर्यातकर्ता प्रारंभ करू शकला नाही: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"कोणताही निर्यात करण्‍यायोग्‍य संपर्क नाही."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"आपण आवश्‍यक असलेली एक परवानगी अक्षम केली आहे."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"निर्यात दरम्‍यान त्रुटी आलीt: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"आवश्‍यक फाईल नाव (\"<xliff:g id="FILENAME">%s</xliff:g>\") खूप मोठे आहे."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O त्रुटी"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"पुरेशी मेमरी नाही. फाईल कदाचित खूप मोठी असू शकते."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"अनपेक्षित कारणासाठी vCard विश्लेषण करू शकलो नाही."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"स्वरूपन समर्थित नाही."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"दिलेल्‍या vCard फाईल(यली) ची मेटा माहिती संकलित करू शकलो नाही."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"एक किंवा अधिक फायली आयात केल्‍या जाऊ शकत नाहीत(%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> निर्यात करणे समाप्त झाले."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"संपर्क आयात करणे समाप्त झाले"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"संपर्क निर्यात करणे समाप्त झाले, संपर्क सामायिक करण्यासाठी सूचनेवर क्लिक करा."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"संपर्क डेटा निर्यात करीत आहे"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"संपर्क डेटा निर्यात केला जात आहे."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"डेटाबेस माहिती मिळवू शकलो नाही."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"निर्यात करण्‍यायोग्‍य संपर्क नाहीत. आपल्‍या फोनवर संपर्क असल्‍यास, काही डेटा प्रदाते फोनवरून संपर्क निर्यात करण्‍यास कदाचित अनुमती देणार नाहीत."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"कोणतेही निर्यात करण्यायोग्य संपर्क नाहीत."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard रचनाकाराने योग्‍यरित्‍या प्रारंभ केला नाही."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"निर्यात करू शकलो नाही"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"संपर्क डेटा निर्यात केला नाही.\nकारण: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> आयात करीत आहे"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard डेटा वाचू शकलो नाही"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard डेटा वाचणे रद्द केले"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> आयात करणे समाप्त झाले"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> आयात करणे रद्द झाले"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> लवकरच आयात केली जाईल."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"फाईल लवकरच आयात केली जाईल."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard आयात विनंती नाकारली. नंतर पुन्हा प्रयत्न करा."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> लवकरच निर्यात केली जाईल."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"फाईल लवकरच निर्यात केली जाईल."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"संपर्क लवकरच निर्यात केले जातील."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard निर्यात विनंती नाकारली. नंतर पुन्हा प्रयत्न करा."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"संपर्क"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"स्‍थानिक तात्‍पुरत्‍या संचयनावर vCard(s) कॅशे करीत आहे. वास्‍तविक आयात लवकरच प्रारंभ होईल."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard आयात करू शकलो नाही."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC वर संपर्क प्राप्त केला"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"संपर्क निर्यात करायचे?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"कॅशे करीत आहे"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"आयात करत आहे <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"आयात करत आहे <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf फाईलवर निर्यात करा"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"नुसार क्रमवारी लावा"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"नाव"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"माझी माहिती"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"आपले प्रोफाईल सेट करा"</string>
     <string name="setting_about" msgid="7014388749752042863">"संपर्कांबद्दल"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"दृश्यमान संपर्क सामायिक करा"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"दृश्यमान संपर्क सामायिक करण्‍यात अयशस्वी झाले."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"आवडते संपर्क सामायिक करा"</string>
     <string name="share_contacts" msgid="8109287987498711664">"सर्व संपर्क सामायिक करा"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"संपर्क सामायिक करण्यात अयशस्वी झाले."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"सामायिक करण्यासाठी कोणतेही संपर्क नाहीत."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"प्रदर्शित करण्यासाठी संपर्क"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"प्रदर्शित करण्यासाठी संपर्क"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"सानुकूलति दृश्य परिभाषित करा"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"दृश्य सानुकूल करा"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"जतन करा"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"संपर्क शोधा"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"आवडते"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"कोणतेही संपर्क नाहीत."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"वारंवारता साफ करा"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"सिम कार्ड निवडा"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"खाती व्यवस्थापित करा"</string>
     <string name="menu_import" msgid="6107961135813836467">"आयात करा"</string>
     <string name="menu_export" msgid="2658783911863503902">"निर्यात"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"अवरोधित केलेले नंबर"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> द्वारे <xliff:g id="DATE">%1$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"शोध थांबवा"</string>
     <string name="description_clear_search" msgid="688023606766232904">"शोध साफ करा"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"संपर्क प्रदर्शन पर्याय"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"खाते"</string>
     <string name="set_default_account" msgid="4311613760725609801">"कॉलसाठी हे नेहमी वापरा"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"यासह कॉल करा"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"टीपसह कॉल करा"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"कॉलसह पाठविण्‍यासाठी एक टीप टाइप करा..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"पाठवा आणि कॉल करा"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> न वाचलेला आयटम. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> न वाचलेले आयटम. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"बिल्ड आवृत्ती"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"मुक्त स्रोत परवाने"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"मुक्त स्त्रोत सॉफ्टवेअरसाठी परवाना तपशील"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"हटवा"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"पदलोप"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> सेकंद"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> मि. <xliff:g id="SECONDS">%s</xliff:g>सेकंद"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ता. <xliff:g id="MINUTES_1">%s</xliff:g> मि. <xliff:g id="SECONDS">%s</xliff:g> सेकंद"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> मि. <xliff:g id="SECONDS">%2$s</xliff:g>सेकंद"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ता. <xliff:g id="MINUTES_1">%2$s</xliff:g> मि. <xliff:g id="SECONDS">%3$s</xliff:g> सेकंद"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"हा शॉर्टकट अक्षम केला गेला आहे"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"संपर्क काढला होता"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"आयात करा"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"कोणतेही कनेक्शन नाही"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"सिम"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"अधिक दर्शवा"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"सिम कार्ड आयात करणे समाप्त झाले"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"आयात अयशस्वी झाले"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"सिम कार्ड वरून संपर्क आयात करणेे शक्य झाले नाही"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"सिम आयात करीत आहे"</string>
 </resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 3f2969d..4976b13 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kenalan"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kenalan"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Tambah kenalan"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kenalan"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Dail terus"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Mesej langsung"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Pilih pintasan kenalan"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Pilih nombor utk panggilan"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Pilih nombor untuk menghantar mesej"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Pilih kenalan"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Tambahkan pada kenalan"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Pilih kenalan"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Pilih"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Buat kenalan baharu"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Butiran kenalan"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Perihal"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Kemas kini"</string>
     <string name="searchHint" msgid="8482945356247760701">"Cari dalam kenalan"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Papar kenalan"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Tambah ke kegemaran"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Alih keluar daripada kegemaran"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Dialih keluar daripada kegemaran"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Buat pintasan"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Panggil kenalan"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"SMS kepada kenalan"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Nyahpaut"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Alih keluar kenalan"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Namakan semula label"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Pilih kenalan"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Tambahkan kenalan"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Alih keluar daripada label"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Tambahkan kenalan"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Buat baharu…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Buat label"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Nyahpaut kenalan ini menjadi beberapa kenalan?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Nyahpaut"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Adakah anda ingin menyimpan perubahan yang telah dibuat dan menyahpaut kenalan ini menjadi beberapa kenalan?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Simpan"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Paut kenalan"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Pilih kenalan yang anda mahu pautkan dengan <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> dipaut"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kenalan</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kenalan · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kenalan · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kenalan · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kenalan · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Daripada Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Daripada <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Memadamkan kenalan ini akan memadamkan butiran daripada berbilang akaun."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Padam kenalan ini?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Padam"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Buang perubahan"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kenalan tidak wujud."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kenalan ditambahkan pada Skrin utama."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ditambahkan pada Skrin utama."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Buat kenalan baharu"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Buat kenalan baharu"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Tiada gambar yang tersedia pada tablet."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Tidak ada gambar yang tersedia pada telefon."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto kenalan"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nama label peribadi"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Hantar panggilan terus ke peti suara"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Alih keluar foto"</string>
     <string name="noContacts" msgid="2228592924476426108">"Senarai kenalan anda kosong"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Tiada label."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Anda memerlukan akaun untuk membuat kumpulan."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Tiada kenalan dengan label ini"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Tiada kenalan dalam akaun ini"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Senarai kenalan anda kosong"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Ralat menyimpan kenalan"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Tidak dapat menyimpan perubahan foto kenalan"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Gagal memuatkan label"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Label disimpan"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label dipadamkan"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Label dibuat"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Tidak dapat membuat label"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Hantar mesej"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Pilih Kenalan"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Hantar"</string>
-    <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" 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" 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="5948889261993124839">"Semua"</string>
-    <string name="callBack" msgid="5498224409038809224">"Panggil balik"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Panggil semula"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Balas panggilan"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Tambah \"<xliff:g id="EMAIL">%s</xliff:g>\" kepada kenalan?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"tambah"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> daripada <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kenalan"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nama kenalan anda"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Tiada aplikasi ditemui untuk mengendalikan tindakan ini."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klik untuk kembali ke skrin sebelumnya"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Tambah nombor telefon"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Tambah e-mel"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nama label"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Sembang suara"</string>
     <string name="video_chat" msgid="1872255818640336072">"Sembang video"</string>
-    <string name="connections" msgid="8098440723172028350">"Sambungan"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Tambah sambungan"</string>
-    <string name="recent" msgid="2659189233141493004">"Terbaru"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Kemas kini terbaru"</string>
     <string name="account_type_format" msgid="718948015590343010">"Kenalan <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Akaun <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Ambil foto"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Ambil foto baru"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Pilih foto"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Pilih foto baharu"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Pilih semua"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Nyahpilih semua"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Tambah baru"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Tambah organisasi"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarikh"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Label"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Tukar"</string>
-    <string name="description_star" msgid="2605854427360036550">"kegemaran"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Edit kenalan"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Batal"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Kembali"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"tutup"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Pautkan 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Tambahkan pada Kenalan Saya"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Direktori <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Tetapan"</string>
     <string name="menu_settings" msgid="377929915873428211">"Tetapan"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Tambah ke kenalan"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Tambah ke kenalan"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Tutup"</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="7122002148518724139">"Termasuk tahun"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kenalan"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Memuatkan…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Buat kenalan baharu"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Tambahkan akaun"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Import"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Buat baharu…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Buang"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Batal"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Buang penyesuaian?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Cari dalam kenalan"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Alih keluar kenalan"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Profil setempat saya"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> saya"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Memaparkan semua kenalan"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Pastikan kenalan anda selamat walaupun jika anda kehilangan telefon anda: segerakkan dengan perkhidmatan dalam talian."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Tambah akaun"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Luangkan sedikit masa untuk menambah akaun yang akan menyandarkan kenalan anda ke Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Kenalan baharu akan disimpan ke <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Pilih akaun lalai untuk kenalan baharu:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Lihat kurang"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Terbaharu"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Mengenai"</string>
-    <string name="send_message" msgid="8938418965550543196">"Hantar mesej"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Membuat salinan peribadi..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Esok"</string>
     <string name="today" msgid="8041090779381781781">"Hari ini"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Hari ini pada <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Esok pada <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Acara tidak bertajuk)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Tetapkan"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Tapak web"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Acara"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Hubungan"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Akaun"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nama"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mel"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik untuk kembangkan editor kenalan."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik untuk runtuhkan editor kenalan."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"arah ke lokasi"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms terbaharu. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik untuk membalas"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms terbaharu. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik untuk membalas"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"masuk"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"keluar"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"tidak dijawab"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"panggilan terbaharu. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Lebih banyak medan"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Tukar foto kenalan"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Tambahkan foto kenalan"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Gagal membuka editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Menyimpan ke"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Maklumat kenalan daripada <xliff:g id="ACCOUNT">%s</xliff:g> tidak boleh diedit"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Sedang disimpan pada <xliff:g id="ACCOUNT_NAME">%s</xliff:g> pada masa ini. Ketik dua kali untuk memilih akaun yang lain."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Kenalan dipautkan (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Kenalan dipautkan</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> kenalan dipaut"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"PAUT KENALAN"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"BATAL"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Pendua berkemungkinan</item>
-      <item quantity="one">1 Pendua berkemungkinan</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kenalan dipaut</item>
-      <item quantity="one">1 kenalan dipaut</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Kenalan ini"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Pendua berkemungkinan"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Kenalan ini mungkin orang yang sama. Anda boleh memautnya bersama sebagai satu kenalan."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Kenalan dipautkan"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Daripada akaun anda"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Pilih foto"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Daripada <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Padamkan <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Padamkan <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Padamkan <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto daripada <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>tidak ditandai"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto daripada <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ditandai"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto daripada akaun yang tidak diketahui tidak ditandai"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto daripada akaun yang tidak diketahui ditandai"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Cadangan"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Baharu"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Buka laci navigasi"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Direktori"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Direktori kerja"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Semua kenalan"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"lebih daripada <xliff:g id="COUNT">%d</xliff:g> ditemui."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Kenalan cepat untuk <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Tiada nama)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Kerap dihubungi"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Lihat kenalan"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Semua kenalan dengan nombor telefon"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Kenalan profil kerja"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Lihat kemas kini"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nama"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Nama panggilan"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nama"</string>
     <string name="name_given" msgid="4280790853455320619">"Nama pertama"</string>
     <string name="name_family" msgid="7466985689626017037">"Nama keluarga"</string>
     <string name="name_prefix" msgid="59756378548779822">"Awalan nama"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"E-mel <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-mel"</string>
     <string name="postal_street" msgid="8133143961580058972">"Jalan"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Peti Surat"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Kawasan kejiranan"</string>
     <string name="postal_city" msgid="6597491300084895548">"Bandar"</string>
     <string name="postal_region" msgid="6045263193478437672">"Negeri"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Poskod"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Lagi kumpulan..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Mengalih keluar \"<xliff:g id="GROUP">%s</xliff:g>\" daripada penyegerakan juga akan turut mengalih keluar sebarang kenalan tanpa kumpulan dari penyegerakan."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Menyimpan pilihan paparan..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Selesai"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Batal"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Paparan yang disesuaikan"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Simpan kenalan yang diimport ke:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Kad SIM"</string>
@@ -514,20 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Batalkan pengeksportan <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Tidak dapat membatalkan import/eksport vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Ralat tidak diketahui."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Tidak dapat membuka \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Tidak dapat membuka \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Tidak boleh memulakan pengeksport: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Tiada kenalan yang boleh dieksport."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Anda telah melumpuhkan kebenaran yang diperlukan."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ralat berlaku semasa pengeksportan: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Nama fail yang diperlukan terlalu panjang (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Ralat I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Tidak cukup memori. Fail itu mungkin terlalu besar."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Tidak dapat menghurai vCard atas sebab-sebab yang tidak dijangka."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format tidak disokong."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Tidak boleh mengumpul maklumat meta fail Vcard yang tertentu."</string>
-    <!-- String.format failed for translation -->
-    <!-- no translation found for fail_reason_failed_to_read_files (5823434810622484922) -->
-    <skip />
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Selesai mengeksport <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Selesai mengeksport kenalan."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Selesai mengeksport kenalan, klik pemberitahuan untuk berkongsi kenalan."</string>
@@ -536,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Mengeksport data kenalan"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Data kenalan sedang dieksport."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Tidak boleh mendapatkan maklumat pangkalan data."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Tiada kenalan boleh dieksport. Jika anda mempunyai kenalan pada telefon anda, sesetengah pembekal data tidak boleh membenarkan kenalan dieksport dari telefon."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Tiada kenalan yang boleh dieksport."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Komposer vCard tidak bermula dengan betul."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Tidak boleh mengeksport"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Data kenalan tidak dieksport.\nAlasan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Mengimport <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Tidak dapat membaca data vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Membaca data vCard dibatalkan"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Selesai mengimport vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Pengimportan <xliff:g id="FILENAME">%s</xliff:g> dibatalkan"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> akan diimport sebentar lagi."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fail akan diimport sebentar lagi."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Permintaan import vCard telah ditolak. Cuba lagi nanti."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> akan dieksport sebentar lagi."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Fail akan dieksport sebentar lagi."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kenalan akan dieksport sebentar lagi."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Permintaan eksport vCard telah ditolak. Cuba lagi nanti."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kenalan"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Membuat cache vCard ke storan sementara tempatan. Pengimportan sebenar akan bermula tidak lama lagi."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Tidak dapat mengimport vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Knln melalui NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Eksport kenalan?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Mengcache..."</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Mengimport <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Mengimport <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Eksport ke fail .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Isih mengikut"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nama pertama"</string>
@@ -571,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Maklumat saya"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Sediakan profil anda"</string>
     <string name="setting_about" msgid="7014388749752042863">"Perihal Kenalan"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Kongsi kenalan yang kelihatan"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Gagal berkongsi kenalan yang kelihatan."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Kongsi kenalan kegemaran"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Kongsi semua kenalan"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Gagal berkongsi kenalan."</string>
@@ -582,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Tiada kenalan untuk dikongsi."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kenalan untuk dipaparkan"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kenalan untuk dipaparkan"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Tentukan paparan yang disesuaikan"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Sesuaikan paparan"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Simpan"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Cari kenalan"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Kegemaran"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Tiada kenalan."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Padam bersih kerap dihubungi"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Pilih kad SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Urus akaun"</string>
     <string name="menu_import" msgid="6107961135813836467">"Import"</string>
     <string name="menu_export" msgid="2658783911863503902">"Eksport"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Nombor yang disekat"</string>
@@ -597,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> melalui <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"berhenti mencari"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Kosongkan carian"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Pilihan paparan kenalan"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Akaun"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Sentiasa gunakan ini utk panggilan"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Panggil dengan"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Panggilan dengan nota"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Taip nota untuk dihantar dengan panggilan…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"HANTAR &amp; PANGGIL"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> item belum dibaca. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> item belum dibaca. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versi binaan"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Lesen sumber terbuka"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Butiran lesen untuk perisian sumber terbuka"</string>
@@ -623,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Padam"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Elipsis"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> saat"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> saat"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> jam <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> saat"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> saat"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> jam <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> saat"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Pintasan ini telah dilumpuhkan"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kenalan telah dialih keluar"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Import"</string>
@@ -647,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Tiada sambungan"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Tunjukkan lagi"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Selesai mengimport kad SIM"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Pengimportan gagal"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Tidak dapat mengimport kenalan daripada kad SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Mengimport SIM"</string>
 </resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index 3a45f0b..fadda61 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"အဆက်အသွယ်များ"</string>
     <string name="contactsList" msgid="8661624236494819731">"အဆက်အသွယ်များ"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"အဆက်အသွယ် ထည့်ရန်"</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="shortcutActivityTitle" msgid="1504383567778497348">"အဆက်အသွယ်ကို ရွေးချယ်ပါ"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"လိပ်စာသို့ထည့်ပါ"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"လိပ်စာတစ်ခုရွေးပါ"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ရွေးရန်"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"အဆက်အသွယ် အသစ် ဖန်တီးရန်"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"အဆက်အသွယ် အသေးစိတ်"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"ဖျက်ရန်"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"ဓာတ်ပုံပြောင်းရန်"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"ဖြတ်လမ်းလင့်ခ် ပြုလုပ်ရန်"</string>
-    <string name="menu_call" msgid="3992595586042260618">"အဆက်အသွယ်ကို ခေါ်ပါ"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"အဆက်အသွယ်ကို စာတိုပို့ရန်"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"လင့်ခ် ဖြုတ်ရန်"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"အဆက်အသွယ်များ ဖယ်ရှားရန်"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"အညွှန်းအမည်ပြောင်းပါ"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"အဆက်အသွယ်များရွေးရန်"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"အဆက်အသွယ်များထည့်ရန်"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"အညွှန်းမှဖယ်ရှားပါ"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"အဆက်အသွယ်ထည့်ပါ"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"အသစ်ဖန်တီးပါ…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"အညွှန်း ဖန်တီးရန်"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"ဤအဆက်အသွယ်အား ချိတ်ဆက်ထားမှုကို ဖျက်လျက် အဆက်အသွယ် အများအပြားအဖြစ် ခွဲပစ်ရမလား။"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ချိတ်ဆက်မှုဖြုတ်ပါ"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"သင် ပြုလုပ်ခဲ့သည့် အပြောင်းအလဲများကို သိမ်းဆည်းလျက် ဤအဆက်အသွယ်အား ချိတ်ဆက်ထားမှုကို ဖျက်လိုက်ကာ အဆက်အသွယ် အများအပြားအဖြစ် ခွဲပစ်ရမလား။"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"သိမ်းဆည်းရန်"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"အဆက်အသွယ်များ ချိတ်ဆက်ရန်"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ကို လင့်ခ်ချိတ်လိုက်ပါပြီ"</string>
@@ -83,8 +74,8 @@
       <item quantity="one">အဆက်အသွယ် <xliff:g id="COUNT_0">%d</xliff:g> ခု</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other">အဆက်အသွယ် <xliff:g id="COUNT_2">%d</xliff:g> ခု · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one">အဆက်အသွယ် <xliff:g id="COUNT_0">%d</xliff:g> ခု · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other">အဆက်အသွယ် <xliff:g id="COUNT_2">%1$d</xliff:g> ခု · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one">အဆက်အသွယ် <xliff:g id="COUNT_0">%1$d</xliff:g> ခု · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google မှ"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> မှ"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ဤအဆက်အသွယ်ကို ဖျက်လိုက်လျှင် အကောင့် အများအပြားထဲရှိ ဆက်နွယ်အချက်အလက်များကိုပါ ဖျက်ပါမည်။"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"ဤအဆက်အသွယ်ကို ဖျက်မလား။"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ဖျက်ရန်"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"အပြောင်းအလဲများ ဖယ်ပစ်ရန်"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"လိပ်စာ မရှိပါ"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"အဆက်အသွယ်ကို ပင်မ မျက်နှာပြင်သို့ ထည့်လိုက်ပြီ။"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ကို ပင်မ မျက်နှာပြင်သို့ ထည့်ပေးလိုက်ပြီ။"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"အဆက်အသွယ်သစ်တစ်ခု ပြုလုပ်ရန်"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"အဆက်အသွယ်သစ်တစ်ခု ပြုလုပ်ရန်"</string>
     <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="2228592924476426108">"သင့်အဆက်အသွယ်များစာရင်းတွင် မည်သူမျှမရှိပါ"</string>
-    <string name="noGroups" msgid="4607906327968232225">"အညွှန်းများမရှိပါ။"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"အုပ်စုများ ပြုလုပ်ရန် အကောင့်တစ်ခု လိုအပ်ပါသည်"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"ဤအညွှန်းဖြင့်အဆက်အသွယ်များ မရှိပါ"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"ဤအကောင့်တွင် အဆက်အသွယ်များ မရှိပါ"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"သင့်အဆက်အသွယ်များစာရင်းတွင် မည်သူမျှမရှိပါ"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"အဆက်အသွယ်သိမ်းဆည်းရာတွင် အမှားအယွင်းရှိပါသည်"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"အဆက်အသွယ်ဓာတ်ပုံပြောင်းလဲမှုများကို သိမ်းဆည်း၍မရပါ"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"အညွှန်းဖော်ပြ၍မရပါ"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"အညွှန်းကို သိမ်းပြီးပါပြီ"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"အညွှန်းဖျက်ပြီးပါပြီ"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"အညွှန်းဖန်တီးပြီးပါပြီ"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"အညွှန်းဖန်တီး၍ မရပါ"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"မက်ဆေ့ဂျ် ပို့ရန်"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"အဆက်အသွယ်များ ရွေးရန်"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"ပို့ရန်"</string>
-    <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" 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" 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="5948889261993124839">"အားလုံး"</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_plus_button" msgid="515164827856229880">"အပေါင်း"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ၏ <xliff:g id="TOTAL_NUMBER">%s</xliff:g> လိပ်စာ"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"အဆက်အသွယ်များ၏နာမည်များ"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"အညွှန်းအမည်"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> အကောင့်"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"အညွှန်း"</string>
-    <string name="change_photo" msgid="8530597935483526383">"ပြောင်းရန်"</string>
-    <string name="description_star" msgid="2605854427360036550">"အနှစ်သက်ဆုံး"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"အဆက်အသွယ်အားပြင်ရန်"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"မလုပ်တော့"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"နောက်သို့"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ပိတ်ရန်"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"လက်ရှိအဆက်အသွယ်ကို ရွေးချယ်ထားသည့်အဆက်အသွယ်နှင့် ကွင်းဆက်ချိတ်မလား။"</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="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="7122002148518724139">"နှစ်ကို ထည့်ရန်"</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="4347232421410561500">"အကောင့်ထည့်ရန်"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"တင်သွင်းရန်"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"အသစ်ဖန်တီးပါ…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ဖယ်ပစ်ရန်"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"မလုပ်တော့"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"စိတ်ကြိုက်ပြုလုပ်ခြင်းများကို ဖယ်ပစ်မလား။"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"အဆက်အသွယ်များရှာပါ"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"အဆက်အသွယ်များ ဖယ်ရှားရန်"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"မိမိ၏ဖုန်းမှပရိုဖိုင်လ်"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"ကျွန်ုပ်၏ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ကိုယ်ရေးအကောင့်"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"အဆက်အသွယ်အားလုံးအားပြနေစဉ်"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"အွန်လိုင်း ဝန်ဆောင်မှုဖြင့် ထပ်တူကျအောင် ပြုလုပ်ထားခြင်းအားဖြင့် ဖုန်းပျောက်သွားသည့်တိုင်အောင် အဆက်အသွယ်များအား လုံခြုံစွာ သိမ်းထားနိုင်ပါသည်"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"အကောင့်တစ်ခုထည့်ပါ"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Google သို့ သင့်အဆက်အသွယ်များကို မိတ္တူကူးယူပေးမည့် အကောင့်တစ်ခုထည့်ရန် တစ်မိနစ်လောက် အချိန်ပေးလိုက်ပါ။"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"အဆက်အသွယ် အသစ်ကို <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> တွင်သိမ်းလိုက်ပါမည်။"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"အဆက်အသွယ် အသစ်များအတွက် မူရင်းအကောင့်ကို ရွေးပါ။"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"လျှော့ပြီး ကြည့်ရန်"</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="288549957278065542">"မိမိအတွက် ကိုယ်ပိုင်ကော်ပီ ပြုလုပ်နေစဉ်…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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">"မကြာမီက စာတို။ <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_sms" msgid="1666389577263317445">"မကြာမီက စာတို။ <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"မကြာမီက ခေါ်ဆိုမှု။ <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"နောက်ထပ်အကွက်များ"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"အဆက်အသွယ်ဓာတ်ပုံ ပြောင်းရန်"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"အဆက်အသွယ်ဓာတ်ပုံ ထည့်ရန်"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"အယ်ဒီတာကို ဖွင့်၍မရပါ။"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"အောက်ပါသို့ သိမ်းနေပါသည်"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> ထံမှအဆက်အသွယ်ကို ပြင်ဆင်၍မရပါ"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> သို့ လတ်တလောသိမ်းနေပါသည်။ အခြားအကောင့်ရွေးရန် နှစ်ချက်တို့ပါ။"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">လင့်ခ်ချိတ်ထားသောအဆက်အသွယ် (<xliff:g id="COUNT">%d</xliff:g>) ခု</item>
-      <item quantity="one">လင့်ခ်ချိတ်ထားသောအဆက်အသွယ်</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"ကွင်းဆက်ချိတ်ထားသည့် အကောင့် <xliff:g id="COUNT">%d</xliff:g> ခု"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"အဆက်အသွယ်များ ချိတ်ဆက်ပါ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"မလုပ်တော့"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other">ဖြစ်နိုင်သည့် မိတ္တုပွား <xliff:g id="COUNT">%d</xliff:g> ခု</item>
-      <item quantity="one">ဖြစ်နိုင်သည့် မိတ္တုပွား ၁ ခု</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">ချိတ်ဆက်ထားသည့် အဆက်အသွယ် <xliff:g id="COUNT">%d</xliff:g> ခု</item>
-      <item quantity="one">ချိတ်ဆက်ထားသည့် အဆွက်အသွယ် ၁ ခု</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ဤအဆက်အသွယ်"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ဖြစ်နိုင်သည့် မိတ္တုပွားများ"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"ယင်းအဆက်အသွယ်များ လူတစ်ဦးတည်း ဖြစ်နိုင်ပါသည်။ ၎င်းတို့ကို တစ်ခုတည်းသော အဆက်အသွယ် အဖြစ် ချိတ်ဆက်ပေးနိုင်ပါသည်။"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"လင့်ခ်ချိတ်ထားသောအဆက်အသွယ်များ"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"သင့်အကောင့်များမှ"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"ဓာတ်ပုံ ရွေးပါ"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> မှ"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> ကိုဖျက်ပါ"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> ကိုဖျက်ပါ"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ကိုဖျက်ပါ"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ထံမှ ဓာတ်ပုံကို မစစ်ကြည့်ရသေးပါ"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>ထံမှ ဓာတ်ပုံကို စစ်ကြည့်ပြီးပြီ"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"အမည်မသိအကောင့်မှ ဓာတ်ပုံဓာတ်ပုံ မစစ်ဆေးရသေးပါ"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"အမည်မသိအကောင့်မှ ဓာတ်ပုံ စစ်ဆေးပြီးပါပြီ"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"အကြံပြုချက်များ"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"အသစ်"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"လမ်းညွှန်ချက်အကွက်ကို ဖွင့်ပါ"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"လမ်းညွှန်"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"အလုပ်လမ်းညွှန်"</string>
     <string name="local_search_label" msgid="2551177578246113614">"အဆက်အသွယ်အားလုံး"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> ခုထက် တွေ့ရှိပါသည်။"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> အတွက် အမြန်အဆက်အသွယ်"</string>
     <string name="missing_name" msgid="8745511583852904385">"(အမည်မရှိ)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"မကြာခဏဆက်သွယ်လေ့ရှိသူများ"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"အဆက်အသွယ်ကြည့်ရန်"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"ဖုန်းနံပါတ်ပါအဆက်အသွယ်အားလုံး"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"အလုပ်ပရိုဖိုင်အဆက်အသွယ်များ"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"အပ်ဒိတ်များ ကြည့်ရန်"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"အမည်"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"အမည်ပြောင်"</string>
-    <string name="full_name" msgid="6602579550613988977">"အမည်"</string>
     <string name="name_given" msgid="4280790853455320619">"ရှေ့အမည်"</string>
     <string name="name_family" msgid="7466985689626017037">"နောက်အမည်"</string>
     <string name="name_prefix" msgid="59756378548779822">"အမည်ရှေ့ဆက်"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ထံ အီးမေးလ်ပို့ရန်"</string>
     <string name="email" msgid="5668400997660065897">"အီးမေးလ်"</string>
     <string name="postal_street" msgid="8133143961580058972">"လမ်း"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"စာတိုက်သေတ္တာ"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"ပတ်ဝန်းကျင်"</string>
     <string name="postal_city" msgid="6597491300084895548">"မြို့"</string>
     <string name="postal_region" msgid="6045263193478437672">"ပြည်နယ်"</string>
     <string name="postal_postcode" msgid="572136414136673751">"စာပို့သင်္ကေတ"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"နောက်ထပ်အဖွဲ့များ…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ပြိုင်တူညှိခြင်းမှ \"<xliff:g id="GROUP">%s</xliff:g>\" ကို ဖယ်ခြင်းက အဖွဲ့ဖွဲ့မထားသောအဆက်အသွယ်များကိုပါ ပြိုင်တူညှိခြင်းမှ ဖယ်ရှားပါလိမ့်မည်။"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"ပြသရေးရွေးစရာများကို သိမ်းနေသည်…"</string>
-    <string name="menu_done" msgid="796017761764190697">"ပြီးပါပြီ"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"မလုပ်တော့"</string>
     <string name="listCustomView" msgid="1840624396582117590">"စိတ်ကြိုက်ကြည့်ရှုမှု"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"တင်သွင်းထားသောအဆက်အသွယ်များကို သိမ်းရမည့်အကောင့် -"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"ဆင်းမ်ကဒ်"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> တင်ပို့ခြင်းကို မလုပ်တော့ဘူးလား။"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"လိပ်စာကဒ် တင်သွင်း/ပို့ခြင်း ဖျက်မရပါ"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"မသိရသောအမှားအယွင်း"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" ကို ဖွင့်၍မရပါ - <xliff:g id="EXACT_REASON">%s</xliff:g>။"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ကို ဖွင့်၍မရပါ - <xliff:g id="EXACT_REASON">%2$s</xliff:g>။"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"တင်ပို့ရေးစတင်၍ မရပါ - \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"။"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"တင်ပို့နိုင်သောအဆက်အသွယ် မရှိပါ။"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"လိုအပ်သောခွင့်ပြုချက်ကို သင်ပိတ်ထားသည်။"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"တင်ပို့နေစဉ် အမှားအယွင်းတစ်ခု ဖြစ်သွားပါသည် - \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"။"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"လိုအပ်သောဖိုင်အမည်မှာ ရှည်လွန်းနေသည် (\"<xliff:g id="FILENAME">%s</xliff:g>\")။"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O အမှား"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"သိုလှောင်ရန်နေရာ မလုံလောက်ပါ။ ဖိုင်အလွန်ကြီးနေနိုင်ပါသည်။"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"မျှော်လင့်မထားသောအကြောင်းတစ်ခုကြောင့် လိပ်စာကဒ်ကို ဖြည်၍မရပါ။"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"ဤဖော်မက်ကို ပံ့ပိုးမထားပါ။"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"ဖော်ပြပါလိပ်စာကဒ်ဖိုင်(များ)၏ အချက်အလက်များကို စုဆောင်း၍မရပါ။"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"ဖိုင်တစ်ခု (သို့) တစ်ခုထက်ပိုသောဖိုင်များကို တင်သွင်း၍မရပါ (%s)။"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> တင်ပို့ပြီးပါပြီ။"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"အဆက်အသွယ်များ တင်ပို့ပြီးပါပြီ။"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"အဆက်အသွယ်များ တင်ပို့ပြီးပါပြီ၊ အဆက်အသွယ်များမျှဝေရန် အကြောင်းကြားချက်ကို နှိပ်ပါ။"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"အဆက်အသွယ်ဒေတာကို တင်ပို့နေသည်"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"အဆက်အသွယ်ဒေတာကို တင်ပို့နေသည်။"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ဒေတာဘေ့စ်အချက်အလက်များ မရယူနိုင်ပါ။"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"တင်ပို့နိုင်သောအဆက်အသွယ် မရှိပါ။ သင့်ဖုန်းအတွင်း အဆက်အသွယ်များရှိနေပါက အချို့ဒေတာထောက်ပံ့သူတို့အနေဖြင့် ဖုန်းမှ အဆက်အသွယ်များတင်ပို့ခွင့် ပြုမထားနိုင်ပါ။"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"တင်ပို့နိုင်သောအဆက်အသွယ်များ မရှိပါ။"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"လိပ်စာကဒ်ပြုလုပ်ရေး မှန်ကန်စွာမစတင်နိုင်ပါ။"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"တင်ပို့၍မရပါ"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"အဆက်အသွယ်ဒေတာကို တင်ပို့၍မရပါ။\nအကြောင်းမှာ - \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> တင်သွင်းနေသည်"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"လိပ်စာကဒ်ဒေတာ ဖတ်၍မရပါ"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"လိပ်စာကဒ်ဒေတာဖတ်ခြင်းကို ပယ်ဖျက်လိုက်သည်"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> လိပ်စာကဒ်တင်သွင်းပြီးပါပြီ"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> တင်သွင်းခြင်း ပယ်ဖျက်လိုက်သည်"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ကို မကြာမီ တင်သွင်းပါမည်။"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ဖိုင်ကို မကြာမီ တင်သွင်းပါမည်။"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"လိပ်စာကဒ်တင်သွင်းခြင်းတောင်းဆိုမှုကို ငြင်းပယ်လိုက်သည်။ နောက်မှ ထပ်စမ်းကြည့်ပါ။"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> ကို မကြာမီ တင်ပို့ပါမည်။"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ဖိုင်ကို မကြာမီ တင်ပို့ပါမည်။"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"အဆက်အသွယ်များကို မကြာမီ တင်ပို့သွားပါမည်။"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"လိပ်စာကဒ်တင်ပို့ခြင်းတောင်းဆိုမှုကို ငြင်းပယ်လိုက်သည်။ နောက်မှ ထပ်စမ်းကြည့်ပါ။"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"အဆက်အသွယ်"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"လိပ်စာကဒ်(များ)ကို စက်တွင်းယာယီသိုလှောင်ရေးတွင် သိမ်းနေပါသည်။ အမှန်တကယ်တင်သွင်းခြင်း မကြာမီစပါမည်။"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"လိပ်စာကဒ်ကို တင်သွင်း၍မရပါ။"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC မှ အဆက်အသွယ်ရရှိပါသည်။"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"အဆက်အသွယ်များးကို တင်ပို့မလား။"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"ယာယီသိမ်းနေသည်"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"တင်သွင်းနေသည် <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> - <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"တင်သွင်းနေသည် <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> - <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf ဖိုင်သို့ တင်ပို့ရန်"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"အောက်ပါအတိုင်းစီရန်"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"ရှေ့အမည်"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"ကျွန်ုပ်၏အချက်အလက်"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"သင့်ပရိုဖိုင်ပြင်ဆင်ရန်"</string>
     <string name="setting_about" msgid="7014388749752042863">"အဆက်အသွယ်များအကြောင်း"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"မြင်နိုင်သောအဆက်အသွယ်များ မျှဝေရန်"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"မြင်နိုင်သောအဆက်အသွယ်များ မျှဝေ၍မရပါ။"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"အကြိုက်ဆုံးအဆက်အသွယ်များကို မျှဝေရန်"</string>
     <string name="share_contacts" msgid="8109287987498711664">"အဆက်အသွယ်အားလုံးမျှဝေရန်"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"အဆက်အသွယ်များ မျှဝေ၍မရပါ။"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"မျှဝေရန်အဆက်အသွယ် မရှိပါ။"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"ပြရန်အဆက်အသွယ်များ"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ပြသပေးရန်အဆက်အသွယ်များ"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"စိတ်ကြိုက်ကြည့်ရှုမှု သတ်မှတ်ရန်"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"မြင်ကွင်းကို စိတ်ကြိုက်ပြုလုပ်ပါ"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"သိမ်းရန်"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"အဆက်အသွယ်များရှာပါ"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"အကြိုက်ဆုံးများ"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"အဆက်အသွယ်မရှိပါ။"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"မကြာခဏဆက်သွယ်လေ့ရှိသူများကို ရှင်းရန်"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM ကဒ်ကို ရွေးရန်"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"အကောင့်များစီမံခန့်ခွဲရန်"</string>
     <string name="menu_import" msgid="6107961135813836467">"တင်သွင်းရန်"</string>
     <string name="menu_export" msgid="2658783911863503902">"တင်ပို့ရန်"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"ပိတ်ဆို့ထားသည့် နံပါတ်များ"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="SOURCE">%2$s</xliff:g> မှတဆင့်"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"ရှာဖွေမှုရပ်ရန်"</string>
     <string name="description_clear_search" msgid="688023606766232904">"ရှာဖွေမှုကို ရှင်းပါ"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"အဆက်အသွယ်ပြသမှုရွေးစရာများ"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"အကောင့်"</string>
     <string name="set_default_account" msgid="4311613760725609801">"ခေါ်ဆိုမှုများအတွက် ဤအရာကို အမြဲသုံးရန်"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"အောက်ပါဖြင့် ခေါ်ရန်"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"မှတ်စုတစ်ခုဖြင့် ခေါ်ဆိုရန်"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"ခေါ်ဆိုမှုနှင့်အတူပို့ရန် မှတ်စုတစ်ခု ရေးပါ…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"SEND &amp; CALL"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>။ မဖတ်ရသေးသောအရာ <xliff:g id="COUNT_3">%2$d</xliff:g> ခု။ </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>။ မဖတ်ရသေးသောအရာ <xliff:g id="COUNT_1">%2$d</xliff:g> ခု။ </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"တည်ဆောက်မှုဗားရှင်း"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"အခမဲ့ရင်းမြစ်လိုင်စင်များ"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"အခမဲ့ရင်းမြစ်ဆော့ဖ်ဝဲအတွက် လိုင်စင်အသေးစိတ်များ"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"ဖျက်ရန်"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"အစက်သုံးစက်"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> စက္ကန့်"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> မိနစ် <xliff:g id="SECONDS">%s</xliff:g> စက္ကန့်"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> နာရီ <xliff:g id="MINUTES_1">%s</xliff:g> မိနစ် <xliff:g id="SECONDS">%s</xliff:g> စက္ကန့်"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> မိနစ် <xliff:g id="SECONDS">%2$s</xliff:g> စက္ကန့်"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> နာရီ <xliff:g id="MINUTES_1">%2$s</xliff:g> မိနစ် <xliff:g id="SECONDS">%3$s</xliff:g> စက္ကန့်"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ဤဖြတ်လမ်းလင့်ခ်ကို ပိတ်ထားပါသည်"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"အဆက်အသွယ်ကို ဖယ်ရှားခဲ့ပါသည်"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"တင်သွင်းရန်"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"ချိတ်ဆက်မှုမရှိပါ"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"ဆင်းမ်ကဒ်"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"နောက်ထပ်ပြရန်"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"ဆင်းမ်ကဒ်ကို တင်သွင်းပြီးပါပြီ"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"တင်သွင်း၍မရပါ"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"ဆင်းမ်ကဒ်မှ အဆက်အသွယ်များကို တင်သွင်း၍မရပါ"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"ဆင်းမ်ကဒ်ကို တင်သွင်းနေသည်"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 1f52b9f..14f9b09 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontakter"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontakter"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Legg til kontakt"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Ring"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Send melding"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Velg en kontaktsnarvei"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Velg et nummer å ringe"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Velg et nummer for SMS"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Velg en kontakt"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Legg til kontakt"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Velg en kontakt"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Velg"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Opprett ny kontakt"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Egenskaper for kontakt"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Info"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Oppdat."</string>
     <string name="searchHint" msgid="8482945356247760701">"Søk i kontakter"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Se på kontakt"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Legg til som favoritt"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Fjern fra favoritter"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Fjernet fra favoritter"</string>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Slett"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Bytt bilde"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Lag snarvei"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Ring kontakt"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Send SMS til kontakt"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Del opp"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Fjern kontakter"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Endre navn på etiketten"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Velg kontakter"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Legg til kontakter"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Fjern fra etiketten"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Legg til som kontakt"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Opprett ny…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Lag en etikett"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Vil du dele denne kontakten opp i flere kontakter?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Del opp"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Vil du lagre endringene du allerede har gjort, og dele opp denne kontakten i flere kontakter?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Lagre"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Knytt sammen kontakter"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Velg kontakten du vil knytte 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ble linket"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontakter · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakter · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Fra Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Fra <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Hvis du sletter denne kontakten, sletter du informasjon fra flere kontoer."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Vil du slette denne kontakten?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Slett"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Forkast endringene"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakten finnes ikke."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakten er lagt til på startskjermen."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> er lagt til på startskjermen."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Opprett ny kontakt"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Opprett ny kontakt"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Ingen bilder er tilgjengelige på nettbrettet."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Det er ingen bilder på telefonen."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontaktbilde"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Egendefinert etikett"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Send anrop direkte til telefonsvarer."</string>
     <string name="removePhoto" msgid="4898105274130284565">"Fjern bilde"</string>
     <string name="noContacts" msgid="2228592924476426108">"Kontaktlisten din er tom"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Ingen etiketter."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Du må ha en konto for å opprette grupper."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Ingen kontakter har denne etiketten"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Ingen kontakter i denne kontoen"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Kontaktlisten din er tom"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Feil ved lagring av kontakt"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kunne ikke lagre endringene av kontaktbildene"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Kunne ikke laste inn etiketten"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etiketten er lagret"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiketten er slettet"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etiketten ble opprettet"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Kan ikke opprette etiketten"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Send melding"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Velg kontakter"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Send"</string>
-    <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" 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" 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="5948889261993124839">"Alle"</string>
-    <string name="callBack" msgid="5498224409038809224">"Ring tilbake"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Ring på nytt"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Ring tilbake"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Legg til «<xliff:g id="EMAIL">%s</xliff:g>» som kontakt?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plussknapp"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakter"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Navn på kontakter"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Det ble ikke funnet noen app som kan håndtere denne handlingen."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klikk for å gå tilbake til den forrige skjermen"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Legg til telefonnummer"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Legg til e-post"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etikettnavn"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Taleprat"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videonettprat"</string>
-    <string name="connections" msgid="8098440723172028350">"Tilknytninger"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Legg til tilknytning"</string>
-    <string name="recent" msgid="2659189233141493004">"Nylige"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Nylige oppdateringer"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-kontakt"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-konto"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Ta bilde"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Ta nytt bilde"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Velg et bilde"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Velg et nytt bilde"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Marker alle"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Fjern alle markeringer"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Legg til ny"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Legg til organisasjon"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dato"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etikett"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Endre"</string>
-    <string name="description_star" msgid="2605854427360036550">"favoritt"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Rediger kontakt"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Avbryt"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Tilbake"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"lukk"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vil du knytte sammen gjeldende kontakt med den valgte kontakten?"</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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Legg til i Mine kontakter"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Katalog <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Innstillinger"</string>
     <string name="menu_settings" msgid="377929915873428211">"Innstillinger"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Legg til i kontakter"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Legg til kontakt"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Lukk"</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="7122002148518724139">"Legg til år"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Laster inn …"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Opprett en ny kontakt"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Legg til konto"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importér"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Opprett ny…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Forkast"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Avbryt"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Vil du forkaste tilpasningene?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Søk etter kontakter"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Fjern kontakter"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Min lokale profil"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Min profil for <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Viser alle kontakter"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Hold kontaktene dine trygge selv om du mister telefonen: synkroniser med en nettbasert tjeneste."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Legg til en konto"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Bruk noen minutter på å opprette en konto som sikkerhetskopierer kontaktene dine til Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nye kontakter blir lagret i <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Velg en standardkonto for nye kontakter."</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Se mindre"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Nylige"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Info"</string>
-    <string name="send_message" msgid="8938418965550543196">"Send melding"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Oppretter personlig kopi …"</string>
     <string name="tomorrow" msgid="6241969467795308581">"I morgen"</string>
     <string name="today" msgid="8041090779381781781">"I dag"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"I dag kl. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"I morgen kl.<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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Aktivitet uten navn)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Angi"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Nettprat"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Nettsted"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Aktivitet"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Tilknytning"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Konto"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Navn"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-post"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Klikk for å utvide redigeringsvinduet for kontakter"</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klikk for å skjule redigeringsvinduet for kontakter"</string>
     <string name="content_description_directions" msgid="2686791825798189335">"veibeskrivelse til posisjon"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"nylig tekstmelding. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klikk for å svare"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"nylig tekstmelding. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klikk for å svare"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"innkommende"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"utgående"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"tapte"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"nylig oppringning. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Flere felt"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Endre kontaktbilde"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Legg til kontaktbilde"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Kunne ikke åpne redigeringsvinduet."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Lagres i"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktinformasjonen fra <xliff:g id="ACCOUNT">%s</xliff:g> kan ikke endres"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Lagrer på <xliff:g id="ACCOUNT_NAME">%s</xliff:g> for øyeblikket. Dobbelttrykk for å velge en annen konto."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Sammenknyttede kontakter (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Sammenknyttet kontakt</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> sammenknyttede kontakter"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"KNYTT SAMMEN KONTAKTER"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"AVBRYT"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mulige duplikater</item>
-      <item quantity="one">1 mulig duplikat</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> sammenknyttede kontakter</item>
-      <item quantity="one">1 sammenknyttet kontakt</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Denne kontakten"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mulige duplikater"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Disse kontaktene kan være den samme personen. Du kan knytte dem sammen til én enkelt kontakt."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Sammenknyttede kontakter"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Fra kontoene dine"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Velg bilde"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Fra <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Slett <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Slett <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Slett <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Bilde fra <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> er ikke markert"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Bilde fra <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> er markert"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Det er ikke merket av for noe bilde fra en ukjent konto"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Det er merket av for et bilde fra en ukjent konto"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Forslag"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nye"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Åpne uttrekksmenyen"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Katalog"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Jobbkatalog"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Alle kontakter"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Fant over <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Hurtigkontakt for <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Uten navn)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Ofte kontaktet"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Se kontakt"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Alle kontakter med telefonnumre"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Jobbprofilkontakter"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Se oppdateringer"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM-kort"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Navn"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Kallenavn"</string>
-    <string name="full_name" msgid="6602579550613988977">"Navn"</string>
     <string name="name_given" msgid="4280790853455320619">"Fornavn"</string>
     <string name="name_family" msgid="7466985689626017037">"Etternavn"</string>
     <string name="name_prefix" msgid="59756378548779822">"Første del av navn"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"E-post <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-post"</string>
     <string name="postal_street" msgid="8133143961580058972">"Gate"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Postboks"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Nabolag"</string>
     <string name="postal_city" msgid="6597491300084895548">"Poststed"</string>
     <string name="postal_region" msgid="6045263193478437672">"Poststed"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Postnummer"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Flere grupper…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Hvis du fjerner «<xliff:g id="GROUP">%s</xliff:g>» fra synkroniseringen, fjernes også alle ugrupperte kontakter fra synkroniseringen."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Lagrer viste grupper…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Lagre"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Avbryt"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Tilpasset visning"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Lagre importerte kontakter i:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-kort"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vil du avbryte eksporten av <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Kunne ikke kansellere imp./eksp. av vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Ukjent feil."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Kan ikke åpne «<xliff:g id="FILE_NAME">%s</xliff:g>»: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Kan ikke åpne «<xliff:g id="FILE_NAME">%1$s</xliff:g>»: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Kunne ikke starte eksporteringen: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Du har ikke noen kontakt som kan eksporteres."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Du har slått av en nødvendig tillatelse."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Det oppsto en feil under eksporteringen: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Det obligatoriske filnavnet er for langt (<xliff:g id="FILENAME">%s</xliff:g>)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Inn-/ut-feil"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Ikke nok minne. Det er mulig at filen er for stor."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Kan ikke analysere vCard av uventet årsak."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formatet støttes ikke."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Kunne ikke hente metainformasjon for aktuell(e) vCard-fil(er)."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"En eller flere filer kan ikke importeres (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Eksportering av <xliff:g id="FILENAME">%s</xliff:g> er fullført."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Eksportering av kontaktene er fullført."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktdataene er eksportert. Klikk på varselet for å dele kontaktene."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Eksporterer kontaktdata"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktdataene eksporteres."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Kunne ikke hente databaseinformasjon."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Du har ingen kontakter som kan eksporteres. Hvis du har kontakter på telefonen, kan det hende at dataleverandøren din ikke tillater at kontaktene eksporteres fra telefonen."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Ingen kontakter kan eksporteres."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard-oppretteren startet ikke som den skulle."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Eksport mislyktes"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontaktdataene ble ikke eksportert.\nGrunn: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importerer <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Kunne ikke lese vCard-data"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Lesing av vCard-data avbrutt"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Import av vCard-filen <xliff:g id="FILENAME">%s</xliff:g> er fullført"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importeringen av <xliff:g id="FILENAME">%s</xliff:g> ble avbrutt"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> vil importeres snart."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Filen importeres snart."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Forespørselen om vCard-import ble avvist. Prøv på nytt senere."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> vil eksporteres snart."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Filen eksporteres snart."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktene eksporteres snart."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Forespørselen om eksport av vCard ble avvist. Prøv på nytt senere."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Bufrer vCard for import til lokal, midlertidig lagring. Selve importen starter snart."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Kunne ikke importere vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt mottatt per NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Eksp. kontaktene?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Bufrer"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importerer <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importerer <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Eksportér til .vcf-fil"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortér etter"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Fornavn"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Min informasjon"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Definer profilen din"</string>
     <string name="setting_about" msgid="7014388749752042863">"Om Kontakter"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Del synlige kontakter"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Delingen av synlige kontakter mislyktes."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Del favorittkontaktene"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Del alle kontaktene"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kunne ikke dele kontaktene."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Det finnes ingen kontakter å dele."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakter i visning"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakter i visning"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Definer tilpasset visning"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Tilpass visningen"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Lagre"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Søk i kontakter"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritter"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Ingen kontakter."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Fjern ofte kontaktede personer"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Velg SIM-kort"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Administrer kontoer"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importér"</string>
     <string name="menu_export" msgid="2658783911863503902">"Eksportér"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokkerte telefonnumre"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"avslutt søket"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Slett søk"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Alternativer for visning av kontakter"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Konto"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Bruk alltid dette for samtaler"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Ring med"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Ring med et notat"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Skriv et notat å sende med anropet …"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"SEND OG RING"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> uleste elementer. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> ulest element. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Delversjon"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Lisenser for åpen kildekode"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Lisensdetaljer for programvare med åpen kildekode"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Slett"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellipse"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> t <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sek"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> t <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sek"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Denne snarveien er slått av"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakten ble fjernet"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importér"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Ingen tilkobling"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-kort"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Vis mer"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importen fra SIM-kortet er ferdig"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Importeringen mislyktes"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kunne ikke importére kontakter fra SIM-kortet"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importerer fra SIM-kortet"</string>
 </resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index d7c79f4..5161e4a 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"सम्पर्कहरू"</string>
     <string name="contactsList" msgid="8661624236494819731">"सम्पर्क"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"सम्पर्क थप्नुहोस्"</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="shortcutActivityTitle" msgid="1504383567778497348">"सम्पर्क छनौट गर्नुहोस्"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"सम्पर्कमा थप्नुहोस्"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"एउटा सम्पर्क छान्नुहोस्"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"चयन गर्नुहोस्"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"नयाँ सम्पर्क सिर्जना गर्नुहोस्"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"विवरणहरूलाई सम्पर्क गर्नुहोस्"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"मेट्नुहोस्"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"तस्बिर परिवर्तन गर्नुहोस्"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"सर्टकट सिर्जना गर्नुहोस्"</string>
-    <string name="menu_call" msgid="3992595586042260618">"सम्पर्कलाई कल गर्नुहोस्"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"पाठ सम्पर्क"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"अनलिंक"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"सम्पर्कहरू हटाउनुहोस्"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"लेबलको पुन:नामाकरण गर्नुहोस्"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"सम्पर्कहरू चयन गर्नुहोस्"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"सम्पर्कहरू थप्नुहोस्"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"लेबलबाट हटाउनुहोस्"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"सम्पर्क थप्नुहोस्"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"नयाँ लेबल सिर्जना गर्नुहोस्..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"लेबल सिर्जना गर्नुहोस्"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"यस सम्पर्कलाई बहु सम्पर्कमा अनलिंक गर्न चाहनुहुन्छ?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"अनलिकं गर्नुहोस्"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"तपाईँले पहिल्यै गरेका परिवर्तनहरू सुरक्षित गर्न र यस सम्पर्कलाई बहु सम्पर्कहरूमा अनलिंक गर्न चाहनुहुन्छ?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"सुरक्षित गर्नुहोस्"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"सम्पर्क ठेगानाहरू लिंक गर्नुहोस्"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"तपाईँले <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> लिङ्क गरियो"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> सम्पर्क</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> सम्पर्कहरू · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> सम्पर्क · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> सम्पर्कहरू · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> सम्पर्क · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google बाट"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> बाट"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"यो सम्पर्क ठेगाना हटाउँदा बहु खाताहरूबाट विवरणहरू मेटाइनेछन्।"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"यो सम्पर्क ठेगाना मेटाउने हो?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"मेटाउनुहोस्"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"परिवर्तनहरू रद्द गर्नुहोस्"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"सम्पर्क उपलब्ध छैन।"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"सम्पर्क गृह स्क्रिनमा थपियो।"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> गृह स्क्रिनमा थपियो।"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"नयाँ सम्पर्क सिर्जना गर्नुहोस्"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"नयाँ सम्पर्क सिर्जना गर्नुहोस्"</string>
     <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="2228592924476426108">"तपाईंको सम्पर्क ठेगानाहरूको सूची खाली छ"</string>
-    <string name="noGroups" msgid="4607906327968232225">"कुनै पनि लेबल छैन।"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"समूह बनाउनका लागि एउटा खाताको आवश्यक्ता हुन्छ।"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"यो लेबल अन्तर्गत कुनै सम्पर्कहरू छैनन्"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"यस खातामा कुनै सम्पर्क ठेगानाहरू छैनन्"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"तपाईंको सम्पर्क ठेगानाहरूको सूची खाली छ"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"सम्पर्क सुरक्षित गर्दा त्रुटि भयो"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"सम्पर्क सम्बन्धी तस्बिरमा गरिएका परिवर्तनहरू सुरक्षित गर्न सकिएन"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"लेबल लोड गर्न सकिएन"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"लेबललाई सुरक्षित गरियो"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"लेबल मेटाइयो"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"लेबल सिर्जना गरियो"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"लेबल सिर्जना गर्न सकिँदैन"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"सन्देश पठाउनुहोस्"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"सम्पर्कहरू छान्नुहोस्"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"पठाउनुहोस्"</string>
-    <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" 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" 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="5948889261993124839">"सबै"</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_plus_button" msgid="515164827856229880">"जोड"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>को <xliff:g id="TOTAL_NUMBER">%s</xliff:g> सम्पर्क"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"तपाईँका सम्पर्कहरूका नामहरू"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"लेबलको नाम"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> खाता"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"लेबल"</string>
-    <string name="change_photo" msgid="8530597935483526383">"परिवर्तन गर्नुहोस्"</string>
-    <string name="description_star" msgid="2605854427360036550">"मनपर्ने"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"सम्पर्क सम्पादन गर्नुहोस्"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"रद्द गर्नुहोस्"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"पछाडि"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"बन्द गर्नुहोस्"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"हालको सम्पर्क ठेगानालाई चयन गरिएको सम्पर्क ठेगानासँग लिंक गर्ने हो?"</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="activity_title_settings" msgid="5464130076132770781">"सेटिङहरू"</string>
     <string name="menu_settings" msgid="377929915873428211">"सेटिङहरू"</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>
     <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="7122002148518724139">"वर्ष सामेल गर्नुहोस्"</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="4347232421410561500">"खाता थप्नुहोस्"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"आयात गर्नुहोस्"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"नयाँ लेबल सिर्जना गर्नुहोस्..."</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"खारेज गर्नुहोस्"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"रद्द गर्नुहोस्"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"आफू अनुकूल पारिएका कुरालाई खारेज गर्ने हो?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"सम्पर्कहरू खोज्नुहोस्"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"सम्पर्कहरू हटाउनुहोस्"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"मेरो स्थानीय प्रोफाइल"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"मेरो <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> प्रोफाइल"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"सबै सम्पर्कहरू प्रदर्शन गरिदै"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"तपाईँले फोन नै हराउनु भएको अवस्थामा पनि आफ्ना सम्पर्कहरूलाई सुरक्षित राख्नुहोस्: कुनै अनलाइन सेवासँग सिन्क्रोनाइज गर्नुहोस्।"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"एउटा खाता थप्नुहोस्"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"एक मिनेट जति लगाएर एउटा खाता थप्नुहोस् जसले तपाईंका सम्पर्कहरूलाई Google मा ब्याक अप गर्ने छ।"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"नयाँ सम्पर्कहरू <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> मा सुरक्षित गरिनेछन्।"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"नयाँ सम्पर्क ठेगानाहरूका लागि पूर्वनिर्धारित खाता छान्‍नुहोस्:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"कम हेर्नुहोस्"</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="288549957278065542">"एउटा व्यक्तिगत प्रतिलिपि बनाउँदै..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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">"हालैको एसएमएस। <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_sms" msgid="1666389577263317445">"हालैको एसएमएस। <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"हालैको कल। <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"थप क्षेत्रहरू"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"सम्पर्कको तस्बिर बदल्नुहोस्"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"सम्पर्कको तस्बिर थप्नुहोस्"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"सम्पादक खोल्न सकिएन।"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"यसमा सुरक्षित गरिँदै"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> को सम्पर्क सम्बन्धी जानकारी सम्पादन गर्न मिल्दैन"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"हाल <xliff:g id="ACCOUNT_NAME">%s</xliff:g> मा सुरक्षित गरिँदै। भिन्‍न खाता चयन गर्न डबल ट्याप गर्नुहोस्।"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">लिंक गरिएका सम्पर्क ठेगानाहरू (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">लिंक गरिएको सम्पर्क ठेगाना</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> लिंक गरिएका सम्पर्क ठेगानाहरू"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> ( <xliff:g id="PHONETIC_NAME">%s</xliff:g> )"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"सम्पर्क ठेगानाहरू लिंक गर्नुहोस्"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"रद्द गर्नुहोस्"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> सम्भावित प्रतिलिपिहरू</item>
-      <item quantity="one">१ सम्भावित प्रतिलिपि</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> लिंक गरिएका सम्पर्क ठेगानाहरू</item>
-      <item quantity="one">१ लिंक गरिएको सम्पर्क ठेगाना</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"यो सम्पर्क ठेगाना"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"सम्भावित प्रतिलिपिहरू"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"यी सम्पर्कहरू एउटै व्यक्तिको हुन सक्छ। तपाईँले एउटै सम्पर्कको रूपमा तिनीहरूलाई सँगै लिंक गर्न सक्नुहुन्छ।"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"लिंक गरिएका सम्पर्क ठेगानाहरू"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"तपाईंका खाताहरूबाट"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"तस्बिर छान्‍नुहोस्"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> बाट"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> मेट्नुहोस्"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> मेट्नुहोस्"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> मेट्नुहोस्"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> बाट तस्बिर जाँच गरिएको छैन"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> बाट तस्बिर जाँच गरियो"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"अज्ञात खाताको तस्बिर जाँच गरिएन"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"अज्ञात खाताको तस्बिर जाँच गरियो"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"सुझावहरू"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"नयाँ"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"नेभिगेसन ड्रअर खोल्नुहोस्"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"निर्देशिका"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"कार्यको निर्देशिका"</string>
     <string name="local_search_label" msgid="2551177578246113614">"सबै सम्पर्कहरू"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> भन्दा अधिक पाइयो।"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g>का लागि छिटो सम्पर्क"</string>
     <string name="missing_name" msgid="8745511583852904385">"(नाम छैन)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"लगातार सम्पर्क गरिएको"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"सम्पर्क हेर्नुहोस्"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"फोन नम्बर भएका सबै सम्पर्कहरू"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"कार्य प्रोफाइलका सम्पर्कहरू"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"अद्यावधिकहरू हेर्नुहोस्"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"नाम"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"उपनाम"</string>
-    <string name="full_name" msgid="6602579550613988977">"नाम"</string>
     <string name="name_given" msgid="4280790853455320619">"पहिलो नाम"</string>
     <string name="name_family" msgid="7466985689626017037">"थर"</string>
     <string name="name_prefix" msgid="59756378548779822">"नाम उपसर्ग"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> मा इमेल पठाउनुहोस्"</string>
     <string name="email" msgid="5668400997660065897">"इमेल"</string>
     <string name="postal_street" msgid="8133143961580058972">"सडक"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"PO Box:"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"छिमेक"</string>
     <string name="postal_city" msgid="6597491300084895548">"शहर"</string>
     <string name="postal_region" msgid="6045263193478437672">"स्थिति"</string>
     <string name="postal_postcode" msgid="572136414136673751">"ZIP कोड"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"अधिक समूहहरू"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\" <xliff:g id="GROUP">%s</xliff:g> \" लाई सिङ्कबाट हटाउनाले समूहमा नरहेका सम्पर्कहरूलाई पनि हटाउने छ।"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"प्रदर्शन विकल्पहरू बचत‍ गर्दै ..."</string>
-    <string name="menu_done" msgid="796017761764190697">"भयो"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"रद्द गर्नुहोस्"</string>
     <string name="listCustomView" msgid="1840624396582117590">"आफू अनुकूल पारिएको दृश्य"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"आयातीत सम्पर्कहरू निम्नमा सुरक्षित गर्नुहोस्:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM कार्ड"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g>को निर्यात रद्द गर्ने?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard आयात/निर्यात रद्द गर्न सकिएन"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"अज्ञात त्रुटि।"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"खोल्न सकेन \" <xliff:g id="FILE_NAME">%s</xliff:g> : \" <xliff:g id="EXACT_REASON">%s</xliff:g> ।"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"खोल्न सकेन \" <xliff:g id="FILE_NAME">%1$s</xliff:g> : \" <xliff:g id="EXACT_REASON">%2$s</xliff:g> ।"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"निर्यातकर्ता: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\" सुरु गर्न सकेन्।"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"कुनै निर्यात गर्न मिल्ने सम्पर्क छैन।"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"तपाईँले आवश्यक अनुमति असक्षम पार्नुभएको छ।"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"\"<xliff:g id="EXACT_REASON">%s</xliff:g>\": निर्यात गर्ने क्रममा त्रुटि भयो।"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"आवश्यक फाइलनाम ज्यादै लामो छ (\" <xliff:g id="FILENAME">%s</xliff:g> \")।"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O त्रुटि"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"मेमोरी प्रयाप्त छैन। फाइल धेरै ठूलो हुन सक्छ।"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"एउटा अप्रत्याशित कारणले vCard पार्स गर्न सकेन।"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"ढाँचा समर्थित छैन।"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"दिइएको vCard फाइल(हरू)को अधिजानकारी जम्मा गर्न सकेन।"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"एक या धेरै फाइलहरू आयात (%s) गर्न सकिएन।"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> निर्यात कार्य सकियो।"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"सम्पर्क ठेगानाहरूलाई निर्यात गर्ने काम सकियो।"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"सम्पर्कहरूलाई निर्यात गर्ने काम सकियो, सम्पर्कहरूलाई साझेदारी गर्न सूचनामा क्लिक गर्नुहोस्।"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"सम्पर्क डेटा निर्यात हुँदै"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"सम्पर्क सम्बन्धी डेटा निर्यात भइरहेको छ।"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"डेटाबेस जानकारी प्राप्त गर्न सकेन।"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"कुनै पनि निर्यात गर्ने मिल्ने सम्पर्क छैनन्। यदि तपाईँसँग फोनमा सच्चिकै सम्पर्कहरू छन् भने केही डेटा प्रदायकहरूबाट सम्पुर्ण सम्पर्कहरू निर्यात गर्न मनाही  गरिएको हुन सक्छ।"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"निर्यात गर्न मिल्ने सम्पर्कहरू छैनन्।"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard कम्पोजर राम्ररी सुर भएन।"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"निर्यात गर्न सकेन"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"सम्पर्क डेटा निर्यात गर्न सकिएन \n कारण: \" <xliff:g id="FAIL_REASON">%s</xliff:g> \""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g>आयात गर्दै"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"VCard डेटा पढ्न सकेन"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard डेटा पढ्न रद्द गरियो"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> आयात कार्य सकियो"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g>आयात रद्द गरियो"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> शीघ्र आयात गरिने छ।"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"फाइल छिट्टै आयात गरिने छ।"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard निर्यात अनुरोध अस्वीकार गरिएको छ । कृपया पछि पर्यास गर्नुहोस्"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> शीघ्र निर्यात गरिने छ।"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"फाइल तुरुन्तै निर्यात गरिने छ।"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"सम्पर्कहरूलाई चॉंडै निर्यात गरिने छ।"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard निर्यात अनुरोध अस्वीकार गरियो। पछि पुनःप्रयास गर्नुहोस्।"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"सम्पर्क"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard(s) लाई स्थानीय अस्थायी भण्डारणमा क्यास गर्दै। वास्तविक आयात छिट्टै सुरु हुन्छ।"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"VCard आयात गर्न सकेन।"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFCमा सम्पर्क प्राप्त गरियो"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"सम्पर्कहरू निर्यात गर्ने हो?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"केसिङ"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"आयात गर्दै <xliff:g id="CURRENT_NUMBER">%s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%s</xliff:g> : <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"आयात गर्दै <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> / <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> : <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf फाइलमा निर्यात गर्ने"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"यस आधारमा क्रमबद्ध गर्नुहोस्"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"पहिलो नाम"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"मेरा बारेमा जानकारी"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"आफ्नो प्रोफाइल सेट अप गर्नुहोस्"</string>
     <string name="setting_about" msgid="7014388749752042863">"सम्पर्कहरूका बारेमा"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"देखिने सम्पर्कहरु साझेदारी गर्नुहोस्"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"देख्न सकिने सम्पर्कहरू आदान-प्रदान गर्न सकिएन।"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"मनपर्ने सम्पर्कहरू आदान-प्रदान गर्नुहोस्"</string>
     <string name="share_contacts" msgid="8109287987498711664">"सबै सम्पर्क आदान-प्रदान गर्ने"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"सम्पर्कहरू आदान-प्रदान गर्न सकिएन।"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"आदान-प्रदान गर्न कुनै सम्पर्क ठेगानाहरू छैनन्।"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"प्रदर्शन गर्नका लागि सम्पर्क"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"प्रदर्शन गर्नका लागि सम्पर्क"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"अनुकूलित दृश्यको परिभाषा ..."</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"दृश्यलाई आफू अनुकूल पार्नुहोस्"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"सुरक्षित गर्ने"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"सम्पर्क ठेगानाहरू खोज्नुहोस्"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"मनपर्ने"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"कुनै सम्पर्क छैन।"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"बारम्बार गरिएको क्लियर गर्नुहोस्"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"सिम कार्ड चयन गर्नुहोस्"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"खाताहरू व्यवस्थापन गर्नुहोस्"</string>
     <string name="menu_import" msgid="6107961135813836467">"आयात गर्नुहोस्"</string>
     <string name="menu_export" msgid="2658783911863503902">"निर्यात गर्नुहोस्"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"रोक लगाइएका नम्बरहरू"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> मार्फत <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"खोजी गर्न रोक्नुहोस्"</string>
     <string name="description_clear_search" msgid="688023606766232904">"खोजी सफा गर्नुहोस्"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"सम्पर्क प्रदर्शन सम्बन्धी विकल्पहरू"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"खाता"</string>
     <string name="set_default_account" msgid="4311613760725609801">"कल गर्न सधैं यसको प्रयोग गर्नुहोस्"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"निम्नका साथ कल गर्नुहोस्"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"एउटा टिपोटसहित कल गर्नुहोस्"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"कलसँग पठाउन एउटा टिपोट टाइप गर्नुहोस्…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"पठाउनुहोस् र कल गर्नुहोस्"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>। <xliff:g id="COUNT_3">%2$d</xliff:g> नपढिएका वस्तुहरू। </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>। <xliff:g id="COUNT_1">%2$d</xliff:g> नपढिएको वस्तु। </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"बिल्ड संस्करण"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"खुला स्रोतका इजाजतपत्रहरू"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"खुला स्रोतको सफ्टवेयरका लागि इजाजतपत्रका विवरणहरू"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"मेट्नुहोस्"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"पदलोपचिन्ह"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> सेकेन्ड"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> मिनेट <xliff:g id="SECONDS">%s</xliff:g> सेकेन्ड"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> घन्टा <xliff:g id="MINUTES_1">%s</xliff:g> मिनेट <xliff:g id="SECONDS">%s</xliff:g> सेेकेन्ड"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> मिनेट <xliff:g id="SECONDS">%2$s</xliff:g> सेकेन्ड"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> घन्टा <xliff:g id="MINUTES_1">%2$s</xliff:g> मिनेट <xliff:g id="SECONDS">%3$s</xliff:g> सेेकेन्ड"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"यो सर्टकटलाई असक्षम पारिएको छ"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"सम्पर्क हटाइएको थियो"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"आयात गर्नुहोस्"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"जडान छैन"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"थप देखाउनुहोस्"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM कार्ड आयात गर्ने काम सम्पन्न भयो"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"आयात गर्न सकिएन"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM कार्डबाट सम्पर्कहरू आयात गर्न सकिएन"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM आयात गरिँदै"</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 53e666d..4411bee 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contacten"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contacten"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Contact toevoegen"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Contacten"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Direct bellen"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Direct bericht"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Kies een contactsnelkoppeling"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Kies een nummer om te bellen"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Kies een nummer voor bericht"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Contact kiezen"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Aan contact toevoegen"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Een contact kiezen"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Selecteren"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Nieuw contact maken"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Details van contact"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Over"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Updates"</string>
     <string name="searchHint" msgid="8482945356247760701">"Contacten zoeken"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Contact weergeven"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Toevoegen aan favorieten"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Uit favorieten verwijderen"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Verwijderd uit favorieten"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Snelkoppeling maken"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Contact bellen"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Sms\'en naar contact"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Link verwijderen"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Contacten verwijderen"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Label hernoemen"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Contacten selecteren"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Contacten toevoegen"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Verwijderen uit label"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Contact toevoegen"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Nieuwe maken…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Label maken"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Dit contact loskoppelen tot meerdere contacten?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Loskoppelen"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Wil je de aangebrachte wijzigingen opslaan en dit contact loskoppelen tot meerdere contacten?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Opslaan"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Contacten linken"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Kies het contact dat je wilt linken met <xliff:g id="NAME">%s</xliff:g>:"</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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> gelinkt"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contacten · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contact · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contacten · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Van Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Van <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Als je dit contact verwijdert, worden gegevens van meerdere accounts verwijderd."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Dit contact verwijderen?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Verwijderen"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Wijzigingen niet opslaan"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Het contact bestaat niet."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contact is toegevoegd aan het startscherm."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> is toegevoegd aan het startscherm."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Nieuw contact maken"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Nieuw contact maken"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Er zijn geen foto\'s beschikbaar op de tablet."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Er zijn geen foto\'s beschikbaar op de telefoon."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Contactfoto"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Aangepaste labelnaam"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Oproepen rechtstreeks naar voicemail verzenden"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Foto verwijderen"</string>
     <string name="noContacts" msgid="2228592924476426108">"Je contactenlijst is leeg"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Geen labels."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Je hebt een account nodig om groepen te maken."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Geen contacten met dit label"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Geen contacten in dit account"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Je contactenlijst is leeg"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Fout bij opslaan van contact"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kan wijzigingen in contactfoto niet opslaan"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Kan label niet laden"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Label opgeslagen"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Label verwijderd"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Label gemaakt"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Kan label niet maken"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Bericht verzenden"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Contacten kiezen"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Verzenden"</string>
-    <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" 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" 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="5948889261993124839">"Alle"</string>
-    <string name="callBack" msgid="5498224409038809224">"Terugbellen"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Opnieuw bellen"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Terugbellen"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Voeg \"<xliff:g id="EMAIL">%s</xliff:g>\" toe aan contactpersonen?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> van <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contacten"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Namen van je contacten"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Er is geen app gevonden om deze actie uit te voeren."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klik om terug te keren naar het vorige scherm"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Telefoonnummer toevoegen"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"E-mailadres toevoegen"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Labelnaam"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Voicechat"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videochat"</string>
-    <string name="connections" msgid="8098440723172028350">"Connecties"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Connectie toevoegen"</string>
-    <string name="recent" msgid="2659189233141493004">"Recent"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Recente updates"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-contact"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-account"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Foto maken"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Nieuwe foto nemen"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Foto kiezen"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Nieuwe foto selecteren"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Alles selecteren"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Selectie ongedaan maken"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Nieuw toevoegen"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Organisatie toevoegen"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Labelen"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Wijzigen"</string>
-    <string name="description_star" msgid="2605854427360036550">"favoriet"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Contact bewerken"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Annuleren"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Terug"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"sluiten"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Wil je het huidige contact linken met het geselecteerde contact?"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="6549585283910518095">"Wil je overschakelen naar het bewerken van het geselecteerde contact? Gegevens die je tot nu toe hebt ingevoerd, worden gekopieerd."</string>
-    <string name="menu_copyContact" msgid="1573960845106822639">"Kopiëren naar mijn contacten"</string>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Toevoegen aan Mijn contacten"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Directory <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Instellingen"</string>
     <string name="menu_settings" msgid="377929915873428211">"Instellingen"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Toevoegen aan contacten"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Aan contact toevoegen"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Sluiten"</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="7122002148518724139">"Inclusief jaar"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Contacten"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Laden..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Een nieuw contact maken"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Account toevoegen"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importeren"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Nieuwe maken…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Weggooien"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Annuleren"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Wijzigingen opslaan?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Contacten zoeken"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Contacten verwijderen"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Mijn lokale profiel"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Mijn <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>-profiel"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Alle contacten worden weergegeven"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Zorg dat je contacten veilig zijn, zelfs wanneer je je telefoon verliest: synchroniseer met een online service."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Account toevoegen"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Voeg snel een account toe om een back-up van je contacten te maken op Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nieuwe contacten worden opgeslagen in <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Kies een standaardaccount voor nieuwe contacten"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Minder weergeven"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Recent"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Over"</string>
-    <string name="send_message" msgid="8938418965550543196">"Bericht verzenden"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Een persoonlijke kopie maken..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Morgen"</string>
     <string name="today" msgid="8041090779381781781">"Vandaag"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Vandaag om <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Morgen om <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Naamloze afspraak)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Instellen"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Chat"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Evenement"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relatie"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Account"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Naam"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefoon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Klik om contacteditor uit te vouwen."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klik om contacteditor samen te vouwen."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"routebeschrijving naar locatie"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"recente sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. klik om te reageren"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"recente sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik om te reageren"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"binnenkomend"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"uitgaand"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"gemist"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"recente oproep. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. klik om terug te bellen"</string>
     <string name="message_from_you_prefix" msgid="7180706529908434482">"Jij: <xliff:g id="SMS_BODY">%s</xliff:g>"</string>
-    <string name="contact_editor_hangouts_im_alert" msgid="114855385615225735">"Hangouts werkt beter wanneer je de Hangouts-ID van de betreffende persoon in het veld \'E-mail\' of \'Telefoon\' opgeeft."</string>
     <string name="editor_more_fields" msgid="3630987771304393421">"Meer velden"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Contactfoto wijzigen"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Contactfoto toevoegen"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Kan editor niet openen."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Opslaan in"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Contactgegevens van <xliff:g id="ACCOUNT">%s</xliff:g> kunnen niet worden bewerkt"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Wordt momenteel opgeslagen in <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Dubbeltik om een ander account te kiezen."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Gelinkte contacten (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Gelinkt contact</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> gelinkte contacten"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"CONTACTEN LINKEN"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANNULEREN"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> mogelijke duplicaten</item>
-      <item quantity="one">1 mogelijk duplicaat</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> gelinkte contacten</item>
-      <item quantity="one">1 gelinkt contact</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Dit contact"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mogelijke duplicaten"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Deze contacten zijn mogelijk dezelfde persoon. Je kunt ze linken tot één contact."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Gelinkte contacten"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Vanuit je accounts"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Foto kiezen"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Van <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> verwijderen"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> verwijderen"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> verwijderen"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto van <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> niet aangevinkt"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto van <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> aangevinkt"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto uit onbekend account niet aangevinkt"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto uit onbekend account aangevinkt"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Suggesties"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nieuw"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Zijmenu openen"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Directory"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Zakelijke contactenlijst"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Alle contacten"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Meer dan <xliff:g id="COUNT">%d</xliff:g> gevonden."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Snelcontact voor <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Geen naam)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Regelmatig contact"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Contact weergeven"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Alle contacten met telefoonnummers"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Contacten uit werkprofiel"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Updates bekijken"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"Simkaart"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Naam"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Bijnaam"</string>
-    <string name="full_name" msgid="6602579550613988977">"Naam"</string>
     <string name="name_given" msgid="4280790853455320619">"Voornaam"</string>
     <string name="name_family" msgid="7466985689626017037">"Achternaam"</string>
     <string name="name_prefix" msgid="59756378548779822">"Voorvoegsel"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> e-mailen"</string>
     <string name="email" msgid="5668400997660065897">"E-mail"</string>
     <string name="postal_street" msgid="8133143961580058972">"Straat"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Postbus"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Wijk"</string>
     <string name="postal_city" msgid="6597491300084895548">"Plaats"</string>
     <string name="postal_region" msgid="6045263193478437672">"Staat"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Postcode"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Meer groepen…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Als je \'<xliff:g id="GROUP">%s</xliff:g>\' verwijdert uit de synchronisatie, worden ook contacten die niet bij een groep horen uit de synchronisatie verwijderd."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Weergaveopties opslaan..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Gereed"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Annuleren"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Aangepaste weergave"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Geïmporteerde contacten opslaan in:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Simkaart"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Export van <xliff:g id="FILENAME">%s</xliff:g> annuleren?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Kan vCard-import/export niet annuleren"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Onbekende fout."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Kan \'<xliff:g id="FILE_NAME">%s</xliff:g>\' niet openen: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Kan \'<xliff:g id="FILE_NAME">%1$s</xliff:g>\' niet openen: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Kan het exportprogramma niet starten: \'<xliff:g id="EXACT_REASON">%s</xliff:g>\'."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Er is geen contact dat kan worden geëxporteerd."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Je hebt een vereist recht uitgeschakeld."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Er is een fout opgetreden tijdens het exporteren: \'<xliff:g id="EXACT_REASON">%s</xliff:g>\'."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Vereiste bestandsnaam is te lang (\'<xliff:g id="FILENAME">%s</xliff:g>\')."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O-fout"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Onvoldoende geheugen. Het bestand is mogelijk te groot."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Kan vCard om onverwachte reden niet parseren."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"De indeling wordt niet ondersteund."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Kan metagegevens niet verzamelen uit vCard-bestand(en)."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Kan een of meer bestanden niet importeren (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exporteren van <xliff:g id="FILENAME">%s</xliff:g> voltooid."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Contacten geëxporteerd."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"De contacten zijn geëxporteerd. Klik op de melding om contacten te delen."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Contactgegevens exporteren"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Contactgegevens worden geëxporteerd."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Kan databasegegevens niet ophalen."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Er zijn geen exporteerbare contacten. Als je wel contacten op je telefoon hebt opgeslagen, staat je gegevensprovider het exporteren van contacten van de telefoon mogelijk niet toe."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Er zijn geen contacten die kunnen worden geëxporteerd."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"De vCard-editor is niet correct gestart."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Kan niet exporteren"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"De contactgegevens zijn niet geëxporteerd.\nReden: \'<xliff:g id="FAIL_REASON">%s</xliff:g>\'"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> importeren"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Kan vCard-gegevens niet lezen"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Lezen van vCard-gegevens geannuleerd"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importeren van vCard <xliff:g id="FILENAME">%s</xliff:g> voltooid"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importeren van <xliff:g id="FILENAME">%s</xliff:g> geannuleerd"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> wordt binnenkort geïmporteerd."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Het bestand wordt binnenkort geïmporteerd."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Verzoek voor vCard-import is geweigerd. Probeer het later opnieuw."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> wordt binnenkort geëxporteerd."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Dit bestand wordt binnenkort geëxporteerd."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Contacten worden binnenkort geëxporteerd."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Verzoek voor vCard-export is geweigerd. Probeer het later opnieuw."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Bezig met opslaan van vCard(s) in de lokale tijdelijke opslag. Het daadwerkelijke importeren begint binnenkort."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Kan vCard niet importeren."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contact via NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Contacten export.?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"In cachegeheugen opslaan"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importeren <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importeren <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exporteren naar VCF"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sorteren op"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Voornaam"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Mijn info"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Je profiel instellen"</string>
     <string name="setting_about" msgid="7014388749752042863">"Over Contacten"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Zichtbare contacten delen"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Kan zichtbare contacten niet delen."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Favoriete contacten delen"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Alle contacten delen"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kan contacten niet delen."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Er zijn geen contacten om te delen."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Zichtbare contacten"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Zichtbare contacten"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Weergave aanpassen"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Weergave aanpassen"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Opslaan"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Contacten zoeken"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriet"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Geen contacten"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Regelmatige contacten wissen"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Simkaart selecteren"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Accounts beheren"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importeren"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exporteren"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Geblokkeerde nummers"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"stoppen met zoeken"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Zoekopdracht wissen"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Weegaveopties voor contacten"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Account"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Altijd gebruiken voor oproepen"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Bellen met"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Oproep met een notitie"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Typ een notitie om te verzenden met de oproep…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"VERZENDEN EN BELLEN"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> ongelezen items. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> ongelezen item. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Buildversie"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Open-sourcelicenties"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licentiedetails voor open-sourcesoftware"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Verwijderen"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Weglatingsteken"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> u <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sec"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sec"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> u <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sec"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Deze snelkoppeling is uitgeschakeld"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Contact is verwijderd"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importeren"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Geen verbinding"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"Simkaart"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Meer weergeven"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importeren van simkaart voltooid"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Importeren mislukt"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kan geen contacten importeren van de simkaart"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Sim importeren"</string>
 </resources>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index e145bcd..58f53b3 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"ਸੰਪਰਕ"</string>
     <string name="contactsList" msgid="8661624236494819731">"ਸੰਪਰਕ"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰੋ"</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="shortcutActivityTitle" msgid="1504383567778497348">"ਸੰਪਰਕ ਚੁਣੋ"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"ਸੰਪਰਕ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ਇੱਕ ਸੰਪਰਕ ਚੁਣੋ"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ਚੁਣੋ"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"ਸੰਪਰਕ ਵੇਰਵੇ"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"ਮਿਟਾਓ"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"ਫ਼ੋਟੋ ਬਦਲੋ"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"ਸ਼ਾਰਟਕੱਟ ਬਣਾਓ"</string>
-    <string name="menu_call" msgid="3992595586042260618">"ਸੰਪਰਕ ਨੂੰ ਕਾਲ ਕਰੋ"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"ਟੈਕਸਟ ਸੰਪਰਕ"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"ਅਣਲਿੰਕ ਕਰੋ"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"ਸੰਪਰਕ ਹਟਾਓ"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"ਲੇਬਲ ਦਾ ਨਾਮ ਬਦਲੋ"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"ਸੰਪਰਕ ਚੁਣੋ"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰੋ"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"ਲੇਬਲ ਤੋਂ ਹਟਾਓ"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"ਸੰਪਰਕ ਸ਼ਾਮਲ ਕਰੋ"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"ਨਵਾਂ ਬਣਾਓ…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ਲੇਬਲ ਬਣਾਓ"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"ਕੀ ਇਸ ਸੰਪਰਕ ਨੂੰ ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਸੰਪਰਕਾਂ ਵਿੱਚ ਅਣਲਿੰਕ ਕਰਨਾ ਹੈ?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ਅਣਲਿੰਕ ਕਰੋ"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ਕੀ ਤੁਸੀਂ ਤੁਹਾਡੇ ਵੱਲੋਂ ਪਹਿਲਾਂ ਤੋਂ ਕੀਤੇ ਬਦਲਾਵਾਂ ਨੂੰ ਰੱਖਿਅਤ ਕਰਨਾ ਅਤੇ ਇਸ ਸੰਪਰਕ ਨੂੰ ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਸੰਪਰਕਾਂ ਵਿੱਚ ਅਣਲਿੰਕ ਕਰਨਾ ਚਾਹੋਗੇ?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"ਰੱਖਿਅਤ ਕਰੋ"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"ਸੰਪਰਕ ਲਿੰਕ ਕਰੋ"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ਲਿੰਕ ਕੀਤਾ ਗਿਆ"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ਸੰਪਰਕ</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> ਸੰਪਰਕ · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> ਸੰਪਰਕ · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> ਸੰਪਰਕ · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ਸੰਪਰਕ · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google ਤੋਂ"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> ਤੋਂ"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ਇਸ ਸੰਪਰਕ ਨੂੰ ਹਟਾਉਣਾ ਇੱਕ ਤੋਂ ਜ਼ਿਆਦਾ ਖਾਤਿਆਂ ਤੋਂ ਵੇਰਵੇ ਮਿਟਾ ਦੇਵੇਗਾ।"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"ਕੀ ਇਸ ਸੰਪਰਕ ਨੂੰ ਮਿਟਾਉਣਾ ਹੈ?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ਹਟਾਓ"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"ਬਦਲਾਵਾਂ ਖਾਰਜ ਕਰੋ"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"ਸੰਪਰਕ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"ਸੰਪਰਕ ਮੁੱਖ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ।"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ਮੁੱਖ ਸਕ੍ਰੀਨ \'ਤੇ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ।"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"ਨਵਾਂ ਸੰਪਰਕ ਬਣਾਓ"</string>
     <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="2228592924476426108">"ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਦੀ ਸੂਚੀ ਖਾਲੀ ਹੈ"</string>
-    <string name="noGroups" msgid="4607906327968232225">"ਕੋਈ ਲੇਬਲ ਨਹੀਂ।"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"ਸਮੂਹ ਬਣਾਉਣ ਲਈ ਤੁਹਾਨੂੰ ਇੱਕ ਖਾਤਾ ਬਣਾਉਣ ਦੀ ਲੋੜ ਹੈ।"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"ਇਸ ਲੇਬਲ ਨਾਲ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"ਇਸ ਖਾਤੇ ਵਿੱਚ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਦੀ ਸੂਚੀ ਖਾਲੀ ਹੈ"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"ਸੰਪਰਕ ਰੱਖਿਅਤ ਕਰਨ ਦੌਰਾਨ ਗੜਬੜ"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"ਸੰਪਰਕ ਦੀ ਫ਼ੋਟੋ ਦੀਆਂ ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ਲੇਬਲ ਲੋਡ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"ਲੇਬਲ ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ਲੇਬਲ ਮਿਟਾਇਆ ਗਿਆ"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"ਲੇਬਲ ਬਣਾਇਆ ਗਿਆ"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"ਲੇਬਲ ਬਣਾਇਆ ਨਹੀਂ ਜਾ ਸਕਦਾ"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"ਸੁਨੇਹਾ ਭੇਜੋ"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"ਸੰਪਰਕਾਂ ਨੂੰ ਚੁਣੋ"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"ਭੇਜੋ"</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="5948889261993124839">"ਸਾਰੇ"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"ਲੇਬਲ ਨਾਮ"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ਖਾਤਾ"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"ਲੇਬਲ ਕਰੋ"</string>
-    <string name="change_photo" msgid="8530597935483526383">"ਬਦਲੋ"</string>
-    <string name="description_star" msgid="2605854427360036550">"ਮਨਪਸੰਦ"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"ਸੰਪਰਕ ਸੰਪਾਦਿਤ ਕਰੋ"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"ਰੱਦ ਕਰੋ"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"ਪਿੱਛੇ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ਬੰਦ ਕਰੋ"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"ਕੀ ਚੁਣੇ ਗਏ ਸੰਪਰਕ ਨਾਲ ਮੌਜੂਦਾ ਸੰਪਰਕ ਲਿੰਕ ਕਰਨਾ ਹੈ?"</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="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="7122002148518724139">"ਸਾਲ ਸ਼ਾਮਲ ਕਰੋ"</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="4347232421410561500">"ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"ਆਯਾਤ ਕਰੋ"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"ਨਵਾਂ ਬਣਾਓ…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ਛੱਡੋ"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ਰੱਦ ਕਰੋ"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"ਕੀ ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧਾਂ ਨੂੰ ਖਾਰਜ ਕਰਨਾ ਹੈ?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"ਸੰਪਰਕ ਖੋਜੋ"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"ਸੰਪਰਕ ਹਟਾਓ"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"ਮੇਰੀ ਸਥਾਨਕ ਪ੍ਰੋਫਾਈਲ"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"ਮੇਰੀ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ਪ੍ਰੋਫਾਈਲ"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"ਸਾਰੇ ਸੰਪਰਕ ਡਿਸਪਲੇ ਕਰ ਰਿਹਾ ਹੈ"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"ਆਪਣੇ ਫੋਨ ਦੇ ਸੰਪਰਕਾਂ ਨੂੰ ਤਦ ਵੀ ਸੁਰੱਖਿਅਤ ਰੱਖੋ ਭਾਵੇਂ ਤੁਹਾਡਾ ਫੋਨ ਗੁਆਚ ਜਾਏ: ਇੱਕ ਔਨਲਾਈਨ ਸੇਵਾ ਨਾਲ ਸਿੰਕ੍ਰੋਨਾਈਜ਼ ਕਰੋ।"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ਇੱਕ ਖਾਤਾ ਸ਼ਾਮਲ ਕਰੋ"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"ਕਿਸੇ ਉਸ ਖਾਤੇ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਵਿੱਚ ਕੁਝ ਸਮਾਂ ਲਗਾਓ ਜੋ Google \'ਤੇ ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਦਾ ਬੈਕਅੱਪ ਲਵੇਗਾ।"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"ਨਵੇਂ ਸੰਪਰਕ <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤੇ ਜਾਣਗੇ।"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"ਨਵੇਂ ਸੰਪਰਕਾਂ ਲਈ ਇੱਕ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਖਾਤਾ ਚੁਣੋ:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ਘੱਟ ਦੇਖੋ"</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="288549957278065542">"ਇੱਕ ਨਿੱਜੀ ਕਾਪੀ ਬਣਾ ਰਿਹਾ ਹੈ..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"ਹਾਲੀਆ sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>। <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>। <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"ਹਾਲੀਆ ਕਾਲ। <xliff:g id="CALL_TYPE">%1$s</xliff:g>। <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>। <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"ਹੋਰ ਖੇਤਰ"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"ਸੰਪਰਕ ਫ਼ੋਟੋ ਬਦਲੋ"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"ਸੰਪਰਕ ਫ਼ੋਟੋ ਸ਼ਾਮਲ ਕਰੋ"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"ਸੰਪਾਦਕ ਖੋਲ੍ਹਣਾ ਅਸਫਲ ਰਿਹਾ।"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"ਇਸ ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> ਤੋਂ ਪ੍ਰਾਪਤ ਸੰਪਰਕ ਜਾਣਕਾਰੀ ਸੰਪਾਦਿਤ ਕਰਨਯੋਗ ਨਹੀਂ ਹੈ"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"ਵਰਤਮਾਨ ਰੂਪ ਵਿੱਚ <xliff:g id="ACCOUNT_NAME">%s</xliff:g> ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ। ਇੱਕ ਵੱਖਰਾ ਖਾਤਾ ਚੁਣਨ ਲਈ ਡਬਲ-ਟੈਪ ਕਰੋ।"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> ਲਿੰਕ ਕੀਤੇ ਸੰਪਰਕ"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ਸੰਪਰਕ ਲਿੰਕ ਕਰੋ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ਰੱਦ ਕਰੋ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਸੰਭਵ ਡੁਪਲੀਕੇਟ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਸੰਭਵ ਡੁਪਲੀਕੇਟ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> ਲਿੰਕ ਕੀਤੇ ਸੰਪਰਕ</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ਲਿੰਕ ਕੀਤੇ ਸੰਪਰਕ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ਇਹ ਸੰਪਰਕ"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ਸੰਭਵ ਡੁਪਲੀਕੇਟ"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"ਇਹ ਸੰਪਰਕ ਇਕੋ ਵਿਅਕਤੀ ਦੇ ਹੋ ਸਕਦੇ ਹਨ। ਤੁਸੀਂ ਇਹਨਾਂ ਨੂੰ ਇੱਕ ਇੱਕਲੇ ਸੰਪਰਕ ਵੱਜੋਂ ਲਿੰਕ ਕਰ ਸਕਦੇ ਹੋ।"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"ਲਿੰਕ ਕੀਤੇ ਗਏ ਸੰਪਰਕ"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"ਤੁਹਾਡੇ ਖਾਤਿਆਂ ਤੋਂ"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"ਫ਼ੋਟੋ ਚੁਣੋ"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> ਵੱਲੋਂ"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> ਹਟਾਓ"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> ਹਟਾਓ"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> ਹਟਾਓ"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ਵੱਲੋਂ ਫ਼ੋਟੋ ਨਹੀਂ ਜਾਂਚੀ ਗਈ"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ਵਲੋਂ ਫ਼ੋਟੋ ਜਾਂਚੀ ਗਈ"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"ਅਗਿਆਤ ਖਾਤੇ ਦੀ ਫ਼ੋਟੋ ਨਹੀਂ ਜਾਂਚੀ ਗਈ"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"ਅਗਿਆਤ ਖਾਤੇ ਦੀ ਫ਼ੋਟੋ ਜਾਂਚੀ ਗਈ"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"ਸੁਝਾਅ"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"ਨਵਾਂ"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"ਆਵਾਗੌਣ ਦਰਾਜ਼ ਖੋਲ੍ਹੋ"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"ਡਾਇਰੈਕਟਰੀ"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"ਕਾਰਜ-ਸਥਾਨ ਡਾਇਰੈਕਟਰੀ"</string>
     <string name="local_search_label" msgid="2551177578246113614">"ਸਾਰੇ ਸੰਪਰਕ"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> ਤੋਂ ਜ਼ਿਆਦਾ ਮਿਲੇ।"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> ਲਈ ਤਤਕਾਲ ਸੰਪਰਕ"</string>
     <string name="missing_name" msgid="8745511583852904385">"(ਕੋਈ ਨਾਮ ਨਹੀਂ)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"ਅਕਸਰ ਸੰਪਰਕ ਕੀਤੇ ਗਏ"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"ਸੰਪਰਕ ਦੇਖੋ"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"ਫ਼ੋਨ ਨੰਬਰਾਂ ਵਾਲੇ ਸਾਰੇ ਸੰਪਰਕ"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"ਕਾਰਜ-ਸਥਾਨ ਪ੍ਰੋਫਾਈਲ ਸੰਪਰਕ"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"ਅੱਪਡੇਟ ਵੇਖੋ"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"ਸਿਮ"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"ਨਾਮ"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ਉਪਨਾਮ"</string>
-    <string name="full_name" msgid="6602579550613988977">"ਨਾਮ"</string>
     <string name="name_given" msgid="4280790853455320619">"ਨਾਮ ਦਾ ਪਹਿਲਾ ਭਾਗ"</string>
     <string name="name_family" msgid="7466985689626017037">"ਨਾਮ ਦਾ ਆਖਰੀ ਭਾਗ"</string>
     <string name="name_prefix" msgid="59756378548779822">"ਨਾਮ ਅਗੇਤਰ"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> ਨੂੰ ਈਮੇਲ ਕਰੋ"</string>
     <string name="email" msgid="5668400997660065897">"ਈਮੇਲ ਕਰੋ"</string>
     <string name="postal_street" msgid="8133143961580058972">"ਗਲੀ"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"PO ਬਾਕਸ"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"ਆਂਢ-ਗੁਆਂਢ"</string>
     <string name="postal_city" msgid="6597491300084895548">"ਸ਼ਹਿਰ"</string>
     <string name="postal_region" msgid="6045263193478437672">"ਰਾਜ"</string>
     <string name="postal_postcode" msgid="572136414136673751">"ਜ਼ਿਪ ਕੋਡ"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"ਹੋਰ ਸਮੂਹ…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ਸਮਕਾਲੀਕਰਨ ਵਿੱਚੋਂ \"<xliff:g id="GROUP">%s</xliff:g>\" ਨੂੰ ਹਟਾਉਣ ਨਾਲ ਸਮਕਾਲੀਕਰਨ ਤੋਂ ਕੋਈ ਵੀ ਅਣ-ਸਮੂਹਬੱਧ ਕੀਤੇ ਸੰਪਰਕ ਵੀ ਹਟ ਜਾਣਗੇ।"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"ਡਿਸਪਲੇ ਵਿਕਲਪਾਂ ਨੂੰ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</string>
-    <string name="menu_done" msgid="796017761764190697">"ਹੋ ਗਿਆ"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"ਰੱਦ ਕਰੋ"</string>
     <string name="listCustomView" msgid="1840624396582117590">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਕੀਤਾ ਦ੍ਰਿਸ਼"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"ਆਯਾਤ ਕੀਤੇ ਸੰਪਰਕਾਂ ਨੂੰ ਇਸ ਵਿੱਚ ਰੱਖਿਅਤ ਕਰੋ:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM ਕਾਰਡ"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"ਕੀ <xliff:g id="FILENAME">%s</xliff:g> ਦਾ ਨਿਰਯਾਤ ਰੱਦ ਕਰਨਾ ਹੈ?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard ਆਯਾਤ/ਨਿਰਯਾਤ ਰੱਦ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"ਅਗਿਆਤ ਗੜਬੜ।"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" ਨੂੰ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: <xliff:g id="EXACT_REASON">%s</xliff:g>।"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ਨੂੰ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ: <xliff:g id="EXACT_REASON">%2$s</xliff:g>।"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ਨਿਰਯਾਤਕ ਸ਼ੁਰੂ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"।"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ਕੋਈ ਵੀ ਨਿਰਯਾਤ ਕਰਨ ਯੋਗ ਸੰਪਰਕ ਨਹੀਂ ਹਨ।"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"ਤੁਸੀਂ ਇੱਕ ਲੋੜੀਂਦੀ ਇਜਾਜ਼ਤ ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਹੈ।"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"ਨਿਰਯਾਤ ਕਰਨ ਦੌਰਾਨ ਇੱਕ ਗੜਬੜ ਹੋਈ: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"।"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"ਲੋੜੀਂਦਾ ਫ਼ਾਈਲ ਨਾਮ ਬਹੁਤ ਵੱਡਾ ਹੈ (\"<xliff:g id="FILENAME">%s</xliff:g>\")।"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O ਗੜਬੜ"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"ਲੋੜੀਂਦੀ ਮੈਮੋਰੀ ਨਹੀਂ ਹੈ। ਸ਼ਾਇਦ ਫ਼ਾਈਲ ਬਹੁਤ ਹੀ ਵੱਡੀ ਹੋ ਸਕਦੀ ਹੈ।"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"ਇੱਕ ਅਣਕਿਆਸੇ ਕਾਰਨ ਕਰਕੇ vCard ਪਾਰਸ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"ਵੰਨਗੀ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ।"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"vCard ਫ਼ਾਈਲ(ਲਾਂ) ਦੀ ਦਿੱਤੀ ਗਈ ਮੈਟਾ ਜਾਣਕਾਰੀ ਇਕੱਤਰ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ।"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"ਇੱਕ ਜਾਂ ਇੱਕ ਤੋਂ ਵਧੇਰੀਆਂ ਫ਼ਾਈਲਾਂ ਆਯਾਤ ਨਹੀਂ ਕੀਤੀਆਂ ਜਾ ਸਕੀਆਂ (%s)।"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> ਨੂੰ ਨਿਰਯਾਤ ਕਰਨਾ ਪੂਰਾ ਹੋਇਆ।"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"ਸੰਪਰਕਾਂ ਨੂੰ ਨਿਰਯਾਤ ਕਰਨਾ ਮੁਕੰਮਲ ਹੋਇਆ।"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"ਸੰਪਰਕਾਂ ਨੂੰ ਨਿਰਯਾਤ ਕਰਨਾ ਮੁਕੰਮਲ ਹੋਇਆ, ਸੰਪਰਕਾਂ ਨੂੰ ਸਾਂਝਾ ਕਰਨ ਲਈ ਸੂਚਨਾ \'ਤੇ ਕਲਿੱਕ ਕਰੋ।"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"ਸੰਪਰਕ ਡੈਟਾ ਨਿਰਯਾਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"ਸੰਪਰਕ ਡੈਟੇ ਨੂੰ ਨਿਰਯਾਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ਡੈਟਾਬੇਸ ਜਾਣਕਾਰੀ ਪ੍ਰਾਪਤ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕੀ।"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"ਨਿਰਯਾਤ ਕਰਨ ਯੋਗ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ। ਜੇਕਰ ਤੁਹਾਡੇ ਫ਼ੋਨ \'ਤੇ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ, ਤਾਂ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਕੁਝ ਡੈਟਾ ਪ੍ਰਦਾਤਾ ਸੰਪਰਕਾਂ ਨੂੰ ਫ਼ੋਨ ਤੋਂ ਨਿਰਯਾਤ ਕੀਤੇ ਜਾਣ ਦੀ ਇਜਾਜ਼ਤ ਨਾ ਦੇਣ।"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ਨਿਰਯਾਤ ਕਰਨ ਯੋਗ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ।"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard ਕੰਪੋਜ਼ਰ ਸਹੀ ਢੰਗ ਨਾਲ ਚਾਲੂ ਨਹੀਂ ਹੋਇਆ।"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ਨਿਰਯਾਤ ਨਹੀਂ ਹੋ ਸਕਿਆ"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"ਸੰਪਰਕ ਡੈਟਾ ਨਿਰਯਾਤ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਸੀ।\nਕਾਰਨ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> ਆਯਾਤ ਹੋ ਰਿਹਾ ਹੈ"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard ਡੈਟਾ ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard ਡੈਟਾ ਪੜ੍ਹਨਾ ਰੱਦ ਕੀਤਾ ਗਿਆ"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> ਨੂੰ ਆਯਾਤ ਕਰਨਾ ਮੁਕੰਮਲ ਹੋਇਆ"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ਨੂੰ ਆਯਾਤ ਕਰਨਾ ਰੱਦ ਕੀਤਾ ਗਿਆ।"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> ਨੂੰ ਥੋੜ੍ਹੀ ਦੇਰ ਵਿੱਚ ਆਯਾਤ ਕੀਤਾ ਜਾਵੇਗਾ।"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ਫ਼ਾਈਲ ਥੋੜ੍ਹੀ ਦੇਰ ਵਿੱਚ ਆਯਾਤ ਕੀਤੀ ਜਾਵੇਗੀ।"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard ਆਯਾਤ ਬੇਨਤੀ ਅਸਵੀਕਾਰ ਕੀਤੀ ਗਈ ਸੀ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> ਨੂੰ ਥੋੜ੍ਹੀ ਦੇਰ ਵਿੱਚ ਨਿਰਯਾਤ ਕੀਤਾ ਜਾਵੇਗਾ।"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ਫ਼ਾਈਲ ਥੋੜ੍ਹੀ ਦੇਰ ਵਿੱਚ ਨਿਰਯਾਤ ਕੀਤੀ ਜਾਵੇਗੀ।"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"ਸੰਪਰਕਾਂ ਨੂੰ ਜਲਦ ਹੀ ਨਿਰਯਾਤ ਕੀਤਾ ਜਾਵੇਗਾ।"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard ਨਿਰਯਾਤ ਬੇਨਤੀ ਅਸਵੀਕਾਰ ਕੀਤੀ ਗਈ ਸੀ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"ਸੰਪਰਕ"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"ਸਥਾਨਕ ਅਸਥਾਈ ਸਟੋਰੇਜ ਲਈ vCard(s) ਨੂੰ ਕੈਸ਼ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ। ਅਸਲ ਆਯਾਤ ਜਲਦ ਹੀ ਚਾਲੂ ਹੋਵੇਗਾ।"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard ਆਯਾਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ।"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"ਸੰਪਰਕ NFC \'ਤੇ ਪ੍ਰਾਪਤ ਹੋਇਆ"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"ਕੀ ਸੰਪਰਕ ਨਿਰਯਾਤ ਕਰਨੇ ਹਨ?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"ਕੈਸ਼ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> ਆਯਾਤ ਹੋ ਰਿਹਾ ਹੈ: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> ਆਯਾਤ ਹੋ ਰਿਹਾ ਹੈ: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf ਫ਼ਾਈਲ ਵਿੱਚ ਨਿਰਯਾਤ ਕਰੋ"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"ਇਸ ਮੁਤਾਬਕ ਛਾਂਟੋ"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"ਨਾਮ ਦਾ ਪਹਿਲਾ ਭਾਗ"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"ਮੇਰੀ ਜਾਣਕਾਰੀ"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"ਆਪਣਾ ਪ੍ਰੋਫਾਈਲ ਸਥਾਪਤ ਕਰੋ"</string>
     <string name="setting_about" msgid="7014388749752042863">"ਸੰਪਰਕਾਂ ਬਾਰੇ"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"ਦਿਖਣਯੋਗ ਸੰਪਰਕ ਸਾਂਝੇ ਕਰੋ"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"ਦਿਖਣਯੋਗ ਸੰਪਰਕ ਸਾਂਝਾ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ।"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ਮਨਪਸੰਦ ਸੰਪਰਕਾਂ ਨੂੰ ਸਾਂਝਾ ਕਰੋ"</string>
     <string name="share_contacts" msgid="8109287987498711664">"ਸਾਰੇ ਸੰਪਰਕ ਸਾਂਝੇ ਕਰੋ"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"ਸੰਪਰਕ ਸਾਂਝੇ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ।"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"ਸਾਂਝਾ ਕਰਨ ਲਈ ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ।"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਨ ਲਈ ਸੰਪਰਕ"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ਪ੍ਰਦਰਸ਼ਿਤ ਕਰਨ ਲਈ ਸੰਪਰਕ"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਕੀਤੇ ਦ੍ਰਿਸ਼ ਨੂੰ ਪ੍ਰਭਾਸ਼ਿਤ ਕਰੋ"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"ਦ੍ਰਿਸ਼ ਨੂੰ ਵਿਸ਼ੇਸ਼-ਵਿਉਂਤਬੱਧ ਕਰੋ"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"ਰੱਖਿਅਤ ਕਰੋ"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"ਸੰਪਰਕ ਖੋਜੋ"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"ਮਨਪਸੰਦ"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"ਕੋਈ ਸੰਪਰਕ ਨਹੀਂ ਹਨ।"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"ਅਕਸਰ ਆਉਣ ਵਾਲਿਆਂ ਨੂੰ ਸਾਫ਼ ਕਰੋ"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM ਕਾਰਡ ਚੁਣੋ"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"ਖਾਤੇ ਪ੍ਰਬੰਧਿਤ ਕਰੋ"</string>
     <string name="menu_import" msgid="6107961135813836467">"ਆਯਾਤ ਕਰੋ"</string>
     <string name="menu_export" msgid="2658783911863503902">"ਨਿਰਯਾਤ ਕਰੋ"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"ਬਲੌਕ ਕੀਤੇ ਨੰਬਰ"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> ਦੇ ਰਾਹੀਂ <xliff:g id="DATE">%1$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"ਖੋਜ ਕਰਨਾ ਬੰਦ ਕਰੋ"</string>
     <string name="description_clear_search" msgid="688023606766232904">"ਖੋਜ ਹਟਾਓ"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"ਸੰਪਰਕ ਡਿਸਪਲੇ ਵਿਕਲਪ"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"ਖਾਤਾ"</string>
     <string name="set_default_account" msgid="4311613760725609801">"ਕਾਲਾਂ ਲਈ ਹਮੇਸ਼ਾ ਇਹ ਵਰਤੋ"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"ਇਸਦੇ ਨਾਲ ਕਾਲ ਕਰੋ"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"ਕਿਸੇ ਨੋਟ-ਕਥਨ ਦੇ ਨਾਲ ਕਾਲ ਕਰੋ"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"ਕਾਲ ਦੇ ਨਾਲ ਭੇਜਣ ਲਈ ਕੋਈ ਨੋਟ-ਕਥਨ ਟਾਈਪ ਕਰੋ..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ਭੇਜੋ ਅਤੇ ਕਾਲ ਕਰੋ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>। <xliff:g id="COUNT_3">%2$d</xliff:g> ਅਣ-ਪੜ੍ਹੀਆਂ ਆਈਟਮਾਂ। </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>। <xliff:g id="COUNT_3">%2$d</xliff:g> ਅਣ-ਪੜ੍ਹੀਆਂ ਆਈਟਮਾਂ। </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"ਬਿਲਡ ਰੂਪ"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"ਖੁੱਲ੍ਹਾ ਸਰੋਤ ਲਾਇਸੰਸ"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ਓਪਨ ਸੋਰਸ ਸਾਫਟਵੇਅਰ ਲਈ ਲਾਇਸੰਸ ਵੇਰਵੇ"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"ਮਿਟਾਓ"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"ਪਦ-ਲੋਪ ਚਿੰਨ੍ਹ"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> ਸਕਿੰਟ"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> ਮਿੰਟ <xliff:g id="SECONDS">%s</xliff:g> ਸਕਿੰਟ"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ਘੰਟੇ <xliff:g id="MINUTES_1">%s</xliff:g> ਮਿੰਟ <xliff:g id="SECONDS">%s</xliff:g> ਸਕਿੰਟ"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> ਮਿੰਟ <xliff:g id="SECONDS">%2$s</xliff:g> ਸਕਿੰਟ"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ਘੰਟੇ <xliff:g id="MINUTES_1">%2$s</xliff:g> ਮਿੰਟ <xliff:g id="SECONDS">%3$s</xliff:g> ਸਕਿੰਟ"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ਇਹ ਸ਼ਾਰਟਕੱਟ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"ਸੰਪਰਕ ਹਟਾਇਆ ਗਿਆ ਸੀ"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"ਆਯਾਤ ਕਰੋ"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"ਕੋਈ ਕਨੈਕਸ਼ਨ ਨਹੀਂ"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"ਹੋਰ ਦਿਖਾਓ"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"ਸਿਮ ਕਾਰਡ ਆਯਾਤ ਕਰਨਾ ਮੁਕੰਮਲ ਹੋਇਆ"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"ਆਯਾਤ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM ਕਾਰਡ ਤੋਂ ਸੰਪਰਕ ਆਯਾਤ ਨਹੀਂ ਕੀਤੇ ਜਾ ਸਕੇ"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"ਸਿਮ ਆਯਾਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 0a89526..32f48af 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontakty"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontakty"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Dodaj kontakt"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Telefon do osoby"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"SMS do osoby"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Wybierz skrót kontaktu"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Wybierz numer"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Wybierz numer"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Wybierz kontakt"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Dodaj do kontaktu"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Wybierz kontakt"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Wybierz"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Utwórz nowy kontakt"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Informacje kontaktowe"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Informacje"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Aktualizacje"</string>
     <string name="searchHint" msgid="8482945356247760701">"Przeszukuj kontakty"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Wyświetl kontakt"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Dodaj do ulubionych"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Usuń z ulubionych"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Usunięto z ulubionych"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Utwórz skrót"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Zadzwoń do kontaktu"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Wyślij tekst do kontaktu"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Rozłącz"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Usuń kontakty"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Zmień nazwę etykiety"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Wybierz kontakty"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Dodaj kontakty"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Usuń z etykiety"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Dodaj kontakt"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Utwórz nową…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Utwórz etykietę"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Rozłączyć ten kontakt na wiele kontaktów?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Rozłącz"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Czy chcesz zapisać dotychczasowe zmiany i rozłączyć ten kontakt na wiele kontaktów?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Zapisz"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Połącz kontakty"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> – połączono"</string>
@@ -87,10 +78,10 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> kontakty · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="many"><xliff:g id="COUNT_2">%d</xliff:g> kontaktów · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakty · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktów · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Od Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Od: <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -107,21 +98,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Usunięcie tego kontaktu spowoduje usunięcie informacji z wielu kont."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Usunąć ten kontakt?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Usuń"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Odrzuć zmiany"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt nie istnieje."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt został dodany do ekranu głównego."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> został dodany do ekranu głównego."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Utwórz nowy kontakt"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Utwórz nowy kontakt"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Brak zdjęć dostępnych w tablecie."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"W telefonie brak dostępnych zdjęć."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Zdjęcie kontaktu"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nazwa etykiety niestandardowej"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Przekieruj połączenia bezpośrednio na pocztę głosową"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Usuń zdjęcie"</string>
     <string name="noContacts" msgid="2228592924476426108">"Twoja lista kontaktów jest pusta"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Brak etykiet."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Do tworzenia grup niezbędne jest konto."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Brak kontaktów z tą etykietą"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Na tym koncie nie ma żadnych kontaktów"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Twoja lista kontaktów jest pusta"</string>
@@ -134,7 +119,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Podczas zapisywania kontaktu wystąpił błąd"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nie udało się zapisać zmian zdjęcia kontaktu"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nie udało się załadować etykiety"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etykieta została zapisana"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etykieta usunięta"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etykieta została utworzona"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nie można utworzyć etykiety"</string>
@@ -149,35 +133,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Wyślij wiadomość"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Wybierz kontakty"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Wyślij"</string>
-    <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" 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" 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="5948889261993124839">"Wszystkie"</string>
-    <string name="callBack" msgid="5498224409038809224">"Oddzwoń"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Zadzwoń ponownie"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Połączenie zwrotne"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Czy dodać adres „<xliff:g id="EMAIL">%s</xliff:g>” do kontaktów?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"Kontakt <xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Imiona i nazwiska oraz nazwy w Twoich kontaktach"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Nie znaleziono aplikacji do obsługi tego działania."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknij, by wrócić do poprzedniego ekranu"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Dodaj numer telefonu"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Dodaj adres e-mail"</string>
@@ -198,52 +156,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nazwa etykiety"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Czat głosowy"</string>
     <string name="video_chat" msgid="1872255818640336072">"Czat wideo"</string>
-    <string name="connections" msgid="8098440723172028350">"Połączenia"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Dodaj połączenie"</string>
-    <string name="recent" msgid="2659189233141493004">"Najnowsze"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Ostatnie aktualizacje"</string>
     <string name="account_type_format" msgid="718948015590343010">"Kontakt <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Konto <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Zrób zdjęcie"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Zrób nowe zdjęcie"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Wybierz zdjęcie"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Wybierz nowe zdjęcie"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Wybierz wszystko"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Anuluj wybór wszystkich"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Dodaj nowy"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Dodaj organizację"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Dodaj etykietę"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Zmień"</string>
-    <string name="description_star" msgid="2605854427360036550">"ulubione"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Edytuj kontakt"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Anuluj"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Wstecz"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zamknij"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Dodaj do moich kontaktów"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Katalog <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Ustawienia"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ustawienia"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Dodaj do kontaktów"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Dodaj do kontaktu"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Zamknij"</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="7122002148518724139">"Dodaj rok"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Wczytuję…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Utwórz nowy kontakt"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Dodaj konto"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importuj"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Utwórz nową…"</string>
@@ -257,14 +191,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Odrzuć"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Anuluj"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"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="enter_contact_name" msgid="4594274696120278368">"Szukaj kontaktów"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Usuń kontakty"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Mój profil lokalny"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Mój profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Wyświetlanie wszystkich kontaktów"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Zapewnij bezpieczeństwo swoich kontaktów nawet w przypadku utraty telefonu: włącz synchronizację z usługą online."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Dodaj konto"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Poświęć chwilę, aby dodać konto, dzięki któremu kopie zapasowe kontaktów zostaną zapisane w Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nowe kontakty zostaną zapisane na koncie <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Wybierz domyślne konto dla nowych kontaktów:"</string>
@@ -283,13 +213,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Pokaż mniej"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Ostatnie"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Informacje"</string>
-    <string name="send_message" msgid="8938418965550543196">"Wyślij wiadomość"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Tworzenie kopii osobistej…"</string>
     <string name="tomorrow" msgid="6241969467795308581">"Jutro"</string>
     <string name="today" msgid="8041090779381781781">"Dzisiaj"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Dzisiaj: <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Jutro: <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Wydarzenie bez nazwy)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Ustaw"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Komunikator"</string>
@@ -299,20 +228,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Strona internetowa"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Wydarzenie"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relacja"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Konto"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Imię i nazwisko"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknij, by rozwinąć edytor kontaktów."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknij, by zwinąć edytor kontaktów."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"trasa do lokalizacji"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"ostatni SMS. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknij, by odpowiedzieć"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"ostatni SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknij, by odpowiedzieć"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"przychodzące"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"wychodzące"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"nieodebrane"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"ostatnie połączenie. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Więcej pól"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Zmień zdjęcie kontaktu"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Dodaj zdjęcie kontaktu"</string>
@@ -320,49 +245,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Nie udało się otworzyć edytora."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Zapisz na koncie"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktów z konta <xliff:g id="ACCOUNT">%s</xliff:g> nie można edytować"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Obecnie zapisujesz na koncie <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Kliknij dwukrotnie, by wybrać inne."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="few">Kontakty połączone (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="many">Kontakty połączone (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Kontakty połączone (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Kontakt połączony</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Połączone kontakty: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"POŁĄCZ KONTAKTY"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANULUJ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> możliwe duplikaty</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> możliwych duplikatów</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> możliwego duplikatu</item>
-      <item quantity="one">1 możliwy duplikat</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> połączone kontakty</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> połączonych kontaktów</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> połączonego kontaktu</item>
-      <item quantity="one">1 połączony kontakt</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ten kontakt"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Możliwe duplikaty"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Te kontakty mogą dotyczyć tej samej osoby. Możesz je połączyć w jeden kontakt."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Połączone kontakty"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Z Twoich kont"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Wybierz zdjęcie"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Z konta <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Usuń <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Usuń <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Usuń <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Zdjęcie z konta <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> – niezaznaczone"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Zdjęcie z konta <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> – zaznaczone"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Nie wybrano zdjęcia z nieznanego konta"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Wybrano zdjęcie z nieznanego konta"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Sugestie"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nowe"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Otwórz panel nawigacji"</string>
@@ -431,11 +320,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Katalog"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Katalog służbowy"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Wszystkie kontakty"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Znaleziono więcej niż <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Szybki kontakt: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Bez nazwy)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Częste kontakty"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Wyświetl kontakt"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Wszystkie kontakty z numerami telefonów"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontakty w profilu do pracy"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Pokaż aktualizacje"</string>
@@ -443,7 +330,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nazwa"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudonim"</string>
-    <string name="full_name" msgid="6602579550613988977">"Imię i nazwisko"</string>
     <string name="name_given" msgid="4280790853455320619">"Imię"</string>
     <string name="name_family" msgid="7466985689626017037">"Nazwisko"</string>
     <string name="name_prefix" msgid="59756378548779822">"Przedrostek nazwiska"</string>
@@ -476,8 +362,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Wyślij e-maila do: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-mail"</string>
     <string name="postal_street" msgid="8133143961580058972">"Ulica"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Skrytka pocztowa"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Dzielnica"</string>
     <string name="postal_city" msgid="6597491300084895548">"Miasto"</string>
     <string name="postal_region" msgid="6045263193478437672">"Województwo"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Kod pocztowy"</string>
@@ -515,8 +399,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Więcej grup..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Usunięcie grupy „<xliff:g id="GROUP">%s</xliff:g>” z ustawień synchronizacji spowoduje również usunięcie wszelkich rozgrupowanych kontaktów z tych ustawień."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Trwa zapisywanie opcji wyświetlania..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Gotowe"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Anuluj"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Widok niestandardowy"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Zapisz zaimportowane kontakty na koncie:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Karta SIM"</string>
@@ -540,18 +422,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Anulować eksport: <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Nie można anulować importu/eksportu vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Nieznany błąd."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nie można otworzyć pliku „<xliff:g id="FILE_NAME">%s</xliff:g>”: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nie można otworzyć pliku „<xliff:g id="FILE_NAME">%1$s</xliff:g>”: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nie można uruchomić programu eksportującego: „<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Brak kontaktów, które można wyeksportować."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Wymagane uprawnienia zostały wyłączone"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Wystąpił błąd podczas eksportowania: „<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Wymagana nazwa pliku jest zbyt długa („<xliff:g id="FILENAME">%s</xliff:g>”)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Błąd wejścia/wyjścia"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Za mało pamięci. Plik może być zbyt duży."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Nie można przeanalizować pliku vCard z nieoczekiwanego powodu."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Format nie jest obsługiwany."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Nie można zebrać metainformacji z podanych plików vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Nie można zaimportować co najmniej jednego pliku (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Zakończono eksportowanie pliku <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Eksportowanie kontaktów zostało zakończone."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontakty zostały wyeksportowane. Aby je udostępnić, kliknij powiadomienie."</string>
@@ -560,29 +438,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Eksportowanie danych kontaktowych"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Eksportuję dane kontaktów."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nie można pobrać informacji z bazy danych."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Brak kontaktów do eksportu. Jeśli masz w telefonie kontakty, być może dostawcy danych nie zezwalają na ich eksport z telefonu."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Brak kontaktów do wyeksportowania."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Obiekt tworzenia danych vCard nie został uruchomiony poprawnie."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Eksport nieudany"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Dane kontaktów nie zostały wyeksportowane.\nPrzyczyna: „<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importowanie <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nie można odczytać danych vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Anulowano odczyt danych kart vCard"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Zakończono importowanie pliku vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Anulowano importowanie pliku <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Plik <xliff:g id="FILENAME">%s</xliff:g> zostanie za chwilę zaimportowany."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Plik zostanie za chwilę zaimportowany."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Żądanie importu danych vCard zostało odrzucone. Spróbuj ponownie później."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Plik <xliff:g id="FILENAME">%s</xliff:g> zostanie za chwilę wyeksportowany."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Plik zostanie za chwilę wyeksportowany."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakty zostaną wyeksportowane wkrótce."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Żądanie eksportu danych vCard zostało odrzucone. Spróbuj ponownie później."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Trwa buforowanie plików vCard w lokalnym obszarze tymczasowym. Właściwy import rozpocznie się za chwilę."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Nie można zaimportować pliku vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Odebrane przez NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Eksport kontaktów?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Buforowanie"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importowanie <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importowanie <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Eksportuj do pliku .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortuj według"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Imię"</string>
@@ -595,8 +469,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"O mnie"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Wypełnij swój profil"</string>
     <string name="setting_about" msgid="7014388749752042863">"Informacje o Kontaktach"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Udostępnij widoczne kontakty"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Nie udało się udostępnić widocznych kontaktów."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Udostępnij ulubione kontakty"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Udostępnij wszystkie kontakty"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Nie udało się udostępnić kontaktów."</string>
@@ -606,14 +478,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Brak kontaktów do udostępnienia."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakty do wyświetlenia"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakty do wyświetlenia"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Dostosuj widok"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Dostosuj widok"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Zapisz"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Wyszukaj kontakty"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Ulubione"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Brak kontaktów"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Wyczyść częste kontakty"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Wybierz kartę SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Zarządzaj kontami"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importuj"</string>
     <string name="menu_export" msgid="2658783911863503902">"Eksportuj"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Zablokowane numery"</string>
@@ -621,21 +489,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>, przez: <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"zatrzymaj wyszukiwanie"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Wyczyść wyszukiwanie"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opcje wyświetlania kontaktów"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Konto"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Zawsze używaj do połączeń"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Zadzwoń, używając"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Połącz i wyślij notatkę"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Wpisz notatkę, którą chcesz wysłać razem z połączeniem…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"WYŚLIJ I POŁĄCZ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nieprzeczytane elementy. </item>
-      <item quantity="many"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nieprzeczytanych elementów. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> nieprzeczytanego elementu. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> nieprzeczytany element. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Wersja kompilacji"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licencje open source"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Szczegóły licencji na oprogramowanie open source"</string>
@@ -649,8 +509,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Usuń"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Wielokropek"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> godz. <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> godz. <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ten skrót został wyłączony"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt został usunięty"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importuj"</string>
@@ -675,4 +535,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Brak połączenia"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Pokaż więcej"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Zaimportowano kontakty z karty SIM"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Nie udało się zaimportować"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nie udało się zaimportować kontaktów z karty SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importuję kontakty z karty SIM"</string>
 </resources>
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 5642a7b..347c5a6 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contatos"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contatos"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Adicionar contato"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Contato"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Discagem direta"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Mensagem direta"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Escolher contato p/ atalho"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Escolher número p/ atalho"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Escolha um número para enviar uma mensagem"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Escolher contato"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Adicionar a contato"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Escolha um contato"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Selecionar"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Criar novo contato"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Detalhes do contato"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Sobre"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Atualização"</string>
     <string name="searchHint" msgid="8482945356247760701">"Pesquisar contatos"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Ver contato"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Adicionar aos favoritos"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Remover dos favoritos"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Removido dos favoritos"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Criar atalho"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Ligar para contato"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar SMS/MMS para o contato"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Desvincular"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Remover contatos"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Renomear marcador"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Selecionar contatos"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Adicionar contatos"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Remover do marcador"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Adicionar contato"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Criar novo..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Criar marcador"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Desvincular este contato em vários contatos?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desvincular"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Gostaria de salvar as alterações já feitas e desvincular este contato em vários contatos?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Salvar"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Vincular contatos"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Selecione o contato que você deseja vincular 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Nome vinculado: <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contatos</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> contato: <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contatos: <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contato: <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contatos: <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Do Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Da conta <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"A exclusão deste contato excluirá detalhes de várias contas."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Excluir este contato?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Excluir"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Descartar alterações"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"O contato não existe."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contato adicionado à tela inicial."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Contato <xliff:g id="NAME">%s</xliff:g> adicionado à tela inicial."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Criar novo contato"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Criar novo contato"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Nenhuma imagem disponível no tablet."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nenhuma imagem disponível no telefone."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto do contato"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Personalizar nome do marcador"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar chamadas diretamente para o correio de voz"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Remover foto"</string>
     <string name="noContacts" msgid="2228592924476426108">"Sua lista de contatos está vazia"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Nenhum marcador."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Você precisa de uma conta para criar grupos."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Nenhum contato com este marcador"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Nenhum contato nesta conta"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Sua lista de contatos está vazia"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Erro ao salvar o contato"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Não foi possível salvar as alterações da foto de contato"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Falha ao carregar o marcador"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Marcador salvo"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Marcador excluído"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Marcador criado"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Não é possível criar um marcador"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Enviar mensagem"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Escolher contatos"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Enviar"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contatos com números de telefone</item>
-      <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" 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" 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="5948889261993124839">"Todos"</string>
-    <string name="callBack" msgid="5498224409038809224">"Retornar chamada"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Ligar novamente"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Retornar chamada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adicionar \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contatos?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contatos"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nomes dos seus contatos"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Nenhum app foi encontrado para executar esta ação."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Clique para retornar à tela anterior"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Adicionar número de telefone"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Adicionar e-mail"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nome - marcador"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Bate-papo por voz"</string>
     <string name="video_chat" msgid="1872255818640336072">"Bate-papo por vídeo"</string>
-    <string name="connections" msgid="8098440723172028350">"Conexões"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Adicionar conexão"</string>
-    <string name="recent" msgid="2659189233141493004">"Recentes"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Atualiz. recentes"</string>
     <string name="account_type_format" msgid="718948015590343010">"Contato de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Conta do <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Tirar foto"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Tirar outra foto"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Escolher foto"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Selecionar nova foto"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Selecionar todos"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Desmarcar todos"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Adicionar novo"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Adicionar organização"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Marcador"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Alterar"</string>
-    <string name="description_star" msgid="2605854427360036550">"favorito"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Editar contato"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancelar"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Voltar"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fechar"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vincular o contato atual com o 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Adicionar a Meus contatos"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Diretório <xliff:g id="TYPE">%1$s</xliff:g>"</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="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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Adicionar aos contatos"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Adicionar a contato"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Fechar"</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="7122002148518724139">"Incluir ano"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Contato"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Carregando…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Criar um novo contato"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Adicionar conta"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importar"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Criar novo..."</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descartar"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancelar"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Descartar personalizações?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Pesquisar contatos"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Remover contatos"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Meu perfil local"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Meu perfil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Exibindo todos os contatos"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantenha seus contatos seguros, mesmo se você perder seu telefone: sincronize com um serviço on-line."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Adicionar uma conta"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Adicione a conta na qual será feito o backup dos seus contatos no Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novos contatos serão salvos em <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Escolha uma conta padrão para novos contatos:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Recente"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Sobre"</string>
-    <string name="send_message" msgid="8938418965550543196">"Enviar mensagem"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Criando uma cópia pessoal..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Amanhã"</string>
     <string name="today" msgid="8041090779381781781">"Hoje"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Hoje, às <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Amanhã, às <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Evento sem título)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Definir"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Mensagem instantânea"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Site"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relação"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Conta"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefone"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Clique para expandir o editor de contatos."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Clique para recolher o editor de contatos."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"rotas até o local"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. clique para responder"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. clique para responder"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrada"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"saída"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdida"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Mais campos"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Alterar foto do contato"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Adicionar foto do contato"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Falha ao abrir o editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Salvar em"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"As informações do contato em <xliff:g id="ACCOUNT">%s</xliff:g> não são editáveis"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Salvando em <xliff:g id="ACCOUNT_NAME">%s</xliff:g> no momento. Toque duas vezes para escolher uma conta diferente."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="one">Contato vinculado (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Contatos vinculados (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contatos vinculados"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"VINCULAR CONTATOS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> possíveis cópias</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> possíveis cópias</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contatos vinculados</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatos vinculados</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contato"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possíveis cópias"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Talvez esses contatos sejam a mesma pessoa. É possível vinculá-los como um único contato."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Contatos vinculados"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Das suas contas"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Escolher foto"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"De <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Excluir <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Excluir <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Excluir <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>não marcada"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>marcada"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto de conta desconhecida não verificada"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto de conta desconhecida verificada"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Sugestões"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Abrir gaveta de navegação"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Diretório"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Diretório de trabalho"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Todos os contatos"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Mais de <xliff:g id="COUNT">%d</xliff:g> encontrados."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Contato rápido de <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"Sem nome"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Chamados frequentemente"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Visualizar contato"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Todos os contatos com números de telefone"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Contatos do perfil de trabalho"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Ver atualizações"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Apelido"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nome"</string>
     <string name="name_given" msgid="4280790853455320619">"Nome"</string>
     <string name="name_family" msgid="7466985689626017037">"Sobrenome"</string>
     <string name="name_prefix" msgid="59756378548779822">"Prefixo do nome"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Enviar e-mail para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-mail"</string>
     <string name="postal_street" msgid="8133143961580058972">"Rua"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Caixa postal"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Vizinhança"</string>
     <string name="postal_city" msgid="6597491300084895548">"Cidade"</string>
     <string name="postal_region" msgid="6045263193478437672">"Estado"</string>
     <string name="postal_postcode" msgid="572136414136673751">"CEP"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Mais grupos…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"A remoção de \"<xliff:g id="GROUP">%s</xliff:g>\" da sincronização também removerá os contatos não agrupados da sincronização."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Salvando opções de exibição…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Concluído"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Cancelar"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Visualização personalizada"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Salvar contatos importados em:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Cartão SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancelar exportação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Não foi poss. canc. imp./export. vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Erro desconhecido."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Não foi possível abrir \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Não foi possível abrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Não foi possível iniciar o exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Não há contato exportáveis."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Você desativou uma permissão obrigatória."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ocorreu um erro durante a exportação: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"O nome de arquivo exigido é muito longo (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Erro E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Não há memória suficiente. O arquivo pode ser muito grande."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Não foi possível analisar o vCard por um motivo inesperado."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"O formato não é suportado."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Não foi possível coletar informações meta de determinados arquivos vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Um ou mais arquivos não puderam ser importados (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exportação concluída de <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"A exportação dos contatos foi concluída."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"A exportação dos contatos foi concluída. Clique na notificação para compartilhar contatos."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando dados do contato"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Os dados dos contatos estão sendo exportados."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Não foi possível obter as informações do banco de dados."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Não há contatos exportáveis. Se você tiver contatos em seu telefone, alguns provedores de dados podem não permitir que os contatos sejam exportados a partir do telefone."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Não há contatos exportáveis."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"O criador do vCard não iniciou corretamente."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Não foi possível exportar"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Os dados de contato não foram exportados.\nMotivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importando <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Não foi possível ler os dados do vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Leitura de dados vCard cancelada"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importação de vCard concluída <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importação de <xliff:g id="FILENAME">%s</xliff:g> cancelada"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> será importado em breve."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"O arquivo será importado em breve."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"O pedido de importação vCard foi rejeitado. Tente novamente mais tarde."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> será exportado em breve."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"O arquivo será exportado em breve."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Os contatos serão exportados em breve."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Pedido de exportação vCard foi rejeitado. Tente novamente mais tarde."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contato"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Armazenando VCard(s) em cache no armazenamento temporário local. A importação real começará em breve."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Não foi possível importar o vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contato via NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Exportar contatos?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Armazenando em cache"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exportar p/ arquivo .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Classificar por"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nome"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Minhas informações"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Configurar seu perfil"</string>
     <string name="setting_about" msgid="7014388749752042863">"Sobre Contatos"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Compartilhar contatos visíveis"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Falha ao compartilhar contatos visíveis."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartilhar contatos favoritos"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Compartilhar todos os contatos"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Falha ao compartilhar contatos."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Não há contatos para compartilhar."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contatos para exibição"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contatos a exibir"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Definir visualização personalizada"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Personalizar visualização"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Salvar"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Pesquisar contatos"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Nenhum contato."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Apagar frequentes"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Selecionar cartão SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Gerenciar contas"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importar"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exportar"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"parar de pesquisar"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Limpar pesquisa"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opções de exibição de contato"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Conta"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Sempre usar esta opção para chamadas"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Ligar com"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Chamada com nota"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Digite uma nota para enviar com a chamada..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ENVIAR E LIGAR"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> item não lido. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> itens não lidos. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versão"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenças de código aberto"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalhes da licença do software de código aberto"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Excluir"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Reticências"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Este atalho foi desativado"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"O contato foi removido"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importar"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Sem conexão"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Mostrar mais"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"A importação do cartão SIM foi concluída"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Falha na importação"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Não foi possível importar os contatos do cartão SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importando do cartão SIM"</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 342f800..5602fa6 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contactos"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contactos"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Adicionar contacto"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Contacto"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Marcação direta"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Mensagem direta"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Selec. um atalho de contacto"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Selec. número a marcar"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Selec. n.º a enviar mensagem"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Escolher contacto"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Adicionar ao contacto"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Escolher um contacto"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Selecionar"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Criar novo contacto"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Detalhes de contacto"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Acerca de"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Atualiz."</string>
     <string name="searchHint" msgid="8482945356247760701">"Pesquisar contactos"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Visualizar contacto"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Adicionar aos favoritos"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Remover dos favoritos"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Removido dos favoritos"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Criar atalho"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Ligar para contacto"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar SMS/MMS para contacto"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Desassociar"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Remover contactos"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Mudar o nome da etiqueta"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Selecionar contactos"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Adicionar contactos"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Remover da etiqueta"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Adicionar contacto"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Criar nova…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Criar etiqueta"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Pretende desassociar este contacto em vários contactos?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desassociar"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Gostaria de guardar as alterações já efetuadas e desassociar este contacto em vários contactos?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Guardar"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Associar contactos"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Contacto associado: <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contactos · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contactos · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> contacto · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Da Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Da conta <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"A eliminação deste contacto elimina detalhes de várias contas."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Pretende eliminar este contacto?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Eliminar"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Rejeitar alterações"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"O contacto não existe."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contacto adicionado ao ecrã principal."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> adicionado ao ecrã principal."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Criar novo contacto"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Criar novo contacto"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Não existem imagens disponíveis no tablet."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Não existem imagens disponíveis no telefone."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografia do contacto"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nome da etiqueta personalizada"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar as chamadas diretamente para o correio de voz"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Remover fotografia"</string>
     <string name="noContacts" msgid="2228592924476426108">"A sua lista de contactos está vazia"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Sem etiquetas."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Para criar grupos precisa de uma conta"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Sem contactos com esta etiqueta"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Não existem contactos nesta conta"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"A sua lista de contactos está vazia"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Ocorreu um erro ao guardar o contacto"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Não foi possível guardar as alterações da foto do contacto"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Falha ao carregar a etiqueta"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etiqueta guardada"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiqueta eliminada"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etiqueta criada"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Não é possível criar a etiqueta"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Enviar mensagem"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Selecionar contactos"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Enviar"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos com números de telefone</item>
-      <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" 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" 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="5948889261993124839">"Todos"</string>
-    <string name="callBack" msgid="5498224409038809224">"Chamada de retorno"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Ligar novamente"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Devolver chamada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adicionar \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contactos?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contactos"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nomes dos contactos"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Não foram encontradas aplicações para executar esta ação"</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Clique para regressar ao ecrã anterior"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Adicionar número de telefone"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Adicionar email"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nome etiqueta"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Chat de voz"</string>
     <string name="video_chat" msgid="1872255818640336072">"Chat de vídeo"</string>
-    <string name="connections" msgid="8098440723172028350">"Ligações"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Adicionar ligação"</string>
-    <string name="recent" msgid="2659189233141493004">"Recentes"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Atualiz. recentes"</string>
     <string name="account_type_format" msgid="718948015590343010">"Contacto <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Conta <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Tirar foto"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Tirar nova fotografia"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Escolher fotografia"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Selecionar nova fotografia"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Selecionar tudo"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Desmarcar tudo"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Adicionar novo"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Adicionar entidade"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiqueta"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Alterar"</string>
-    <string name="description_star" msgid="2605854427360036550">"favorito"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Editar contacto"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancelar"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Anterior"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fechar"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Pretende ligar o contacto atual 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Adicionar aos Meus Contactos"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Directório <xliff:g id="TYPE">%1$s</xliff:g>"</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="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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Adicionar aos contactos"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Adicionar ao contacto"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Fechar"</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="7122002148518724139">"Incluir ano"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Contacto"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"A carregar…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Criar novo contacto"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Adicionar conta"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importar"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Criar nova…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Rejeitar"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancelar"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Pretende rejeitar as personalizações?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Pesquisar contactos"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Remover contactos"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"O meu perfil local"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"O meu perfil do <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"A apresentar todos os contactos"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantenha os seus contactos em segurança, mesmo em caso de perda do telemóvel: sincronize com um serviço on-line."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Adicionar uma conta"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Dedique um minuto para adicionar uma conta que irá efetuar uma cópia de segurança dos seus contactos no Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Os novos contactos serão guardados em <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Escolha uma conta predefinida para os novos contactos:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Recentes"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Acerca de"</string>
-    <string name="send_message" msgid="8938418965550543196">"Enviar mensagem"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"A criar uma cópia pessoal"</string>
     <string name="tomorrow" msgid="6241969467795308581">"Amanhã"</string>
     <string name="today" msgid="8041090779381781781">"Hoje"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Hoje, às <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Amanhã, às <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Evento sem nome)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Definir"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"MI"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relação"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Conta"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telemóvel"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Clique para expandir o editor de contactos."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Clique para reduzir o editor de contactos."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"direções para a localização"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. clique para responder"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. clique para responder"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"recebida"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"efetuada"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"não atendida"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Mais campos"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Alterar foto do contacto"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Adicionar foto do contacto"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Ocorreu uma falha ao abrir o editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"A guardar em"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"A informação de contacto de <xliff:g id="ACCOUNT">%s</xliff:g> não é editável"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"A guardar atualmente em <xliff:g id="ACCOUNT_NAME">%s</xliff:g>... Toque duas vezes para escolher uma conta diferente."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Contactos ligados (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Contacto ligado</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contactos ligados"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ASSOCIAR CONTACTOS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> possíveis duplicados</item>
-      <item quantity="one">1 possível duplicado</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contactos ligados</item>
-      <item quantity="one">1 contacto ligado</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contacto"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possíveis duplicados"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Estes contactos podem ser da mesma pessoa. Pode associá-los num único contacto."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Contactos associados"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Das suas contas"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Escolher foto"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"De <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Eliminar <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Eliminar <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Eliminar <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> não marcada"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> marcada"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto de conta desconhecida desmarcada"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto de conta desconhecida marcada"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Sugestões"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Abrir gaveta de navegação"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Directório"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Diretório de trabalho"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Todos os contactos"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Foram encontrados mais de <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Contacto rápido de <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Sem nome)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Contactos frequentes"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Ver contacto"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Todos os contactos com números de telefone"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Contactos do perfil de trabalho"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Ver atualizações"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudónimo"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nome"</string>
     <string name="name_given" msgid="4280790853455320619">"Nome próprio"</string>
     <string name="name_family" msgid="7466985689626017037">"Apelido"</string>
     <string name="name_prefix" msgid="59756378548779822">"Título académico ou profissional"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Enviar email para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Email"</string>
     <string name="postal_street" msgid="8133143961580058972">"Rua"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Apartado"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Vizinhança"</string>
     <string name="postal_city" msgid="6597491300084895548">"Cidade"</string>
     <string name="postal_region" msgid="6045263193478437672">"Região"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Código postal"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Mais grupos..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Ao remover \"<xliff:g id="GROUP">%s</xliff:g>\" da sincronização, removerá também quaisquer contactos não agrupados."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"A guardar opções de visualização..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Concluído"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Cancelar"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Vista personalizada"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Guardar contactos importados em:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Cartão SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancelar a exportação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Imposs. cancel. import./export. do vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Erro desconhecido."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Não foi possível abrir \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Não foi possível abrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Não foi possível iniciar o exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Não existe um contacto exportável."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Desativou uma autorização obrigatória."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ocorreu um erro durante a exportação: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Nome de ficheiro demasiado longo (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Erro de E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Memória insuficiente. O ficheiro pode ser demasiado grande."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Não foi possível analisar o vCard por um motivo inesperado."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"O formato não é suportado."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Não foi possível recolher meta informações de determinado(s) ficheiro(s) vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Não foi possível importar um ou mais ficheiros (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"A exportação de <xliff:g id="FILENAME">%s</xliff:g> terminou."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Exportação de contactos concluída."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"A exportação dos contactos foi concluída. Clique na notificação para partilhar contactos."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportar dados do contacto"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Os dados de contactos estão a ser exportados."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Não foi possível obter informações da base de dados"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Não existem contactos exportáveis. Se tiver contactos no seu telemóvel, alguns fornecedores de dados podem não permitir a exportação dos contactos a partir do telemóvel."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Não existem contactos exportáveis."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"O compositor vCard não iniciou corretamente."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Impossível exportar"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Os dados do contacto não foram exportados.\nMotivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"A importar <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Não foi possível ler dados do vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"A leitura de dados vCard foi cancelada"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"A importação do vCard terminou <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"A importação de <xliff:g id="FILENAME">%s</xliff:g> foi cancelada"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> será importado em breve."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"O ficheiro será importado em breve."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"O pedido de importação do vCard foi rejeitado. Tente novamente mais tarde."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> será exportado em breve."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"O ficheiro será exportado em breve."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Os contactos serão exportados em breve."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"O pedido de exportação do vCard foi rejeitado. Tente novamente mais tarde."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contacto"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"A colocar vCard(s) em cache no armazenamento temporário local. A importação efetiva começará brevemente."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Não foi possível importar o vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contacto recebido através de NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Exportar contactos?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"A colocar em cache"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"A importar <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"A importar <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exportar p/ ficheiro .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Ordenar por"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nome próprio"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"As minhas informações"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Configurar o seu perfil"</string>
     <string name="setting_about" msgid="7014388749752042863">"Acerca dos contactos"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Partilhar contactos visíveis"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Falha ao partilhar os contactos visíveis."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Partilhar contactos favoritos"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Partilhar todos os contactos"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Falha ao partilhar os contactos."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Não existem contactos para partilhar."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contactos a apresentar"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contactos a apresentar"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Definir vista personalizada"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Personalizar vista"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Guardar"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Pesquisar contactos"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Sem contactos."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Limpar frequentes"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Selecionar cartão SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Gerir contas"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importar"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exportar"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> através do <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"interromper a pesquisa"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Limpar pesquisa"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opções de visualização de contactos"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Conta"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Utilizar sempre este para chamadas"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Ao telefone com"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Ligar com uma nota"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Escrever uma nota para enviar com a chamada…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ENVIAR E LIGAR"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> itens não lidos. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> item não lido. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versão da compilação"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenças de código aberto"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalhes da licença para software de código aberto"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Eliminar"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Reticências"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> seg"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> seg"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> seg"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> seg"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Este atalho foi desativado"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"O contacto foi removido"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importar"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Sem ligação"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Mostrar mais"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importação do cartão SIM concluída"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Falha ao importar"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Não foi possível importar contactos do cartão SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"A importar SIM…"</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 5642a7b..347c5a6 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Contatos"</string>
     <string name="contactsList" msgid="8661624236494819731">"Contatos"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Adicionar contato"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Contato"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Discagem direta"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Mensagem direta"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Escolher contato p/ atalho"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Escolher número p/ atalho"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Escolha um número para enviar uma mensagem"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Escolher contato"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Adicionar a contato"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Escolha um contato"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Selecionar"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Criar novo contato"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Detalhes do contato"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Sobre"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Atualização"</string>
     <string name="searchHint" msgid="8482945356247760701">"Pesquisar contatos"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Ver contato"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Adicionar aos favoritos"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Remover dos favoritos"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Removido dos favoritos"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Criar atalho"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Ligar para contato"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Enviar SMS/MMS para o contato"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Desvincular"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Remover contatos"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Renomear marcador"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Selecionar contatos"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Adicionar contatos"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Remover do marcador"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Adicionar contato"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Criar novo..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Criar marcador"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Desvincular este contato em vários contatos?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Desvincular"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Gostaria de salvar as alterações já feitas e desvincular este contato em vários contatos?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Salvar"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Vincular contatos"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Selecione o contato que você deseja vincular 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Nome vinculado: <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> contatos</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> contato: <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> contatos: <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contato: <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> contatos: <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Do Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Da conta <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"A exclusão deste contato excluirá detalhes de várias contas."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Excluir este contato?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Excluir"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Descartar alterações"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"O contato não existe."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Contato adicionado à tela inicial."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Contato <xliff:g id="NAME">%s</xliff:g> adicionado à tela inicial."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Criar novo contato"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Criar novo contato"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Nenhuma imagem disponível no tablet."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nenhuma imagem disponível no telefone."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Foto do contato"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Personalizar nome do marcador"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Enviar chamadas diretamente para o correio de voz"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Remover foto"</string>
     <string name="noContacts" msgid="2228592924476426108">"Sua lista de contatos está vazia"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Nenhum marcador."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Você precisa de uma conta para criar grupos."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Nenhum contato com este marcador"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Nenhum contato nesta conta"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Sua lista de contatos está vazia"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Erro ao salvar o contato"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Não foi possível salvar as alterações da foto de contato"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Falha ao carregar o marcador"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Marcador salvo"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Marcador excluído"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Marcador criado"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Não é possível criar um marcador"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Enviar mensagem"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Escolher contatos"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Enviar"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contatos com números de telefone</item>
-      <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" 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" 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="5948889261993124839">"Todos"</string>
-    <string name="callBack" msgid="5498224409038809224">"Retornar chamada"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Ligar novamente"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Retornar chamada"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adicionar \"<xliff:g id="EMAIL">%s</xliff:g>\" aos contatos?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"mais"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> de <xliff:g id="TOTAL_NUMBER">%s</xliff:g> contatos"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Nomes dos seus contatos"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Nenhum app foi encontrado para executar esta ação."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Clique para retornar à tela anterior"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Adicionar número de telefone"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Adicionar e-mail"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nome - marcador"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Bate-papo por voz"</string>
     <string name="video_chat" msgid="1872255818640336072">"Bate-papo por vídeo"</string>
-    <string name="connections" msgid="8098440723172028350">"Conexões"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Adicionar conexão"</string>
-    <string name="recent" msgid="2659189233141493004">"Recentes"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Atualiz. recentes"</string>
     <string name="account_type_format" msgid="718948015590343010">"Contato de <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Conta do <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Tirar foto"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Tirar outra foto"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Escolher foto"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Selecionar nova foto"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Selecionar todos"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Desmarcar todos"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Adicionar novo"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Adicionar organização"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Data"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Marcador"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Alterar"</string>
-    <string name="description_star" msgid="2605854427360036550">"favorito"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Editar contato"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Cancelar"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Voltar"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"fechar"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vincular o contato atual com o 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Adicionar a Meus contatos"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Diretório <xliff:g id="TYPE">%1$s</xliff:g>"</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="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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Adicionar aos contatos"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Adicionar a contato"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Fechar"</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="7122002148518724139">"Incluir ano"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Contato"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Carregando…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Criar um novo contato"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Adicionar conta"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importar"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Criar novo..."</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Descartar"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Cancelar"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Descartar personalizações?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Pesquisar contatos"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Remover contatos"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Meu perfil local"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Meu perfil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Exibindo todos os contatos"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Mantenha seus contatos seguros, mesmo se você perder seu telefone: sincronize com um serviço on-line."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Adicionar uma conta"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Adicione a conta na qual será feito o backup dos seus contatos no Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novos contatos serão salvos em <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Escolha uma conta padrão para novos contatos:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Ver menos"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Recente"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Sobre"</string>
-    <string name="send_message" msgid="8938418965550543196">"Enviar mensagem"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Criando uma cópia pessoal..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Amanhã"</string>
     <string name="today" msgid="8041090779381781781">"Hoje"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Hoje, às <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Amanhã, às <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Evento sem título)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Definir"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Mensagem instantânea"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Site"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Evento"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relação"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Conta"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nome"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefone"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Clique para expandir o editor de contatos."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Clique para recolher o editor de contatos."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"rotas até o local"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. clique para responder"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recente. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. clique para responder"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"entrada"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"saída"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"perdida"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"chamada recente. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Mais campos"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Alterar foto do contato"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Adicionar foto do contato"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Falha ao abrir o editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Salvar em"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"As informações do contato em <xliff:g id="ACCOUNT">%s</xliff:g> não são editáveis"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Salvando em <xliff:g id="ACCOUNT_NAME">%s</xliff:g> no momento. Toque duas vezes para escolher uma conta diferente."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="one">Contato vinculado (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Contatos vinculados (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> contatos vinculados"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"VINCULAR CONTATOS"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"CANCELAR"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> possíveis cópias</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> possíveis cópias</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contatos vinculados</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> contatos vinculados</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Este contato"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Possíveis cópias"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Talvez esses contatos sejam a mesma pessoa. É possível vinculá-los como um único contato."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Contatos vinculados"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Das suas contas"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Escolher foto"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"De <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Excluir <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Excluir <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Excluir <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>não marcada"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Foto de <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>marcada"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Foto de conta desconhecida não verificada"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Foto de conta desconhecida verificada"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Sugestões"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Abrir gaveta de navegação"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Diretório"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Diretório de trabalho"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Todos os contatos"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Mais de <xliff:g id="COUNT">%d</xliff:g> encontrados."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Contato rápido de <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"Sem nome"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Chamados frequentemente"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Visualizar contato"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Todos os contatos com números de telefone"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Contatos do perfil de trabalho"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Ver atualizações"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nome"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Apelido"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nome"</string>
     <string name="name_given" msgid="4280790853455320619">"Nome"</string>
     <string name="name_family" msgid="7466985689626017037">"Sobrenome"</string>
     <string name="name_prefix" msgid="59756378548779822">"Prefixo do nome"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Enviar e-mail para <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-mail"</string>
     <string name="postal_street" msgid="8133143961580058972">"Rua"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Caixa postal"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Vizinhança"</string>
     <string name="postal_city" msgid="6597491300084895548">"Cidade"</string>
     <string name="postal_region" msgid="6045263193478437672">"Estado"</string>
     <string name="postal_postcode" msgid="572136414136673751">"CEP"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Mais grupos…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"A remoção de \"<xliff:g id="GROUP">%s</xliff:g>\" da sincronização também removerá os contatos não agrupados da sincronização."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Salvando opções de exibição…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Concluído"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Cancelar"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Visualização personalizada"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Salvar contatos importados em:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Cartão SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Cancelar exportação de <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Não foi poss. canc. imp./export. vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Erro desconhecido."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Não foi possível abrir \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Não foi possível abrir \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Não foi possível iniciar o exportador: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Não há contato exportáveis."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Você desativou uma permissão obrigatória."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ocorreu um erro durante a exportação: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"O nome de arquivo exigido é muito longo (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Erro E/S"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Não há memória suficiente. O arquivo pode ser muito grande."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Não foi possível analisar o vCard por um motivo inesperado."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"O formato não é suportado."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Não foi possível coletar informações meta de determinados arquivos vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Um ou mais arquivos não puderam ser importados (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Exportação concluída de <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"A exportação dos contatos foi concluída."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"A exportação dos contatos foi concluída. Clique na notificação para compartilhar contatos."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exportando dados do contato"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Os dados dos contatos estão sendo exportados."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Não foi possível obter as informações do banco de dados."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Não há contatos exportáveis. Se você tiver contatos em seu telefone, alguns provedores de dados podem não permitir que os contatos sejam exportados a partir do telefone."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Não há contatos exportáveis."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"O criador do vCard não iniciou corretamente."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Não foi possível exportar"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Os dados de contato não foram exportados.\nMotivo: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importando <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Não foi possível ler os dados do vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Leitura de dados vCard cancelada"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importação de vCard concluída <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importação de <xliff:g id="FILENAME">%s</xliff:g> cancelada"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> será importado em breve."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"O arquivo será importado em breve."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"O pedido de importação vCard foi rejeitado. Tente novamente mais tarde."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> será exportado em breve."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"O arquivo será exportado em breve."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Os contatos serão exportados em breve."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Pedido de exportação vCard foi rejeitado. Tente novamente mais tarde."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contato"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Armazenando VCard(s) em cache no armazenamento temporário local. A importação real começará em breve."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Não foi possível importar o vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Contato via NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Exportar contatos?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Armazenando em cache"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importando <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exportar p/ arquivo .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Classificar por"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Nome"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Minhas informações"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Configurar seu perfil"</string>
     <string name="setting_about" msgid="7014388749752042863">"Sobre Contatos"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Compartilhar contatos visíveis"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Falha ao compartilhar contatos visíveis."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Compartilhar contatos favoritos"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Compartilhar todos os contatos"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Falha ao compartilhar contatos."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Não há contatos para compartilhar."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Contatos para exibição"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Contatos a exibir"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Definir visualização personalizada"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Personalizar visualização"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Salvar"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Pesquisar contatos"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoritos"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Nenhum contato."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Apagar frequentes"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Selecionar cartão SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Gerenciar contas"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importar"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exportar"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Números bloqueados"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"parar de pesquisar"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Limpar pesquisa"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opções de exibição de contato"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Conta"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Sempre usar esta opção para chamadas"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Ligar com"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Chamada com nota"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Digite uma nota para enviar com a chamada..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ENVIAR E LIGAR"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> item não lido. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> itens não lidos. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versão"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenças de código aberto"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalhes da licença do software de código aberto"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Excluir"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Reticências"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Este atalho foi desativado"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"O contato foi removido"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importar"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Sem conexão"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Mostrar mais"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"A importação do cartão SIM foi concluída"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Falha na importação"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Não foi possível importar os contatos do cartão SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importando do cartão SIM"</string>
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 3fe7473..2d26ba6 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Agendă"</string>
     <string name="contactsList" msgid="8661624236494819731">"Agendă"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Adăugați"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Persoană din Agendă"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Apel direct"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Mesaj direct"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Alegeți o pers. din agendă"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Alegeți un nr. pentru apel"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Alegeți un nr. pentru mesaj"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Alegeți persoana de contact"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Adăugați pentru persoană"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Alegeți o persoană de contact"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Selectați"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Creați o intrare nouă"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Detalii ale persoanei din agendă"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Despre"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Actualizări"</string>
     <string name="searchHint" msgid="8482945356247760701">"Căutați în Agendă"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Vizualizați persoana din agendă"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Adăugați la lista de favorite"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Eliminați din lista de favorite"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"S-a eliminat din preferințe"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Creați o comandă rapidă"</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>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Disociați"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Eliminați intrările din Agendă"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Redenumiți eticheta"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Selectați persoane"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Adăugați persoanele"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Eliminați din etichetă"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Adăugați o persoană"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Creați o etichetă nouă…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Creați o etichetă"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Separați această persoană de contact în mai multe persoane de contact?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Disociați"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Doriți să salvați modificările pe care le-ați făcut deja și să separați această persoană de contact în mai multe persoane de contact?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Salvați"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Asociați persoane de contact"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Alegeți persoana de contact pe care doriți să o asociați 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">"Toată agenda"</string>
     <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"S-a asociat cu <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -85,9 +76,9 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> persoană de contact</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> persoane de contact · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> de persoane de contact · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> persoană de contact · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> persoane de contact · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> de persoane de contact · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> persoană de contact · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Din Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Din <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -104,21 +95,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Dacă ștergeți această persoană de contact, vor fi șterse detalii din mai multe conturi."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Ștergeți această persoană de contact?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Ștergeți"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Renunțați la modificări"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Persoana nu există în agendă."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Persoana de contact a fost adăugată pe ecranul de pornire."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Persoana de contact <xliff:g id="NAME">%s</xliff:g> a fost adăugată pe ecranul de pornire."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Creați o intrare nouă în agendă"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Creați o intrare nouă"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Nu există imagini disponibile pe tabletă."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Nicio fotografie disponibilă în telefon."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografie persoană din agendă"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Numele etichetei personalizate"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Trimiteți apelurile direct către mesageria vocală"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Eliminați fotografia"</string>
     <string name="noContacts" msgid="2228592924476426108">"Lista cu persoane de contact este goală"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Nicio etichetă."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Pentru a crea grupuri aveți nevoie de un cont."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Nicio persoană de contact cu această etichetă"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Nicio persoană de contact în acest cont"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Lista cu persoane de contact este goală"</string>
@@ -131,7 +116,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Eroare la salvarea persoanei în Agendă"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nu s-au putut salva modificările fotografiei persoanei de contact"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nu s-a putut încărca eticheta"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Eticheta a fost salvată"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Eticheta a fost ștearsă"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etichetă creată"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nu se poate crea eticheta"</string>
@@ -146,32 +130,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Trimiteți un mesaj"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Alegeți persoane de contact"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Trimiteți"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> persoane de contact cu numere de telefon</item>
-      <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" 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" 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="5948889261993124839">"Toate"</string>
-    <string name="callBack" msgid="5498224409038809224">"Apelați din nou"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Apelați din nou"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Apelați înapoi"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Adăugați „<xliff:g id="EMAIL">%s</xliff:g>” în agendă?"</string>
-    <string name="description_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_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>
@@ -191,52 +152,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Nume etichetă"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Chat vocal"</string>
     <string name="video_chat" msgid="1872255818640336072">"Chat video"</string>
-    <string name="connections" msgid="8098440723172028350">"Conexiuni"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Adăugați o conexiune"</string>
-    <string name="recent" msgid="2659189233141493004">"Recente"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Actualizări recente"</string>
     <string name="account_type_format" msgid="718948015590343010">"Intrare: <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Contul <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Fotografiați"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Creați o fotografie nouă"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Alegeți o fotografie"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Selectați o fotografie nouă"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Selectați-le pe toate"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Deselectați-le pe toate"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Adăugați intrare nouă"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Adăugați o organizație"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dată"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etichetă"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Schimbați"</string>
-    <string name="description_star" msgid="2605854427360036550">"preferate"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Editați informațiile despre persoana din agendă"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Anulați"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Înapoi"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"închideți"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Asociați persoana de contact actuală cu persoana de contact 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Adăugați în Agendă"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Director <xliff:g id="TYPE">%1$s</xliff:g>"</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="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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Adăugați în agendă"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Adăug. la pers. din ag."</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Închideți"</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="7122002148518724139">"Includeți anul"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Persoană din agendă"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Se încarcă..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Creați o intrare nouă în Agendă"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Adăugați un cont"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importați"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Creați o etichetă nouă…"</string>
@@ -250,14 +187,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Renunțați"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Anulați"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Renunțați la personalizări?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Căutați în Agendă"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Eliminați intrările din Agendă"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Profilul meu local"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Profilul meu <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Se afișează toată agenda"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Păstrați agenda dvs. în condiții de siguranță, chiar dacă pierdeți telefonul, prin sincronizarea acesteia cu un serviciu online."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Adăugați un cont"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Adăugați un cont în care se va face backup pentru agenda dvs. în Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Persoanele noi de contact vor fi salvate în <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Alegeți un cont prestabilit pentru persoanele de contact noi:"</string>
@@ -276,13 +209,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Mai puține detalii"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Recente"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Despre"</string>
-    <string name="send_message" msgid="8938418965550543196">"Trimiteți mesajul"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Se creează o copie personală..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Mâine"</string>
     <string name="today" msgid="8041090779381781781">"Astăzi"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Astăzi, la <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Mâine, la <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Eveniment fără titlu)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Setați"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -292,20 +224,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Site"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Eveniment"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relație"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Cont"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Nume"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mail"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Dați clic pentru a extinde editorul persoanei de contact."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Dați clic pentru a restrânge editorul persoanei de contact."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"indicații de orientare către locație"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recent. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. dați clic pentru a răspunde"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms recent. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. dați clic pentru a răspunde"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"primit"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"efectuat"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"pierdut"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"apel recent. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Mai multe câmpuri"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Schimbați fotografia persoanei de contact"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Adăugați o fotografie pentru persoana de contact"</string>
@@ -313,45 +241,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Editorul nu a putut fi deschis."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Se salvează în"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Informațiile de contact de la <xliff:g id="ACCOUNT">%s</xliff:g> nu pot fi editate"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"În prezent se salvează în <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Atingeți de două ori ca să alegeți alt cont."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="few">Persoane de contact asociate (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Persoane de contact asociate (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Persoană de contact asociată</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> (de) persoane de contact asociate"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ASOCIAȚI PERSOANELE DE CONTACT"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANULAȚI"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> dubluri posibile</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de dubluri posibile</item>
-      <item quantity="one">O dublură posibilă</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> persoane de contact asociate</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> de persoane de contact asociate</item>
-      <item quantity="one">O persoană de contact asociată</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="few">(<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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Această persoană de contact"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Dubluri posibile"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Este posibil ca aceste persoane de contact să fie una și aceeași persoană. Le puteți asocia ca o singură persoană de contact."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Persoane de contact asociate"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Din conturile dvs."</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Alegeți o fotografie"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Din contul <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Ștergeți <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Ștergeți <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Ștergeți <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotografia din <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> nu e selectată"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotografia din <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> e selectată"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Fotografie neselectată dintr-un cont necunoscut"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Fotografie selectată dintr-un cont necunoscut"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Sugestii"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nou"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Deschideți panoul de navigare"</string>
@@ -420,11 +316,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Director"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Directorul de serviciu"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Toată Agenda"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"S-au găsit peste <xliff:g id="COUNT">%d</xliff:g> (de) persoane din agendă."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Contact rapid pentru <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Fără nume)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Frecvent contactate"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Afișați persoana din agendă"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Toate persoanele din agendă cu numere de telefon"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Persoane de contact din profilul de serviciu"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Afișați actualizări"</string>
@@ -432,7 +326,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Nume"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudonim"</string>
-    <string name="full_name" msgid="6602579550613988977">"Nume"</string>
     <string name="name_given" msgid="4280790853455320619">"Prenume"</string>
     <string name="name_family" msgid="7466985689626017037">"Nume de familie"</string>
     <string name="name_prefix" msgid="59756378548779822">"Prefixul numelui"</string>
@@ -465,8 +358,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Trimiteți e-mail către <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Trimiteți un e-mail"</string>
     <string name="postal_street" msgid="8133143961580058972">"Stradă"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Căsuța poștală"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Vecinătate"</string>
     <string name="postal_city" msgid="6597491300084895548">"Oraș"</string>
     <string name="postal_region" msgid="6045263193478437672">"Stat"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Codul ZIP"</string>
@@ -504,8 +395,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Mai multe grupuri..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Eliminarea grupului „<xliff:g id="GROUP">%s</xliff:g>” din sincronizare va elimina, de asemenea, orice persoană din agendă care nu face parte dintr-un grup."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Se salvează opțiunile de afișare..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Terminat"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Anulați"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Afișare personalizată"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Salvați persoanele de contact importate în:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Card SIM"</string>
@@ -527,18 +416,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Anulați exportul fișierului <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Anulare import/export vCard nereușită"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Eroare necunoscută."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nu s-a putut deschide fișierul „<xliff:g id="FILE_NAME">%s</xliff:g>”: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nu s-a putut deschide fișierul „<xliff:g id="FILE_NAME">%1$s</xliff:g>”: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nu s-a putut iniţializa instrumentul de export: „<xliff:g id="EXACT_REASON">%s</xliff:g>”"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nicio persoană de contact exportabilă."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Ați dezactivat o permisiune necesară."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"A apărut o eroare în timpul exportului: „<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Numele de fișier solicitat este prea lung („<xliff:g id="FILENAME">%s</xliff:g>”)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Eroare I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Memoria este insuficientă (probabil fișierul este prea mare)."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Nu s-au putut analiza datele de pe vCard dintr-un motiv neașteptat."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formatul nu este acceptat."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Nu s-au putut colecta metainformaţiile pentru fișierele vCard indicate."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Unul sau mai multe fișiere nu s-au putut importa (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"S-a finalizat exportul fișierului <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Persoanele de contact au fost exportate."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"S-a încheiat exportul persoanelor de contact. Dați clic pe notificare pentru a distribui persoanele de contact."</string>
@@ -547,29 +432,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Se exportă datele persoanelor din agendă"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Se exportă datele privind persoanele de contact."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nu s-au putut obține informații din baza de date."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Nu există persoane din agendă care să poată fi exportate. Dacă aveți persoane în agenda telefonului, este posibil ca exportul acestora de pe telefon să fie interzis de unii furnizori de date."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nicio persoană de contact exportabilă."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Compozitorul vCard nu a pornit în mod corespunzător."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Nu s-a putut exporta"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Datele de contact nu au fost exportate.\nMotivul: „<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Se importă <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nu s-au putut citi datele de pe vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Citirea datelor vCard a fost anulată"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"S-a finalizat importul vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importul fișierului <xliff:g id="FILENAME">%s</xliff:g> a fost anulat"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> va fi importat în curând."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fișierul va fi importat în scurt timp."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Solicitarea de importare a fișierului vCard a fost respinsă. Încercați din nou mai târziu."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> va fi exportat în curând."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Fișierul va fi exportat în curând."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Persoanele de contact vor fi exportate în curând."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Solicitarea de exportare a fișierului vCard a fost respinsă. Încercați din nou mai târziu."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Fișierele vCard se stochează în memoria cache într-un spațiu de stocare local temporar. Importul propriu-zis va începe în curând."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Nu s-a putut importa fișierul vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Cont.prim.pr.NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Exportați Agenda?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Se stochează în cache"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Se importă <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Se importă <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exportați ca fișier .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortați după"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Prenume"</string>
@@ -582,8 +463,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Informațiile mele"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Configurați profilul"</string>
     <string name="setting_about" msgid="7014388749752042863">"Despre Agendă"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Distribuiți persoanele vizibile din agendă"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Persoanele de contact vizibile nu au putut fi trimise."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Trimiteți persoanele preferate"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Trimiteți toată agenda"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Persoanele de contact nu s-au trimis."</string>
@@ -593,14 +472,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nu există persoane de contact de trimis."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Persoane de contact de afişat"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Pers. din agendă de afiş."</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Definiți afișarea personalizată"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Personalizați afișarea"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Salvați"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Căutați persoane de contact"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favorite"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Nicio persoană din agendă."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Șterg. pers. frecv. contact."</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Selectați cardul SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Gestionați conturile"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importați"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exportați"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Numere blocate"</string>
@@ -608,20 +483,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"La ora <xliff:g id="DATE">%1$s</xliff:g> de pe <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"nu mai căutați"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Ștergeți căutarea"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opțiuni de afișare pentru persoanele de contact"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Cont"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Utilizați mereu pentru apeluri"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Apelați cu"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Apelați împreună cu o notă"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Introduceți o notă pe care să o trimiteți împreună cu apelul…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"TRIMITEȚI ȘI APELAȚI"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> elemente necitite. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> de elemente necitite. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> element necitit. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versiunea"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licențe open source"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detalii privind licența pentru software-ul open source"</string>
@@ -635,8 +503,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Ștergeți"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Puncte de suspensie"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sec."</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h. <xliff:g id="MINUTES_1">%s</xliff:g> min. <xliff:g id="SECONDS">%s</xliff:g> sec."</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min. <xliff:g id="SECONDS">%2$s</xliff:g> sec."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h. <xliff:g id="MINUTES_1">%2$s</xliff:g> min. <xliff:g id="SECONDS">%3$s</xliff:g> sec."</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Această comandă rapidă a fost dezactivată."</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Persoana de contact a fost ștearsă."</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importați"</string>
@@ -660,4 +528,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Nicio conexiune"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Afișați mai mult"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importarea cardului SIM s-a terminat."</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Nu s-a importat."</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nu s-a putut importa agenda de pe cardul SIM."</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Se importă cardul SIM"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 284df48..e620e0d 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Контакты"</string>
     <string name="contactsList" msgid="8661624236494819731">"Контакты"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Добавить контакт"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Контакт"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Быстрый звонок"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Быстрое SMS"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Выбрать контакт"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Выберите номер"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Выбрать номер для SMS"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Выбрать контакт"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Добавление данных"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Выбор контакта"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Выбрать"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Создать контакт"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Сведения о контакте"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Удалить"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Сменить фото"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Создать ярлык"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Позвонить"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Отправить SMS/MMS"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Отменить связь"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Удалить контакты"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Переименовать ярлык"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Выбрать контакты"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Добавить контакты"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Снять ярлык"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Добавить контакт"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Создать…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Создать ярлык"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Разделить этот контакт?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Разделить"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Сохранить изменения и разделить этот контакт?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Сохранить"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Связать контакты"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Выберите, какой контакт связать с \"<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Контакт <xliff:g id="NAME">%s</xliff:g> связан"</string>
@@ -87,10 +78,10 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакта</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> контакт · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> контакта · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="many"><xliff:g id="COUNT_2">%d</xliff:g> контактов · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> контакта · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> контакт · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> контакта · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> контактов · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> контакта · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Из Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Из аккаунта <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -107,21 +98,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Будут удалены данные из нескольких аккаунтов."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Удалить контакт?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Удалить"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Удалить изменения"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Нет такого контакта."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контакт добавлен на главный экран"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Контакт \"<xliff:g id="NAME">%s</xliff:g>\" добавлен на главный экран"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Создать контакт"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Создать контакт"</string>
     <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="2228592924476426108">"Контактов нет"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Нет ярлыков."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Для создания групп нужен аккаунт."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Нет контактов с таким ярлыком"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"В этом аккаунте нет контактов"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Контактов нет"</string>
@@ -134,7 +119,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Не удалось сохранить контакт"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Не удалось сохранить изменения"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Не удалось загрузить ярлык"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Ярлык сохранен"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Ярлык удален"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Ярлык создан"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Не удалось создать группу"</string>
@@ -149,35 +133,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Отправить SMS"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Выбор контактов"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Отправить"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> контакт с номером телефона</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> контакта с номером телефона</item>
-      <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" 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" 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="5948889261993124839">"Все"</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_plus_button" msgid="515164827856229880">"плюс"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"Контакт <xliff:g id="CURRENT_NUMBER">%s</xliff:g> из <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Имена контактов"</string>
-    <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>
@@ -198,52 +156,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Название группы"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"Аккаунт <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Ярлык"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Изменить"</string>
-    <string name="description_star" msgid="2605854427360036550">"избранное"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Изменить контакт"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Отмена"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Назад"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"закрыть"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Связать текущий контакт с выбранным?"</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="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="7122002148518724139">"Указать год"</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="4347232421410561500">"Добавить аккаунт"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Импортировать"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Создать…"</string>
@@ -257,14 +191,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Отменить"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Отмена"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Отменить изменения?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> (<xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>)"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Поиск контактов"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Удалить контакты"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Мой профиль"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Мой профиль <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Отображаются все контакты"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Можно потерять телефон, но не контакты... если хранить их в Интернете!"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Добавить аккаунт"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Добавьте аккаунт, чтобы сохранить свои контакты в Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Новые контакты будут сохранены в аккаунте <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Выберите аккаунт по умолчанию для новых контактов:"</string>
@@ -283,13 +213,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Свернуть"</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="288549957278065542">"Копирование..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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">"Чат"</string>
@@ -299,20 +228,16 @@
     <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="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_sms" msgid="1666389577263317445">"Недавнее SMS-сообщение. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"Недавний вызов. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Показать другие поля"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Сменить фото контакта"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Добавить фото контакта"</string>
@@ -320,49 +245,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Не удалось открыть редактор"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Сохранение:"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Данные контактов из аккаунта <xliff:g id="ACCOUNT">%s</xliff:g> нельзя изменять"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Данные сохраняются в аккаунте <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Чтобы выбрать другой аккаунт, нажмите дважды."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"Связанных контактов: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"СВЯЗАТЬ КОНТАКТЫ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ОТМЕНА"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <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>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <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>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Этот контакт"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Повторяющиеся контакты"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Возможно, эти контакты относятся к одному человеку. Объедините их."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Связанные контакты"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Из ваших аккаунтов"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Выбор фото"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Из <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Удалить данные. <xliff:g id="DATA_TYPE">%s </xliff:g> <xliff:g id="DATA_KIND">%s</xliff:g>."</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Удалить данные. <xliff:g id="DATA_TYPE">%1$s </xliff:g> <xliff:g id="DATA_KIND">%2$s</xliff:g>."</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Удалить <xliff:g id="DATA_KIND">%s</xliff:g>."</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Фото из аккаунта <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> не выбрано"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Фото из аккаунта <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> выбрано"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Выбор фото из неизвестного аккаунта отменен"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Выбрано фото из неизвестного аккаунта"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Предложения"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Добавить"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Открыть панель навигации"</string>
@@ -431,11 +320,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Каталог"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Каталог контактов из рабочего профиля"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Все контакты"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Найдено более <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Быстрый вызов, контакт: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"Имя не указано"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Часто набираемые"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Данные контакта"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Все контакты с номерами телефонов"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Контакты из рабочего профиля"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Обновления"</string>
@@ -443,7 +330,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM-карта"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Имя"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Псевдоним"</string>
-    <string name="full_name" msgid="6602579550613988977">"Имя"</string>
     <string name="name_given" msgid="4280790853455320619">"Имя"</string>
     <string name="name_family" msgid="7466985689626017037">"Фамилия"</string>
     <string name="name_prefix" msgid="59756378548779822">"Форма обращения"</string>
@@ -476,8 +362,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Написать письмо (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
     <string name="email" msgid="5668400997660065897">"Эл. почта"</string>
     <string name="postal_street" msgid="8133143961580058972">"Улица"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Почтовый ящик"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Окружение"</string>
     <string name="postal_city" msgid="6597491300084895548">"Город"</string>
     <string name="postal_region" msgid="6045263193478437672">"Регион"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Почтовый индекс"</string>
@@ -515,8 +399,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Другие группы..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Вместе с группой \"<xliff:g id="GROUP">%s</xliff:g>\" перестанут синхронизироваться контакты, не добавленные в группы."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Сохранение настроек..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Готово"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Отмена"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Пользовательский режим просмотра"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Сохранить контакты:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-карта"</string>
@@ -540,18 +422,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Отменить экспорт файла \"<xliff:g id="FILENAME">%s</xliff:g>\"?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Не удалось отменить импорт/экспорт vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Неизвестная ошибка"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Не удалось открыть файл \"<xliff:g id="FILE_NAME">%s</xliff:g>\". Причина: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Не удалось открыть файл \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\". Причина: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Не удалось запустить функцию экспорта. Причина: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Нет контактов для экспорта."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Отсутствует необходимое разрешение."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ошибка при экспорте. Причина: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Слишком длинное название: <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Ошибка ввода-вывода"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Недостаточно памяти. Возможно, файл слишком большой."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Не удалось проанализировать файл vCard."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Формат не поддерживается."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Не удалось собрать метаданные файлов VCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Не удалось импортировать один или несколько файлов (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Экспорт файла \"<xliff:g id="FILENAME">%s</xliff:g>\" завершен."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Экспорт контактов завершен"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Экспорт контактов завершен. Чтобы открыть к ним доступ, нажмите на уведомление."</string>
@@ -560,29 +438,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Экспорт данных контакта"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Экспорт контактов…"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"База данных недоступна."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Не найдены контакты для экспорта. Возможно, экспорт контактов с телефона не поддерживается поставщиком услуг передачи данных."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Нет контактов для экспорта."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Сбой при запуске редактора vCard."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Сбой экспорта"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Не удалось экспортировать данные.\nПричина: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Импорт: <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Ошибка чтения vCard-файла"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Чтение данных vCard отменено"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Импорт файла vCard <xliff:g id="FILENAME">%s</xliff:g> завершен"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Импорт файла \"<xliff:g id="FILENAME">%s</xliff:g>\" отменен"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Импорт <xliff:g id="FILENAME">%s</xliff:g> начнется в ближайшее время."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Файл будет импортирован в ближайшее время."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Запрос на импорт данных vCard отклонен. Повторите попытку позже."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Экспорт <xliff:g id="FILENAME">%s</xliff:g> начнется в ближайшее время."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Файл будет экспортирован в ближайшее время."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Контакты скоро будут экспортированы."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Запрос на экспорт данных vCard отклонен. Повторите попытку позже."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"контакт"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Выполняется кеширование файлов vCard в локальное временное хранилище. Импорт скоро начнется."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Не удалось импортировать данные vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Получено по NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Экспорт контактов"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Кеширование"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Импорт <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Импорт <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Экспортировать в VCF-файл"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Сортировка"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Имя"</string>
@@ -595,8 +469,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Мои данные"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Настройте профиль"</string>
     <string name="setting_about" msgid="7014388749752042863">"О Контактах"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Передать видимые контакты"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Не удалось поделиться видимыми контактами"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Поделиться избранными контактами"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Поделиться всеми контактами"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Не удалось поделиться контактами"</string>
@@ -606,14 +478,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Видимых контактов нет"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Фильтр контактов"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Фильтр контактов"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Настроить просмотр"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Настроить просмотр"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Сохранить"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Поиск в контактах"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Избранное"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Нет контактов"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Очистить популярные контакты"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Выбрать SIM-карту"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Настроить аккаунты"</string>
     <string name="menu_import" msgid="6107961135813836467">"Импортировать"</string>
     <string name="menu_export" msgid="2658783911863503902">"Экспортировать"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Заблокированные номера"</string>
@@ -621,21 +489,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> с помощью <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"прекратить поиск"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Очистить условия поиска"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Параметры показа контактов"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Аккаунт"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Всегда использовать для звонков"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Аккаунт для звонка"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Позвонить и отправить сообщение"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Введите текст…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ОТПРАВИТЬ СООБЩЕНИЕ И ПОЗВОНИТЬ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> из <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитанный элемент. </item>
-      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитанных элемента. </item>
-      <item quantity="many"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитанных элементов. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитанных элемента. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Версия сборки"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Лицензии открытого ПО"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Сведения о лицензиях на ПО с открытым исходным кодом"</string>
@@ -649,8 +509,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Удалить"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Многоточие"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек."</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ч. <xliff:g id="MINUTES_1">%s</xliff:g> мин. <xliff:g id="SECONDS">%s</xliff:g> сек."</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мин. <xliff:g id="SECONDS">%2$s</xliff:g> сек."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ч. <xliff:g id="MINUTES_1">%2$s</xliff:g> мин. <xliff:g id="SECONDS">%3$s</xliff:g> сек."</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Этот ярлык неактивен"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Контакт удален"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Импортировать"</string>
@@ -675,4 +535,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Нет соединения"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-карта"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Показать ещё"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Импорт контактов с SIM-карты завершен"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Ошибка импорта"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Не удалось импортировать контакты с SIM-карты"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Импорт контактов с SIM-карты…"</string>
 </resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 703f7a7..468da32 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"සම්බන්ධතා"</string>
     <string name="contactsList" msgid="8661624236494819731">"සම්බන්ධතා"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"සම්බන්ධතාව එක් කරන්න"</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="shortcutActivityTitle" msgid="1504383567778497348">"සම්බන්ධතාව තෝරන්න"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"සම්බන්ධතාවය වෙත එක් කරන්න"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"සම්බන්ධතාවයක් තෝරන්න"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"තෝරන්න"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"නව සම්බන්ධතාවයක් නිර්මාණය කරන්න"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"සම්බන්ධතා විස්තර"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"මකන්න"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"ඡායාරූපය වෙනස් කරන්න"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"කෙටි මග තනන්න"</string>
-    <string name="menu_call" msgid="3992595586042260618">"සම්බන්ධතාව අමතන්න"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"සම්බන්ධතාවයට කෙටි පණිවිඩයක් යවන්න"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"සබැඳි ඉවත් කරන්න"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"සම්බන්ධතා ඉවත් කරන්න"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"ලේබලය නැවත නම් කරන්න"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"සම්බන්ධතා තෝරන්න"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"සම්බන්ධතා එක් කරන්න"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"ලේබලයෙන් ඉවත් කරන්න"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"සම්බන්ධතාව එක් කරන්න"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"අලුත් එකක් තනන්න…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"ලේබලය තනන්න"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"මෙම සම්බන්ධතාව බහුවිධ සම්බන්ධතාවලට වෙන් කරන්නද?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"සබැඳි ඉවත් කරන්න"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"ඔබ දැනටමත් සිදු කර ඇති වෙනස් කිරීම් සුරැකීමට සහ මෙම සම්බන්ධතාව බහුවිධ සම්බන්ධතාවලට වෙන් කිරීමට කැමතිද?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"සුරකින්න"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"සම්බන්ධතා සබැඳි කරන්න"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"ඔබට <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> සම්බන්ධ කරන ලදී"</string>
@@ -83,8 +74,8 @@
       <item quantity="other">සම්බන්ධතා <xliff:g id="COUNT_1">%d</xliff:g></item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> සම්බන්ධතා · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> සම්බන්ධතා · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> සම්බන්ධතා · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> සම්බන්ධතා · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google වෙතින්"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> වෙතින්"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"මෙම සම්බන්ධතාව මැකීම බහුවිධ ගිණුම්වලින් තොරතුරු මකනු ඇත."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"මෙම සම්බන්ධතාව මකන්නද?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"මකන්න"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"වෙනස්කම් ඉවතලන්න"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"සම්බන්ධතාවය නොපවතී."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"සම්බන්ධතාව මුල් පිටු තිරය වෙත එක් කරන ලදී."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> මුල් පිටු තිරය වෙත එක් කරන ලදී."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"නව සම්බන්ධතාවයක් නිර්මාණය කරන්න"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"නව සම්බන්ධතාවයක් නිර්මාණය කරන්න"</string>
     <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="2228592924476426108">"ඔබගේ සම්බන්ධතා ලැයිස්තුව හිස්ය"</string>
-    <string name="noGroups" msgid="4607906327968232225">"ලේබල නැත."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"කණ්ඩායම් නිර්මාණය කිරීමට ඔබට ගිණුමක් අවශ්‍ය වේ."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"මෙම ලේබලය සහිත සම්බන්ධතා නැත."</string>
     <string name="emptyAccount" msgid="6873962901497975964">"මෙම ගිණුමෙහි සම්බන්ධතා නොමැත"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"ඔබගේ සම්බන්ධතා ලැයිස්තුව හිස්ය"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"සම්බන්ධතාව සුරැකීමේ දෝෂය"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"සම්බන්ධතා ඡායාරූපයේ වෙනස් කිරීම් සුරැකීමට නොහැකි විය"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"ලේබලය පූරණය කිරීමට අසමත් විය"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"ලේබලය සුරැකිණි"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ලේබලය මකන ලදී"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"ලේබලය තනන ලදී"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"ලේබලය තැනීමට නොහැකිය"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"පණිවිඩය යවන්න"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"සම්බන්ධතා තෝරන්න"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"යවන්න"</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="5948889261993124839">"සියලු"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"ලේබල නම"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ගිණුම"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"ලේබලය"</string>
-    <string name="change_photo" msgid="8530597935483526383">"වෙනස් කරන්න"</string>
-    <string name="description_star" msgid="2605854427360036550">"ප්‍රියතම"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"සම්බන්ධතාව සංස්කරණය කරන්න"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"අවලංගු කරන්න"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"ආපසු"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"වසන්න"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"වත්මන් සම්බන්ධතාව තෝරන ලද සම්බන්ධතාව සමඟ සබැඳි කරන්නද?"</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="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="7122002148518724139">"වර්ෂය අතුළත් කරන්න"</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="4347232421410561500">"ගිණුම එක් කරන්න"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"ආයාත කරන්න"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"අලුත් එකක් තනන්න..."</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ඉවතලන්න"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"අවලංගු කරන්න"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"අභිරුචිකරණ ඉවත ලන්නද?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"සම්බන්ධතා සොයන්න"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"සම්බන්ධතා ඉවත් කරන්න"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"මගේ දේශීය පැතිකඩ"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"මගේ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> පැතිකඩ"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"සියලු සම්බන්ධතා පෙන්වමින්"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"ඔබගේ දුරකථනය නොමැති වුවත් සම්බන්ධතා සුරක්ෂිතව තබන්න: සබැඳි සේවාවක් සමඟ සමමුහුර්ත කරන්න."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ගිණුමක් එක් කරන්න"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Google වෙත ඔබගේ සම්බන්ධතා උපස්ථ කරනු ඇති ගිණුමක් එක් කිරීමට මිනිත්තුවක් ගන්න."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"නව සම්බන්ධතා <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> වෙත සුරකිනු ඇත."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"නව සම්බන්ධතා සඳහා පෙරනිමි ගිණුමක් තෝරන්න:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"අඩුවෙන් බලන්න"</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="288549957278065542">"පුද්ගලික පිටපතක් නිර්මාණය කරමින්…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"මෑත SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"මෑත අමන්තුම්. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"තව ක්ෂේත්‍ර"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"සම්බන්ධතා ඡායාරූපය වෙනස් කරන්න"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"සම්බන්ධතා ඡායාරූපය එක් කරන්න"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"සංස්කාරකය විවෘත කිරීමට අසමත් විය."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"වෙත සුරකිමින්"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> වෙතින් සම්බන්ධතා තොරතුරු සංස්කරණය කළ නොහැකිය"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"දැනට <xliff:g id="ACCOUNT_NAME">%s</xliff:g> වෙත සුරැකේ. වෙනත් ගිණුමක් තේරීමට දෙවරක්-තට්ටු කරන්න."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"සබැඳි කළ සම්බන්ධතා <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"සම්බන්ධතා සබැඳි කරන්න"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"අවලංගු කරන්න"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one">විය හැකි අනුපිටපත් <xliff:g id="COUNT">%d</xliff:g></item>
-      <item quantity="other">විය හැකි අනුපිටපත් <xliff:g id="COUNT">%d</xliff:g></item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one">සබැඳි කළ සම්බන්ධතා <xliff:g id="COUNT">%d</xliff:g></item>
-      <item quantity="other">සබැඳි කළ සම්බන්ධතා <xliff:g id="COUNT">%d</xliff:g></item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"මෙම සම්බන්ධතාව"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"විය හැකි අනුපිටපත්"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"මෙම සම්බන්ධතා එකම පුද්ගලයා විය හැකිය. ඔබට ඒවා තනි සම්බන්ධතාවක් ලෙස සබැඳි කළ හැකිය."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"සබැඳි සම්බන්ධතා"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"ඔබගේ ගිණුම් වෙතින්"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"ඡායාරූපය තෝරන්න"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> වෙතින්"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> මැකීම"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> මැකීම"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> මැකීම"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>වෙතින් ඡායාරූපය පරීක්ෂා කරන ලදී"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> වෙතින් ඡායාරූපය පරීක්ෂා කරන ලදී"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"නොදන්නා ගිණුම වෙතින් වන ඡායාරූපය ලකුණු නොකරන ලදී"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"නොදන්නා ගිණුම වෙතින් වන ඡායාරූපය ලකුණු කරන ලදී"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"යෝජනා"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"නව"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"සංචාලන ලාච්චුව විවෘත කරන්න"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"නාමාවලිය"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"කාර්යාල සම්බන්ධතා නාමාවලිය"</string>
     <string name="local_search_label" msgid="2551177578246113614">"සියලුම සම්බන්ධතා"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> ට වඩා සොයාගන්නා ලදී."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> සඳහා ඉක්මන් සම්බන්ධතා"</string>
     <string name="missing_name" msgid="8745511583852904385">"(නමක් නොමැත)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"නිතරම සම්බන්ධ වන"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"සම්බන්ධතාව පෙන්වන්න"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"දුරකථන අංක සහිත සියලු සම්බන්ධතා"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"කාර්යාල පැතිකඩ සම්බන්ධතා"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"යාවත්කාලීන වීම් පෙන්වන්න"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"නම‍"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"අපනාමය"</string>
-    <string name="full_name" msgid="6602579550613988977">"නම‍"</string>
     <string name="name_given" msgid="4280790853455320619">"පළමු නම"</string>
     <string name="name_family" msgid="7466985689626017037">"අග නම"</string>
     <string name="name_prefix" msgid="59756378548779822">"නම් උපසර්ගය"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> වෙත ඊ-තැපෑලක් යවන්න"</string>
     <string name="email" msgid="5668400997660065897">"ඊ-තැපෑල"</string>
     <string name="postal_street" msgid="8133143961580058972">"වීථිය"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"තැපැල් පෙට්ටිය"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"අසල්වැසි ප්‍රදේශය"</string>
     <string name="postal_city" msgid="6597491300084895548">"නගරය"</string>
     <string name="postal_region" msgid="6045263193478437672">"ජනපදය"</string>
     <string name="postal_postcode" msgid="572136414136673751">"ZIP කේතය"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"තවත් කණ්ඩායම්…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" සමමුහුර්ත කිරීමෙන් ඉවත් කිරීමෙන් ඕනෑම කණ්ඩායම් නොකළ සම්බන්ධතා සමමුහුර්තයෙන් ඉවත් කරනු ඇත."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"පෙන්වීම් විකල්ප සුරකමින්…"</string>
-    <string name="menu_done" msgid="796017761764190697">"හරි"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"අවලංගු කරන්න"</string>
     <string name="listCustomView" msgid="1840624396582117590">"අභිරුචිකරණය කළ දසුන"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"ආයාත කළ සම්බන්ධතා මෙහි සුරකින්න:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM කාඩ් පත"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> නිර්යාත කිරීම අවලංගු කරන්නද?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard ආයාත/නිර්යාත කිරීම අවලංගු කළ නොහැක"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"නොදන්නා දෝෂය."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" විවෘත කිරීමට නොහැක: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" විවෘත කිරීමට නොහැක: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"නිර්යාතකරු පටන් ගැනීමට නොහැක: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"නිර්යාත කළ හැකි සම්බන්ධතාවයක් නොමැත."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"ඔබ අවශ්‍ය අවසරයක් අබල කර ඇත."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"නිර්යාතය අතරතුර දෝෂයක් සිදු විය: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"අවශ්‍ය කරන ගොනු නම දිග වැඩිය (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O දෝෂය"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"මතකය මදිය. ගොනුව විශාල වැඩි විය හැක."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"බලාපොරොත්තු නොවූ හේතුවක් නිසා vCard ය විග්‍රහ කළ නොහැක."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"මෙම ආකෘතිය වෙත සහාය නොදක්වයි."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"ලබාදුන් vCard ගොනු(ව) වල පාර දත්ත එකතු කළ නොහැකි විය."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"ගොනු එකක් හෝ කිහිපයක් ආයාත කිරීමට නොහැකි විය (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> නිර්යාත කිරීම අවසන් කෙරුණි."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"සම්බන්ධතා නිර්යාත කිරීම සම්පූර්ණ කරන ලදී."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"සම්බන්ධතා නිර්යාත කිරීම අවසන්ය, සම්බන්ධතා බෙදා ගැනීමට දැනුම්දීම ක්ලික් කරන්න."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"සම්බන්ධතා දත්ත නිර්යාත කිරීම"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"සම්බන්ධතා දත්ත නිර්යාත කරමින් තිබේ."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"දත්ත සමුදායේ තොරතුරු ලබාගත නොහැක."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"නිර්යාත කළ හැකි සම්බන්ධතා නැත. ඔබගේ දුරකථනයේ සම්බන්ධතා තිබේ නම්, සමහර දත්ත සපයන්නන් දුරකථනයෙන් සම්බන්ධතා නිර්යාත කිරීමට අවසර ලබා නොදිය හැක."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"නිර්යාත කළ හැකි සම්බන්ධතා නොමැත."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard සකසනය නිවැරදිව පටන් ගත්තේ නැත."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"නිර්යාත කළ නොහැකිය"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"සම්බන්ධතා දත්ත නිර්යාත නොකරන ලදි.\nහේතුව: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> ආයාත කරමින්"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard දත්ත කියවිය නොහැක"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard දත්ත කියවීම අවලංගු කෙරුණි"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> ආයාත කිරීම අවසන් විය"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ආයාත කිරීම අවලංගු කෙරුණි"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> කෙටි වේලාවකින් ආයාත වනු ඇත."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ගොනුව කෙටි වේලාවකින් ආයාත කරනු ඇත."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard ආයාත අයැදුම ප්‍රතික්ෂේප කරන ලදි. පසුව නැවත උත්සාහ කරන්න."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> කෙටි වේලාවකින් නිර්යාත කරනු ඇත."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ගොනුව ටික වේලාවකින් නිර්යාත කරනු ඇත."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"ටික වේලාවකින් සම්බන්ධතා නිර්යාත කරනු ඇත."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard නිර්යාත ඉල්ලීම ප්‍රතික්ෂේප කරන ලදි. පසුව නැවත උත්සාහ කරන්න."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"සම්බන්ධතාවය"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"පෙදෙසි තාවකාලික ආචයනයට vCard(s) හැඹිලිගත කරමින් පවතී. සැබෑ ආයාත කිරීම ඉක්මනින් පටන් ගනු ඇත."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard ආයාත කිරීමට නොහැක."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC හරහා සම්බන්ධතාව ලැබුණි"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"සම්බන්ධතා නිර්යාත කරන්නද?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"හැඹිලි ගත කරමින්"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g> ආයාත කරමින්"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g> ආයාත කරමින්"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf ගොනුවට නිර්යාත කරන්න"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"මේ අනුව අනුපිළිවෙලට සකසන්න"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"පළමු නම"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"මගේ තොරතුරු"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"ඔබේ පැතිකඩ පිහිටුවන්න"</string>
     <string name="setting_about" msgid="7014388749752042863">"සම්බන්ධතා පිළිබඳ"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"දෘශ්‍ය සම්බන්ධතා බෙදාගන්න"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"දෘශ්‍යමාන සම්බන්ධතා බෙදා ගැනීමට අසමත් විය."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ප්‍රියතම සම්බන්ධතා බෙදා ගන්න"</string>
     <string name="share_contacts" msgid="8109287987498711664">"සියලු සම්බන්ධතා බෙදා ගන්න"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"සම්බන්ධතා බෙදා ගැනීමට අසමත් විය."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"බෙදා ගැනීමට සම්බන්ධතා නොමැත."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"පෙන්වීමට සම්බන්ධතා"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"පෙන්වීමට සම්බන්ධතා"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"අභිරුචිකරණය කළ දසුන නිර්වචනය කරන්න"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"දසුන අභිරුචිකරණය කරන්න"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"සුරකින්න"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"සම්බන්ධතා සොයන්න"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"ප්‍රියතම"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"සම්බන්ධතා නැත."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"නිතරමයන් හිස් කරන්න"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM කාඩ්පත තෝරන්න"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"ගිණුම් කළමනාකරණය කරන්න"</string>
     <string name="menu_import" msgid="6107961135813836467">"ආයාත කරන්න"</string>
     <string name="menu_export" msgid="2658783911863503902">"නිර්යාත කරන්න"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"අවහිර කළ අංක"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> ඔස්සේ <xliff:g id="DATE">%1$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"සෙවීම අවසන් කරන්න"</string>
     <string name="description_clear_search" msgid="688023606766232904">"සෙවීම හිස් කරන්න"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"සම්බන්ධතා සංදර්ශන විකල්ප"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"ගිණුම"</string>
     <string name="set_default_account" msgid="4311613760725609801">"ඇමතුම් සඳහා මෙය සැමවිට භාවිත කරන්න"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"සමඟ අමතන්න"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"සටහනක් සමගින් අමතන්න"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"ඇමතුම සමග යැවීමට සටහනක් ටයිප් කරන්න…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"යවන්න සහ අමතන්න"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. නොකියවූ අයිතම <xliff:g id="COUNT_3">%2$d</xliff:g>. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. නොකියවූ අයිතම <xliff:g id="COUNT_3">%2$d</xliff:g>. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"නිමැවුම් අනුවාදය"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"විවෘත මූලාශ්‍ර බලපත්‍ර"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"විවෘත මූලාශ්‍ර මෘදුකාංග සඳහා බලපත්‍ර විස්තර"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"මකන්න"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"ලෝපය"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"තත් <xliff:g id="SECONDS">%s</xliff:g>"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"මිනි <xliff:g id="MINUTES">%s</xliff:g> තත් <xliff:g id="SECONDS">%s</xliff:g>"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"පැය <xliff:g id="MINUTES_0">%s</xliff:g> මිනි <xliff:g id="MINUTES_1">%s</xliff:g> තත් <xliff:g id="SECONDS">%s</xliff:g>"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"මිනි <xliff:g id="MINUTES">%1$s</xliff:g> තත් <xliff:g id="SECONDS">%2$s</xliff:g>"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"පැය <xliff:g id="MINUTES_0">%1$s</xliff:g> මිනි <xliff:g id="MINUTES_1">%2$s</xliff:g> තත් <xliff:g id="SECONDS">%3$s</xliff:g>"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"මෙම කෙටිමග අබල කර ඇත"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"සම්බන්ධතාව ඉවත් කරන ලදී"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"ආයාත කරන්න"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"සම්බන්ධතාව නැත"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"තව පෙන්වන්න"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM කාඩ්පත ආයාත කිරීම අවසන්ය"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"අයාත කිරීම අසාර්ථක විය"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"සම්බන්ධතා SIM කාඩ්පතෙන් ආයාත කිරීමට නොහැකි විය"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM ආයාත කරමින්"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index b3e5970..6f9c9fc 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontakty"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontakty"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Pridať kontakt"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Priame vytáčanie"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Priama správa"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Výber odkazu na kontakt"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Výber čísla pre hovor"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Výber čísla pre správu"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Vybrať kontakt"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Pridať ku kontaktu"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Vyberte kontakt"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Vybrať"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Vytvoriť nový kontakt"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Podrobnosti kontaktu"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Informácie"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Aktualizácie"</string>
     <string name="searchHint" msgid="8482945356247760701">"Hľadať v kontaktoch"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Zobraziť kontakt"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Pridať medzi obľúbené položky"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Odstrániť z obľúbených"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Odstránené z obľúbených"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Vytvoriť odkaz"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Zavolať kontaktu"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Odoslať správu kontaktu"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Odpojiť"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Odstrániť kontakty"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Premenovať štítok"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Vybrať kontakty"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Pridať kontakty"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Odstrániť zo štítka"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Pridať kontakt"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Nový štítok…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Vytvoriť štítok"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Chcete tento kontakt rozpojiť na viacero samostatných kontaktov?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Odpojiť"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Chcete vykonané zmeny uložiť a rozpojiť tento kontakt na viacero samostatných kontaktov?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Uložiť"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Prepojenie kontaktov"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Vyberte kontakt, ktorý chcete prepojiť 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Kontakt <xliff:g id="NAME">%s</xliff:g> bol prepojený"</string>
@@ -87,10 +78,10 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> kontakty · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="many"><xliff:g id="COUNT_2">%d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontaktov · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakty · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktu · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontaktov · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Z Googlu"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Z účtu <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -107,21 +98,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Odstránením tohto kontaktu odstránite údaje z viacerých účtov."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Odstrániť tento kontakt?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Odstrániť"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Zahodiť zmeny"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt neexistuje."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt bol pridaný na plochu"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Kontakt <xliff:g id="NAME">%s</xliff:g> bol pridaný na plochu"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Vytvoriť nový kontakt"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Vytvoriť nový kontakt"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"V tablete nie sú k dispozícii žiadne fotografie."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"V telefónne nie sú žiadne fotografie."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotka kontaktu"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Názov štítku"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Presmerovať hovory priamo do hlasovej schránky"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Odstrániť fotku"</string>
     <string name="noContacts" msgid="2228592924476426108">"Zoznam vašich kontaktov je prázdny"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Nemáte žiadne štítky."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Na vytvorenie skupín je potrebný účet."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Žiadne kontakty s týmto štítkom"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"V tomto účte nie sú žiadne kontakty"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Zoznam vašich kontaktov je prázdny"</string>
@@ -134,7 +119,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Pri ukladaní kontaktu sa vyskytla chyba"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Nepodarilo sa uložiť zmeny fotky kontaktu"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Načítanie štítka zlyhalo"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Štítok bol uložený"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Štítok bol odstránený"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Štítok bol vytvorený"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Nie je možné vytvoriť štítok"</string>
@@ -149,35 +133,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Odoslať správu"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Výber kontaktov"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Odoslať"</string>
-    <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" 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" 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="5948889261993124839">"Všetky"</string>
-    <string name="callBack" msgid="5498224409038809224">"Zavolať"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Zavolať znova"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Zavolať späť"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Chcete pridať „<xliff:g id="EMAIL">%s</xliff:g>“ medzi kontakty?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> z <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontaktov"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Mená vašich kontaktov"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Aplikácia potrebná na spracovanie tejto akcie sa nenašla."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknutím na tlačidlo sa vrátite na predchádzajúcu obrazovku."</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Pridať telefónne číslo"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Pridať e-mail"</string>
@@ -198,52 +156,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Názov štítka"</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>
-    <string name="recent" msgid="2659189233141493004">"Nedávne"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Nedávne aktualizácie"</string>
     <string name="account_type_format" msgid="718948015590343010">"Kontakt zo zdroja <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Účet <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Odfotiť"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Znovu odfotiť"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Vybrať fotku"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Vybrať novú fotku"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Hľadá sa…"</string>
-    <string name="menu_display_selected" msgid="6470001164297969034">"Zobraziť vybraté"</string>
-    <string name="menu_display_all" msgid="8887488642609786198">"Zobraziť všetky"</string>
-    <string name="menu_select_all" msgid="621719255150713545">"Vybrať všetko"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Zrušiť výber všetkých"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Pridať nové"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Pridať organizáciu"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Dátum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Štítok"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Zmeniť"</string>
-    <string name="description_star" msgid="2605854427360036550">"zaradiť medzi obľúbené"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Upraviť kontakt"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Zrušiť"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Späť"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zavrieť"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Prepojiť 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Pridať medzi moje kontakty"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Adresár <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Nastavenia"</string>
     <string name="menu_settings" msgid="377929915873428211">"Nastavenia"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Pridať medzi kontakty"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Pridať ku kontaktu"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Zavrieť"</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="7122002148518724139">"uviesť rok"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Načítava sa…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Vytvoriť nový kontakt"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Pridať účet"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importovať"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Nový štítok…"</string>
@@ -257,14 +191,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Zahodiť"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Zrušiť"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Chcete zahodiť vlastné úpravy?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Hľadať v kontaktoch"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Odstránenie kontaktov"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Môj miestny profil"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Môj profil <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Zobrazenie všetkých kontaktov"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Uchovávajte svoje kontakty v bezpečí aj v prípade straty svojho telefónu: používajte synchronizáciu so službou online."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Pridať účet"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Pridajte svoj účet a nechajte si kontakty zálohovať na Googli."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nové kontakty sa budú ukladať do účtu <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Vyberte predvolený účet pre nové kontakty:"</string>
@@ -283,13 +213,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Zobraziť menej"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Nedávne"</string>
     <string name="about_card_title" msgid="2920942314212825637">"O karte"</string>
-    <string name="send_message" msgid="8938418965550543196">"Odoslať správu"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Prebieha vytváranie osobnej kópie..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Zajtra"</string>
     <string name="today" msgid="8041090779381781781">"Dnes"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Dnes o <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Zajtra o <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Udalosť bez názvu)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Nastaviť"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Čet"</string>
@@ -299,20 +228,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Web"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Udalosť"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Vzťah"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Účet"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Meno"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-mailová adresa"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefón"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknutím rozbalíte editor kontaktov."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknutím zbalíte editor kontaktov."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"trasa do miesta"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"nedávna správa sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknutím na ňu odpoviete"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"nedávna správa sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknutím na ňu odpoviete"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"prichádzajúci"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"odchádzajúci"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"zmeškaný"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"nedávny hovor. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Ďalšie polia"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Zmeniť fotku kontaktu"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Pridať fotku kontaktu"</string>
@@ -320,49 +245,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Nepodarilo sa otvoriť editor"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Miesto uloženia"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Kontaktné informácie z účtu <xliff:g id="ACCOUNT">%s</xliff:g> sa nedajú upravovať"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Kontakty sa momentálne ukladajú do účtu <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Iný účet vyberiete dvojitým klepnutím."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="few">Prepojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="many">Prepojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Prepojené kontakty (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Prepojený kontakt</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Prepojené kontakty: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"PREPOJIŤ KONTAKTY"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ZRUŠIŤ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> možné duplikáty</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> možného duplikátu</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> možných duplikátov</item>
-      <item quantity="one">1 možný duplikát</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> prepojené kontakty</item>
-      <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> prepojeného kontaktu</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> prepojených kontaktov</item>
-      <item quantity="one">1 prepojený kontakt</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Tento kontakt"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Možné duplikáty"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Tieto kontakty môžu patriť jednej osobe. Môžete ich prepojiť do jedného kontaktu."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Prepojené kontakty"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Z vašich účtov"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Výber fotky"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Z účtu <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Odstrániť položku <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Odstrániť položku <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Odstrániť položku <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotka účtu <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> nie je začiarknutá"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotka z účtu <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> je začiarknutá"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Fotka z neznámeho účtu nebola začiarknutá"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Fotka z neznámeho účtu bola začiarknutá"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Návrhy"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nové"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Otvoriť navigačný vysúvací panel"</string>
@@ -431,11 +320,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Adresár"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Pracovný adresár"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Všetky kontakty"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Našlo sa viac ako <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Rýchly kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Bez mena)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Najčastejšie používané kontakty"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Zobraziť kontakt"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Všetky kontakty s telefónnymi číslami"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontakty v pracovnom profile"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Zobraziť aktualizácie"</string>
@@ -443,7 +330,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM karta"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Meno"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Prezývka"</string>
-    <string name="full_name" msgid="6602579550613988977">"Meno"</string>
     <string name="name_given" msgid="4280790853455320619">"Meno"</string>
     <string name="name_family" msgid="7466985689626017037">"Priezvisko"</string>
     <string name="name_prefix" msgid="59756378548779822">"Titul pred menom"</string>
@@ -476,8 +362,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Odoslať správu na adresu <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Poslať e-mail"</string>
     <string name="postal_street" msgid="8133143961580058972">"Ulica"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Číslo poštovej schránky"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Štvrť"</string>
     <string name="postal_city" msgid="6597491300084895548">"Mesto"</string>
     <string name="postal_region" msgid="6045263193478437672">"Štát"</string>
     <string name="postal_postcode" msgid="572136414136673751">"PSČ"</string>
@@ -515,8 +399,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Ďalšie skupiny..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Ak zo synchronizácie odstránite skupinu „<xliff:g id="GROUP">%s</xliff:g>“, odstránite zo synchronizácie aj všetky kontakty, ktoré nie sú zaradené do žiadnej skupiny."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Prebieha ukladanie možností zobrazenia..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Hotovo"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Zrušiť"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Vlastné zobrazenie"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Účet na ukladanie importovaných kontaktov"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"zo SIM karty"</string>
@@ -540,18 +422,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Zrušiť export vizitky <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Import či export vizitky sa nepodarilo zrušiť"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Neznáma chyba."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Súbor „<xliff:g id="FILE_NAME">%s</xliff:g>“ sa nepodarilo otvoriť: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Súbor „<xliff:g id="FILE_NAME">%1$s</xliff:g>“ sa nepodarilo otvoriť: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Nástroj na export sa nepodarilo spustiť: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nedá sa exportovať žiadny kontakt."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Zakázali ste požadované povolenie."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Počas exportovania sa vyskytla chyba: „<xliff:g id="EXACT_REASON">%s</xliff:g>“."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Požadovaný názov súboru (<xliff:g id="FILENAME">%s</xliff:g>) je príliš dlhý."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Chyba I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nedostatok pamäte. Súbor je možno príliš veľký."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Analýza karty vCard zlyhala z neznámeho dôvodu."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formát nie je podporovaný."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Metaúdaje daných súborov vizitiek vCard sa nepodarilo zhromaždiť."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Nepodaril sa import jedného alebo viacerých súborov (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Export vizitky <xliff:g id="FILENAME">%s</xliff:g> bol dokončený."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Export kontaktov bol dokončený"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Export kontaktov bol dokončený. Kliknutím na upozornenie ich môžete zdieľať."</string>
@@ -560,29 +438,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Export údajov kontaktov"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktné údaje sa exportujú."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Nepodarilo sa získať informácie z databázy."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Nenašli sa žiadne kontakty, ktoré by bolo možné exportovať. Ak v telefóne skutočne máte kontakty, problém môže byť spôsobený tým, že niektorí poskytovatelia údajov nemusia umožňovať export kontaktov z telefónu."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nie je možné exportovať žiadne kontakty."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Nástroj na tvorbu vizitiek vCard sa nespustil správne."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Export sa nepodaril"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Údaje kontaktov neboli exportované.\nDôvod: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importuje sa <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Nepodarilo sa prečítať údaje vizitky vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Čítanie údajov vizitky vCard bolo zrušené"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Import vizitky <xliff:g id="FILENAME">%s</xliff:g> bol dokončený"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importovanie súboru <xliff:g id="FILENAME">%s</xliff:g> bolo zrušené"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Vizitka <xliff:g id="FILENAME">%s</xliff:g> bude čoskoro importovaná."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Súbor bude čoskoro importovaný."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Žiadosť o import vizitky vCard bola odmietnutá. Skúste to znova neskôr."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Vizitka <xliff:g id="FILENAME">%s</xliff:g> bude čoskoro exportovaná."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Súbor bude čoskoro exportovaný."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakty budú čoskoro exportované"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Žiadosť o export vizitky bola odmietnutá. Skúste to znova neskôr."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Prebieha načítavanie vizitiek vCard do vyrovnávacej pamäte miestneho dočasného úložiska. Samotné importovanie začne o chvíľu."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Vizitku vCard sa nepodarilo importovať."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt cez NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Exportovať kontakty?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Ukladanie do vyrovnávacej pamäte..."</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Import: <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Import: <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exportovať do súboru .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Zoradiť podľa"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Meno"</string>
@@ -595,8 +469,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Informácie o mne"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Nastavenie profilu"</string>
     <string name="setting_about" msgid="7014388749752042863">"O aplikácii Kontakty"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Zdieľať viditeľné kontakty"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Nepodarilo sa zdieľať viditeľné kontakty"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Zdieľať obľúbené kontakty"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Zdieľať všetky kontakty"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Nepodarilo sa zdieľať kontakty."</string>
@@ -606,14 +478,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nemáte žiadne kontakty na zdieľanie"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakty na zobrazenie"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakty na zobrazenie"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Vlastné zobrazenie"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Prispôsobiť zobrazenie"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Uložiť"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Hľadať v kontaktoch"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Obľúbené"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Žiadne kontakty."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Vymazať často kontakt. osoby"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Vybrať SIM kartu"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Správa účtov"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importovať"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exportovať"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokované čísla"</string>
@@ -621,21 +489,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g>, zdroj: <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"zastaviť vyhľadávanie"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Vymazať vyhľadávanie"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Možnosti zobrazenia kontaktov"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Účet"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Vždy používať pre hovory"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Volať pomocou"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Hovor s poznámkou"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Napísať poznámku, ktorá sa odošle s hovorom…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ODOSLAŤ A VOLAŤ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> neprečítané položky. </item>
-      <item quantity="many"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> neprečítanej položky. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> neprečítaných položiek. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> neprečítaná položka. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Verzia zostavy"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licencie open source"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Podrobnosti o licencii pre softvér open source"</string>
@@ -649,8 +509,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Odstrániť"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Tri bodky"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Tento odkaz bol deaktivovaný"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt bol odstránený"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importovať"</string>
@@ -675,4 +535,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Žiadne pripojenie"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM karta"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Zobraziť viac"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Import SIM karty bol dokončený"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Import zlyhal"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Nepodarilo sa importovať kontakty zo SIM karty"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importuje sa SIM karta"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index df7bb99..4af3f66 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Stiki"</string>
     <string name="contactsList" msgid="8661624236494819731">"Stiki"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Dodaj stik"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Vizitka"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Bližnjice za klicanje"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Neposredno sporočilo"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Izberite bližnjico stika"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Izberite klicno številko"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Izberi številko za pošiljanje sporočila"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Izbira stika"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Dodajanje v stik"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Izbira stika"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Izberi"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Ustvarite nov stik"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Podrobnosti o stiku"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Vizitka"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Posodobitve"</string>
     <string name="searchHint" msgid="8482945356247760701">"Iskanje stikov"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Ogled stika"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Dodaj k priljubljenim"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Odstrani iz priljubljenih"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Odstranjeno iz priljubljenih"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Ustvari bližnjico"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Pokliči stik"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Pošlji SMS stiku"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Odstrani povezavo"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Odstrani stike"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Preimenuj oznako"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Izbiranje stikov"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Dodajanje stikov"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Odstrani iz oznake"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Dodaj stik"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Ustvari novo ..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Ustvari oznako"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Ali želite ta stik razdružiti na več stikov?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Razdruži"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Ali želite shraniti že narejene spremembe in ta stik razdružiti na več stikov?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Shrani"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Povezava stikov"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Izberite stik, ki ga želite povezati 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Stik <xliff:g id="NAME">%s</xliff:g> je povezan"</string>
@@ -87,10 +78,10 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> stikov</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> stik · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="two"><xliff:g id="COUNT_2">%d</xliff:g> stika · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> stiki · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> stikov · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> stik · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="two"><xliff:g id="COUNT_2">%1$d</xliff:g> stika · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> stiki · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> stikov · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Iz Google računa"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Iz računa za <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -107,21 +98,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Če boste izbrisali ta stik, boste izbrisali podatke iz več računov."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Želite izbrisati ta stik?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Izbriši"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Zavrzi spremembe"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Stik ne obstaja."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Stik je dodan na začetni zaslon."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Stik <xliff:g id="NAME">%s</xliff:g> je dodan na začetni zaslon."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Ustvari nov stik"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Ustvari nov stik"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"V telefonu ni dostopnih slik."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"V telefonu ni na voljo slik."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Fotografija za stik"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Ime oznake po meri"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Klice takoj preusmeri v glasovno pošto"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Odstrani fotografijo"</string>
     <string name="noContacts" msgid="2228592924476426108">"Seznam stikov je prazen"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Ni oznak."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Če želite ustvariti skupine, potrebujete račun."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Ni stikov s to oznako"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"V tem računu ni stikov"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Seznam stikov je prazen"</string>
@@ -134,7 +119,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Pri shranjevanju stika je prišlo do napake"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Sprememb fotografije stika ni bilo mogoče shraniti"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nalaganje oznake ni uspelo"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Oznaka je shranjena"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Oznaka je izbrisana"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Oznaka je ustvarjena"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Oznake ni mogoče ustvariti"</string>
@@ -149,35 +133,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Pošlji sporočilo"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Izbiranje stikov"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Pošlji"</string>
-    <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" 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" 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="5948889261993124839">"Vsi"</string>
-    <string name="callBack" msgid="5498224409038809224">"Povratni klic"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Ponovi klic"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Povratni klic"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Želite »<xliff:g id="EMAIL">%s</xliff:g>« dodati stikom?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> od <xliff:g id="TOTAL_NUMBER">%s</xliff:g> stikov"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Imena stikov"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Aplikacije za obravnavo tega dejanja ni mogoče najti."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Kliknite za vrnitev na prejšnji zaslon"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Dodaj telefonsko številko"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Dodaj e-poštni naslov"</string>
@@ -198,52 +156,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Ime oznake"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Glasovni klepet"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videoklepet"</string>
-    <string name="connections" msgid="8098440723172028350">"Povezave"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Dodaj povezavo"</string>
-    <string name="recent" msgid="2659189233141493004">"Nedavni"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Nedavne posodobitve"</string>
     <string name="account_type_format" msgid="718948015590343010">"Stik <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> Račun"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Posnemi fotografijo"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Posnemi novo fotografijo"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Izberi fotografijo"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Izberi novo fotografijo"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Izberi vse"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Prekliči izbor vseh"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Dodaj novo"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Dodaj organizacijo"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Dodaj oznako"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Spremeni"</string>
-    <string name="description_star" msgid="2605854427360036550">"priljubljeno"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Uredi stik"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Prekliči"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Nazaj"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"zapri"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Želite povezati 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Dodaj v skupino »Moji stiki«"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Imenik <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Nastavitve"</string>
     <string name="menu_settings" msgid="377929915873428211">"Nastavitve"</string>
     <string name="menu_help" msgid="1680178646764069976">"Pomoč in povr. 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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Dodaj v stike"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Dodaj v stik"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Zapri"</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="7122002148518724139">"Vključi letnico"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Stik"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Nalaganje …"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Ustvarjanje novega stika"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Dodaj račun"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Uvozi"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Ustvari novo ..."</string>
@@ -257,14 +191,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Zavrzi"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Prekliči"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Želite zavreči prilagoditve?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Iščite med stiki"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Odstranitev stikov"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Moj lokalni profil"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Moj profil za <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Prikaz vseh stikov"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Naj bodo vaš stiki na varnem, tudi če izgubite telefon: sinhronizirajte s spletno storitvijo."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Dodajanje računa"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Vzemite si trenutek in dodajte račun, s katerim boste varnostno kopirali svoje stike v Googlu."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Novi stiki bodo shranjeni v račun <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Izberite privzeti račun za nove stike:"</string>
@@ -283,13 +213,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Pokaži manj"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Nedavno"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Vizitka"</string>
-    <string name="send_message" msgid="8938418965550543196">"Pošlji sporočilo"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Ustvarjanje osebne kopije ..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Jutri"</string>
     <string name="today" msgid="8041090779381781781">"Danes"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Danes ob <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Jutri ob <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Neimenovani dogodek)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Nastavi"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Takojšnje sporočanje"</string>
@@ -299,20 +228,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Spletno mesto"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Dogodek"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Razmerje"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Račun"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Ime"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-pošta"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Kliknite, če želite razširiti urejevalnik stikov."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kliknite, če želite strniti urejevalnik stikov."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"navodila do mesta"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"nedavni sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. kliknite, če želite odgovoriti"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"nedavni sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. kliknite, če želite odgovoriti"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"Dohodni"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"Odhodni"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"Zgrešeni"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"nedavni klic. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Več polj"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Spremeni fotografijo za stik"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Dodaj fotografijo za stik"</string>
@@ -320,49 +245,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Odpiranje urejevalnika ni uspelo."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Shranjevanje v"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Podatkov o stiku iz računa <xliff:g id="ACCOUNT">%s</xliff:g> ni mogoče urejati"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Trenutno se shranjuje v račun <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Če želite izbrati drug račun, se dvakrat dotaknite."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="one">Povezani stiki (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="two">Povezani stiki (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="few">Povezani stiki (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Povezani stiki (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Povezani stiki (<xliff:g id="COUNT">%d</xliff:g>)"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"POVEŽI STIKE"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"PREKLIČI"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> morebiten dvojnik</item>
-      <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> morebitna dvojnika</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> morebitni dvojniki</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> morebitnih dvojnikov</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> povezan stik</item>
-      <item quantity="two"><xliff:g id="COUNT">%d</xliff:g> povezana stika</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> povezani stiki</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> povezanih stikov</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="one">(<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="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ta stik"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Morebitni dvojniki"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Ti stiki so morda ena in ista oseba. Lahko jih združite v en stik."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Povezani stiki"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Iz vaših računov"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Izbira fotografije"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Od: <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Izbriši <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Izbriši <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Izbriši <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotografija iz <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> ni označena"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotografija iz <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> je označena"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Fotografija iz neznanega računa ni izbrana"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Fotografija iz neznanega računa je izbrana"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Predlogi"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Novo"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Odpri predal za krmarjenje"</string>
@@ -431,11 +320,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Imenik"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Delovni imenik"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Vsi stiki"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Najdenih je bilo več kot <xliff:g id="COUNT">%d</xliff:g> stikov."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Hitri stik za <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Ni imena)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Pogosti stiki"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Ogled stika"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Vsi stiki s telefonskimi številkami"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Stiki za delovni profil"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Prikaz posodobitev"</string>
@@ -443,7 +330,6 @@
     <string name="account_sim" msgid="6519016427905087952">"Kartica SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Ime"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Vzdevek"</string>
-    <string name="full_name" msgid="6602579550613988977">"Ime"</string>
     <string name="name_given" msgid="4280790853455320619">"Ime"</string>
     <string name="name_family" msgid="7466985689626017037">"Priimek"</string>
     <string name="name_prefix" msgid="59756378548779822">"Naziv"</string>
@@ -476,8 +362,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Pošlji sporočilo za: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-pošta"</string>
     <string name="postal_street" msgid="8133143961580058972">"Ulica"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Poštni predal"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Naselje"</string>
     <string name="postal_city" msgid="6597491300084895548">"Mesto"</string>
     <string name="postal_region" msgid="6045263193478437672">"Država/regija"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Poštna številka"</string>
@@ -515,8 +399,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Več skupin ..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Če skupino »<xliff:g id="GROUP">%s</xliff:g>« odstranite iz sinhronizacije, boste iz sinhronizacije odstranili tudi vse nerazvrščene stike."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Shranjevanje možnosti prikaza..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Dokončano"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Prekliči"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Prilagojen pogled"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Shranjevanje uvoženih stikov v račun:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Kartica SIM"</string>
@@ -540,18 +422,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Želite preklicati izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Uvoza/izvoza vCard ni mogoče preklicati"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Neznana napaka."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Datoteke »<xliff:g id="FILE_NAME">%s</xliff:g>« ni bilo mogoče odpreti: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Datoteke »<xliff:g id="FILE_NAME">%1$s</xliff:g>« ni bilo mogoče odpreti: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Funkcije za izvoz ni bilo mogoče zagnati: »<xliff:g id="EXACT_REASON">%s</xliff:g>«"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Ni stikov za izvoz."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Onemogočili ste zahtevano dovoljenje."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Pri izvozu je prišlo do napake: »<xliff:g id="EXACT_REASON">%s</xliff:g>«"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Zahtevano ime datoteke je predolgo (»<xliff:g id="FILENAME">%s</xliff:g>«)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Napaka I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Ni dovolj pomnilnika. Datoteka je morda prevelika."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Datoteke vCard iz neznanega razloga ni bilo mogoče razčleniti."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Ta oblika ni podprta."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Meta informacij za določene datoteke vCard ni bilo mogoče zbrati."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Ene ali več datotek ni bilo mogoče uvoziti (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Izvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je končan."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Izvoz stikov je končan."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Izvoz stikov je končan. Kliknite obvestilo, če želite dati stike v skupno rabo."</string>
@@ -560,29 +438,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Izvažanje podatkov o stiku"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Podatki o stikih se izvažajo."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Informacij o zbirki podatkov ni bilo mogoče dobiti."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Ni na voljo stikov za izvoz. Če imate v telefonu stike, nekateri ponudniki podatkov morda ne omogočajo izvoza stikov iz telefona."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Ni stikov za izvoz."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Urejevalnik za vCard se ni pravilno zagnal."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Izvoz ni mogoč"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Podatki stika niso bili izvoženi.\nRazlog: »<xliff:g id="FAIL_REASON">%s</xliff:g>«"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Uvažanje <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Podatkov vCard ni bilo mogoče prebrati"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Branje kartice vCard je preklicano"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Končan uvoz dat. vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Uvoz datoteke <xliff:g id="FILENAME">%s</xliff:g> je preklican"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Dat. <xliff:g id="FILENAME">%s</xliff:g> bo kmalu uvožena."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Datoteka bo kmalu uvožena."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Zahteva za uvoz datoteke vCard je bila zavrnjena. Poskusite znova pozneje."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Dat. <xliff:g id="FILENAME">%s</xliff:g> bo kmalu izvožena."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Datoteka bo kmalu izvožena."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Stiki bodo kmalu izvoženi."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Zahteva za izvoz datoteke vCard je bila zavrnjena. Poskusite znova pozneje."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"stik"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Predpomnjenje datotek(e) vCARD v lokalno začasno shrambo. Dejanski uvoz se bo začel kmalu."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Datoteke vCard ni bilo mogoče uvoziti."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Stik prejet prek NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Želite izvoz. stike?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Predpomnjenje"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Uvažanje <xliff:g id="CURRENT_NUMBER">%s</xliff:g>(<xliff:g id="TOTAL_NUMBER">%s</xliff:g>:<xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Uvažanje <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>(<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>:<xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Izvozi v datoteko .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Razvrsti glede na"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ime"</string>
@@ -595,8 +469,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Moji podatki"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Nastavite svoj profil"</string>
     <string name="setting_about" msgid="7014388749752042863">"O Stikih"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Vidne stike deli z drugimi"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Dajanje vidnih stikov v skupno rabo ni uspelo."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Skupna raba priljubljenih stikov"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Skupna raba vseh stikov"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Dajanje stikov v skupno rabo ni uspelo."</string>
@@ -606,14 +478,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Ni stikov za skupno rabo."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Stiki, ki naj bodo prikazani"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Stiki za prikaz"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Določi prilagojen pogled"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Prilagajanje pogleda"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Shrani"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Iščite med stiki"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Priljubljeno"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Ni stikov."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Izbriši seznam pogostih stikov"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Izberite kartico SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Upravljaj račune"</string>
     <string name="menu_import" msgid="6107961135813836467">"Uvozi"</string>
     <string name="menu_export" msgid="2658783911863503902">"Izvozi"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blokirane številke"</string>
@@ -621,21 +489,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> prek <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"ustavi iskanje"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Počisti iskalno polje"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Možnosti prikaza stikov"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Račun"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Vedno uporabi to možnost za klice"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Klicanje z računom"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Klic z zapiskom"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Vnesite zapisek, ki ga želite poslati s klicem …"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"POŠLJI IN KLIČI"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> neprebran element. </item>
-      <item quantity="two"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> neprebrana elementa. </item>
-      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> neprebrani elementi. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> neprebranih elementov. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Delovna različica"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Odprtokodne licence"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Podrobnosti o licenci za odprtokodno programsko opremo"</string>
@@ -649,8 +509,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Izbriši"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Tri pike"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> h <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> s"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> h <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> s"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ta bližnjica je onemogočena"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Stik je bil odstranjen"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Uvozi"</string>
@@ -675,4 +535,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Ni povezave"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"Kart. SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Pokaži več"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Uvoz kartice SIM je končan"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Uvoz ni uspel"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Stikov s kartic SIM ni bilo mogoče uvoziti"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Uvažanje kartice SIM"</string>
 </resources>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index 90f4bd1..f0e36f8 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontaktet"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontaktet"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Shto një kontakt"</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="shortcutActivityTitle" msgid="1504383567778497348">"Zgjidh një kontakt"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Shto te kontakti"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Zgjidh një kontakt"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Zgjidh"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Krijo një kontakt të ri"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Detajet e kontaktit"</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>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Krijo një shkurtore"</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="2627252205317945563">"Anulo lidhjen"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Hiq kontaktet"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Riemërto etiketën"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Zgjidh kontaktet"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Shto kontakte"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Hiq nga etiketa"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Shto kontakt"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Krijo të re..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Krijo një etiketë"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Të shkëputet ky kontakt në shumë kontakte të ndara?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Shkëput"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Dëshiron t\'i ruash ndryshimet që ke bërë tashmë dhe ta shkëputësh këtë kontakt në shumë kontakte të ndara?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Ruaj"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Lidh kontaktet"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Zgjidh kontaktin që dëshiron të lidhësh 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> u lidh"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontakte · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakte · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Nga Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Nga <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Fshirja e këtij kontakti do të fshijë detajet nga shumë llogari."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Të fshihet ky kontakt?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Fshi"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Hiq dorë nga ndryshimet"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakti nuk ekziston."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakti u shtua tek Ekrani bazë."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> 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 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="2228592924476426108">"Lista e kontakteve të tua është bosh"</string>
-    <string name="noGroups" msgid="4607906327968232225">"S\'ka etiketa."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Për të krijuar grupe të duhet një llogari."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Nuk ka kontakte me këtë etiketë"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Nuk ka kontakte në këtë llogari"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Lista e kontakteve të tua është bosh"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Gabim gjatë ruajtjes së kontaktit"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ndryshimet e fotografisë së kontaktit nuk mund të ruheshin"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Dështoi në ngarkimin e etiketës"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etiketa u ruajt"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiketa u fshi"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etiketa u krijua"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Etiketa nuk krijohet"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Dërgo mesazh"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Zgjidh kontaktet"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Dërgo"</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="5948889261993124839">"Të gjitha"</string>
-    <string name="callBack" msgid="5498224409038809224">"Telefono"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Emri i etiketës"</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">"<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Llogari <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Etiketa"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Ndërro"</string>
-    <string name="description_star" msgid="2605854427360036550">"i preferuar"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Redakto kontaktin"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Anulo"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Prapa"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"mbyll"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Lidhe kontaktin 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="activity_title_settings" msgid="5464130076132770781">"Cilësimet"</string>
     <string name="menu_settings" msgid="377929915873428211">"Cilësimet"</string>
     <string name="menu_help" msgid="1680178646764069976">"Ndihmë dhe komente"</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="7122002148518724139">"Përfshi vitin"</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="4347232421410561500">"Shto llogari"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importo"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Krijo të re..."</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Hiq"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Anulo"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Të flaken personalizimet?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Kërko kontaktet"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Hiq kontaktet"</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="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="6648376557574360096">"Nevojitet një minutë për të shtuar një llogari që mban kopje rezervë të kontakteve në Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Kontaktet e reja do të ruhen në <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Zgjidh një llogari të parazgjedhur për kontaktet e reja:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Shiko më pak"</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="288549957278065542">"Po krijon një kopje personale..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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">"IM"</string>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"sms-ja e fundit. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"telefonata e fundit. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Fusha të tjera"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Ndrysho fotografinë e kontaktit"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Shto një fotografi të kontaktit"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Dështoi në hapjen e redaktorit."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Po ruhet te"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Informacionet e kontaktit nga <xliff:g id="ACCOUNT">%s</xliff:g> nuk mund të redaktohen"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Po ruhet aktualisht në <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Trokit dy herë për të zgjedhur një llogari tjetër."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Kontakte të lidhura (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Kontakt i lidhur</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> kontakte të lidhura"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LIDH KONTAKTET"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ANULO"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> dublikata të mundshme</item>
-      <item quantity="one">1 dublikatë e mundshme</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> kontakte të lidhura</item>
-      <item quantity="one">1 kontakt i lidhur</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ky kontakt"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Dublikatat e mundshme"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Këto kontakte mund të jenë i njëjti person. Mund t\'i lidhësh së bashku si një kontakt të vetëm."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Kontaktet e lidhura"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Nga llogaritë e tua"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Zgjidh fotografinë"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Nga <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Fshi <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Fshi <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Fshi <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Nuk është shënuar fotografia nga <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Është shënuar fotografia nga <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Nuk është zgjedhur fotografi nga llogari e panjohur"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Është zgjedhur fotografi nga llogari e panjohur"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Sugjerime"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"E re"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Hap sirtarin e navigimit"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Direktoria"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Direktoria e punës"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Të gjitha kontaktet"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"U gjetën më shumë se <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Kontakti i shpejtë për <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Pa emër)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Të kontaktuara shpesh"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Shiko kontakt"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Të gjitha kontaktet me numra telefoni"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontaktet e profilit të punës"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Shiko përditësimet"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Emri"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Pseudonimi"</string>
-    <string name="full_name" msgid="6602579550613988977">"Emri"</string>
     <string name="name_given" msgid="4280790853455320619">"Emri"</string>
     <string name="name_family" msgid="7466985689626017037">"Mbiemri"</string>
     <string name="name_prefix" msgid="59756378548779822">"Parashtesa e emrit"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Mail <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Mail-i"</string>
     <string name="postal_street" msgid="8133143961580058972">"Rruga"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Kutia postare"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Lagjja"</string>
     <string name="postal_city" msgid="6597491300084895548">"Qyteti"</string>
     <string name="postal_region" msgid="6045263193478437672">"Shteti"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Kodi ZIP"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Më shumë grupe…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Heqja e \"<xliff:g id="GROUP">%s</xliff:g>\" nga sinkronizimi gjithashtu heq kontaktet e pagrupuara nga sinkronizimi."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Po ruan opsionet e paraqitjes…"</string>
-    <string name="menu_done" msgid="796017761764190697">"U krye"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Anulo"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Pamje e personalizuar"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Ruaji kontaktet e importuara në:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Karta SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Të anulohet eksportimi i <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Importi/eksporti i vCard nuk u anulua"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Gabim i panjohur."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nuk mund të hapej \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Nuk mund të hapej \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Eksportuesi nuk mund të nisej: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Nuk ka asnjë kontakt që mund të eksportohet."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Ke çaktivizuar një leje e cila është të detyrueshme."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ndodhi një gabim gjatë eksportimit: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Emri i kërkuar i skedarit është shumë i gjatë (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Gabim I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Nuk ka memorie të mjaftueshme. Skedari mund të jetë shumë i madh."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"vCard nuk mund të analizohej për një arsye të paparashikuar."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formati nuk mbështetet."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Informacionet e skedarit(ëve) të dhënë të vCard nuk mund të mblidheshin."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Një ose më shumë skedarë nuk mundën të importoheshin (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Eksportimi i <xliff:g id="FILENAME">%s</xliff:g> përfundoi."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Eksportimi i kontakteve përfundoi."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Eksportimi i kontakteve përfundoi, kliko njoftimin për të ndarë kontaktet."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Po eksporton të dhënat e kontaktit"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Të dhënat e kontaktit po eksportohen."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Informacionet e bazës së të dhënave nuk mund të merreshin."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Nuk ka kontakte që mund të eksportohen. Nëse ke kontakte në telefonin tënd, disa ofrues të të dhënave mund të mos lejojnë që kontaktet të eksportohen nga telefoni."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Nuk ka kontakte që mund të eksportohen."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Kompozitori i vCard nuk u nis si duhet."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Nuk u eksportuan"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Të dhënat e kontaktit nuk u eksportuan.\nArsyeja: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Po importon <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Të dhënat e vCard nuk mund të lexoheshin"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Leximi i të dhënave të vCard u anulua."</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Importimi i <xliff:g id="FILENAME">%s</xliff:g> të vCard përfundoi"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importimi i <xliff:g id="FILENAME">%s</xliff:g> u anulua"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> do të importohet së shpejti."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Skedari do të importohet së shpejti."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Kërkesa e importit të vCard u refuzua. Provo përsëri më vonë."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> do të eksportohet së shpejti."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Skedari do të eksportohet së shpejti."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktet do të eksportohen së shpejti."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Kërkesa e eksportimit të vCard u refuzua. Provo përsëri më vonë."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakti"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Po ruan vCard në hapësirën ruajtëse lokale të përkohshme. Importimi aktual do të nisë së shpejti."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard nuk mund të eksportohej."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kontakt nëpërmjet NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Të eksportohen kontaktet?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Po ruan memorien e përkohshme"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Po importon <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Po importon <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Eksporto në skedar .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Rendit sipas"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Emri"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Informacioni im"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Konfiguro profilin"</string>
     <string name="setting_about" msgid="7014388749752042863">"Rreth kontakteve"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Shpërnda kontaktet e dukshme"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Ndarja e kontakteve të dukshme dështoi."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Ndaj kontaktet e preferuara"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Ndaj të gjitha kontaktet"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Ndarja e kontakteve dështoi."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Nuk ka kontakte për të shpërndarë"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakte për t\'u shfaqur"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakte për t\'u shfaqur"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Përcakto pamjen e personalizuar"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Personalizo pamjen"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Ruaj"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Kërko kontakte"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Të preferuarat"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Nuk ka asnjë kontakt."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Pastro kontaktet e shpeshta"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Zgjidh kartën SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Menaxho llogaritë"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importo"</string>
     <string name="menu_export" msgid="2658783911863503902">"Eksporto"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Numrat e bllokuar"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> nëpërmjet <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"ndalo kërkimin"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Pastro kërkimin"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Opsionet e paraqitjes së kontaktit"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Llogaria"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Përdore gjithmonë për telefonatat"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Telefono me"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Telefono me shënim"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Shkruaj një shënim për ta dërguar me telefonatën…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"DËRGO DHE TELEFONO"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> artikuj të palexuar. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> artikull i palexuar. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versioni i ndërtimit"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenca me burim informacioni të hapur"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Detajet e licencës për softuer me burim të hapur"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Fshi"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Elipsë"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sekonda"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> minuta <xliff:g id="SECONDS">%s</xliff:g> sekonda"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> orë <xliff:g id="MINUTES_1">%s</xliff:g> minuta <xliff:g id="SECONDS">%s</xliff:g> sekonda"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> minuta <xliff:g id="SECONDS">%2$s</xliff:g> sekonda"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> orë <xliff:g id="MINUTES_1">%2$s</xliff:g> minuta <xliff:g id="SECONDS">%3$s</xliff:g> sekonda"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Kjo shkurtore u çaktivizua"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakti u hoq"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importo"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Nuk ka lidhje"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Shfaq më shumë"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Importimi i kartës SIM përfundoi"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Importimi dështoi"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontaktet nga karta SIM nuk mund të importoheshin"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Karta SIM po importohet"</string>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 26ced0b..eb5b3ab 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Контакти"</string>
     <string name="contactsList" msgid="8661624236494819731">"Контакти"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Додај контакт"</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">"Одаберите број за SMS"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Изаберите контакт"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Додајте контакту"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Изаберите контакт"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Изаберите"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Направи нови контакт"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Детаљи о контакту"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Избриши"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Промени слику"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Направи пречицу"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Позови контакт"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Пошаљи SMS контакту"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Раздвоји"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Уклони контакте"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Преименуј ознаку"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Изабери контакте"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Додај контакте"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Уклони из ознаке"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Додај контакт"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Направи нову…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Направи ознаку"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Желите ли да раздвојите овај контакт у више контаката?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Раздвоји"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Желите ли да сачувате промене које сте већ обавили и раздвојите овај контакт у више контаката?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Сачувај"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Обједините контакте"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Изаберите контакт који желите да обједините са контактом <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Контакти су повезани са <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -85,9 +76,9 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контаката</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> контакт · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> контакта · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> контаката · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> контакт · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> контакта · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> контаката · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Са Google-а"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Са <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -104,21 +95,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Ако избришете овај контакт, биће избрисани детаљи са више налога."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Желите ли да избришете овај контакт?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Избриши"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Одбаци промене"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Контакт не постоји."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контакт је додат на почетни екран."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Контакт <xliff:g id="NAME">%s</xliff:g> је додат на почетни екран."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Направите нови контакт"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Направи нови контакт"</string>
     <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="2228592924476426108">"Листа контаката је празна"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Нема ознака."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Морате да имате налог да бисте могли да правите групе."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Нема контаката са овом ознаком"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Нема контаката на овом налогу"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Листа контаката је празна"</string>
@@ -131,7 +116,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Грешка при чувању контакта"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Чување промена слике контакта није успело"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Учитавање ознаке није успело"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Ознака је сачувана"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Ознака је избрисана"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Ознака је направљена"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Прављење ознаке није успело"</string>
@@ -146,32 +130,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Пошаљи поруку"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Изаберите контакте"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Пошаљи"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> контакт са бројем телефона</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> контакта са бројевима телефона</item>
-      <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="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" 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="5948889261993124839">"Све"</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_plus_button" msgid="515164827856229880">"плус"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> од <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контак(а)та"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Имена контаката"</string>
-    <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>
@@ -191,52 +152,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Име ознаке"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> налог"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Ознака"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Промени"</string>
-    <string name="description_star" msgid="2605854427360036550">"омиљено"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Измените контакт"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Откажи"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Назад"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"затворите"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Желите ли да актуелни контакт обједините са изабраним контактом?"</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="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="7122002148518724139">"Прикажи годину"</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="4347232421410561500">"Додајте налог"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Увeзи"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Направи нову…"</string>
@@ -250,14 +187,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Одбаци"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Откажи"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Желите да одбаците прилагођавања?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Претражите контакте"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Уклоните контакте"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Мој локални профил"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Мој <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> профил"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Приказани су сви контакти"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Очувајте безбедност контаката чак и ако изгубите телефон – синхронизујте са услугом на мрежи."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Додавање налога"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Одвојте мало времена да бисте додали налог помоћу ког ћете направити резервну копију контаката на Google-у."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Нови контакти ће бити сачувани на налогу <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Изаберите подразумевани налог за нове контакте:"</string>
@@ -276,13 +209,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Прикажи мање"</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="288549957278065542">"Прављење личне копије..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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">"Размена тренутних порука"</string>
@@ -292,20 +224,16 @@
     <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="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_sms" msgid="1666389577263317445">"Недавни SMS. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"Недавни позив. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Још поља"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Промените слику контакта"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Додајте слику контакта"</string>
@@ -313,45 +241,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Oтварање уређивача није успело."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Чува се на"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Није могуће изменити контакт информације са <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Тренутно се чува на <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Додирните двапут да бисте изабрали други налог."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"Обједињених контаката: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ОБЈЕДИНИ КОНТАКТЕ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ОТКАЖИ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <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>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <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>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Овај контакт"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Могући дупликати"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Изгледа да су ови контакти иста особа. Можете да их обједините у један контакт."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Обједињени контакти"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Са ваших налога"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Изаберите слику"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Са <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Избриши <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Избриши <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Избриши <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Слика са <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> налога <xliff:g id="USER_NAME">%s </xliff:g> није означена"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Слика са <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> налога <xliff:g id="USER_NAME">%s </xliff:g> је означена"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Слика са непознатог налога није означена"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Слика са непознатог налога је означена"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Предлози"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Ново"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Отвори фиоку за навигацију"</string>
@@ -420,11 +316,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Каталог"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Каталог за Work"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Сви контакти"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Пронађено је више од <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Брзи контакт за корисника <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Без имена)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Често контактирани"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Прикажи контакт"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Сви контакти са бројевима телефона"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Контакти са профила за Work"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Прикажи ажурирања"</string>
@@ -432,7 +326,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Име"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Надимак"</string>
-    <string name="full_name" msgid="6602579550613988977">"Назив"</string>
     <string name="name_given" msgid="4280790853455320619">"Име"</string>
     <string name="name_family" msgid="7466985689626017037">"Презиме"</string>
     <string name="name_prefix" msgid="59756378548779822">"Префикс за име"</string>
@@ -465,8 +358,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Пошаљи имејл на <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Пошаљи имејлом"</string>
     <string name="postal_street" msgid="8133143961580058972">"Улица"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Поштанско сандуче"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Комшилук"</string>
     <string name="postal_city" msgid="6597491300084895548">"Град"</string>
     <string name="postal_region" msgid="6045263193478437672">"Држава"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Поштански број"</string>
@@ -504,8 +395,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Још група…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Уклањањем групе „<xliff:g id="GROUP">%s</xliff:g>“ са листе за синхронизацију уклонићете и све негруписане контакте са те листе."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Чување опција приказа је у току..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Готово"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Откажи"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Прилагођени приказ"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Сачувајте увезене контакте на:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Са SIM картице"</string>
@@ -527,18 +416,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Желите ли да откажете извоз датотеке <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Није могуће отказати vCard увоз/извоз"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Непозната грешка."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Није могуће отворити датотеку „<xliff:g id="FILE_NAME">%s</xliff:g>“: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Није могуће отворити датотеку „<xliff:g id="FILE_NAME">%1$s</xliff:g>“: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Није могуће покренути програм за извоз: „<xliff:g id="EXACT_REASON">%s</xliff:g>“"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Нема контаката за извоз."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Онемогућили сте обавезну дозволу."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Дошло је до грешке при извозу: „<xliff:g id="EXACT_REASON">%s</xliff:g>“"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Захтевани назив датотеке је предугачак („<xliff:g id="FILENAME">%s</xliff:g>“)"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O грешка"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Нема довољно меморије. Датотека је можда превелика."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Из неочекиваног разлога није било могуће рашчланити vCard датотеку."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Формат није подржан."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Није могуће прикупити метаподатке датих vCard датотека."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Није могуће увести једну или више датотека (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Извоз датотеке <xliff:g id="FILENAME">%s</xliff:g> је завршен."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Извоз контаката је завршен."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Извоз контаката је завршен. Кликните на обавештење да бисте их делили."</string>
@@ -547,29 +432,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Извоз података о контактима је у току"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Подаци о контактима се извозе."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Није могуће преузети информације из базе података"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Нема контаката за извоз. Ако имате контаката на телефону, неки добављачи података можда неће дозволити да се контакти извозе са телефона."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Нема контаката које је могуће извести."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Програм за израду vCard датотека се није исправно покренуо."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Није могуће извести"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Подаци о контактима низу извезени.\nРазлог: „<xliff:g id="FAIL_REASON">%s</xliff:g>“"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Увоз <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Није могуће читати vCard податке"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Отказано је читање података са vCard датотеке"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Увоз датотеке <xliff:g id="FILENAME">%s</xliff:g> је завршен"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Увоз датотеке <xliff:g id="FILENAME">%s</xliff:g> је  отказан"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Датотека <xliff:g id="FILENAME">%s</xliff:g> ће ускоро бити увезена."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Датотека ће ускоро бити увезена."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Захтев за извоз vCard датотеке је одбијен. Покушајте касније."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Датотека <xliff:g id="FILENAME">%s</xliff:g> ће ускоро бити извезена."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Датотека ће ускоро бити извезена."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Контакти ће ускоро бити извезени."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Захтев за извоз vCard датотеке је одбијен. Покушајте касније."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"контакт"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Кеширање vCard датотеке у локалну привремену меморију. Увоз ће ускоро започети."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Није могуће увести vCard датотеку."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Контакт преко NFC-а"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Желите ли да извезете контакте?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Кеширање..."</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Увоз <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Увоз <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Извези у .vcf датотеку"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Сортирај према"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Име"</string>
@@ -582,8 +463,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Моје информације"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Подесите профил"</string>
     <string name="setting_about" msgid="7014388749752042863">"О Контактима"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Дели видљиве контакте"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Дељење видљивих контаката није успело."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Дели омиљене контакте"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Дели све контакте"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Дељење контаката није успело."</string>
@@ -593,14 +472,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Нема контаката за дељење."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Контакти за приказ"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Контакти за приказ"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Дефинишите прилаг. приказ"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Прилагодите приказ"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Сачувај"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Претражите контакте"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Омиљено"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Нема контаката."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Обриши често контактиране"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Изаберите SIM картицу"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Управљај налозима"</string>
     <string name="menu_import" msgid="6107961135813836467">"Увeзи"</string>
     <string name="menu_export" msgid="2658783911863503902">"Извези"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Блокирани бројеви"</string>
@@ -608,20 +483,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> преко <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"зауставите претраживање"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Брисање претраге"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Опције приказивања контаката"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Налог"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Увек користи ово за позиве"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Позови помоћу"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Упути позив са белешком"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Унесите белешку коју ћете послати уз позив…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ПОШАЉИ И ПОЗОВИ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитана ставка. </item>
-      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитане ставке. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитаних ставки. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Верзија"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Лиценце отвореног кода"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Подаци о лиценци за софтвер отвореног кода"</string>
@@ -635,8 +503,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Избришите"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Три тачке"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> сек"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> с <xliff:g id="MINUTES_1">%s</xliff:g> мин <xliff:g id="SECONDS">%s</xliff:g> сек"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> мин <xliff:g id="SECONDS">%2$s</xliff:g> сек"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> с <xliff:g id="MINUTES_1">%2$s</xliff:g> мин <xliff:g id="SECONDS">%3$s</xliff:g> сек"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ова пречица је онемогућена"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Контакт је уклоњен"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Увeзи"</string>
@@ -660,4 +528,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Веза није успостављена"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Прикажи више"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Увоз са SIM картице је завршен"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Увоз није успео"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Увоз контаката са SIM картице није успео"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Увози се са SIM-а"</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index a29fcee..79c5b55 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontakter"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontakter"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Lägg till kontakt"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Direktval"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Direktmeddelande"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Välj genväg till kontakten"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Välj ett nummer att ringa"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Välj ett nummer för sms"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Välj kontakt"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Lägg till kontakt"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Välj en kontakt"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Välj"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Skapa ny kontakt"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Kontaktuppgifter"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Om"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Uppdat."</string>
     <string name="searchHint" msgid="8482945356247760701">"Sök efter kontakter"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Visa kontakt"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Lägg till i Favoriter"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Ta bort från Favoriter"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Borttagen från favoriter"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Skapa genväg"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Ring upp kontakt"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Skicka SMS till kontakt"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Ta bort länk"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Ta bort kontakter"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Byt namn på etikett"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Välj kontakter"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Lägg till kontakter"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Ta bort från etikett"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Lägg till kontakt"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Skapa ny ..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Skapa etikett"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Vill du ta bort länken mellan kontakterna?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Ta bort länk"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Vill du spara de ändringar som redan gjorts och ta bort länken mellan kontakterna?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Spara"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Länka kontakter"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Välj vilken kontakt du vill länka till <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> länkad"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kontakter · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kontakter · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Från Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Från: <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Om du tar bort den här kontakten tar du bort information från flera konton."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Vill du ta bort kontakten?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Ta bort"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Ta bort ändringar"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakten finns inte."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakten har lagts till på startskärmen."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> har lagts till på startskärmen."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Skapa ny kontakt"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Skapa ny kontakt"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Det finns inga bilder på surfplattan."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Det finns inga bilder på telefonen."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontaktbild"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Anpassat etikettsnamn"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Skicka samtal direkt till röstbrevlåda"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Ta bort foto"</string>
     <string name="noContacts" msgid="2228592924476426108">"Kontaktlistan är tom"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Inga etiketter."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Om du vill skapa grupper måste du ha ett konto."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Inga kontakter med den här etiketten"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Det finns inga kontakter på det här kontot"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Kontaktlistan är tom"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Det gick inte att spara kontakten"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Det gick inte att spara kontaktfotots ändringar"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Det gick inte att läsa in etiketten"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etikett sparad"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiketten raderad"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etikett skapad"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Det går inte att skapa etikett"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Skicka meddelande"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Välj kontakter"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Skicka"</string>
-    <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" 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" 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="5948889261993124839">"Alla"</string>
-    <string name="callBack" msgid="5498224409038809224">"Ring upp"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Ring igen"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Ring upp"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Vill du lägga till <xliff:g id="EMAIL">%s</xliff:g> i Kontakter?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> av <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kontakter"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Dina kontakters namn"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Ingen app som kan hantera åtgärden hittades."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Klicka om du vill återvända till föregående skärm"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Lägg till telefonnummer"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Lägg till e-post"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etikettnamn"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Röstchatt"</string>
     <string name="video_chat" msgid="1872255818640336072">"Videochatt"</string>
-    <string name="connections" msgid="8098440723172028350">"Anslutningar"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Lägg till anslutning"</string>
-    <string name="recent" msgid="2659189233141493004">"Senaste"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Nya uppdateringar"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g>-kontakt"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>-konto"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Ta en bild"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Ta ny bild"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Välj bild"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Välj ett nytt foto"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Markera alla"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Avmarkera alla"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Lägg till ny"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Lägg till organisation"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Datum"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etikett"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Ändra"</string>
-    <string name="description_star" msgid="2605854427360036550">"favorit"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Redigera kontakt"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Avbryt"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Tillbaka"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"stäng"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Vill du länka den aktuella kontakten till 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Lägg till i mina kontakter"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Katalog <xliff:g id="TYPE">%1$s</xliff:g>"</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="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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Lägg till i Kontakter"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Lägg till kontakt"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Stäng"</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="7122002148518724139">"Inkludera år"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Läser in …"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Skapa en ny kontakt"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Lägg till ett konto"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Importera"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Skapa ny ..."</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Ignorera"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Avbryt"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Vill du kassera anpassningarna?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Sök efter kontakter"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Ta bort kontakter"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Min lokala profil"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Min <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>-profil"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Visar alla kontakter"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Skydda dina kontakter även om du förlorar mobilen. Synkronisera med en onlinetjänst."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Lägg till ett konto"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Ägna en minut åt att lägga till ett konto för säkerhetskopiering av dina kontakter till Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Nya kontakter sparas i <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Välj ett standardkonto för nya kontakter:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Visa mindre"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Senaste"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Om"</string>
-    <string name="send_message" msgid="8938418965550543196">"Skicka meddelande"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"En personlig kopia skapas ..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"I morgon"</string>
     <string name="today" msgid="8041090779381781781">"I dag"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"I dag kl. <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"I morgon kl. <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(händelse utan titel)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Ange"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Chatt"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Webbplats"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Händelse"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Relation"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Konto"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Namn"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-post"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Klicka om du vill expandera kontaktredigeraren."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Klicka om du vill komprimera kontaktredigeraren."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"vägbeskrivning till plats"</string>
-    <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>. Klicka om du vill svara"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Klicka om du vill svara"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"inkommande"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"utgående"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"missade"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"samtal. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Fler fält"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Ändra kontaktfoto"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Lägg till kontaktfoto"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Det gick inte att öppna redigeraren."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Sparas i"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Det går inte att redigera kontaktinformation från <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Kontakterna sparas för närvarande i <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Tryck snabbt två gånger om du vill använda ett annat konto."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Länkade kontakter (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Länkad kontakt</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> länkade kontakter"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LÄNKA KONTAKTER"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"AVBRYT"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> möjliga dubbletter</item>
-      <item quantity="one">1 möjlig dubblett</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> länkade kontakter</item>
-      <item quantity="one">1 länkad kontakt</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Den här kontakten"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Möjlig dubblett"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Dessa kontakter avser möjligen samma person. Du kan länka samman dem till en enda kontakt."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Länkade kontakter"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Från dina konton"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Välj bild"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Från <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Radera <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Radera <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Radera <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotot från <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> har inte markerats"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotot från <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> har markerats"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Ett foto från ett okänt konto har inte markerats"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Ett foto från ett okänt konto har markerats"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Förslag"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Nytt"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Öppna navigeringspanelen"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Katalog"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Jobbkatalog"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Alla kontakter"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Mer än <xliff:g id="COUNT">%d</xliff:g> hittades."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Snabbkontakt för <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Inget namn)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Ofta kontaktade"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Visa kontakt"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Alla kontakter med telefonnummer"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Kontakter i jobbprofilen"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Visa uppdateringar"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Namn"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Smeknamn"</string>
-    <string name="full_name" msgid="6602579550613988977">"Namn"</string>
     <string name="name_given" msgid="4280790853455320619">"Förnamn"</string>
     <string name="name_family" msgid="7466985689626017037">"Efternamn"</string>
     <string name="name_prefix" msgid="59756378548779822">"Namnprefix"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Skicka e-post till <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-post"</string>
     <string name="postal_street" msgid="8133143961580058972">"Gata"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Postbox"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Område"</string>
     <string name="postal_city" msgid="6597491300084895548">"Stad"</string>
     <string name="postal_region" msgid="6045263193478437672">"Delstat"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Postnummer"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Fler grupper …"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Om du tar bort <xliff:g id="GROUP">%s</xliff:g> från synkroniseringen tas även kontakter som inte tillhör grupper bort från synkroniseringen."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Sparar visningsalternativ ..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Färdig"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Avbryt"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Anpassad vy"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Spara importerade kontakter i:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-kort"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Vill du avbryta exporten av <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Det gick inte att avbryta importen/exporten av vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Okänt fel."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Det gick inte att öppna <xliff:g id="FILE_NAME">%s</xliff:g>: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Det gick inte att öppna <xliff:g id="FILE_NAME">%1$s</xliff:g>: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Det gick inte att starta exportverktyget: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Det finns ingen kontakt att exportera."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Du har inaktiverat en behörighet som krävs."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Ett fel inträffade under exporten: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Det obligatoriska filnamnet är för långt (<xliff:g id="FILENAME">%s</xliff:g>)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O-fel"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Det finns inte tillräckligt med minne. Filen kan vara för stor."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Det gick inte att analysera vCard av okänd anledning."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Formatet stöds inte."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Det gick inte att samla in metainformation för de angivna vCard-filerna."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"En eller flera filer kunde inte importeras (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> har exporterats."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontakterna har exporterats."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontakterna har exporterats. Klicka på aviseringen om du vill dela dem."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Exporterar kontaktuppgifter"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontaktuppgifterna exporteras."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Det gick inte att hämta databasinformation."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Det finns inga kontakter att exportera. Om du har kontakter på mobilen kanske vissa dataleverantörer inte tillåter att kontakterna exporteras från mobilen."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Det finns inga kontakter att exportera."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard-kompositören initierades inte korrekt."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Kunde inte exportera"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontaktuppgifterna exporterades inte.\nOrsak: <xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Importerar <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Det gick inte att läsa vCard-data"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Inläsningen av vCard-data avbröts"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard-filen <xliff:g id="FILENAME">%s</xliff:g> har importerats"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Importen av <xliff:g id="FILENAME">%s</xliff:g> avbröts"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> importeras snart."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Filen kommer snart att importeras."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Begäran om vCard-import avvisades. Försök igen vid ett senare tillfälle."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> exporteras snart."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Filen kommer snart att exporteras."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontakterna exporteras snart."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Begäran om vCard-export avvisades. Försök igen vid ett senare tillfälle."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard-fil(er) cachelagras till en lokal tillfällig lagringsenhet. Den faktiska importen börjar snart."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Det gick inte att importera vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Mott. v. NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Exportera kontakter?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Cachelagrar ..."</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Importerar <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Importerar <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Exportera till VCF-fil"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sortera efter"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Förnamn"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Mina uppgifter"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Konfigurera profilen"</string>
     <string name="setting_about" msgid="7014388749752042863">"Om Kontakter"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Dela synliga kontakter"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Det gick inte att dela synliga kontakter."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Dela favoritkontakterna"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Dela alla kontakter"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Det gick inte att dela kontakterna."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Det finns inga kontakter att dela."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Kontakter som ska visas"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Kontakter som ska visas"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Definiera anpassad vy"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Anpassa vy"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Spara"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Sök efter kontakter"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Favoriter"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Inga kontakter."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Rensa listan över kontakter"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Välj SIM-kort"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Hantera konton"</string>
     <string name="menu_import" msgid="6107961135813836467">"Importera"</string>
     <string name="menu_export" msgid="2658783911863503902">"Exportera"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Blockerade nummer"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> via <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"avbryt sökning"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Rensa sökning"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Visningsalternativ för kontakter"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Konto"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Använd alltid för samtal"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Ring med"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Ring med anteckning"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Gör en anteckning som skickas när du ringer…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"SKICKA OCH RING"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> olästa poster. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> oläst post. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Programversion"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Licenser, öppen källkod"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Licensinformation för programvara med öppen källkod"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Radera"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellips"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sek"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> tim <xliff:g id="MINUTES_1">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> sek"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> min <xliff:g id="SECONDS">%2$s</xliff:g> sek"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> tim <xliff:g id="MINUTES_1">%2$s</xliff:g> min <xliff:g id="SECONDS">%3$s</xliff:g> sek"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Den här genväg är inaktiverad"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt borttagen"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Importera"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Ingen anslutning"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Visa fler"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Import av SIM-kort slutförd"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Det gick inte att importera"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Det gick inte att importera kontakter från SIM-kortet"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Importerar SIM"</string>
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 7a42b2f..4b4497d 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Anwani"</string>
     <string name="contactsList" msgid="8661624236494819731">"Anwani"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Ongeza anwani"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Anwani"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Upigaji wa moja kwa moja"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Ujumbe wa moja kwa moja"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Chagua njia ya mkato ya anwani"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Chagua nambari ya kupiga"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Chagua nambari ya kutumia ujumbe"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Chagua anwani"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Ongeza kwenye anwani"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Chagua anwani"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Teua"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Ongeza anwani mpya"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Maelezo ya anwani"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Kuhusu"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Masasisho"</string>
     <string name="searchHint" msgid="8482945356247760701">"Tafuta anwani"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Tazama anwani"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Ongeza kwenye vipendwa"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Ondoa kwenye vipendwa"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Imeondolowa kwenye vipendewa"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Unda njia ya mkato"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Mpigie"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Tuma ujumbe kwa anwani"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Tenganisha"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Ondoa anwani"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Badilisha jina la lebo"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Chagua unaowasiliana nao"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Ongeza anwani"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Ondoa kutoka kwenye lebo"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Ongeza anwani"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Unda mpya…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Unda lebo"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Je, unataka kutenganisha anwani hii kuwa anwani nyingi?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Tenganisha"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Je, ungetaka kuhifadhi mabadiliko uliyoyafanya na utenganishe anwani hii kuwa anwani nyingi?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Hifadhi"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Unganisha anwani"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Chagua anwani ambayo ungependa kuunganisha na <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> ameunganishwa"</string>
@@ -83,8 +74,8 @@
       <item quantity="one">Anwani <xliff:g id="COUNT_0">%d</xliff:g></item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other">Anwani <xliff:g id="COUNT_2">%d</xliff:g> · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one">Anwani <xliff:g id="COUNT_0">%d</xliff:g> · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other">Anwani <xliff:g id="COUNT_2">%1$d</xliff:g> · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one">Anwani <xliff:g id="COUNT_0">%1$d</xliff:g> · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Kutoka Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Kutoka <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Kufuta anwani hii kutafuta maelezo kwenye akaunti nyingi."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Je, ungependa kufuta anwani hii?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Futa"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Usihifadhi mabadiliko"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Mwasiliani hayupo."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Anwani imeongezwa kwenye Skrini ya kwanza."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> imeongezwa kwenye Skrini ya kwanza."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Weka anwani mpya"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Ongeza anwani mpya"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Hakuna picha inayopatikana kwenye kompyuta ndogo."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Hakuna picha zinazopatikana kwenye simu."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Picha ya anwani"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Jina maalum la lebo"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Tuma simu moja kwa moja kwenye ujumbe wa sauti"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Ondoa picha"</string>
     <string name="noContacts" msgid="2228592924476426108">"Orodha yako ya anwani haina kitu"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Hakuna lebo."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Ili kuunda vikundi unahitaji akaunti"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Hakuna anwani zilizo na lebo hii"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Hakuna anwani katika akaunti hii"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Orodha yako ya anwani haina kitu"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Hitilafu imetokea wakati wa kuhifadhi anwani"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Imeshindwa kuhifadhi mabadiliko ya picha ya unayewasiliana naye"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Imeshindwa kupakia lebo"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Lebo imehifadhiwa"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Lebo imefutwa"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Lebo imeundwa"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Imeshindwa kutengeneza lebo"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Tuma ujumbe"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Chagua Anwani"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Tuma"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> unaowasiliana nao wenye nambari za simu</item>
-      <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" 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" 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="5948889261993124839">"Zote"</string>
-    <string name="callBack" msgid="5498224409038809224">"Mpigie"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Piga simu tena"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Mpigie"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Ongeza \"<xliff:g id="EMAIL">%s</xliff:g>\" kwa anwani?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"jumlisha"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ya anwani <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Majina ya anwani zako"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Hakuna programu iliyopatikana ya kushughulikia tendo hili."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Bofya ili urudi kwenye skrini iliyotangulia"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Ongeza nambari ya simu"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Ongeza anwani ya barua pepe"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Jina la lebo"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Gumzo la sauti"</string>
     <string name="video_chat" msgid="1872255818640336072">"Piga gumzo la video"</string>
-    <string name="connections" msgid="8098440723172028350">"Miunganisho"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Ongeza muunganisho"</string>
-    <string name="recent" msgid="2659189233141493004">"Za Hivi karibuni"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Masasisho vya hivi karibuni"</string>
     <string name="account_type_format" msgid="718948015590343010">"Anwani <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Akaunti ya <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Piga picha"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Piga picha mpya"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Chagua picha"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Chagua picha mpya"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Chagua zote"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Usichague zozote"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Ongeza mpya"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Ongeza shirika"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarehe"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Lebo"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Badilisha"</string>
-    <string name="description_star" msgid="2605854427360036550">"kipendwa"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Hariri anwani"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Ghairi"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Rudi nyuma"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"funga"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Ungependa kuunganisha anwani ya sasa na anwani uliyochagua?"</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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Ongeza kwa Anwani Zangu"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Saraka <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Mipangilio"</string>
     <string name="menu_settings" msgid="377929915873428211">"Mipangilio"</string>
     <string name="menu_help" msgid="1680178646764069976">"Usaidizi na maoni"</string>
-    <string name="preference_displayOptions" msgid="1341720270148252393">"Chaguo za kuonyesha"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Ongeza kwa anwani"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Ongeza kwa anwani"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Funga"</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="7122002148518724139">"Jumuisha mwaka"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Anwani"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Inapakia…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Fungua akaunti mpya"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Ongeza akaunti"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Leta"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Unda mpya…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Tupa"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Ghairi"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Je, unataka kutupa mabadiliko uliyoyafanya kukufaa?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Tafuta anwani"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Ondoa anwani"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Wasifu wangu wa ndani."</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Wasifu wangu wa <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Inaonyesha anwani zote"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Weka anwani za unaowasiliana nao salama hata ukipoteza simu yako: sawazisha kwa huduma iliyo mtandaoni."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Ongeza akaunti"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Chukua muda kidogo uongeze akaunti ya kuhifadhia nakala ya anawani zako katika Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Anwani mpya zitahifadhiwa kwenye <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Chagua akaunti ya msingi ya anwani mpya:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Angalia chache"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Hivi majuzi"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Kuhusu"</string>
-    <string name="send_message" msgid="8938418965550543196">"Tuma ujumbe"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Inaunda nakala ya kibinafsi..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Kesho"</string>
     <string name="today" msgid="8041090779381781781">"Leo"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Leo saa <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Kesho saa <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Tukio lisilokuwa na kichwa)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Weka"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Ujumbe wa Papo Hapo"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Tovuti"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Tukio"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Uhusiano"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Akaunti"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Jina"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Barua pepe"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Simu"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Bofya ili upanue kihariri cha anwani."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Bofya ili ukunje kihariri cha anwani."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"maelekezo ya kwenda mahali"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms ya hivi majuzi. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. bofya ili ujibu"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms ya hivi majuzi. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. bofya ili ujibu"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"zinazoingia"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"zinazotoka"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"ulizokosa kupokea"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"simu ya hivi karibuni. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Sehemu zingine"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Badilisha picha ya anwani"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Ongeza picha ya anwani"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Imeshindwa kufungua kihariri."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Inahifadhi kwenye"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Huwezi kubadilisha maelezo ya anwani zilizo ktk <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Kwa sasa inahifadhi katika <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Gonga mara mbili ili uchague akaunti tofauti."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Anwani (<xliff:g id="COUNT">%d</xliff:g>) zilizounganishwa</item>
-      <item quantity="one">Anwani iliyounganishwa</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Anwani <xliff:g id="COUNT">%d</xliff:g> zilizounganishwa"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g>(<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"UNGANISHA ANWANI"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"GHAIRI"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other">Nakala <xliff:g id="COUNT">%d</xliff:g> zinazoweza kurudufishwa</item>
-      <item quantity="one">Nakala 1 inayoweza kurudufishwa</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">Anwani <xliff:g id="COUNT">%d</xliff:g> zilizounganishwa</item>
-      <item quantity="one">Anwani 1 iliyounganishwa</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Anwani hii"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Anwani zinazoweza kurudufishwa"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Anwani hizi zinaweza kuwa za mtu mmoja. Unaweza kuziunganisha zote kuwa anwani moja."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Anwani zilizounganishwa"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Kutoka akaunti zako"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Chagua picha"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Kutoka kwa <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Futa <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Futa <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Futa <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Picha kutoka <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> haijateuliwa"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Picha kutoka <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> imeteuliwa"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Picha kutoka akaunti isiyojulikana haijateuliwa"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Picha kutoka akaunti isiyojulikana imeteuliwa"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Mapendekezo"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Mpya"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Fungua droo ya kusogeza"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Saraka"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Anwani za kazi"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Anwani zote"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"zaidi ya <xliff:g id="COUNT">%d</xliff:g> zimepatikana."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Mwasiliani wa haraka wa <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Hakuna jina)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Unaowasiliana nao zaidi"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Angalia anwani"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Anwani zote zilizo na nambari za simu"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Anwani za watu wa kazini"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Tazama masasisho"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Jina"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Jina la utani"</string>
-    <string name="full_name" msgid="6602579550613988977">"Jina"</string>
     <string name="name_given" msgid="4280790853455320619">"Jina la kwanza"</string>
     <string name="name_family" msgid="7466985689626017037">"Jina la mwisho"</string>
     <string name="name_prefix" msgid="59756378548779822">"Herufi za kwanza za jina"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Tuma barua pepe kwa <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Barua pepe"</string>
     <string name="postal_street" msgid="8133143961580058972">"Barabara"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Sanduku la posta"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Mtaa"</string>
     <string name="postal_city" msgid="6597491300084895548">"Jiji"</string>
     <string name="postal_region" msgid="6045263193478437672">"Jimbo"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Msimbo wa posta"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Vikundi zaidi..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Kuondoa \"<xliff:g id="GROUP">%s</xliff:g>\" \"kutoka usawazishaji pia kutaondoa anwani zisizo katika kikundi kwenye usawazishaji."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Inahifadhi chaguo za mwonyesho.."</string>
-    <string name="menu_done" msgid="796017761764190697">"Kwisha"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Ghairi"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Mwonekano maalum"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Hifadhi anwani zinazoletwa kwenye:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM kadi"</string>
@@ -514,20 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Ghairi kuhamishwa kwa <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Haikuweza kughairi kuingiza/kuhamisha vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Hitilafu isiyojulikana."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Haikuweza kufungua \"{<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Haikuweza kufungua \"{<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Haikuweza kuanzisha kihamishaji: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Hakuna anwani inayoweza kuhamishwa."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Umeondoa idhini inayohitajika."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Hitilafu imetokea wakati wa uhamisho: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Jina la faili linalohitajika ni refu sana (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Hitilafu ya I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Hakuna kumbukumbu ya kutosha. Faili inaweza kuwa kubwa mno."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Haikuweza kuchanganua vCard kwa sababu isiyotarajiwa."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Fomati haiauniwi"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Haikuweza kukusanya maelezo meta ya faili zilizopeanwa za vCard."</string>
-    <!-- String.format failed for translation -->
-    <!-- no translation found for fail_reason_failed_to_read_files (5823434810622484922) -->
-    <skip />
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Imemaliza kuhamisha <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Anwani zimehamishwa."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Anwani zimehamishwa; bofya arifa ili ushiriki anwani."</string>
@@ -536,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Inahamisha data ya anwani"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Data ya anwani inahamishwa."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Haikupata maelezo ya hifadhidata."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Hakuna anwani za kuhamishwa. Kama una anwani kwenye simu yako, baadhi ya wahudumu wa data wanaweza kosa kuruhusu anwani kuhamishwa kutoka kwa simu."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Hakuna anwani zinazoweza kuhamishwa."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Kitunzi cha vCard hakikuanza vizuri."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Imeshindwa kuhamisha"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Data ya mwasiliani haikuhamishwa.\nSababu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Inaingiza <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Haikuweza kusoma data ya vKadi"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Kusoma data ya VCard kumeghairiwa"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Imemaliza kuleta vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Kuingiza <xliff:g id="FILENAME">%s</xliff:g> kumeghairiwa"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> italetwa hivi karibuni."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Faili italetwa hivi karibuni."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Ombi la kuleta vCard limekataliwa. Tafadhali jaribu baadaye."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> itahamishwa hivi karibuni."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Faili itahamishwa baada ya dakika chache."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Anwani zitahamishwa baada ya muda mfupi."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Ombi la kuhamishwa kwa vCard limekataliwa. Jaribu tena baadaye."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"anwani"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Vcard Inaakibisha ndani ya hifadhi ya muda mfupi. Uhamisho halisi utaanza hivi karibuni."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Haikuweza kuingiza vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Anwani imepokewa kupitia NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Hamisha anwani?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Inaakibisha..."</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Inaingiza <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Inaingiza <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Tuma kwenye faili ya .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Panga kwa"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Jina la kwanza"</string>
@@ -571,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Maelezo yangu"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Weka wasifu wako"</string>
     <string name="setting_about" msgid="7014388749752042863">"Kuhusu Anwani"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Shiriki anwani zinazoonekana"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Imeshindwa kushiriki anwani zinazoonekana."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Shiriki anwani unazopenda"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Shiriki anwani zote"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Imeshindwa kushiriki anwani."</string>
@@ -582,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Hakuna anwani za kushiriki."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Anwani za kuonyesha"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Anwani za uonyesha"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Bainisha mwonekano maalum"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Badilisha mwonekano kukufaa"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Hifadhi"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Tafuta anwani"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Vipendwa"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Hakuna wawasiliani."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Futa idadi ya mara ambazo unawasiliana nao"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Chagua SIM kadi"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Dhibiti akaunti"</string>
     <string name="menu_import" msgid="6107961135813836467">"Leta"</string>
     <string name="menu_export" msgid="2658783911863503902">"Hamisha"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Nambari zilizozuiwa"</string>
@@ -597,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> kupitia <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"acha kutafuta"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Futa utafutaji"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Chaguo za onyesho la anwani"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Akaunti"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Tumia hii kupiga simu kila wakati"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Piga simu ukitumia"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Piga simu inayoambatana na dokezo"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Andika dokezo litakaloambatana na simu utakayopiga…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"TUMA na UPIGE SIMU"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. Vipengee <xliff:g id="COUNT_3">%2$d</xliff:g> havijasomwa. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. Kipengee <xliff:g id="COUNT_1">%2$d</xliff:g> hakijasomwa. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Toleo la muundo"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Leseni za programu huria"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Maelezo ya leseni za programu huria"</string>
@@ -623,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Futa"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Alama ya Dukuduku"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"Sekunde <xliff:g id="SECONDS">%s</xliff:g>"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"Dakika <xliff:g id="MINUTES">%s</xliff:g> sekunde <xliff:g id="SECONDS">%s</xliff:g>"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"Saa <xliff:g id="MINUTES_0">%s</xliff:g> dakika <xliff:g id="MINUTES_1">%s</xliff:g> sekunde <xliff:g id="SECONDS">%s</xliff:g>"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"Dakika <xliff:g id="MINUTES">%1$s</xliff:g> sekunde <xliff:g id="SECONDS">%2$s</xliff:g>"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"Saa <xliff:g id="MINUTES_0">%1$s</xliff:g> dakika <xliff:g id="MINUTES_1">%2$s</xliff:g> sekunde <xliff:g id="SECONDS">%3$s</xliff:g>"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Njia hii ya mkato imezimwa"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Anwani imeondolewa"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Leta"</string>
@@ -647,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Hakuna muunganisho"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Onyesha zingine"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Imemaliza kuleta anwani za SIM kadi"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Imeshindwa kuleta anwani"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Imeshindwa kuleta anwani kutoka kwenye SIM kadi"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Anwani zilizo kwenye SIM kadi zinaletwa"</string>
 </resources>
diff --git a/res/values-sw600dp-land/dimens.xml b/res/values-sw600dp-land/dimens.xml
index b0cfb5a..f978596 100644
--- a/res/values-sw600dp-land/dimens.xml
+++ b/res/values-sw600dp-land/dimens.xml
@@ -14,11 +14,6 @@
      limitations under the License.
 -->
 <resources>
-    <dimen name="group_editor_side_padding">64dip</dimen>
-    <dimen name="quick_contact_photo_container_height">180dip</dimen>
-    <dimen name="detail_contact_photo_size">192dip</dimen>
-    <dimen name="detail_contact_photo_margin">16dip</dimen>
-
     <!-- Height for the image for empty group view-->
     <dimen name="empty_view_image_height">180dp</dimen>
 
diff --git a/res/values-sw600dp-land/integers.xml b/res/values-sw600dp-land/integers.xml
index b6fe15a..732ea7e 100644
--- a/res/values-sw600dp-land/integers.xml
+++ b/res/values-sw600dp-land/integers.xml
@@ -27,8 +27,6 @@
     <!-- Top margin ratio for the image for empty account view -->
     <integer name="empty_account_view_image_margin_divisor">5</integer>
 
-    <integer name="contact_tile_column_count_in_favorites">3</integer>
-
     <!-- The number of characters in the snippet before we need to tokenize and ellipse. -->
     <integer name="snippet_length_before_tokenize">20</integer>
 </resources>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 8dd1ba9..48f34f2 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -14,20 +14,12 @@
      limitations under the License.
 -->
 <resources>
-    <dimen name="editor_padding_top">32dip</dimen>
     <dimen name="editor_type_label_width">122dip</dimen>
-    <dimen name="editor_add_field_label_left_padding">16dip</dimen>
-    <dimen name="detail_item_vertical_margin">16dip</dimen>
-    <dimen name="detail_item_icon_margin">8dip</dimen>
     <dimen name="shortcut_icon_size">64dip</dimen>
-    <dimen name="group_detail_border_padding">16dip</dimen>
-    <dimen name="search_view_width">400dip</dimen>
     <dimen name="contact_browser_list_item_text_size">18sp</dimen>
     <dimen name="contact_browser_list_item_gap_between_image_and_text">25dp</dimen>
     <dimen name="contact_browser_list_item_gap_between_indexer_and_image">25dp</dimen>
-    <dimen name="contact_browser_list_top_margin">18dp</dimen>
-
-    <dimen name="quick_contact_photo_container_height">360dip</dimen>
+    <dimen name="directory_header_extra_top_padding">0dp</dimen>
 
     <!-- Because the "join" screen has the vertical scroll bar on right,
       we cannot use @dimen/contact_browser_list_header_left_margin as is. -->
@@ -36,9 +28,6 @@
     <dimen name="join_header_top_margin">16dip</dimen>
     <dimen name="join_header_bottom_margin">16dip</dimen>
 
-    <!-- Account title left padding -->
-    <dimen name="account_container_left_padding">16dip</dimen>
-    <dimen name="contact_detail_list_top_padding">8dip</dimen>
     <dimen name="frequently_contacted_title_text_size">24sp</dimen>
 
     <!-- End margin of edit group title -->
@@ -56,11 +45,8 @@
     <!-- Margin offset b/w the image top and app bar bottom for no account empty view -->
     <dimen name="contacts_no_account_empty_image_offset">238dp</dimen>
 
-    <dimen name="detail_item_side_margin">0dip</dimen>
-
     <dimen name="contact_browser_list_header_left_margin">@dimen/list_visible_scrollbar_padding</dimen>
     <dimen name="contact_browser_list_header_right_margin">24dip</dimen>
-    <dimen name="contact_browser_list_top_margin">16dip</dimen>
 
     <!-- End margin of the account filter header icon -->
     <dimen name="contact_browser_list_header_icon_right_margin">22dp</dimen>
diff --git a/res/values-sw600dp/integers.xml b/res/values-sw600dp/integers.xml
index 4b2d73f..8226b49 100644
--- a/res/values-sw600dp/integers.xml
+++ b/res/values-sw600dp/integers.xml
@@ -4,8 +4,6 @@
     <!-- Top margin ratio for the image for empty group view -->
     <integer name="empty_group_view_image_margin_divisor">4</integer>
 
-    <integer name="contact_tile_column_count_in_favorites">3</integer>
-
     <!-- The number of characters in the snippet before we need to tokenize and ellipse. -->
     <!-- Yikes, there is less space on a tablet!  This makes the search experience rather
          poor. Another reason to get rid of the exist tablet layout. -->
diff --git a/res/values-sw600dp/strings.xml b/res/values-sw600dp/strings.xml
deleted file mode 100644
index c9946f9..0000000
--- a/res/values-sw600dp/strings.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~ Copyright (C) 2012 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-
-    <!-- Title for data source when creating or editing a contact that doesn't
-         belong to a specific account.  This contact will only exist on the phone
-         and will not be synced. [CHAR LIMIT=20] -->
-    <string name="account_phone">Device</string>
-
-    <!-- This error message shown when the user actually have no contact
-         (e.g. just after data-wiping), or, data providers of the contact list prohibits their
-         contacts from being exported to outside world via vcard exporter, etc. [CHAR LIMIT=NONE] -->
-    <string name="composer_has_no_exportable_contact">There are no exportable contacts. If you do have contacts on your tablet, some data providers may not allow the contacts to be exported from the tablet.</string>
-
-</resources>
diff --git a/res/values-sw600dp/styles.xml b/res/values-sw600dp/styles.xml
deleted file mode 100644
index 11dc54e..0000000
--- a/res/values-sw600dp/styles.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources>
-
-    <style name="DetailActivityTheme" parent="@android:Theme.Dialog">
-        <item name="android:windowContentOverlay">@null</item>
-    </style>
-
-    <style name="DirectoryHeader" parent="PeopleTheme">
-        <item name="android:paddingTop">0dip</item>
-
-        <item name="android:background">@android:color/transparent</item>
-    </style>
-
-</resources>
diff --git a/res/values-sw720dp-land/dimens.xml b/res/values-sw720dp-land/dimens.xml
deleted file mode 100644
index baa8498..0000000
--- a/res/values-sw720dp-land/dimens.xml
+++ /dev/null
@@ -1,21 +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.
--->
-<resources>
-    <dimen name="group_detail_border_padding">32dip</dimen>
-    <dimen name="group_editor_side_padding">64dip</dimen>
-    <dimen name="contact_detail_list_top_padding">32dip</dimen>
-    <dimen name="detail_contact_photo_size">256dip</dimen>
-</resources>
diff --git a/res/values-sw720dp-land/integers.xml b/res/values-sw720dp-land/integers.xml
index a83cdff..a0783c2 100644
--- a/res/values-sw720dp-land/integers.xml
+++ b/res/values-sw720dp-land/integers.xml
@@ -15,8 +15,6 @@
   limitations under the License.
   -->
 <resources>
-    <integer name="contact_tile_column_count_in_favorites">4</integer>
-
     <!-- The number of characters in the snippet before we need to tokenize and ellipse. -->
     <integer name="snippet_length_before_tokenize">30</integer>
 </resources>
diff --git a/res/values-sw720dp-land/styles.xml b/res/values-sw720dp-land/styles.xml
deleted file mode 100644
index 9fa3d08..0000000
--- a/res/values-sw720dp-land/styles.xml
+++ /dev/null
@@ -1,18 +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.
--->
-<resources>
-    <style name="GroupMembershipSizeTextAppearance" parent="@android:style/TextAppearance.Medium" />
-</resources>
diff --git a/res/values-sw720dp/dimens.xml b/res/values-sw720dp/dimens.xml
index 264baa4..1ab7ab8 100644
--- a/res/values-sw720dp/dimens.xml
+++ b/res/values-sw720dp/dimens.xml
@@ -17,9 +17,6 @@
     <dimen name="editor_type_label_width">180dip</dimen>
     <dimen name="editor_round_button_padding_left">8dip</dimen>
     <dimen name="editor_round_button_padding_right">8dip</dimen>
-    <dimen name="group_editor_side_padding">16dip</dimen>
-    <dimen name="quick_contact_photo_container_height">360dip</dimen>
-    <dimen name="contact_picker_contact_list_min_height">650dip</dimen>
 
     <!-- When QC is uncollapsed, the title has this much margin on its left and right -->
     <dimen name="quickcontact_title_initial_margin">32dp</dimen>
diff --git a/res/values-sw720dp/integers.xml b/res/values-sw720dp/integers.xml
index 93bbc68..05c97e1 100644
--- a/res/values-sw720dp/integers.xml
+++ b/res/values-sw720dp/integers.xml
@@ -21,8 +21,6 @@
          QuickContact -->
     <integer name="contact_list_card_layout_weight">81</integer>
 
-    <integer name="contact_tile_column_count_in_favorites">2</integer>
-
     <!-- The number of characters in the snippet before we need to tokenize and ellipse. -->
     <integer name="snippet_length_before_tokenize">20</integer>
 </resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index f187213..0956cc1 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"தொடர்புகள்"</string>
     <string name="contactsList" msgid="8661624236494819731">"தொடர்புகள்"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"தொடர்பைச் சேர்"</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="shortcutActivityTitle" msgid="1504383567778497348">"தொடர்பைத் தேர்வுசெய்க"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"தொடர்பில் சேர்"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"தொடர்பைத் தேர்வுசெய்யவும்"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"தேர்ந்தெடுக்கவும்"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"புதிய தொடர்பை உருவாக்கவும்"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"தொடர்பு விவரங்கள்"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"நீக்கு"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"படத்தை மாற்று"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"குறுக்குவழியை உருவாக்கு"</string>
-    <string name="menu_call" msgid="3992595586042260618">"தொடர்பை அழை"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"தொடர்பிற்கு உரைச் செய்தியை அனுப்பு"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"தொடர்பைப் பிரி"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"தொடர்புகளை அகற்று"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"லேபிளின் பெயரை மாற்று"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"தொடர்புகளைத் தேர்ந்தெடு"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"தொடர்புகளைச் சேர்"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"லேபிளிலிருந்து அகற்று"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"தொடர்பைச் சேர்"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"புதியதை உருவாக்கு…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"லேபிளை உருவாக்கு"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"பல தொடர்புகளிலிருந்து இந்தத் தொடர்பை அகற்றவா?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"தொடர்பை அகற்று"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"நீங்கள் ஏற்கனவே செய்த மாற்றங்களைச் சேமித்து, பல தொடர்புகளிலிருந்து இந்தத் தொடர்பை அகற்றவா?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"சேமி"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"தொடர்புகளை இணைத்தல்"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> இணைக்கப்பட்டது"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> தொடர்பு</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> தொடர்புகள் · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> தொடர்பு · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> தொடர்புகள் · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> தொடர்பு · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google கணக்கிலிருந்து"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> இலிருந்து"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"தொடர்பை நீக்கினால், பல கணக்குகளிலிருக்கும் விவரங்கள் நீக்கப்படும்."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"தொடர்பை நீக்கவா?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"நீக்கு"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"மாற்றங்களை நிராகரி"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"தொடர்பு இல்லை."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"தொடர்பு முகப்புத் திரையில் சேர்க்கப்பட்டது."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> என்ற தொடர்பு முகப்புத் திரையில் சேர்க்கப்பட்டது."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"புதிய தொடர்பை உருவாக்கவும்"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"புதிய தொடர்பை உருவாக்கவும்"</string>
     <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="2228592924476426108">"தொடர்புகள் பட்டியல் காலியாக உள்ளது"</string>
-    <string name="noGroups" msgid="4607906327968232225">"லேபிள்கள் இல்லை."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"குழுக்களை உருவாக்க கணக்கு அவசியம்."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"இந்த லேபிளைக் கொண்ட தொடர்புகள் இல்லை"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"இந்தக் கணக்கில் தொடர்புகள் இல்லை"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"தொடர்புகள் பட்டியல் காலியாக உள்ளது"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"தொடர்பைச் சேமிப்பதில் பிழை"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"தொடர்புப் பட மாற்றங்களைச் சேமிக்க முடியவில்லை"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"லேபிளை ஏற்ற முடியவில்லை"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"லேபிள் சேமிக்கப்பட்டது"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"லேபிள் நீக்கப்பட்டது"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"லேபிள் உருவாக்கப்பட்டது"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"லேபிளை உருவாக்க முடியவில்லை"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"செய்தி அனுப்பு"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"தொடர்புகளைத் தேர்வுசெய்"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"அனுப்பு"</string>
-    <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" 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" 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="5948889261993124839">"எல்லாம்"</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_plus_button" msgid="515164827856229880">"சேர்"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> தொடர்புகளில் <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"உங்கள் தொடர்புகளின் பெயர்கள்"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"லேபிளின் பெயர்"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> கணக்கு"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"லேபிளைச் சேர்"</string>
-    <string name="change_photo" msgid="8530597935483526383">"மாற்று"</string>
-    <string name="description_star" msgid="2605854427360036550">"பிடித்தது"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"தொடர்பைத் திருத்து"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"ரத்துசெய்யும் பொத்தான்"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"முந்தையதற்குச் செல்லும் பொத்தான்"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"மூடும்"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"தேர்ந்தெடுத்த தொடர்புடன் தற்போதைய தொடர்பை இணைக்கவா?"</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="activity_title_settings" msgid="5464130076132770781">"அமைப்பு"</string>
     <string name="menu_settings" msgid="377929915873428211">"அமைப்பு"</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>
     <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="7122002148518724139">"ஆண்டைச் சேர்"</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="4347232421410561500">"கணக்கைச் சேர்"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"இறக்கு"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"புதியதை உருவாக்கு…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"நிராகரி"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ரத்துசெய்"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"தனிப்பயனாக்கங்களை நிராகரிக்கவா?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"தொடர்புகளில் தேடுக"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"தொடர்புகளை அகற்று"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"எனது சுயவிவரம்"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"எனது <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> சுயவிவரம்"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"எல்லா தொடர்புகளையும் காட்டுகிறது"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"மொபைலை தொலைத்தாலும் தொடர்புகளைப் பாதுகாப்புடன் வைத்திருக்கலாம்: ஆன்லைன் சேவையுடன் ஒத்திசைக்கவும்."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"கணக்கைச் சேர்"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"உங்கள் தொடர்புகளை Googleக்குக் காப்புப் பிரதி எடுக்கும் கணக்கைச் சேர்க்க ஒரு நிமிடம் ஒதுக்கவும்."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"புதிய தொடர்புகள் <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> இல் சேமிக்கப்படும்."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"புதிய தொடர்புகளுக்கான இயல்பு கணக்கைத் தேர்வுசெய்க:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"குறைவாகக் காட்டு"</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="288549957278065542">"தனிப்பட்ட நகலை உருவாக்குகிறது…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"சமீபத்திய sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"சமீபத்திய அழைப்பு. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"மேலும் புலங்கள்"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"தொடர்புப் படத்தை மாற்றும்"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"தொடர்புப் படத்தைச் சேர்க்கும்"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"எடிட்டரைத் திறக்க முடியவில்லை."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"இதில் சேமிக்கிறது:"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> இன் தொடர்புத் தகவலைத் திருத்த முடியாது"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"தற்போது <xliff:g id="ACCOUNT_NAME">%s</xliff:g> இல் சேமிக்கிறது. வேறொரு கணக்கைத் தேர்ந்தெடுக்க, இருமுறை தட்டவும்."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">இணைத்த தொடர்புகள் (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">இணைத்த தொடர்பு</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> இணைக்கப்பட்ட தொடர்புகள்"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"தொடர்புகளை இணை"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ரத்துசெய்"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> சாத்தியமுள்ள நகல்கள்</item>
-      <item quantity="one">1 சாத்தியமுள்ள நகல்</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> இணைக்கப்பட்ட தொடர்புகள்</item>
-      <item quantity="one">1 இணைக்கப்பட்ட தொடர்பு</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"இந்தத் தொடர்பு"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"சாத்தியமுள்ள நகல்கள்"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"இவை ஒரே பயனருடையதாக இருக்கக்கூடும். அவற்றை ஒரே தொடர்பில் இணைக்கலாம்."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"இணைத்த தொடர்புகள்"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"உங்கள் கணக்குகளில் இருந்து"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"படத்தைத் தேர்வுசெய்க"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> இலிருந்து"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>ஐ நீக்கு"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>ஐ நீக்கு"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>ஐ நீக்கு"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> வழங்கிய படம் தேர்ந்தெடுக்கப்படவில்லை"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> வழங்கிய படம் தேர்ந்தெடுக்கப்பட்டது"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"அறியப்படாத கணக்கிலிருந்து படம் தேர்ந்தெடுக்கப்படவில்லை"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"அறியப்படாத கணக்கிலிருந்து படம் தேர்ந்தெடுக்கப்பட்டது"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"பரிந்துரைகள்"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"புதிது"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"வழிசெலுத்தல் டிராயரைத் திறக்கும்"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"கோப்பகம்"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"பணிக் கோப்பகம்"</string>
     <string name="local_search_label" msgid="2551177578246113614">"எல்லா தொடர்புகளும்"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> க்கும் மேற்பட்டவை கண்டறியப்பட்டன."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> க்கான உடனடித் தொடர்பு"</string>
     <string name="missing_name" msgid="8745511583852904385">"(பெயர் இல்லை)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"அடிக்கடி தொடர்புகொண்டவர்கள்"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"தொடர்பைக் காட்டு"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"மொபைல் எண்களுடனான எல்லா தொடர்புகளும்"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"பணியின் சுயவிவரத் தொடர்புகள்"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"புதுப்பிப்புகளைக் காட்டு"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"சிம்"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"பெயர்"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"செல்லப்பெயர்"</string>
-    <string name="full_name" msgid="6602579550613988977">"பெயர்"</string>
     <string name="name_given" msgid="4280790853455320619">"பெயரின் முற்பகுதி"</string>
     <string name="name_family" msgid="7466985689626017037">"பெயரின் பிற்பகுதி"</string>
     <string name="name_prefix" msgid="59756378548779822">"பெயரின் முன்னொட்டு"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>க்கு மின்னஞ்சல் அனுப்பு"</string>
     <string name="email" msgid="5668400997660065897">"மின்னஞ்சல்"</string>
     <string name="postal_street" msgid="8133143961580058972">"தெரு"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"அஞ்சல் பெட்டி"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"சுற்றுப்புறங்கள்"</string>
     <string name="postal_city" msgid="6597491300084895548">"நகரம்"</string>
     <string name="postal_region" msgid="6045263193478437672">"மாநிலம்"</string>
     <string name="postal_postcode" msgid="572136414136673751">"அஞ்சல் எண்"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"மேலும் குழுக்கள்…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"ஒத்திசைவிலிருந்து \"<xliff:g id="GROUP">%s</xliff:g>\" ஐ அகற்றுவது, ஒத்திசைவிலிருந்து குழுவாக்கப்படாத எல்லா தொடர்புகளையும் அகற்றும்."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"காட்சி விருப்பங்களைச் சேமிக்கிறது…"</string>
-    <string name="menu_done" msgid="796017761764190697">"முடிந்தது"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"ரத்துசெய்"</string>
     <string name="listCustomView" msgid="1840624396582117590">"தனிப்பயனாக்கிய காட்சி"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"இறக்கிய தொடர்புகளை இதில் சேமிக்கவும்:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"சிம் கார்டு"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> இன் ஏற்றுமதியை ரத்துசெய்யவா?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard இன் இறக்குமதி/ஏற்றுமதியை ரத்துசெய்ய முடியவில்லை"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"தெரியாத பிழை."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" ஐத் திறக்க முடியவில்லை: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" ஐத் திறக்க முடியவில்லை: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ஏற்றுமதியைத் தொடங்க முடியவில்லை: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ஏற்றுமதி செய்யக்கூடிய தொடர்பு இல்லை."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"தேவைப்படும் அனுமதியை முடக்கியுள்ளீர்கள்."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"ஏற்றுமதி செய்யும்போது பிழை: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"தேவையான கோப்பின் பெயர் மிகவும் நீளமாக உள்ளது (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O பிழை"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"போதுமான நினைவகம் இல்லை. கோப்பு மிகவும் பெரியதாக இருக்கலாம்."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"எதிர்பாராதவிதமாக vCard ஐப் பாகுபடுத்த முடியவில்லை."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"வடிவம் ஆதரிக்கப்படவில்லை."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"வழங்கப்பட்ட vCard கோப்பின்(களின்) மெட்டா தகவலைச் சேகரிக்க முடியவில்லை."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"ஒன்று அல்லது அதற்கு மேற்பட்ட கோப்புகளை ஏற்றுமதி செய்ய முடியவில்லை (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> ஏற்றப்பட்டது."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"தொடர்புகள் ஏற்றப்பட்டன."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"தொடர்புகள் ஏற்றப்பட்டன. தொடர்புகளைப் பகிர, அறிவிப்பைக் கிளிக் செய்யவும்."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"தொடர்பு தரவை ஏற்றுமதி செய்கிறது"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"தொடர்பின் தரவு ஏற்றப்படுகிறது."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"தரவுத்தளத் தகவலைப் பெற முடியவில்லை."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"ஏற்றுமதி செய்யத்தக்க தொடர்புகள் இல்லை. மொபைலில் தொடர்புகள் இல்லை எனில், மொபைலிலிருந்து தொடர்புகளை ஏற்றுமதி செய்வதற்குச் சில தரவு வழங்குநர்கள் அனுமதிக்காமல் போகலாம்."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ஏற்றத்தக்க தொடர்புகள் இல்லை."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard தொகுப்பான் முறையாகத் தொடங்கவில்லை."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ஏற்றுமதி செய்ய முடியவில்லை"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"தொடர்பு தரவு ஏற்றுமதி செய்யப்படவில்லை.\nகாரணம்: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> ஐ இறக்குமதி செய்கிறது"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard தரவைப் படிக்க முடியவில்லை"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard தரவைப் படிப்பது ரத்துசெய்யப்பட்டது"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> இறக்கப்பட்டது"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> ஐ இறக்குமதிசெய்வது ரத்துசெய்யப்பட்டது"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> விரைவில் இறக்குமதி செய்யப்படும்."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"கோப்பு விரைவில் இறக்குமதி செய்யப்படும்."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard இன் இறக்குமதி கோரிக்கை நிராகரிக்கப்பட்டது. பிறகு முயற்சிக்கவும்."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> விரைவில் ஏற்றுமதி செய்யப்படும்."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"கோப்பு விரைவில் ஏற்றப்படும்."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"கூடிய விரைவில் தொடர்புகள் ஏற்றப்படும்."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard இன் ஏற்றுமதி கோரிக்கை நிராகரிக்கப்பட்டது. பிறகு முயற்சிக்கவும்."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"தொடர்பு"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard(களை) ஐ அகச் சேமிப்பிடத்தில் தற்காலிகமாகச் சேமிக்கிறது. அசல் இறக்குமதி உடனடியாக தொடங்கப்படும்."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard ஐ இறக்குமதி செய்ய முடியவில்லை."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC வழியாக தொடர்பு பெறப்பட்டது"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"தொடர்புகளை ஏற்றுமதி செய்யவா?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"தற்காலிகமாகச் சேமித்தல்"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> ஐ இறக்குமதி செய்கிறது: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> ஐ இறக்குமதி செய்கிறது: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf கோப்பிற்கு ஏற்று"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"இதன்படி வரிசைப்படுத்து:"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"பெயரின் முற்பகுதி"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"எனது தகவல்"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"சுயவிவரத்தை அமைக்கவும்"</string>
     <string name="setting_about" msgid="7014388749752042863">"தொடர்புகள் - ஓர் அறிமுகம்"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"தெரியும் தொடர்புகளைப் பகிர்க"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"தெரியும் தொடர்புகளைப் பகிர முடியவில்லை."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"பிடித்த தொடர்புகளைப் பகிர்"</string>
     <string name="share_contacts" msgid="8109287987498711664">"எல்லா தொடர்புகளையும் பகிர்"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"தொடர்புகளைப் பகிர முடியவில்லை."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"பகிர, தொடர்புகள் இல்லை."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"காட்ட வேண்டிய தொடர்புகள்"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"காட்ட வேண்டிய தொடர்புகள்"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"தனிப்பயனாக்கிய காட்சியை வரையறு"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"காட்சியைத் தனிப்பயனாக்குக"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"சேமி"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"தொடர்புகளில் தேடுக"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"விருப்பமானவை"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"தொடர்புகள் இல்லை."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"அடிக்கடி தொடர்புகொண்டவர்களை அழி"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"சிம் ஐத் தேர்ந்தெடுக்கவும்"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"கணக்குகளை நிர்வகி"</string>
     <string name="menu_import" msgid="6107961135813836467">"இறக்கு"</string>
     <string name="menu_export" msgid="2658783911863503902">"ஏற்று"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"தடுக்கப்பட்ட எண்கள்"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> வழியாக <xliff:g id="DATE">%1$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"தேடுவதை நிறுத்தும்"</string>
     <string name="description_clear_search" msgid="688023606766232904">"தேடலை அழி"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"தொடர்பின் காட்சி விருப்பத்தேர்வு"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"கணக்கு"</string>
     <string name="set_default_account" msgid="4311613760725609801">"அழைப்புகளுக்கு எப்போதும் இதைப் பயன்படுத்து"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"இதன் மூலம் அழை"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"குறிப்புடன் அழை"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"அழைப்புடன் சேர்த்து அனுப்ப, குறிப்பை உள்ளிடவும்…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"அனுப்பு &amp; அழை"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. படிக்காதவை (<xliff:g id="COUNT_3">%2$d</xliff:g>). </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. படிக்காதது (<xliff:g id="COUNT_1">%2$d</xliff:g>). </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"பதிப்பு எண்"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"ஓப்பன் சோர்ஸ் உரிமங்கள்"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ஓப்பன் சோர்ஸ் மென்பொருளுக்கான உரிம விவரங்கள்"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"நீக்கும்"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"முப்புள்ளி"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> வி"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> நி <xliff:g id="SECONDS">%s</xliff:g> வி"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ம <xliff:g id="MINUTES_1">%s</xliff:g> நி <xliff:g id="SECONDS">%s</xliff:g> வி"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> நி <xliff:g id="SECONDS">%2$s</xliff:g> வி"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ம <xliff:g id="MINUTES_1">%2$s</xliff:g> நி <xliff:g id="SECONDS">%3$s</xliff:g> வி"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"இந்தக் குறுக்குவழி முடக்கப்பட்டது"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"தொடர்பு அகற்றப்பட்டது"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"இறக்கு"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"இணைப்பு இல்லை"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"சிம்"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"மேலும் காட்டு"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"சிம் கார்டு இறக்கப்பட்டது"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"இறக்க முடியவில்லை"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"சிம் கார்டிலிருந்து தொடர்புகளை இறக்க முடியவில்லை"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"சிம் கார்டை இறக்குகிறது"</string>
 </resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 81903a3..cd3ba10 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"పరిచయాలు"</string>
     <string name="contactsList" msgid="8661624236494819731">"పరిచయాలు"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"పరిచయాన్ని జోడించండి"</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="shortcutActivityTitle" msgid="1504383567778497348">"పరిచయాన్ని ఎంచుకోండి"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"పరిచయానికి జోడించండి"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"పరిచయాన్ని ఎంచుకోండి"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"ఎంచుకోండి"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"కొత్త పరిచయాన్ని సృష్టించండి"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"పరిచయ వివరాలు"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"తొలగించు"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"ఫోటోను మార్చు"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"సత్వరమార్గాన్ని సృష్టించు"</string>
-    <string name="menu_call" msgid="3992595586042260618">"పరిచయానికి కాల్ చేయి"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"పరిచయానికి వచనం పంపు"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"వేరు చేయి"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"పరిచయాలను తీసివేయి"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"లేబుల్ పేరును మార్చు"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"పరిచయాలను ఎంచుకోండి"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"పరిచయాలను జోడించు"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"లేబుల్ నుండి తీసివేయి"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"పరిచయాన్ని జోడించు"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"కొత్తది సృష్టించు…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"లేబుల్‌ను సృష్టించు"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"ఈ పరిచయాన్ని పలు పరిచయాలుగా వేరు చేయాలా?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"వేరు చేయి"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"మీరు ఇప్పటికే చేసిన మార్పులను సేవ్ చేసి, ఈ పరిచయాన్ని పలు పరిచయాలుగా వేరు చేయాలనుకుంటున్నారా?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"సేవ్ చేయి"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"పరిచయాలను లింక్ చేయండి"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"మీరు <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> లింక్ చేయబడ్డారు"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> పరిచయం</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> పరిచయాలు · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> పరిచయం · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> పరిచయాలు · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> పరిచయం · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google అందించినవి"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> అందించినవి"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"ఈ పరిచయాన్ని తొలగించడం వలన పలు ఖాతాల నుండి వివరాలు తొలగించబడతాయి."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"ఈ పరిచయాన్ని తొలగించాలా?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"తొలగించు"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"మార్పులను విస్మరించు"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"పరిచయం ఉనికిలో లేదు."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"పరిచయం హోమ్ స్క్రీన్‌కు జోడించబడింది."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> హోమ్ స్క్రీన్‌కు జోడించబడింది."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"కొత్త పరిచయాన్ని సృష్టించండి"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"కొత్త పరిచయాన్ని సృష్టించండి"</string>
     <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="2228592924476426108">"మీ పరిచయాల జాబితా ఖాళీగా ఉంది"</string>
-    <string name="noGroups" msgid="4607906327968232225">"లేబుల్‌లు లేవు."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"సమూహాలను సృష్టించడానికి మీకు ఖాతా అవసరం."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"ఈ లేబుల్‌తో పరిచయాలు ఏవీ లేవు"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"ఈ ఖాతాలో పరిచయాలు ఏవీ లేవు"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"మీ పరిచయాల జాబితా ఖాళీగా ఉంది"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"పరిచయాన్ని సేవ్ చేయడంలో లోపం ఏర్పడింది"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"పరిచయం ఫోటో మార్పులను సేవ్ చేయలేకపోయింది"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"లేబుల్‌ను లోడ్ చేయడంలో విఫలమైంది"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"లేబుల్ సేవ్ చేయబడింది"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"లేబుల్ తొలగించబడింది"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"లేబుల్ సృష్టించబడింది"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"లేబుల్‌ను సృష్టించడం సాధ్యపడదు"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"సందేశాన్ని పంపు"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"పరిచయాలను ఎంచుకోండి"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"పంపు"</string>
-    <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" 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" 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="5948889261993124839">"అన్నీ"</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_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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"లేబుల్ పేరు"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> ఖాతా"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"లేబుల్"</string>
-    <string name="change_photo" msgid="8530597935483526383">"మార్చు"</string>
-    <string name="description_star" msgid="2605854427360036550">"ఇష్టంగా గుర్తించు"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"పరిచయాన్ని సవరించు"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"రద్దు చేస్తుంది"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"వెనుకకు వెళ్తుంది"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"మూసివేస్తుంది"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"ప్రస్తుత పరిచయాన్ని ఎంచుకున్న పరిచయంతో లింక్ చేయాలా?"</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="activity_title_settings" msgid="5464130076132770781">"సెట్టింగ్‌లు"</string>
     <string name="menu_settings" msgid="377929915873428211">"సెట్టింగ్‌లు"</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>
     <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="7122002148518724139">"సంవత్సరాన్ని చేర్చు"</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="4347232421410561500">"ఖాతాను జోడించు"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"దిగుమతి చేయి"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"కొత్తది సృష్టించు…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"విస్మరించు"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"రద్దు చేయి"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"అనుకూలీకరణలను విస్మరించాలా?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"పరిచయాలను శోధించండి"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"పరిచయాలను తీసివేయండి"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"నా స్థానిక ప్రొఫైల్"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"నా <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ప్రొఫైల్"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"అన్ని పరిచయాలను ప్రదర్శిస్తోంది"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"మీరు మీ ఫోన్‌ను పోగొట్టుకున్నప్పటికీ మీ పరిచయాలను సురక్షితంగా ఉంచుకోండి: ఆన్‌లైన్ సేవతో సమకాలీకరించండి."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ఖాతాను జోడించండి"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"మీ పరిచయాలను Googleకు బ్యాకప్ చేసే ఖాతాను జోడించడానికి ఒక నిమిషం కేటాయించండి."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"కొత్త పరిచయాలు <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>కి సేవ్ చేయబడతాయి."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"కొత్త పరిచయాల కోసం డిఫాల్ట్ ఖాతాను ఎంచుకోండి:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"తక్కువ చూడండి"</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="288549957278065542">"వ్యక్తిగత కాపీని సృష్టిస్తోంది..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"ఇటీవలి sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"ఇటీవలి కాల్. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"మరిన్ని ఫీల్డ్‌లు"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"పరిచయ ఫోటోను మారుస్తుంది"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"పరిచయ ఫోటోను జోడిస్తుంది"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"ఎడిటర్‌ను తెరవడం విఫలమైంది."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"దీనికి సేవ్ చేయబడుతోంది"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g>లోని సంప్రదింపు సమాచారం సవరించగలిగే విధంగా లేదు"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"ప్రస్తుతం <xliff:g id="ACCOUNT_NAME">%s</xliff:g>కి సేవ్ చేస్తోంది. వేరే ఖాతాను ఎంచుకోవడానికి రెండుసార్లు నొక్కండి."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">లింక్ చేయబడిన పరిచయాలు (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">లింక్ చేయబడిన పరిచయం</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> లింక్ చేయబడిన పరిచయాలు"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"పరిచయాలను లింక్ చేయి"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"రద్దు చేయి"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> సంభావ్య నకిలీలు</item>
-      <item quantity="one">1 సంభావ్య నకిలీ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> లింక్ చేయబడిన పరిచయాలు</item>
-      <item quantity="one">1 లింక్ చేయబడిన పరిచయం</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"ఈ పరిచయం"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"సంభావ్య నకిలీలు"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"ఈ పరిచయాలు ఒకే వ్యక్తికి సంబంధించినవి అయ్యి ఉండవచ్చు. మీరు వాటిని ఒకే పరిచయంగా లింక్ చేయవచ్చు."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"లింక్ చేయబడిన పరిచయాలు"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"మీ ఖాతాల నుండి"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"ఫోటోను ఎంచుకోండి"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> నుండి"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>ని తొలగిస్తుంది"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>ని తొలగిస్తుంది"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>ని తొలగిస్తుంది"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>లోని ఫోటో ఎంచుకోబడలేదు"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>లోని ఫోటో ఎంచుకోబడింది"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"తెలియని ఖాతా నుండి అందించబడిన ఫోటో ఎంచుకోబడలేదు"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"తెలియని ఖాతా నుండి అందించబడిన ఫోటో ఎంచుకోబడింది"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"సూచనలు"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"కొత్తది"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"నావిగేషన్ డ్రాయర్‌ను తెరుస్తుంది"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"డైరెక్టరీ"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"కార్యాలయ డైరెక్టరీ"</string>
     <string name="local_search_label" msgid="2551177578246113614">"అన్ని పరిచయాలు"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> కంటే ఎక్కువ కనుగొనబడ్డాయి."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> కోసం త్వరిత సంప్రదింపు"</string>
     <string name="missing_name" msgid="8745511583852904385">"(పేరు లేదు)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"తరచుగా సంప్రదించబడినవి"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"పరిచయాన్ని వీక్షించండి"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"ఫోన్ నంబర్‌లు గల అన్ని పరిచయాలు"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"కార్యాలయ ప్రొఫైల్ పరిచయాలు"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"తాజా విషయాలను వీక్షించండి"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"పేరు"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"మారుపేరు"</string>
-    <string name="full_name" msgid="6602579550613988977">"పేరు"</string>
     <string name="name_given" msgid="4280790853455320619">"మొదటి పేరు"</string>
     <string name="name_family" msgid="7466985689626017037">"చివరి పేరు"</string>
     <string name="name_prefix" msgid="59756378548779822">"పేరు ఆదిప్రత్యయం"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g>కి ఇమెయిల్ పంపు"</string>
     <string name="email" msgid="5668400997660065897">"ఇమెయిల్ చేయండి"</string>
     <string name="postal_street" msgid="8133143961580058972">"వీధి"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"PO పెట్టె"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"పరిసరాలు"</string>
     <string name="postal_city" msgid="6597491300084895548">"నగరం"</string>
     <string name="postal_region" msgid="6045263193478437672">"రాష్ట్రం"</string>
     <string name="postal_postcode" msgid="572136414136673751">"జిప్ కోడ్"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"మరిన్ని సమూహాలు…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"సమకాలీకరణ నుండి \"<xliff:g id="GROUP">%s</xliff:g>\"ని తీసివేయడం వలన సమకాలీకరణ నుండి సమూహం చేయబడని పరిచయాలు కూడా తీసివేయబడతాయి."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"ప్రదర్శన ఎంపికలను సేవ్ చేస్తోంది…"</string>
-    <string name="menu_done" msgid="796017761764190697">"పూర్తయింది"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"రద్దు చేయి"</string>
     <string name="listCustomView" msgid="1840624396582117590">"అనుకూలీకృత వీక్షణ"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"దిగుమతి చేసిన పరిచయాలను దీనిలో సేవ్ చేయి:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM కార్డ్"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> యొక్క ఎగుమతిని రద్దు చేయాలా?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard దిగుమతి/ఎగుమతిని రద్దు చేయడం సాధ్యపడలేదు"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"తెలియని లోపం."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\"ని తెరవడం సాధ్యపడలేదు: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\"ని తెరవడం సాధ్యపడలేదు: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"ఎక్స్‌పోర్టర్‌ను ప్రారంభించడం సాధ్యపడలేదు: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ఎగమతి చేయగల పరిచయం లేదు."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"మీరు అవసరమైన అనుమతిని నిలిపివేసారు."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"ఎగుమతి సమయంలో లోపం సంభవించింది: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"అవసరమైన ఫైల్ పేరు (\"<xliff:g id="FILENAME">%s</xliff:g>\") చాలా పెద్దదిగా ఉంది."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O లోపం"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"తగినంత మెమరీ లేదు. ఫైల్ చాలా పెద్దదిగా ఉండవచ్చు."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"ఊహించని కారణంగా vCardను అన్వయించడం సాధ్యపడలేదు."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"ఆకృతికి మద్దతు లేదు."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"అందించిన vCard ఫైల్(లు) యొక్క మెటా డేటా సమాచారాన్ని సేకరించడం సాధ్యపడలేదు."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"ఒకటి లేదా అంతకంటే ఎక్కువ ఫైల్‌లను (%s) దిగుమతి చేయడం సాధ్యపడలేదు."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g>ని ఎగుమతి చేయడం పూర్తయింది."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"పరిచయాలను ఎగుమతి చేయడం పూర్తయింది."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"పరిచయాలను ఎగుమతి చేయడం పూర్తయింది, పరిచయాలను భాగస్వామ్యం చేయడానికి నోటిఫికేషన్‌ను క్లిక్ చేయండి."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"పరిచయ డేటాను ఎగుమతి చేస్తోంది"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"పరిచయ డేటా ఎగుమతి చేయబడుతోంది."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"డేటాబేస్ సమాచారాన్ని పొందడం సాధ్యపడలేదు."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"ఎగుమతి చేయదగిన పరిచయాలు ఏవీ లేవు. మీరు మీ ఫోన్‌లో పరిచయాలు కలిగి ఉన్నప్పటికీ, కొందరు డేటా ప్రదాతలు పరిచయాలను ఫోన్ నుండి ఎగుమతి చేయడానికి అనుమతించకపోవచ్చు."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ఎగుమతి చేయదగిన పరిచయాలు ఏవీ లేవు."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard కంపోజర్ సరిగ్గా ప్రారంభించబడలేదు."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ఎగుమతి చేయడం సాధ్యపడలేదు"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"పరిచయ డేటా ఎగుమతి చేయబడలేదు.\nకారణం: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g>ని దిగుమతి చేస్తోంది"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard డేటాను చదవడం సాధ్యపడలేదు"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard డేటాను చదవడం రద్దు చేయబడింది"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g>ని దిగుమతి చేయడం పూర్తయింది"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g>ని దిగుమతి చేయడం రద్దు చేయబడింది"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> కొద్దిసేపట్లో దిగుమతి చేయబడుతుంది."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ఫైల్ కొద్దిసేపట్లో దిగుమతి చేయబడుతుంది."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard దిగుమతి అభ్యర్థన తిరస్కరించబడింది. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> కొద్దిసేపట్లో ఎగుమతి చేయబడుతుంది."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ఫైల్ కాసేపట్లో ఎగుమతి చేయబడుతుంది."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"పరిచయాలు కొద్ది సేపట్లో ఎగుమతి చేయబడతాయి."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard ఎగుమతి అభ్యర్థన తిరస్కరించబడింది. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"పరిచయం"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard(ల)ను స్థానిక తాత్కాలిక నిల్వకు కాష్ చేస్తోంది. అసలు దిగుమతి కొద్దిసేపట్లో ప్రారంభమవుతుంది."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCardని దిగుమతి చేయడం సాధ్యపడలేదు."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"పరిచయం NFC ద్వారా స్వీకరించబడింది"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"పరిచయాలను ఎగుమతి చేయాలా?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"కాష్ చేస్తోంది"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="TOTAL_NUMBER">%s</xliff:g>లో <xliff:g id="CURRENT_NUMBER">%s</xliff:g> దిగుమతి చేయబడుతోంది: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>లో <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> దిగుమతి చేయబడుతోంది: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf ఫైల్‌కు ఎగుమతి చేయి"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"ఇలా క్రమబద్ధీకరించు"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"మొదటి పేరు"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"నా సమాచారం"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"మీ ప్రొఫైల్‌ను సెటప్ చేయండి"</string>
     <string name="setting_about" msgid="7014388749752042863">"పరిచయాల గురించి"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"కనిపించే పరిచయాలను భాగస్వామ్యం చేయండి"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"కనిపించే పరిచయాలను భాగస్వామ్యం చేయడంలో విఫలమైంది."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"ఇష్టమైన పరిచయాలను భాగస్వామ్యం చేయి"</string>
     <string name="share_contacts" msgid="8109287987498711664">"పరిచయాలన్నీ భాగస్వామ్యం చేయి"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"పరిచయాలను భాగస్వామ్యం చేయడంలో విఫలమైంది."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"భాగస్వామ్యం చేయడానికి పరిచయాలు ఏవీ లేవు."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"ప్రదర్శించాల్సిన పరిచయాలు"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ప్రదర్శించాల్సిన పరిచయాలు"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"అనుకూలీకృత వీక్షణను నిర్వచించండి"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"వీక్షణను అనుకూలీకరించండి"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"సేవ్ చేయి"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"పరిచయాలను శోధించండి"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"ఇష్టమైనవి"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"పరిచయాలు లేవు."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"తరచుగా ఉన్నవాటిని క్లియర్ చేయి"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM కార్డును ఎంచుకోండి"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"ఖాతాలను నిర్వహించు"</string>
     <string name="menu_import" msgid="6107961135813836467">"దిగుమతి చేయి"</string>
     <string name="menu_export" msgid="2658783911863503902">"ఎగుమతి చేయి"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"బ్లాక్ చేయబడిన నంబర్‌లు"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> ద్వారా <xliff:g id="DATE">%1$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"శోధించడం ఆపివేస్తుంది"</string>
     <string name="description_clear_search" msgid="688023606766232904">"శోధనను క్లియర్ చేయి"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"పరిచయ ప్రదర్శన ఎంపికలు"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"ఖాతా"</string>
     <string name="set_default_account" msgid="4311613760725609801">"కాల్‌ల కోసం ఎప్పుడూ ఇది ఉపయోగించు"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"దీనితో కాల్ చేయి"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"గమనికతో కాల్ చేయి"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"కాల్‌తో పాటు పంపడానికి గమనికను టైప్ చేయండి…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"పంపు &amp; కాల్ చేయి"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> చదవని అంశాలు. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> చదవని అంశం. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"బిల్డ్ సంస్కరణ"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"ఓపెన్ సోర్స్ లైసెన్స్‌లు"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"ఓపెన్ సోర్స్ సాఫ్ట్‌వేర్ యొక్క లైసెన్స్ వివరాలు"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"తొలగిస్తుంది"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"అధ్యాహారం"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> సెక"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> నిమి <xliff:g id="SECONDS">%s</xliff:g> సెక"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> గం <xliff:g id="MINUTES_1">%s</xliff:g> నిమి <xliff:g id="SECONDS">%s</xliff:g> సెక"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> నిమి <xliff:g id="SECONDS">%2$s</xliff:g> సెక"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> గం <xliff:g id="MINUTES_1">%2$s</xliff:g> నిమి <xliff:g id="SECONDS">%3$s</xliff:g> సెక"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ఈ సత్వరమార్గం నిలిపివేయబడింది"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"పరిచయం తీసివేయబడింది"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"దిగుమతి చేయి"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"కనెక్షన్ లేదు"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"మరిన్ని చూపుతుంది"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM కార్డ్ దిగుమతి ముగిసింది"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"దిగుమతి విఫలమైంది"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM కార్డ్ నుండి పరిచయాలను దిగుమతి చేయలేకపోయింది"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIMను దిగుమతి చేస్తోంది"</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 19c0d32..a6042ac 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"รายชื่อติดต่อ"</string>
     <string name="contactsList" msgid="8661624236494819731">"รายชื่อในสมุดโทรศัพท์"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"เพิ่มรายชื่อติดต่อ"</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="shortcutActivityTitle" msgid="1504383567778497348">"เลือกรายชื่อติดต่อ"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"เพิ่มลงในรายชื่อติดต่อ"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"เลือกรายชื่อติดต่อ"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"เลือก"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"สร้างรายชื่อติดต่อใหม่"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"รายละเอียดของรายชื่อ"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"ลบ"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"เปลี่ยนรูปภาพ"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"สร้างทางลัด"</string>
-    <string name="menu_call" msgid="3992595586042260618">"โทรหารายชื่อในสมุดโทรศัพท์"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"ส่งข้อความถึงรายชื่อในสมุดโทรศัพท์"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"ยกเลิกการลิงก์"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"นำรายชื่อติดต่อออก"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"เปลี่ยนชื่อป้ายกำกับ"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"เลือกรายชื่อติดต่อ"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"เพิ่มรายชื่อติดต่อ"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"นำออกจากป้ายกำกับ"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"เพิ่มผู้ติดต่อ"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"สร้างใหม่…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"สร้างป้ายกำกับ"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"ยกเลิกการลิงก์รายชื่อติดต่อนี้กับรายชื่อติดต่อหลายรายการไหม"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"ยกเลิกการลิงก์"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"คุณต้องการบันทึกการเปลี่ยนแปลงที่ได้ทำไปแล้วและยกเลิกการลิงก์รายชื่อติดต่อนี้กับรายชื่อติดต่อหลายรายการไหม"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"บันทึก"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"ลิงก์รายชื่อติดต่อ"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"เลือกรายชื่อติดต่อที่คุณต้องการลิงก์กับ <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"ลิงก์ <xliff:g id="NAME">%s</xliff:g> แล้ว"</string>
@@ -83,8 +74,8 @@
       <item quantity="one">รายชื่อติดต่อ <xliff:g id="COUNT_0">%d</xliff:g> ราย</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other">รายชื่อติดต่อ <xliff:g id="COUNT_2">%d</xliff:g> ราย · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one">รายชื่อติดต่อ <xliff:g id="COUNT_0">%d</xliff:g> ราย · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other">รายชื่อติดต่อ <xliff:g id="COUNT_2">%1$d</xliff:g> ราย · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one">รายชื่อติดต่อ <xliff:g id="COUNT_0">%1$d</xliff:g> ราย · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"จาก Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"จาก <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"การลบรายชื่อติดต่อนี้จะลบรายละเอียดจากหลายบัญชี"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"ลบรายชื่อติดต่อนี้ไหม"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"ลบ"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"ยกเลิกการเปลี่ยนแปลง"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"ไม่มีรายชื่อติดต่อนี้"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"เพิ่มรายชื่อติดต่อลงในหน้าจอหลักแล้ว"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"เพิ่ม <xliff:g id="NAME">%s</xliff:g> ลงในหน้าจอหลักแล้ว"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"สร้างรายชื่อในสมุดโทรศัพท์ใหม่"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"สร้างรายชื่อติดต่อใหม่"</string>
     <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="2228592924476426108">"รายชื่อติดต่อของคุณว่างเปล่า"</string>
-    <string name="noGroups" msgid="4607906327968232225">"ไม่มีป้ายกำกับ"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"คุณจำเป็นต้องมีบัญชีเพื่อสร้างกลุ่ม"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"ไม่มีรายชื่อติดต่อที่มีป้ายกำกับนี้"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"ไม่มีรายชื่อติดต่อในบัญชีนี้"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"รายชื่อติดต่อของคุณว่างเปล่า"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"เกิดข้อผิดพลาดในการบันทึกรายชื่อติดต่อ"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"ไม่สามารถบันทึกการเปลี่ยนแปลงในรูปภาพรายชื่อติดต่อ"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"โหลดป้ายกำกับไม่สำเร็จ"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"บันทึกป้ายกำกับแล้ว"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"ลบป้ายกำกับออกแล้ว"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"สร้างป้ายกำกับแล้ว"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"ไม่สามารถสร้างป้ายกำกับ"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"ส่งข้อความ"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"เลือกรายชื่อติดต่อ"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"ส่ง"</string>
-    <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" 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" 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="5948889261993124839">"ทั้งหมด"</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_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"รายชื่อในสมุดโทรศัพท์ <xliff:g id="CURRENT_NUMBER">%s</xliff:g> จาก <xliff:g id="TOTAL_NUMBER">%s</xliff:g> รายการ"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"ชื่อของรายชื่อในสมุดโทรศัพท์ของคุณ"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"ชื่อป้ายกำกับ"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"บัญชี <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"ป้ายกำกับ"</string>
-    <string name="change_photo" msgid="8530597935483526383">"เปลี่ยน"</string>
-    <string name="description_star" msgid="2605854427360036550">"รายการโปรด"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"แก้ไขรายชื่อติดต่อ"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"ยกเลิก"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"กลับ"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"ปิด"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"ลิงก์รายชื่อติดต่อปัจจุบันกับรายชื่อติดต่อที่เลือกใช่ไหม"</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="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="7122002148518724139">"รวมปี"</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="4347232421410561500">"เพิ่มบัญชี"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"นำเข้า"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"สร้างใหม่…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"ทิ้ง"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"ยกเลิก"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"ยกเลิกการปรับแต่งหรือไม่"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"ค้นหารายชื่อติดต่อ"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"นำรายชื่อติดต่อออก"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"โปรไฟล์ในอุปกรณ์ของฉัน"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"โปรไฟล์ <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> ของฉัน"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"แสดงรายชื่อติดต่อทั้งหมด"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"เก็บรายชื่อติดต่อของคุณไว้อย่างปลอดภัยด้วยการซิงค์กับบริการออนไลน์แม้ว่าคุณจะทำโทรศัพท์หาย"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"เพิ่มบัญชี"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"เพิ่มบัญชีที่จะใช้สำรองข้อมูลรายชื่อติดต่อไปยัง Google"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"รายชื่อติดต่อใหม่จะบันทึกไว้ใน <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"เลือกบัญชีเริ่มต้นสำหรับรายชื่อติดต่อใหม่:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"ดูน้อยลง"</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="288549957278065542">"กำลังสร้างสำเนาส่วนบุคคล..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g> <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"SMS ล่าสุด <xliff:g id="MESSAGE_BODY">%1$s</xliff:g> <xliff:g id="PHONE_NUMBER">%2$s</xliff:g> <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"โทรล่าสุด <xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="PHONE_NUMBER">%2$s</xliff:g> <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"ช่องอื่นๆ"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"เปลี่ยนรูปภาพรายชื่อติดต่อ"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"เพิ่มรูปภาพรายชื่อติดต่อ"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"ไม่สามารถเปิดตัวแก้ไข"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"บันทึกลงใน"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"ข้อมูลติดต่อจาก <xliff:g id="ACCOUNT">%s</xliff:g> ไม่สามารถแก้ไขได้"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"ขณะนี้กำลังบันทึกไปยัง <xliff:g id="ACCOUNT_NAME">%s</xliff:g> แตะ 2 ครั้งเพื่อเลือกบัญชีอื่น"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">รายชื่อติดต่อที่ลิงก์ (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">รายชื่อติดต่อที่ลิงก์</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"รายชื่อติดต่อที่ลิงก์ <xliff:g id="COUNT">%d</xliff:g> รายการ"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ลิงก์รายชื่อติดต่อ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"ยกเลิก"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other">อาจซ้ำกับรายการอื่น <xliff:g id="COUNT">%d</xliff:g> รายการ</item>
-      <item quantity="one">อาจซ้ำกับรายการอื่น 1 รายการ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">ลิงก์รายชื่อติดต่อ <xliff:g id="COUNT">%d</xliff:g> รายการ</item>
-      <item quantity="one">ลิงก์รายชื่อติดต่อ 1 รายการ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"รายชื่อติดต่อนี้"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"อาจซ้ำกับรายการอื่น"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"รายชื่อติดต่อเหล่านี้อาจเป็นบุคคลเดียวกัน คุณสามารถลิงก์รายชื่อติดต่อดังกล่าวเป็นรายชื่อติดต่อเดียว"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"รายชื่อติดต่อที่ลิงก์"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"จากบัญชีของคุณ"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"เลือกรูปภาพ"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"จาก <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"ลบ<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"ลบ<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"ลบ <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"ไม่ได้เลือกรูปภาพจาก <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"เลือกรูปภาพจาก <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"รูปภาพนี้ไม่ได้เลือกจากบัญชีที่ไม่รู้จัก"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"รูปภาพนี้เลือกจากบัญชีที่ไม่รู้จัก"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"คำแนะนำ"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"ใหม่"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"เปิดลิ้นชักการนำทาง"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"ไดเรกทอรี"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"ไดเรกทอรีที่ทำงาน"</string>
     <string name="local_search_label" msgid="2551177578246113614">"รายชื่อติดต่อทั้งหมด"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"พบมากกว่า <xliff:g id="COUNT">%d</xliff:g> รายการ"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"สมุดโทรศัพท์ด่วนสำหรับ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(ไม่มีชื่อ)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"ที่ติดต่อบ่อยครั้ง"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"ดูรายชื่อติดต่อ"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"รายชื่อติดต่อทั้งหมดที่มีหมายเลขโทรศัพท์"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"รายชื่อติดต่อในโปรไฟล์งาน"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"ดูการอัปเดต"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"ซิม"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"ชื่อ"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"ชื่อเล่น"</string>
-    <string name="full_name" msgid="6602579550613988977">"ชื่อ"</string>
     <string name="name_given" msgid="4280790853455320619">"ชื่อ"</string>
     <string name="name_family" msgid="7466985689626017037">"นามสกุล"</string>
     <string name="name_prefix" msgid="59756378548779822">"คำนำหน้าชื่อ"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"ส่งอีเมล <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"อีเมล"</string>
     <string name="postal_street" msgid="8133143961580058972">"ถนน"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"ตู้ ปณ."</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"ย่านใกล้เคียง"</string>
     <string name="postal_city" msgid="6597491300084895548">"เมือง"</string>
     <string name="postal_region" msgid="6045263193478437672">"รัฐ"</string>
     <string name="postal_postcode" msgid="572136414136673751">"รหัสไปรษณีย์"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"กลุ่มเพิ่มเติม…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"การนำ \"<xliff:g id="GROUP">%s</xliff:g>\" ออกจากการซิงค์จะนำรายชื่อติดต่อที่ไม่ได้จัดกลุ่มไว้ออกจากการซิงค์ด้วย"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"บันทึกตัวเลือกการแสดงผล..."</string>
-    <string name="menu_done" msgid="796017761764190697">"เสร็จสิ้น"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"ยกเลิก"</string>
     <string name="listCustomView" msgid="1840624396582117590">"มุมมองที่กำหนดเอง"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"บันทึกรายชื่อติดต่อที่นำเข้าลงใน:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"ซิมการ์ด"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"ยกเลิกการส่งออก <xliff:g id="FILENAME">%s</xliff:g> หรือไม่"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"ไม่สามารถยกเลิกการนำเข้า/ส่งออก vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"ข้อผิดพลาดที่ไม่รู้จัก"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"ไม่สามารถเปิด \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"ไม่สามารถเปิด \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"เริ่มใช้งานโปรแกรมส่งออกไม่ได้: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"ไม่มีรายชื่อติดต่อที่สามารถส่งออกได้"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"คุณปิดใช้สิทธิ์ที่จำเป็นแล้ว"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"เกิดข้อผิดพลาดระหว่างส่งออก: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"ชื่อไฟล์ที่ต้องระบุยาวเกินไป (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"ข้อผิดพลาด I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"หน่วยความจำไม่เพียงพอ ไฟล์อาจใหญ่เกินไป"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"ไม่สามารถแยกวิเคราะห์ vCard ด้วยเหตุผลที่ไม่คาดคิด"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"ไม่สนับสนุนรูปแบบนี้"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"ไม่สามารถรวบรวมข้อมูลเมตาของ vCard ที่ระบุ"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"ไม่สามารถนำเข้าไฟล์ตั้งแต่หนึ่งไฟล์ขึ้นไป (%s)"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"ส่งออก <xliff:g id="FILENAME">%s</xliff:g> เสร็จแล้ว"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"ส่งออกรายชื่อติดต่อเรียบร้อยแล้ว"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"ส่งออกรายชื่อติดต่อเสร็จแล้ว คลิกการแจ้งเตือนเพื่อแชร์รายชื่อติดต่อ"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"กำลังส่งออกข้อมูลสมุดโทรศัพท์"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"กำลังส่งออกข้อมูลรายชื่อติดต่อ"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ไม่สามารถดึงข้อมูลจากฐานข้อมูล"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"ไม่มีรายชื่อติดต่อที่สามารถส่งออกได้ หากคุณมีรายชื่อติดต่ออยู่ในโทรศัพท์ของคุณจริงๆ อาจเป็นเพราะผู้ให้บริการข้อมูลบางรายไม่อนุญาตให้ส่งออกรายชื่อติดต่อจากโทรศัพท์"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"ไม่มีรายชื่อติดต่อที่สามารถส่งออกได้"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"โปรแกรมเขียนข้อความ vCard เริ่มการทำงานไม่ถูกต้อง"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"ไม่สามารถส่งออก"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"ไม่ได้ส่งออกข้อมูลรายชื่อติดต่อ\nสาเหตุ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"กำลังนำเข้า <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"ไม่สามารถอ่านข้อมูล vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"ยกเลิกการอ่านข้อมูล vCard แล้ว"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"นำเข้า vCard <xliff:g id="FILENAME">%s</xliff:g> เรียบร้อยแล้ว"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"ยกเลิกการนำเข้า <xliff:g id="FILENAME">%s</xliff:g> แล้ว"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"การนำเข้า <xliff:g id="FILENAME">%s</xliff:g> จะเกิดขึ้นในไม่ช้า"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"ไฟล์จะถููกนำเข้าในไม่ช้า"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"คำขอนำเข้า vCard ถูกปฏิเสธ ลองใหม่ภายหลัง"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"การส่งออก <xliff:g id="FILENAME">%s</xliff:g> จะเกิดขึ้นในไม่ช้า"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"ระบบจะส่งออกไฟล์ในอีกสักครู่"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"ระบบจะส่งออกรายชื่อติดต่อในไม่ช้า"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"คำขอส่งออก vCard ถูกปฏิเสธ ลองใหม่ภายหลัง"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"สมุดโทรศัพท์"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"กำลังแคช vCard ไปยังที่จัดเก็บข้อมูลชั่วคราวในตัวเครื่อง การนำเข้าจริงจะเริ่มต้นในอีกสักครู่"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"ไม่สามารถนำเข้า vCard"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"ผู้ติดต่อทาง NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"ส่งออกรายชื่อติดต่อ"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"กำลังแคช"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"กำลังนำเข้า <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"กำลังนำเข้า <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"ส่งออกเป็นไฟล์ .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"จัดเรียงตาม"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"ชื่อ"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"ข้อมูลของฉัน"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"ตั้งค่าโปรไฟล์ของคุณ"</string>
     <string name="setting_about" msgid="7014388749752042863">"เกี่ยวกับ \"รายชื่อติดต่อ\""</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"แชร์สมุดโทรศัพท์ที่มองเห็น"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"ไม่สามารถแชร์รายชื่อติดต่อที่มองเห็นได้"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"แชร์รายชื่อติดต่อโปรด"</string>
     <string name="share_contacts" msgid="8109287987498711664">"แชร์รายชื่อติดต่อทั้งหมด"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"ไม่สามารถแชร์รายชื่อติดต่อ"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"ไม่มีรายชื่อติดต่อที่จะแชร์"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"รายชื่อติดต่อที่จะแสดง"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"รายชื่อติดต่อที่จะแสดง"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"กำหนดมุมมองที่กำหนดเอง"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"ปรับแต่งมุมมอง"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"บันทึก"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"ค้นหารายชื่อติดต่อ"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"รายการโปรด"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"ไม่มีรายชื่อติดต่อ"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"ล้างผู้ที่คุณติดต่อด้วยบ่อยๆ"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"เลือกซิมการ์ด"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"จัดการบัญชี"</string>
     <string name="menu_import" msgid="6107961135813836467">"นำเข้า"</string>
     <string name="menu_export" msgid="2658783911863503902">"ส่งออก"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"หมายเลขที่ถูกบล็อก"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> ผ่านทาง <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"หยุดการค้นหา"</string>
     <string name="description_clear_search" msgid="688023606766232904">"ล้างการค้นหา"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"ตัวเลือกการแสดงรายชื่อผู้ติดต่อ"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"บัญชี"</string>
     <string name="set_default_account" msgid="4311613760725609801">"ใช้ในการโทรทุกครั้ง"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"โทรด้วย"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"โทรพร้อมโน้ต"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"พิมพ์โน้ตเพื่อส่งพร้อมการโทร..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ส่งและโทร"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g> ยังไม่อ่าน <xliff:g id="COUNT_3">%2$d</xliff:g> รายการ </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g> ยังไม่อ่าน <xliff:g id="COUNT_1">%2$d</xliff:g> รายการ </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"เวอร์ชันบิวด์"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"สัญญาอนุญาตโอเพนซอร์ส"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"รายละเอียดสัญญาอนุญาตสำหรับซอฟต์แวร์โอเพนซอร์ส"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"ลบ"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"จุดไข่ปลา"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> วินาที"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> นาที <xliff:g id="SECONDS">%s</xliff:g> วินาที"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ชั่วโมง <xliff:g id="MINUTES_1">%s</xliff:g> นาที <xliff:g id="SECONDS">%s</xliff:g> วินาที"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> นาที <xliff:g id="SECONDS">%2$s</xliff:g> วินาที"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ชั่วโมง <xliff:g id="MINUTES_1">%2$s</xliff:g> นาที <xliff:g id="SECONDS">%3$s</xliff:g> วินาที"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"ทางลัดนี้ถูกปิดใช้งาน"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"รายชื่อติดต่อถูกนำออก"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"นำเข้า"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"ไม่มีการเชื่อมต่อ"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"ซิม"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"แสดงเพิ่มเติม"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"นำเข้าจากซิมการ์ดเสร็จแล้ว"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"การนำเข้าล้มเหลว"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"นำเข้ารายชื่อติดต่อจากซิมการ์ดไม่ได้"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"กำลังนำเข้าจากซิมการ์ด"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 4307a5b..6353a42 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Mga Contact"</string>
     <string name="contactsList" msgid="8661624236494819731">"Mga Contact"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Magdagdag ng contact"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Contact"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Direktang pag-dial"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Direktang mensahe"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Pumili ng shortcut sa contact"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Pumili ng tatawagang numero"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Pumili ng numero na padadalhan ng mensahe"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Pumili ng contact"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Idagdag sa contact"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Pumili ng isang contact"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Pumili"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Gumawa ng bagong contact"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Mga detalye ng contact"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Tungkol sa"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Mga Update"</string>
     <string name="searchHint" msgid="8482945356247760701">"Maghanap ng mga contact"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Tingnan ang contact"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Idagdag sa mga paborito"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Alisin mula sa mga paborito"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Inalis sa mga paborito"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Gumawa ng shortcut"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Tawagan ang contact"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Mag-text sa contact"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"I-unlink"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Alisin ang mga contact"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Palitan ang pangalan ng label"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Pumili ng mga contact"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Magdagdag ng mga contact"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Alisin mula sa label"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Magdagdag ng contact"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Gumawa ng bagong…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Gumawa ng label"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"I-unlink ang contact na ito sa maraming contact?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"I-unlink"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Gusto mo bang i-save ang mga pagbabagong nagawa mo na at i-unlink ang contact na ito sa maraming contact?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"I-save"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"I-link ang mga contact"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Piliin ang contact na gusto mong i-link 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Na-link sina <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> na contact</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> contact · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> na contact · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> contact · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> na contact · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Mula sa Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Mula sa <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Kapag na-delete ang contact na ito. may mga detalye mula sa maraming account na made-delete."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"I-delete ang contact na ito?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"I-delete"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"I-discard ang mga pagbabago"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Hindi umiiral ang contact."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Naidagdag ang contact sa Home screen."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Naidagdag ang <xliff:g id="NAME">%s</xliff:g> sa Home screen."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Lumikha ng bagong contact"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Lumikha ng bagong contact"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Walang available na mga larawan sa tablet."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Walang mga larawan ang available sa telepono."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Larawan ng contact"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Custom na pangalan ng label"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Ipadala ang mga tawag nang direkta sa voicemail"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Alisin ang larawan"</string>
     <string name="noContacts" msgid="2228592924476426108">"Walang laman ang iyong listahan ng mga contact"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Walang mga label."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Upang lumikha ng mga pangkat kailangan mo ng isang account."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Walang mga contact na mayroong ganitong label"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Walang mga contact sa account na ito"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Walang laman ang iyong listahan ng mga contact"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Error sa pag-save ng contact"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Hindi ma-save ang mga pagbabago sa larawan ng contact"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Nabigong i-load ang label"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Na-save ang label"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Na-delete ang label"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Nagawa ang label"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Hindi makagawa ng label"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Magpadala ng mensahe"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Pumili ng Mga Contact"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Ipadala"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> contact na may mga numero ng telepono</item>
-      <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" 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" 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="5948889261993124839">"Lahat"</string>
-    <string name="callBack" msgid="5498224409038809224">"Tumawag pabalik"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Tawagan muli"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Pabalik na tawag"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Idagdag ang \"<xliff:g id="EMAIL">%s</xliff:g>\" sa mga contact?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ng <xliff:g id="TOTAL_NUMBER">%s</xliff:g> (na) contact"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Mga pangalan ng iyong mga contact"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Walang natagpuang app na mangangasiwa sa pagkilos na ito."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"I-click upang bumalik sa nakaraang screen"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Magdagdag ng numero ng telepono"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Magdagdag ng email"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Pangalan ng label"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Voice chat"</string>
     <string name="video_chat" msgid="1872255818640336072">"Video chat"</string>
-    <string name="connections" msgid="8098440723172028350">"Mga Koneksyon"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Magdagdag ng koneksyon"</string>
-    <string name="recent" msgid="2659189233141493004">"Kamakailan"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Mga kamakailang update"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> contact"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> account"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Kumuha ng larawan"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Kumuha ng bagong larawan"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Pumili ng larawan"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Pumili ng bagong larawan"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Piliin lahat"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Alisin sa pagkakapili ang lahat"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Magdagdag ng bago"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Magdagdag ng samahan"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Petsa"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Lagyan ng label"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Baguhin"</string>
-    <string name="description_star" msgid="2605854427360036550">"paborito"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"I-edit ang Contact"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Kanselahin"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Bumalik"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"isara"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"I-link 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Idagdag sa Aking Mga Contact"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Direktoryo na <xliff:g id="TYPE">%1$s</xliff:g>"</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="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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Idagdag sa mga contact"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Idagdag sa contact"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Isara"</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="7122002148518724139">"Isama ang taon"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Contact"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Naglo-load…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Lumikha ng bagong contact"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Magdagdag ng account"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"I-import"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Gumawa ng bagong…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"I-discard"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Kanselahin"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"I-discard ang mga pag-customize?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Maghanap ng mga contact"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Alisin ang mga contact"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Aking lokal na profile"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Aking <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> na profile"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Ipinapakita ang lahat ng contact"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Panatilihing ligtas ang iyong mga contact kahit na mawala mo ang iyong telepono: mag-synchronize sa isang online na serbisyo."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Magdagdag ng account"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Maglaan nang sandali upang magdagdag ng account na magba-back up ng iyong mga contact sa Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Mase-save ang mga bagong contact sa <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Pumili ng default na account para sa mga bagong contact:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Tumingin nang mas kaunti"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Kamakailan"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Tungkol dito"</string>
-    <string name="send_message" msgid="8938418965550543196">"Magpadala ng mensahe"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Lumilikha ng personal na kopya…"</string>
     <string name="tomorrow" msgid="6241969467795308581">"Bukas"</string>
     <string name="today" msgid="8041090779381781781">"Ngayon"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Ngayong <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Bukas nang <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Kaganapang walang pamagat)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Itakda"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Website"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Kaganapan"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Kaugnayan"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Account"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Pangalan"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telepono"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"I-click upang palawakin ang contact editor."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"I-click upang i-collapse ang contact editor."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"mga direksyon sa lokasyon"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"kamakailang sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. mag-click upang tumugon"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"kamakailang sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. mag-click upang tumugon"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"incoming"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"papalabas"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"hindi nasagot"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"kamakailang tawag. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Higit pang mga field"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Baguhin ang larawan ng contact"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Magdagdag ng larawan ng contact"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Nabigong buksan ang editor."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Sine-save sa"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Hindi mae-edit ang impormasyon ng contact mula sa <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Kasalukuyang sine-save sa <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. I-double tap upang pumili ng ibang account."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="one">Mga naka-link na contact (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Mga naka-link na contact (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> (na) naka-link na contact"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"I-LINK ANG MGA CONTACT"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"KANSELAHIN"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> Posibleng duplicate</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> na Posibleng duplicate</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> naka-link na contact</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> na naka-link na contact</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Ang contact na ito"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Mga posibleng duplicate"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Maaaring iisang tao ang mga contact na ito. Maaari mong i-link ang mga ito sa isa\'t isa bilang iisang contact."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Mga naka-link na contact"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Mula sa iyong mga account"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Pumili ng larawan"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Mula kay <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"I-delete ang <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"I-delete ang <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"I-delete ang <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Hindi napili ang larawan sa <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Napili na ang larawan mula sa <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Hindi nilagyan ng check ang larawan mula sa isang hindi kilalang account"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Nalagyan na ng check ang larawan mula sa isang hindi kilalang account"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Mga Suhestyon"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Bago"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Binubuksan ang navigation drawer"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Direktoryo"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Directory sa trabaho"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Lahat ng contact"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Higit sa <xliff:g id="COUNT">%d</xliff:g> ang natagpuan."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Mabilisang contact para kay <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Walang pangalan)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Madalas na kino-contact"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Tingnan ang contact"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Lahat ng contact na may mga numero ng telepono"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Mga contact ng profile sa trabaho"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Tingnan ang mga update"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Pangalan"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Palayaw"</string>
-    <string name="full_name" msgid="6602579550613988977">"Pangalan"</string>
     <string name="name_given" msgid="4280790853455320619">"Pangalan"</string>
     <string name="name_family" msgid="7466985689626017037">"Apelyido"</string>
     <string name="name_prefix" msgid="59756378548779822">"Prefix ng pangalan"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"I-email si <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Email"</string>
     <string name="postal_street" msgid="8133143961580058972">"Kalye"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"PO box"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Kapitbahayan"</string>
     <string name="postal_city" msgid="6597491300084895548">"Lungsod"</string>
     <string name="postal_region" msgid="6045263193478437672">"Katayuan"</string>
     <string name="postal_postcode" msgid="572136414136673751">"ZIP code"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Higit pang mga pangkat…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Aalisin rin ng pag-aalis sa \"<xliff:g id="GROUP">%s</xliff:g>\" mula sa sync ang anumang mga hindi nakapangkat na contact mula sa sync."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Sine-save ang mga pagpipilian sa pagpapakita…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Tapos na"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Kanselahin"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Naka-customize na view"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"I-save ang mga na-import na contact sa:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM card"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Kanselahin ang pag-export ng <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Di makansela pag-import/pag-export vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Hindi kilalang error."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Hindi mabuksan ang \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Hindi mabuksan ang \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Hindi masimulan ang exporter: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Walang maaaring i-export na contact."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Na-disable mo ang isang kinakailangang pahintulot."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Naganap ang isang error habang nag-e-export: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Masyadong mahaba ang kinakailangang filename (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O na error"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Walang sapat na memory. Maaaring masyadong malaki ang file."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Hindi ma-parse ang vCard dahil sa isang hindi inaasahang dahilan."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Hindi sinusuportahan ang format."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Hindi makakolekta ng impormasyon ng meta ng nasabing (mga) file ng vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Ang isa o higit pang mga file ay hindi ma-import (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Tapos na ang pag-export ng <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Tapos nang i-export ang mga contact."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Tapos nang i-export ang mga contact, i-click ang notification upang ibahagi ang mga contact."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Pag-e-export ng data ng contact"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Ine-export ang data ng contact."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Hindi makuha ang impormasyon ng database."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Walang mga maaaring i-export na contact. Kung mayroon kang mga contact sa iyong telepono, maaaring hindi pinapayagan ng ilang provider ng data na i-export mula sa telepono ang mga contact."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Walang nae-export na contact."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Hindi nagsimula nang tama ang composer ng vCard."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Hindi ma-export"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Hindi na-export ang data ng contact.\nDahilan: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Nag-iimport <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Hindi mabasa ang data ng vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Kinansela ang pagbabasa ng data ng vCard"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Tapos na ang pag-import ng vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Kinansela ang pag-import ng <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Mai-import ang <xliff:g id="FILENAME">%s</xliff:g> sa ilang saglit."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Sa ilang sandali ay mai-import na ang file."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Tinanggihan ang kahilingan sa pag-import ng vCard. Pakisubukang muli sa ibang pagkakataon."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Mae-export ang <xliff:g id="FILENAME">%s</xliff:g> sa ilang saglit."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"I-e-export ang file sa ilang sandali."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"I-e-export ang mga contact sa ilang sandali."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Tinanggihan ang kahilingan sa pag-export ng vCard. Subukang muli sa ibang pagkakataon."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"contact"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Kina-cache ang (mga) vCard sa lokal na pansamantalang storage. Magsisimula sa lalong madaling panahon ang aktuwal na pag-import."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Hindi ma-import ang vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Natanggap ang contact sa NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"I-export ang mga contact?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Nagka-cache"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Nag-i-import <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Nag-i-import <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"I-export sa .vcf file"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Pagbukud-bukurin ayon sa"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Pangalan"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Aking impormasyon"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"I-set up ang iyong profile"</string>
     <string name="setting_about" msgid="7014388749752042863">"Tungkol sa Mga Contact"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Magbahagi ng mga nakikitang contact"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Nabigong ibahagi ang mga nakikitang contact."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Ibahagi ang mga paboritong contact"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Ibahagi ang lahat ng contact"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Nabigong ibahagi ang mga contact."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Walang ibabahaging mga contact."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Mga contact na ipapakita"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Mga contact na ipapakita"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Tukuyin ang naka-customize na view"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"I-customize ang view"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"I-save"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Maghanap sa mga contact"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Mga Paborito"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Walang mga contact."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"I-clear ang mga madadalas"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Pumili ng SIM card"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Pamahalaan ang mga account"</string>
     <string name="menu_import" msgid="6107961135813836467">"I-import"</string>
     <string name="menu_export" msgid="2658783911863503902">"I-export"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Mga naka-block na numero"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> sa pamamagitan ng <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"ihinto ang paghahanap"</string>
     <string name="description_clear_search" msgid="688023606766232904">"I-clear ang paghahanap"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Mga opsyon ng pagpapakita ng contact"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Account"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Gamitin ito palagi sa mga tawag"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Tumawag gamit ang"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Tumawag nang may kasamang tala"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Mag-type ng isang tala na ipadadala kasama ng tawag …"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"IPADALA &amp; TUMAWAG"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> hindi pa nababasang item. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> na hindi pa nababasang item. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Bersyon ng build"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Mga open source na lisensya"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Mga detalye ng lisensya para sa open source na software"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"I-delete"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Ellipsis"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> (na) seg"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> (na) min <xliff:g id="SECONDS">%s</xliff:g> (na) seg"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> (na) oras <xliff:g id="MINUTES_1">%s</xliff:g> (na) min <xliff:g id="SECONDS">%s</xliff:g> (na) seg"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> (na) min <xliff:g id="SECONDS">%2$s</xliff:g> (na) seg"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> (na) oras <xliff:g id="MINUTES_1">%2$s</xliff:g> (na) min <xliff:g id="SECONDS">%3$s</xliff:g> (na) seg"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Na-disable ang shortcut na ito"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Inalis ang contact"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"I-import"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Walang koneksyon"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Magpakita ng higit pa"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Tapos nang i-import ang SIM card"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Nabigong i-import"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Hindi ma-import ang mga contact mula sa SIM card"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Ini-import ang SIM"</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index dbc9871..73b3b19 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kişiler"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kişiler"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Kişi ekle"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kişi"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Doğrudan çevirme"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Doğrudan mesaj"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Bir kişi kısayolu seçin"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Aranacak numarayı seçin"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"İleti gönderilecek bir numara seçin"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kişi seçin"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Kişiye ekle"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Bir kişi seçin"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Seç"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Yeni kişi oluştur"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Kişi ayrıntıları"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Hakkında"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Güncellemlr"</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>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Favorilerden kaldırıldı"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Kısayol oluştur"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Ara"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Kısa mesaj gönder"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Bağlantıyı kaldır"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Kişileri kaldır"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Etiketi yeniden adlandır"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Kişileri seç"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Kişileri ekle"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Etiketten kaldır"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Kişi ekle"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Yeni oluştur…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Etiket oluştur"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Bu kişinin bağlantısı kaldırılarak birden çok kişiye dönüştürülsün mü?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Bağlantıyı Kaldır"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Yapmış olduğunuz değişiklikleri kaydetmek ve bu kişinin bağlantısını kaldırıp birden çok kişiye dönüştürmek istiyor musunuz?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Kaydet"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kişileri bağla"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> ile bağlamak 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> bağlandı"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kişi</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> kişi · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> kişi · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> kişi · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kişi · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google\'dan"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> hesabından"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Bu kişiyi silmek, birden fazla hesaba ait ayrıntıları da siler."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Bu kişi silinsin mi?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Sil"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Değişiklikleri sil"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kişi mevcut değil."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kişi, Ana ekrana eklendi."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g>, Ana ekrana eklendi."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Yeni kişi oluştur"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Yeni kişi oluştur"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Tablette kullanılabilir resim yok."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Telefonda hiçbir resim yok."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kişi fotoğrafı"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Özel etiket adı"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Çağrıları doğrudan sesli mesaja gönder"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Fotoğrafı kaldır"</string>
     <string name="noContacts" msgid="2228592924476426108">"Kişi listeniz boş"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Etiket yok."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Grup oluşturmanız için hesap gerekir."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Bu etikete sahip kişi yok"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Bu hesapta kişi yok"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Kişi listeniz boş"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kişi kaydedilirken hata oluştu"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kişi fotoğrafı değişiklikleri kaydedilmedi"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Etiket yüklenemedi"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Etiket kaydedildi"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Etiket silindi"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Etiket oluşturuldu"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Etiket oluşturulamıyor"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Mesaj gönder"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kişi Seçin"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Gönder"</string>
-    <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" 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" 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="5948889261993124839">"Tümü"</string>
-    <string name="callBack" msgid="5498224409038809224">"Geri ara"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Tekrar çağrı yap"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Geri ara"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"\"<xliff:g id="EMAIL">%s</xliff:g>\" adresi kişilere eklensin mi?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"artı"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"Toplam <xliff:g id="TOTAL_NUMBER">%s</xliff:g> kişiden <xliff:g id="CURRENT_NUMBER">%s</xliff:g> kişi"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Kişilerinizin adları"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Bu işlemi gerçekleştirecek uygulama bulunamadı."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Önceki ekrana dönmek için tıklayın"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Telefon numarası ekle"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"E-posta adresi ekle"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Etiket adı"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Sesli sohbet"</string>
     <string name="video_chat" msgid="1872255818640336072">"Görüntülü sohbet"</string>
-    <string name="connections" msgid="8098440723172028350">"Bağlantılar"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Bağlantı ekle"</string>
-    <string name="recent" msgid="2659189233141493004">"Son"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Son güncellemeler"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kişi"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> hesabı"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Fotoğraf çek"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Yeni fotoğraf çek"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Fotoğraf seç"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Yeni fotoğraf seç"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Tümünü seç"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Tümünün seçimini kaldır"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Yeni ekle"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Kuruluş ekle"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Tarih"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Etiket"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Değiştir"</string>
-    <string name="description_star" msgid="2605854427360036550">"favori"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Kişiyi düzenle"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"İptal edilir"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Geri"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"kapatın"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Mevcut kişi, seçili kişiye bağlansın mı?"</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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Kişilerime ekle"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"<xliff:g id="TYPE">%1$s</xliff:g> dizini"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Ayarlar"</string>
     <string name="menu_settings" msgid="377929915873428211">"Ayarlar"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Kişilere ekle"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Kişiye ekle"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Kapat"</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="7122002148518724139">"Yılı ekle"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kişi"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Yükleniyor..."</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Yeni kişi oluştur"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Hesap ekle"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"İçe aktar"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Yeni oluştur…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Yok say"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"İptal"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Özelleştirmeler silinsin mi?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Kişilerde arayın"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Kişileri kaldır"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Yerel profilim"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profilim"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Tüm içerik görüntüleniyor"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Telefonunuzu kaybetseniz dahi kişilerinizi güvenle saklayın: çevrimiçi bir hizmetle senkronize edin."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Hesap ekleyin"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Birkaç dakikanızı ayırarak, kişilerinizi Google\'a yedeklemek için kullanılacak bir hesap ekleyin."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Yeni kişiler <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> hesabına kaydedilecek."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Yeni kişiler için bir varsayılan hesap seçin:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Daha az göster"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"En son"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Hakkında"</string>
-    <string name="send_message" msgid="8938418965550543196">"İleti gönder"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Kişisel kopya oluşturuluyor..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Yarın"</string>
     <string name="today" msgid="8041090779381781781">"Bugün"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Bugün şu saatler arasında: <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Yarın şu saatler arasında: <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Başlıksız etkinlik)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Ayarla"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Web sitesi"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Etkinlik"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"İlişki"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Hesap"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Ad"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-posta"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Kişi düzenleyiciyi genişletmek için tıklayın."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kişi düzenleyiciyi daraltmak için tıklayın."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"konum için yol tarifi"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"son gelen sms. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. yanıtlamak için dokunun"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"son gelen sms. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. yanıtlamak için dokunun"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"gelen"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"giden"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"cevapsız"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"son gelen çağrı. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Diğer alanlar"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Kişi fotoğrafı değiştirilir"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Kişi fotoğrafı eklenir"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Düzenleyici açılamadı."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Kaydedilecek hesap:"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> hesabındaki kişi bilgisi düzenlenebilir değil"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Şu anda <xliff:g id="ACCOUNT_NAME">%s</xliff:g> hesabına kaydediliyor. Farklı bir hesap seçmek için iki kez dokunun."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Bağlı kişiler (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Bağlı kişi</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"Bağlı <xliff:g id="COUNT">%d</xliff:g> kişi"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"KİŞİLERİ BAĞLA"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"İPTAL"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Olası kopya</item>
-      <item quantity="one">1 Olası kopya</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">Bağlı <xliff:g id="COUNT">%d</xliff:g> kişi</item>
-      <item quantity="one">Bağlı 1 kişi</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Bu kişi"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Olası kopyalar"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Bu kişiler aynı kişi olabilir. Tek bir kişi olarak birleştirecek şekilde bağlantı oluşturabilirsiniz."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Bağlı kişiler"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Hesaplarınızdan"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Fotoğraf seçin"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> adlı hesaptan"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Sil: <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Sil: <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Sil: <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Fotoğraf: <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> işaretlenmedi"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Fotoğraf: <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> işaretlendi"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Bilinmeyen hesaptan fotoğraf işaretlenmedi"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Bilinmeyen hesaptan fotoğraf işaretlendi"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Öneriler"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Yeni"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Gezinme çekmecesi açılır"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Dizin"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"İş dizini"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Tüm kişiler"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> kişiden fazla bulundu."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> için hızlı kişi"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Adsız)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Sık iletişim kurulanlar"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Kişiyi görüntüle"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Telefon numarası olan tüm kişiler"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"İş profili kişileri"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Gncellmlri görüntüle"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Ad"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Takma ad"</string>
-    <string name="full_name" msgid="6602579550613988977">"Ad"</string>
     <string name="name_given" msgid="4280790853455320619">"Ad"</string>
     <string name="name_family" msgid="7466985689626017037">"Soyadı"</string>
     <string name="name_prefix" msgid="59756378548779822">"Ad öneki"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"E-posta gönder: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"E-posta"</string>
     <string name="postal_street" msgid="8133143961580058972">"Cadde"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Posta kutusu"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Mahalle"</string>
     <string name="postal_city" msgid="6597491300084895548">"Şehir"</string>
     <string name="postal_region" msgid="6045263193478437672">"Eyalet"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Alan kodu"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Diğer gruplar..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" adlı grubu senkronizasyondan kaldırmak, gruplanmamış tüm kişilerin de senkronizasyondan kaldırılmasına neden olur."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Görüntüleme seçenekleri kaydediliyor..."</string>
-    <string name="menu_done" msgid="796017761764190697">"Bitti"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"İptal"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Özelleştirilmiş görünüm"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"İçe aktarılan kişilerin kaydedileceği yer:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM kart"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> dosyasının dışa aktarılması iptal edilsin mi?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"İçe/dışa aktrma işlmi iptl edilemedi"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Bilinmeyen hata."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" açılamadı: <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" açılamadı: <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Dışa aktarıcı başlatılamadı: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Dışa verilebilecek kişi yok."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Gerekli bir izni devre dışı bıraktınız."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Dışa aktarma sırasında bir hata oluştu: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Gereken dosya adı çok uzun (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"G/Ç Hatası"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Bellek yetersiz. Dosya çok büyük olabilir."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Beklenmeyen bir nedenden dolayı vCard ayrıştırılamadı."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Biçim desteklenmiyor."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Belirtilen vCard dosyalarının meta bilgileri toplanamadı."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Bir veya daha fazla dosya içe aktarılamadı (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> dosyasını dışa aktarma tamamlandı."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kişileri dışa aktarma işlemi tamamlandı."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kişileri dışa aktarma işlemi tamamlandı. Dışa aktarılan kişileri paylaşmak için bildirimi tıklayın."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kişi verileri dışa aktarılıyor"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kişi verileri dışa aktarılıyor."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Veritabanı bilgileri alınamadı."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Dışa aktarabilir kişi yok. Telefonunuzda kişileriniz varsa, bazı veri sağlayıcıları kişilerin telefondan dışa aktarılmasına izin vermeyebilir."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Dışa aktarılabilecek kişi yok."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard oluşturucu düzgün başlamadı."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Dışa aktarılamadı"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kişi verileri dışa aktarılamadı.\nNedeni: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> içe aktarılıyor"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard verileri okunamadı"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard verilerini okuma işlemi iptal edildi"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"vCard <xliff:g id="FILENAME">%s</xliff:g> dosyasından aktarım tamamlandı"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> dosyasını içe aktarma iptal edildi"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> kısa bir süre içinde içe aktarılacak."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Dosya kısa bir süre sonra içe aktarılacaktır."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard\'ı içe aktarma isteği reddedildi. Daha sonra tekrar deneyin."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> kısa bir süre içinde dışa aktarılacak."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Dosya kısa bir süre sonra dışa aktarılacak."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kişiler kısa bir süre içinde dışa aktarılacak."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard\'ı dışa aktarma isteği reddedildi. Daha sonra tekrar deneyin."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kişi"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard\'lar geçici bir yerel depolama alanında önbelleğe alınıyor. Asıl içe aktarma işlemi kısa süre içinde başlayacak."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"vCard içe aktarılamadı."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Kişi NFC ile alındı"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Kişileri dışa aktar?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Önbelleğe alınıyor"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"İçe aktarılıyor <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"İçe aktarılıyor <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">".vcf dosyasına aktar"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sıralama ölçütü"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ad"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Bilgilerim"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Profilinizi oluşturun"</string>
     <string name="setting_about" msgid="7014388749752042863">"Kişiler Hakkında"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Görülebilir kişileri paylaş"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Görünür kişiler paylaşılamadı."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Favori kişileri paylaş"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Tüm kişileri paylaş"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kişiler paylaşılamadı."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Paylaşılacak kişi yok."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Görüntülenecek kişiler"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Görüntülenecek kişiler"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Özelleştirilmiş görünüm tanımlayın"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Görünümü özelleştirin"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Kaydet"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Kişilerde arayın"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Sık Kullanılanlar"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Kişi yok."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Sık iletişim kurulanları sil"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM kart seç"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Hesapları yönet"</string>
     <string name="menu_import" msgid="6107961135813836467">"İçe aktar"</string>
     <string name="menu_export" msgid="2658783911863503902">"Dışa aktar"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Engellenen numaralar"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="SOURCE">%2$s</xliff:g> üzerinden şu saatte: <xliff:g id="DATE">%1$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"aramayı durdurun"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Aramayı temizle"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Kişi görüntüleme seçenekleri"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Hesap"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Çağrılar için her zaman bunu kullan"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Çağrıyı şununla yap:"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Notla telefon et"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Çağrıyla göndermek için bir not yazın…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"GÖNDER VE TELEFON ET"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> okunmamış öğe. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> okunmamış öğe. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Derleme sürümü"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Açık kaynak lisansları"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Açık kaynak yazılımlar için lisans ayrıntıları"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Sil"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Üç nokta"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> sn."</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> dk. <xliff:g id="SECONDS">%s</xliff:g> sn."</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> sa. <xliff:g id="MINUTES_1">%s</xliff:g> dk. <xliff:g id="SECONDS">%s</xliff:g> sn."</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> dk. <xliff:g id="SECONDS">%2$s</xliff:g> sn."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> sa. <xliff:g id="MINUTES_1">%2$s</xliff:g> dk. <xliff:g id="SECONDS">%3$s</xliff:g> sn."</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Bu kısayol devre dışı bırakıldı"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kişi kaldırıldı"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"İçe aktar"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Bağlantı yok"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Diğer seçenekler gösterilir"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM kartın içe aktarılması tamamlandı"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"İçe aktarma başarısız oldu"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"SIM karttaki kişiler içe aktarılamadı"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"SIM kişileri içe aktarılıyor"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 7ad9fc1..bb58d30 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Контакти"</string>
     <string name="contactsList" msgid="8661624236494819731">"Контакти"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Додати контакт"</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">"Вибрати номера для SMS"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Вибрати контакт"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Додати в контактні дані"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Вибрати контакт"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Вибрати"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Створити новий контакт"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Деталі контакту"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"Видалити"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Змінити фото"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Створити ярлик"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Набрати конт."</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Повід. контакт"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Розділити"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Вилучити контакти"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Перейменувати мітку"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Вибрати контакти"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Додати контакти"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Вилучити з мітки"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Додати контакт"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Створити…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Створити мітку"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Розділити цей контакт?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Розділити"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Зберегти зміни та розділити цей контакт?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Зберегти"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Об’єднання контактів"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Виберіть контакт, який ви хочете об’єднати з контактом <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Контакт <xliff:g id="NAME">%s</xliff:g> зв’язано"</string>
@@ -87,10 +78,10 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> контакта</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> контакт (<xliff:g id="ACCOUNT_3">%s</xliff:g>)</item>
-      <item quantity="few"><xliff:g id="COUNT_2">%d</xliff:g> контакти (<xliff:g id="ACCOUNT_3">%s</xliff:g>)</item>
-      <item quantity="many"><xliff:g id="COUNT_2">%d</xliff:g> контактів (<xliff:g id="ACCOUNT_3">%s</xliff:g>)</item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> контакта (<xliff:g id="ACCOUNT_3">%s</xliff:g>)</item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> контакт (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
+      <item quantity="few"><xliff:g id="COUNT_2">%1$d</xliff:g> контакти (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
+      <item quantity="many"><xliff:g id="COUNT_2">%1$d</xliff:g> контактів (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> контакта (<xliff:g id="ACCOUNT_3">%2$s</xliff:g>)</item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Від Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"З обл. запису <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -107,21 +98,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Якщо видалити цей контакт, буде видалено дані з кількох облікових записів."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Видалити цей контакт?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Видалити"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Відхилити зміни"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Контакт не існує."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Контакт додано на головний екран."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Контакт <xliff:g id="NAME">%s</xliff:g> додано на головний екран."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Створ. новий контакт"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Створити новий контакт"</string>
     <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="2228592924476426108">"Ваш список контактів порожній"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Немає міток."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Для створення груп потрібен обліковий запис."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Немає контактів із цією міткою"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"У цьому обліковому записі немає контактів"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Ваш список контактів порожній"</string>
@@ -134,7 +119,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Помилка збереження контакта"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Не вдалося зберегти зміни у фотографії контакта"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Не вдалося завантажити мітку"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Мітку збережено"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Мітку видалено"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Мітку створено"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Не вдається створити мітку"</string>
@@ -149,35 +133,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Надіслати повідомлення"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Вибрати контакти"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Надіслати"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> контакт із номерами телефону</item>
-      <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> контакти з номерами телефону</item>
-      <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" 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" 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="5948889261993124839">"Усі контакти"</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_plus_button" msgid="515164827856229880">"плюс"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> із <xliff:g id="TOTAL_NUMBER">%s</xliff:g> контактів"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Імена ваших контактів"</string>
-    <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>
@@ -198,52 +156,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Назва мітки"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"Обліковий запис <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"Мітка"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Змінити"</string>
-    <string name="description_star" msgid="2605854427360036550">"вибране"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Редаг. контакта"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Скасувати"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Назад"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"закрити"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Об’єднати поточний контакт із вибраним контактом?"</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="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="7122002148518724139">"Вказати рік"</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="4347232421410561500">"Додати обліковий запис"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Імпортувати"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Створити…"</string>
@@ -257,14 +191,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Відхилити"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Скасувати"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Відхилити налаштування?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Пошук контактів"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Вилучити контакти"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Мій локальний профіль"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Мій профіль на <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Відображаються всі контакти"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Збережіть свої контакти на випадок втрати свого телефону: синхронізуйте їх з онлайновою службою."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Додати обліковий запис"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Додайте обліковий запис, щоб створити резервну копію ваших контактів у Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Нові контакти буде збережено в обліковому записі <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Виберіть обліковий запис за умовчанням для нових контактів:"</string>
@@ -283,13 +213,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Показати менше"</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="288549957278065542">"Створення особистої копії..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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">"Чат"</string>
@@ -299,20 +228,16 @@
     <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="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_sms" msgid="1666389577263317445">"Останнє SMS-повідомлення: <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>, <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"Останній дзвінок: <xliff:g id="CALL_TYPE">%1$s</xliff:g>, <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>, <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Більше полів"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Змінити фотографію контакту"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Додати фотографію контакту"</string>
@@ -320,49 +245,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Не вдалося відкрити редактор."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Зберігання в обліковий запис"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Контакти з облікового запису <xliff:g id="ACCOUNT">%s</xliff:g> не можна редагувати"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Наразі контакт зберігається в обліковий запис <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Двічі торкніться, щоб вибрати інший обліковий запис."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <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="quickcontact_contacts_number" msgid="6036916944287597682">"Об’єднаних контактів: <xliff:g id="COUNT">%d</xliff:g>"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"ОБ’ЄДНАТИ КОНТАКТИ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"СКАСУВАТИ"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <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>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <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>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Цей контакт"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Можливі копії"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Ці контакти можуть стосуватися однієї людини. Ви можете об’єднати їх."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Об’єднані контакти"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"З ваших облікових записів"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Вибрати фотографію"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"З облікового запису <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Видалити <xliff:g id="DATA_TYPE">%s </xliff:g> <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Видалити <xliff:g id="DATA_TYPE">%1$s </xliff:g> <xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Видалити <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Фото з <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> не вибрано"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Фото з <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> вибрано"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Фото з невідомого облікового запису не вибрано"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Фото з невідомого облікового запису вибрано"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Пропозиції"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Нові"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Відкрити панель навігації"</string>
@@ -431,11 +320,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Каталог"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Робочі контакти"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Усі контакти"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Знайдено понад <xliff:g id="COUNT">%d</xliff:g>."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Швидкий контакт із: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Без імені)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Часті контакти"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Переглянути контакт"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Усі контакти з номерами телефону"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Контакти в робочому профілі"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Переглян. оновлення"</string>
@@ -443,7 +330,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM-карта"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Ім\'я"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Псевдонім"</string>
-    <string name="full_name" msgid="6602579550613988977">"Ім\'я"</string>
     <string name="name_given" msgid="4280790853455320619">"Ім’я"</string>
     <string name="name_family" msgid="7466985689626017037">"Прізвище"</string>
     <string name="name_prefix" msgid="59756378548779822">"Префікс імені"</string>
@@ -476,8 +362,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Написати листа на таку адресу: <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Відправ."</string>
     <string name="postal_street" msgid="8133143961580058972">"Вулиця"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Пошт. скр."</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"У районі"</string>
     <string name="postal_city" msgid="6597491300084895548">"Місто"</string>
     <string name="postal_region" msgid="6045263193478437672">"Область"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Пошт. код"</string>
@@ -515,8 +399,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Інші групи…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Видалення групи \"<xliff:g id="GROUP">%s</xliff:g>\" із синхронізації призведе до припинення синхронізації незгрупованих контактів."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Зберіг-ня парам. відображ…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Готово"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Скасувати"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Користувацький режим"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Зберегти імпортовані контакти в обліковий запис:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM-карта"</string>
@@ -540,18 +422,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Скасувати експорт файлу <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Не вдалося скасув. імпорт/експорт vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Невідома помилка."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Не вдалося відкрити файл \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Не вдалося відкрити файл \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Не вдалося запустити експортер: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Немає контакту, який можна експортувати."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Ви вимкнули обов’язковий дозвіл."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Під час експорту сталася помилка: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Потрібна назва файлу задовга (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Помилка вводу/виводу"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Недостатньо пам’яті. Можливо, файл завеликий."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Не вдалося проаналізувати vCard через неочікувану причину."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Формат не підтримується."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Не вдалося зібрати мета-інформацію файлів цієї vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Не вдалося імпортувати один або кілька файлів (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Експорт файлу <xliff:g id="FILENAME">%s</xliff:g> завершено."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Контакти експортовано."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Контакти експортовано. Натисніть сповіщення, щоб надати доступ до контактів."</string>
@@ -560,29 +438,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Експорт. контактні дані"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Контакти експортуються."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Не вдалось отримати інформацію бази даних."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Немає контактів, які можна експортувати. Якщо у вашому телефоні є контакти, можливо, якийсь постачальник даних заборонив експорт контактів із телефону."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Немає контактів для експортування."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Майстер vCard не запущено належним чином."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Помилка експорту"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Контактні дані не експортовано.\nПричина: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Імпорт <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Не вдалося прочитати дані vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Читання даних vCard скасовано"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Імпорт файлу <xliff:g id="FILENAME">%s</xliff:g> vCard завершено"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Імпорт файлу <xliff:g id="FILENAME">%s</xliff:g> скасовано"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"Файл <xliff:g id="FILENAME">%s</xliff:g> незабаром буде імпортовано."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Незабаром файл буде імпортовано."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Запит на імпорт файлу vCard відхилено. Повторіть спробу пізніше."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"Файл <xliff:g id="FILENAME">%s</xliff:g> незабаром буде експортовано."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Невдовзі файл буде експортовано."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Контакти невдовзі буде експортовано."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Запит на експорт файлу vCard відхилено. Повторіть спробу пізніше."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"контакт"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Кешування файлів vCard у локальну тимчасову пам’ять. Імпорт почнеться незабаром."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Не вдалось імпортувати файл vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Конт., отрим.через NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Експортув. контакти?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Кешування"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Імпорт <xliff:g id="CURRENT_NUMBER">%s</xliff:g> з <xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Імпорт <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> з <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Експортувати у файл .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Параметри сортування"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ім’я"</string>
@@ -595,8 +469,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Мої дані"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Налаштування профілю"</string>
     <string name="setting_about" msgid="7014388749752042863">"Про додаток Контакти"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Передати видимі контакти"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Не вдалося поділитися видимими контактами."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Поділитися вибраними контактами"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Поділитися всіма контактами"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Не вдалося поділитися контактами."</string>
@@ -606,14 +478,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Немає контактів, якими можна поділитися."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Контакти для показу"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Контакти для показу"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Визначити користувацький режим"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Налаштувати перегляд"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Зберегти"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Пошук серед контактів"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Вибране"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Контактів немає."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Очистити часті контакти"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Вибрати SIM-карту"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Керувати обліковими записами"</string>
     <string name="menu_import" msgid="6107961135813836467">"Імпортувати"</string>
     <string name="menu_export" msgid="2658783911863503902">"Експортувати"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Заблоковані номери"</string>
@@ -621,21 +489,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> через <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"припинити пошук"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Очистити поле пошуку"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Параметри відображення контактів"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Обліковий запис"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Завжди використовувати для викликів"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Телефонувати за допомогою"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Зателефонувати й надіслати нотатку"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Введіть нотатку, яку потрібно надіслати під час виклику…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"ЗАТЕЛЕФОНУВАТИ Й НАДІСЛАТИ"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> з <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитаний елемент. </item>
-      <item quantity="few"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитаних елементи. </item>
-      <item quantity="many"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитаних елементів. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> непрочитаного елемента. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Версія складання"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Ліцензії з відкритим кодом"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Деталі ліцензії на програмне забезпечення з відкритим кодом"</string>
@@ -649,8 +509,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Видалити"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Три крапки"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> с"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> хв <xliff:g id="SECONDS">%s</xliff:g> с"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> год <xliff:g id="MINUTES_1">%s</xliff:g> хв <xliff:g id="SECONDS">%s</xliff:g> с"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> хв <xliff:g id="SECONDS">%2$s</xliff:g> с"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> год <xliff:g id="MINUTES_1">%2$s</xliff:g> хв <xliff:g id="SECONDS">%3$s</xliff:g> с"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Ярлик вимкнено"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Контакт вилучено"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Імпортувати"</string>
@@ -675,4 +535,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Немає з’єднання"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM-карта"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Показати більше"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM-карту імпортовано"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Не вдалось імпортувати"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Не вдалось імпортувати контакти із SIM-карти"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Імпорт SIM-карти"</string>
 </resources>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index 7e4e0b0..4cf7152 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"رابطے"</string>
     <string name="contactsList" msgid="8661624236494819731">"رابطے"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"رابطہ شامل کریں"</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="shortcutActivityTitle" msgid="1504383567778497348">"رابطہ چنیں"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"رابطے میں شامل کریں"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"ایک رابطہ منتخب کریں"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"منتخب کریں"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"نیا رابطہ بنائیں"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"رابطہ کی تفصیلات"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"حذف کریں"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"تصویر بدلیں"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"شارٹ کٹ تخلیق کریں"</string>
-    <string name="menu_call" msgid="3992595586042260618">"رابطہ کو کال کریں"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"رابطہ کو متن بھیجیں"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"لنک ختم کریں"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"رابطے ہٹائیں"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"لیبل کا نام تبدیل کریں"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"رابطے منتخب کریں"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"رابطے شامل کریں"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"لیبل سے ہٹائیں"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"رابطہ شامل کریں"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"‏نیا بنائیں‎…‎"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"لیبل تخلیق کریں"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"اس رابطے کا لنک ختم کر کے اسے متعدد رابطوں میں تبدیل کریں؟"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"لنک ختم کریں"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"کیا آپ پہلے سے کی گئی تبدیلیاں محفوظ کرنا اور اس رابطے کا لنک ختم کر کے متعدد رابطوں میں تبدیل کرنا چاہیں گے؟"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"محفوظ کریں"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"رابطے لنک کریں"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"جو رابطہ آپ <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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> لنک ہو گیا"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> رابطہ</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> رابطے ۔ <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> رابطہ ۔ <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> رابطے ۔ <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> رابطہ ۔ <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"‏Google سے"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> سے"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"یہ رابطہ حذف کرنے سے متعدد اکاؤنٹس کی تفاصیل حذف ہوجائیں گی۔"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"اس رابطے کو حذف کریں؟"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"حذف کریں"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"تبدیلیاں رد کریں"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"رابطہ موجود نہیں ہے۔"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"رابطہ ہوم اسکرین میں شامل ہو گیا۔"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> ہوم اسکرین میں شامل ہو گیا۔"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"نیا رابطہ بنائیں"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"نیا رابطہ بنائیں"</string>
     <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="2228592924476426108">"آپ کے رابطوں کی فہرست خالی ہے"</string>
-    <string name="noGroups" msgid="4607906327968232225">"کوئی لیبل نہیں۔"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"گروپس بنانے کیلئے آپ کو ایک اکاؤنٹ درکار ہے۔"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"اس لیبل کے ساتھ کوئی رابطے نہیں"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"اس اکاؤنٹ میں کوئی رابطے نہیں"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"آپ کے رابطوں کی فہرست خالی ہے"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"رابطہ محفوظ کرنے میں خرابی"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"رابطہ کی تصویر کی تبدیلیاں محفوظ نہیں ہو سکیں"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"لیبل لوڈ ہونے میں ناکام"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"لیبل محفوظ ہو گیا"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"لیبل حذف ہو گیا"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"لیبل تخلیق ہو گیا"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"لیبل نہیں بنایا جا سکتا"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"پیغام بھیجیں"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"رابطے منتخب کریں"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"بھیجیں"</string>
-    <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" 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" 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="5948889261993124839">"تمام"</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_plus_button" msgid="515164827856229880">"پلس"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> از <xliff:g id="TOTAL_NUMBER">%s</xliff:g> رابطے"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"آپ کے رابطوں کے نام"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"لیبل کا نام"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> اکاؤنٹ"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"لیبل"</string>
-    <string name="change_photo" msgid="8530597935483526383">"تبدیل کریں"</string>
-    <string name="description_star" msgid="2605854427360036550">"پسندیدہ"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"رابطہ میں ترمیم کریں"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"منسوخ کریں"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"پیچھے"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"بند کریں"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"موجودہ رابطہ کو منتخب کردہ رابطہ کے ساتھ لنک کریں؟"</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="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="7122002148518724139">"سال شامل کریں"</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="4347232421410561500">"اکاؤنٹ شامل کریں"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"درآمد کریں"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"‏نیا بنائیں‎…‎"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"رد کریں"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"منسوخ کریں"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"حسب ضرورت بنانے کو مسترد کریں؟"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"رابطے تلاش کریں"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"رابطے ہٹائیں"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"میرا مقامی پروفائل"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"میرا <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> پروفائل"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"سبھی رابطے ڈسپلے کر رہا ہے"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"اپنے رابطوں کو محفوظ رکھیں اگرچہ آپ کا فون کھو جائے: ایک آن لائن سروس کے ساتھ مطابقت پذیر بنائیں۔"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"ایک اکاؤنٹ شامل کریں"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"‏ایسا اکاؤنٹ شامل کرنے کیلئے تھوڑا وقت نکالیں جو آپ کے رابطے Google پر بیک اپ کرے گا۔"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"نئے رابطے <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> میں محفوظ ہو جائیں گے۔"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"نئے رابطوں کیلئے ایک ڈیفالٹ اکاؤنٹ منتخب کریں:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"کم دیکھیں"</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="288549957278065542">"ایک ذاتی کاپی بنا رہا ہے…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$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>
@@ -285,20 +220,16 @@
     <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="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_sms" msgid="1666389577263317445">"‏حالیہ sms۔ <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>۔ <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>۔ <xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"حالیہ کال۔ <xliff:g id="CALL_TYPE">%1$s</xliff:g>۔ <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>۔ <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"مزید فیلڈز"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"رابطہ کی تصویر تبدیل کریں"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"رابطہ کی تصویر شامل کریں"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"ایڈیٹر کھولنے میں ناکام۔"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"اس میں محفوظ ہو رہا ہے"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> کی جانب سے معلومات قابل ترمیم نہیں ہے"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"فی الحال <xliff:g id="ACCOUNT_NAME">%s</xliff:g> میں محفوظ کیا جا رہا ہے۔ کوئی مختلف اکاؤنٹ منتخـب کرنے کیلئے دو بار تھپتھپائیں۔"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">لنک کردہ رابطے (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">لنک کردہ رابطہ</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> لنک کردہ رابطے"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"رابطے لنک کریں"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"منسوخ کریں"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ممکنہ ڈپلیکیٹس</item>
-      <item quantity="one">1 ممکنہ ڈپلیکیٹ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> لنک کردہ رابطے</item>
-      <item quantity="one">1 لنک کردہ رابطہ</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"یہ رابطہ"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"ممکنہ ڈپلیکیٹس"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"یہ رابطے ایک ہی شخص کے ہو سکتے ہیں۔ آپ انہیں ایک رابطے کے طور پر آپس میں لنک کر سکتے ہیں۔"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"لنک کردہ رابطے"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"آپ کے اکاؤنٹس سے"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"تصویر چنیں"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> سے"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g> حذف کریں"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g> حذف کریں"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g> حذف کریں"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> کی تصویر چیک نہیں ہوئی"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> کی تصویر چیک ہو گئی"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"نامعلوم اکاؤنٹ سے تصویر نشان زد نہیں ہے"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"نامعلوم اکاؤنٹ سے تصویر نشان زد ہے"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"تجاویز"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"نیا"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"نیویگیشن دراز کھولیں"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"ڈائریکٹری"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"دفتری ڈائرکٹری"</string>
     <string name="local_search_label" msgid="2551177578246113614">"سبھی رابطے"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> سے زیادہ ملے۔"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g> کیلئے فوری رابطہ"</string>
     <string name="missing_name" msgid="8745511583852904385">"(کوئی نام نہیں)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"اکثر رابطہ کردہ"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"رابطہ دیکھیں"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"فون نمبرز والے سبھی رابطے"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"دفتری پروفائل رابطے"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"اپ ڈیٹس دیکھیں"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"نام"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"عرفی نام"</string>
-    <string name="full_name" msgid="6602579550613988977">"نام"</string>
     <string name="name_given" msgid="4280790853455320619">"پہلا نام"</string>
     <string name="name_family" msgid="7466985689626017037">"آخری نام"</string>
     <string name="name_prefix" msgid="59756378548779822">"نام کا سابقہ"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> پر ای میل کریں"</string>
     <string name="email" msgid="5668400997660065897">"ای میل"</string>
     <string name="postal_street" msgid="8133143961580058972">"اسٹریٹ"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"‏PO باکس"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"محلہ"</string>
     <string name="postal_city" msgid="6597491300084895548">"شہر"</string>
     <string name="postal_region" msgid="6045263193478437672">"ریاست"</string>
     <string name="postal_postcode" msgid="572136414136673751">"زپ کوڈ"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"مزید گروپس…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"\"<xliff:g id="GROUP">%s</xliff:g>\" کو مطابقت پذیری سے ہٹانے سے مطابقت پذیری سے گروپ سے خارج کردہ کوئی رابطے بھی ہٹ جائیں گے۔"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"ڈسپلے کے اختیارات محفوظ کر رہا ہے…"</string>
-    <string name="menu_done" msgid="796017761764190697">"ہوگیا"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"منسوخ کریں"</string>
     <string name="listCustomView" msgid="1840624396582117590">"حسب ضرورت منظر"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"درآمد کردہ رابطے اس میں محفوظ کریں:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"‏SIM کارڈ"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> کی برآمد منسوخ کریں؟"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"‏vCard کی درآمد/برآمد کو منسوخ نہیں کرسکا"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"نامعلوم خرابی۔"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%s</xliff:g>\" کو نہیں کھول سکا: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"۔"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"\"<xliff:g id="FILE_NAME">%1$s</xliff:g>\" کو نہیں کھول سکا: \"<xliff:g id="EXACT_REASON">%2$s</xliff:g>\"۔"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"برآمد کنندہ شروع نہیں ہو سکا: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"۔"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"کوئی قابل برآمد رابطہ نہیں ہے۔"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"آپ نے ایک درکار اجازت غیر فعال کر دی ہے۔"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"برآمد کرنے کے دوران ایک خرابی پیش آگئی: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"۔"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"مطلوبہ فائل کا نام کافی بڑا (\"<xliff:g id="FILENAME">%s</xliff:g>\") ہے۔"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"‏I/O خرابی"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"کافی میموری نہیں ہے۔ فائل کافی بڑی ہو سکتی ہے۔"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"‏ایک غیر متوقع وجہ سے vCard کو پارس نہیں کرسکا۔"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"فارمیٹ تعاون یافتہ نہیں ہے۔"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"‏مقررہ vCard فائل (فائلوں) کی میٹا معلومات اکٹھا نہیں کرسکا۔"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"‏ایک یا مزید فائلیں درآمد نہیں ہوسکیں (%s)۔"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> کی برآمد مکمل ہوگئی۔"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"رابطوں کی برآمدگی مکمل ہو گئی۔"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"رابطوں کی برآمدگی مکمل ہو گئی، رابطوں کا اشتراک کرنے کیلئے اطلاع پر کلک کریں۔"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"رابطہ کا ڈیٹا برآمد کر رہا ہے"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"رابطہ ڈیٹا برآمد ہو رہا ہے۔"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"ڈیٹابیس کی معلومات حاصل نہیں ہو سکی۔"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"برآمد کرنے لائق کوئی رابطے نہیں ہیں۔ اگر آپ کے فون پر واقعی رابطے ہیں تو ممکن ہے کچھ ڈیٹا فراہم کنندگان رابطوں کو فون سے برآمد کیے جانے کی اجازت نہ دیتے ہوں۔"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"کوئی قابل برآمد رابطے نہیں ہیں۔"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"‏vCard کمپوزر مناسب طریقے سے شروع نہیں ہوا۔"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"برآمد نہیں کیا جاسکا"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"رابطوں کا ڈیٹا برآمد نہیں ہوا۔\nوجہ: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> کو درآمد کر رہا ہے"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"‏vCard کا ڈیٹا نہیں پڑھ سکا"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"‏vCard کا ڈیٹا پڑھنا منسوخ ہوگیا"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"‏vCard <xliff:g id="FILENAME">%s</xliff:g> کی درآمد پوری ہوگئی"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> کی درآمد منسوخ ہوگئی"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> جلد ہی درآمد کی جائے گی۔"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"فائل جلد ہی درآمد کی جائے گی۔"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"‏vCard درآمد کرنے کی درخواست مسترد ہوگئی تھی۔ بعد میں دوبارہ کوشش کریں۔"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> جلد ہی برآمد کی جائے گی۔"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"فائل تھوڑی دیر میں برآمد کر دی جائے گی۔"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"رابطے جلد ہی برآمد ہو جائیں گے۔"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"‏vCard برآمد کرنے کی درخواست مسترد ہوگئی تھی۔ بعد میں دوبارہ کوشش کریں۔"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"رابطہ"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"‏vCard(s)‎ کو مقامی عارضی اسٹوریج میں ذخیرہ کر رہا ہے۔ اصل درآمد جلد ہی شروع ہوگی۔"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"‏vCard درآمد نہیں کرسکا۔"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"‏NFC پر موصولہ رابطہ"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"رابطے برآمد کریں؟"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"ذخیرہ کر رہا ہے"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g> درآمد کر رہا ہے"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"<xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g> درآمد کر رہا ہے"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"‏‎.vcf فائل میں برآمد کریں"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"ترتیب دیں بہ لحاظ"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"پہلا نام"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"میری معلومات"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"اپنے پروفائل کو ترتیب دیں"</string>
     <string name="setting_about" msgid="7014388749752042863">"رابطے کے بارے میں"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"مرئی رابطوں کا اشتراک کریں"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"مرئی رابطوں کا اشتراک کرنے میں ناکام ہو گیا۔"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"پسندیدہ رابطوں کا اشتراک کریں"</string>
     <string name="share_contacts" msgid="8109287987498711664">"سارے رابطوں کا اشتراک کریں"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"رابطوں کا اشتراک کرنے میں ناکام۔"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"اشتراک کرنے کے لئے کوئی رابطے نہیں ہیں۔"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"ڈسپلے کرنے کیلئے رابطے"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"ڈسپلے کرنے کیلئے رابطے"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"حسب ضرورت منظر طے کریں"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"منظر حسب ضرورت بنائیں"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"محفوظ کریں"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"رابطے تلاش کریں"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"پسندیدہ"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"کوئی رابطے نہیں ہیں۔"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"اکثر و بیشتر کو صاف کریں"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"‏SIM کارڈ منتخب کریں"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"اکاؤنٹس کا نظم کریں"</string>
     <string name="menu_import" msgid="6107961135813836467">"درآمد کریں"</string>
     <string name="menu_export" msgid="2658783911863503902">"برآمد کریں"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"مسدود کردہ نمبرز"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> بذریعہ <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"تلاش کرنا بند کریں"</string>
     <string name="description_clear_search" msgid="688023606766232904">"تلاش صاف کریں"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"رابطہ کے ڈسپلے کے اختیارات"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"اکاؤنٹ"</string>
     <string name="set_default_account" msgid="4311613760725609801">"کالز کیلئے ہمیشہ اس کا استعمال کریں"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"کال کریں مع"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"ایک نوٹ کے ساتھ کال کریں"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"کال کے ساتھ بھیجنے کیلئے ایک نوٹ ٹائپ کریں…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"بھیجیں اور کال کریں"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g> <xliff:g id="COUNT_3">%2$d</xliff:g> بغیر پڑھی ہوئی آئٹمز۔ </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g> <xliff:g id="COUNT_1">%2$d</xliff:g> بغیر پڑھی ہوئی آئٹم۔ </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"بلڈ ورژن"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"اوپن سورس لائسنسز"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"اوپن سورس سافٹ ویئر کیلئے لائسنس کی تفصیلات"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"حذف کریں"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"ایلپسیس"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> سیکنڈ"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> منٹ <xliff:g id="SECONDS">%s</xliff:g> سیکنڈ"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> گھنٹے <xliff:g id="MINUTES_1">%s</xliff:g> منٹ <xliff:g id="SECONDS">%s</xliff:g> سیکنڈ"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> منٹ <xliff:g id="SECONDS">%2$s</xliff:g> سیکنڈ"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> گھنٹے <xliff:g id="MINUTES_1">%2$s</xliff:g> منٹ <xliff:g id="SECONDS">%3$s</xliff:g> سیکنڈ"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"یہ شارٹ کٹ غیر فعال کر دیا گیا ہے"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"رابطہ ہٹا دیا گیا"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"درآمد کریں"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"کوئی کنکشن نہیں ہے"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"مزید دکھائیں"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"‏SIM کارڈ کی درآمد مکمل ہو گئی"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"درآمد کرنا ناکام ہو گیا"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"‏SIM کارڈ سے رابطے درآمد نہیں ہو سکے"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"‏SIM درآمد ہو رہی ہے"</string>
 </resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index d1ebfbf..d6ce988 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Kontaktlar"</string>
     <string name="contactsList" msgid="8661624236494819731">"Kontaktlar"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Kontakt qo‘shish"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Kontakt"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Tezkor chaqiruv"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Tezkor SMS"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Kontaktni tanlang"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Raqamni tanlang"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"SMS uchun raqamni tanlang"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Kontakt tanlash"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Ma’lumot qo‘shish"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Kontaktni tanlang"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Tanlash"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Yangi kontakt yaratish"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Kontakt tafsilotlari"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Aloqa ma’lumoti"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Yangilanishlar"</string>
     <string name="searchHint" msgid="8482945356247760701">"Kontaktlar ichidan qidirish"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Kontaktni ko‘rish"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Saralanganlarga qo‘shish"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Saralanganlardan olib tashlash"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Sevimlilardan o‘chirib tashlandi"</string>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"O‘chirish"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"Suratni almashtirish"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"Yorliq yaratish"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Qo‘ng‘iroq qilish"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"SMS/MMS yuborish"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Ajratish"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Kontaktlarni olib tashlash"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Yorliqni qayta nomlash"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Kontaktlarni tanlash"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Kontakt qo‘shish"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Yorliqni olib tashlash"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Kontakt qo‘shish"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Yangi yorliq yaratish…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Yorliq yaratish"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Bu kontakt bir nechta kontaktga ajratilsinmi?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Ajratish"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"O‘zgarishlarni saqlab, ushbu kontaktni bir nechta kontaktlarga ajratilsinmi?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Saqlash"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Kontaktlarni bog‘lash"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"<xliff:g id="NAME">%s</xliff:g> bilan bog‘lamoqchi bo‘lgan kontaktni tanlang:"</string>
-    <string name="showAllContactsJoinItem" msgid="2189695051430392383">"Barcha kontaktlarni ko‘rsatish"</string>
     <string name="separatorJoinAggregateSuggestions" msgid="2831414448851313345">"Taklif etilgan kontaktlar"</string>
     <string name="separatorJoinAggregateAll" msgid="7939932265026181043">"Barcha kontaktlar"</string>
     <string name="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> bog‘landi"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ta kontakt</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> ta kontakt · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ta kontakt · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> ta kontakt · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta kontakt · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Google kontaktlari"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"<xliff:g id="ACCOUNT">%s</xliff:g> hisobidan"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Bu kontakt o‘chirib tashlansa, bir nechta hisobdagi ma’lumotlar ham o‘chib ketadi."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Bu kontakt o‘chirib tashlansinmi?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"O‘chirish"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"O‘zgarishlarni bekor qilish"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Kontakt mavjud emas."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Kontakt bosh ekranga chiqarildi."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"<xliff:g id="NAME">%s</xliff:g> bosh ekranga chiqarildi."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Yangi kontakt yaratish"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Yangi kontakt yaratish"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Planshetda rasmlar mavjud emas."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Telefonda rasm yo‘q."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Kontakt surati"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Nomi"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Chaqiruvlarni bevosita ovozli pochtaga yuborish"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Suratni olib tashlash"</string>
     <string name="noContacts" msgid="2228592924476426108">"Hech qanday kontakt yo‘q"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Hech qanday yorliq yo‘q."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Guruh yaratish uchun hisobingiz bo‘lishi kerak."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Bunday yorliqli kontakt yo‘q"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Bu hisobda hech qanday kontakt yo‘q"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Hech qanday kontakt yo‘q"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Kontaktni saqlashda xatolik yuz berdi."</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Kontakt suratiga kiritilgan o‘zgarishlar saqlanmadi."</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Yorliqni yuklashda xatolik yuz berdi"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Yorliq saqlandi"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Yorliq o‘chirib tashlandi"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Yorliq yaratildi"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Yorliq yaratib bo‘lmadi"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"SMS yuborish"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Kontaktlarni tanlash"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Yuborish"</string>
-    <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 raqami bor hech qanday kontakt yo‘q"</string>
-    <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">"Hech qanday kontakt yo‘q."</string>
-    <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="5948889261993124839">"Hammasi"</string>
-    <string name="callBack" msgid="5498224409038809224">"Telefon"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Yana telefon qilish"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Telefon qilish"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"“<xliff:g id="EMAIL">%s</xliff:g>” kontaktlarga qo‘shilsinmi?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"plyus"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> ta kontakt, jami: <xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Kontaktlaringiz ismi"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Ushbu amalni bajarish uchun ilova topilmadi."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Avvalgi ekranga qaytish uchun bosing"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Telefon raqamini kiritish"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"E-pochta manzilini kiritish"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Yorliq nomi"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Ovozli suhbat"</string>
     <string name="video_chat" msgid="1872255818640336072">"Video suhbat"</string>
-    <string name="connections" msgid="8098440723172028350">"Ulanishlar"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Aloqa qo‘shish"</string>
-    <string name="recent" msgid="2659189233141493004">"Yaqinda"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"So‘nggi yangilanishlar"</string>
     <string name="account_type_format" msgid="718948015590343010">"<xliff:g id="SOURCE">%1$s</xliff:g> kontakt"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> hisobi"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Suratga olish"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Suratga olish"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Surat tanlash"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Boshqa surat tanlash"</string>
     <string name="search_results_searching" msgid="3984833028938569930">"Qidirilmoqda…"</string>
-    <string name="menu_display_selected" msgid="6470001164297969034">"Tanlanganni ko‘rsatish"</string>
-    <string name="menu_display_all" msgid="8887488642609786198">"Hammasini ko‘rsatish"</string>
-    <string name="menu_select_all" msgid="621719255150713545">"Hammasini belgilash"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Hammasini bekor qilish"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Yangisini qo‘shish"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Tashkilot qo‘shish"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Sana"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Yorliq"</string>
-    <string name="change_photo" msgid="8530597935483526383">"O‘zgartirish"</string>
-    <string name="description_star" msgid="2605854427360036550">"ajratilgan"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Kontaktni tahrirlash"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Bekor qilish"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Orqaga"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"yopish"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Joriy kontakt tanlangan kontaktga bog‘lansinmi?"</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 nusxalash"</string>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Kontaktlarimga qo‘shish"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Direktoriya <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Sozlamalar"</string>
     <string name="menu_settings" msgid="377929915873428211">"Sozlamalar"</string>
     <string name="menu_help" msgid="1680178646764069976">"Yordam va fikr-mulohaza"</string>
-    <string name="preference_displayOptions" msgid="1341720270148252393">"Kontaktlarning ko‘rinishi"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Kontaktlarga qo‘shish"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Ma’lumot qo‘shish"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Yopish"</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="7122002148518724139">"yili bilan birga"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Kontakt"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Yuklanmoqda…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Yangi kontakt yaratish"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Hisob qo‘shish"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Import qilish"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Yangi yorliq yaratish…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Bekor qilish"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Bekor qilish"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"O‘zgarishlar bekor qilinsinmi?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Kontaktlarni qidirish"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Kontaktlarni olib tashlash"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Qurilmadagi profilim"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Mening <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> profilim"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Barcha kontaktlar ko‘rsatilmoqda"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Onlayn xizmat yordamida sinxronlab, telefoningiz yo‘qolganda ham kontaktlaringizni saqlab qoling."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Hisob qo‘shish"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Kontaktlaringizni Google xizmatiga saqlash uchun hisob qo‘shing."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Yangi kontaktlar <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g> hisobiga saqlanadi."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Yangi kontaktlar uchun birlamchi hisobni tanlang:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Kamroq"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Yaqinda"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Kontakt haqida:"</string>
-    <string name="send_message" msgid="8938418965550543196">"Xabar yuborish"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Shaxsiy nusxasi yaratilmoqda…"</string>
     <string name="tomorrow" msgid="6241969467795308581">"Ertaga"</string>
     <string name="today" msgid="8041090779381781781">"Bugun"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Bugun <xliff:g id="TIME_INTERVAL">%s</xliff:g> da"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Ertaga <xliff:g id="TIME_INTERVAL">%s</xliff:g> da"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Nomsiz tadbir)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Saqlash"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"Tezkor xabar (IM)"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Veb-sayt"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Tadbir"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Aloqadorligi"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Hisob"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Ism"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"E-pochta"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Telefon"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Kontaktni tahrirlash oynasini ochish uchun bosing."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Kontaktni tahrirlash oynasini yopish uchun bosing."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"manzilga yo\'nalishlar"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"Yaqindagi SMS xabar. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Javob berish uchun bosing."</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"Yaqindagi SMS xabar. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Javob berish uchun bosing."</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"kiruvchi"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"chiquvchi"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"javobsiz"</string>
-    <string name="content_description_recent_call" msgid="5183800406316723676">"Yaqindagi chaqiruv. <xliff:g id="CALL_TYPE">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. Qaytarib qilish uchun bosing."</string>
+    <string name="content_description_recent_call" msgid="5183800406316723676">"Yaqindagi chaqiruv. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. Qaytarib 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="editor_more_fields" msgid="3630987771304393421">"Boshqa maydonlarni ko‘rsatish"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Kontakt suratini o‘zgartirish"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Kontakt suratini qo‘shish"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Muharrirni ochib bo‘lmadi."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Qayerga saqlansin:"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> hisobining kontakt ma’lumotlarini o‘zgartirib bo‘lmaydi."</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Ma’lumotlar hozirgi vaqtda <xliff:g id="ACCOUNT_NAME">%s</xliff:g> hisobiga saqlanmoqda. Boshqa hisobni tanlash uchun ikki marta bosing."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Bog‘langan kontaktlar (<xliff:g id="COUNT">%d</xliff:g> kishi)</item>
-      <item quantity="one">Bog‘langan kontakt</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> ta kontakt bog‘langan"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"KONTAKTLARNI BOG‘LASH"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"BEKOR QILISH"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ta takroriy kontakt</item>
-      <item quantity="one">1 ta takroriy kontakt</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ta bog‘langan kontakt</item>
-      <item quantity="one">1 ta bog‘langan kontakt</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Shu kontakt"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Takroriy kontaktlar"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Bu kontaktlar bitta odamga tegishli bo‘lishi mumkin. Ularni bitta kontaktga birlashtiring."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Bog‘langan kontaktlar"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Hisoblaringizdan olingan"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Surat tanlash"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"<xliff:g id="ACCOUNT_NAME">%s</xliff:g> tomonidan"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>ni o‘chirish"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>ni o‘chirish"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"<xliff:g id="DATA_KIND">%s</xliff:g>ni o‘chirish"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> hisobi rasmi belgilanmagan"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> hisobi rasmi belgilangan"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Noma’lum hisobdan rasm tanlash bekor qilindi"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Noma’lum hisobdan rasm tanlandi"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Tavsiyalar"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Yangi"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Navigatsiya panelini ochish"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Katalog"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Ishchi katalogi"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Barcha kontaktlar"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"<xliff:g id="COUNT">%d</xliff:g> tadan ko‘proq kontakt topildi."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Tezkor chaqiruv, kontakt: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Ismi yo‘q)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Tez-tez aloqa qilingan kontaktlar"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Kontaktni ko‘rish"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Telefon raqamiga ega kontaktlar"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Ishchi profili kontaktlari"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Yangilanishlarni ko‘rish"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM karta"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Ism"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Taxallus"</string>
-    <string name="full_name" msgid="6602579550613988977">"Ismi"</string>
     <string name="name_given" msgid="4280790853455320619">"Ismi"</string>
     <string name="name_family" msgid="7466985689626017037">"Familiyasi"</string>
     <string name="name_prefix" msgid="59756378548779822">"Murojaat shakli"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"E-pochta xat yozish (<xliff:g id="CUSTOM_LABEL">%s</xliff:g>)"</string>
     <string name="email" msgid="5668400997660065897">"E-pochta"</string>
     <string name="postal_street" msgid="8133143961580058972">"Ko‘cha"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Pochta qutisi"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Yaqin-atrof"</string>
     <string name="postal_city" msgid="6597491300084895548">"Shahar"</string>
     <string name="postal_region" msgid="6045263193478437672">"Viloyat"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Pochta indeksi"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Boshqa guruhlar…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"<xliff:g id="GROUP">%s</xliff:g> guruhini sinxronlash to‘xtatilsa, guruhga qo‘shilmagan kontaktlar ham sinxronlanmay qoladi."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Parametrlar saqlanmoqda…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Tayyor"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Bekor qilish"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Maxsus ko‘rinish"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Kontaktlar bu yerga saqlansin:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM karta"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"<xliff:g id="FILENAME">%s</xliff:g> faylini eksport qilish bekor qilinsinmi?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"vCard faylini import/eksport qilishni bekor qilib bo‘lmadi."</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Noma’lum xato."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"<xliff:g id="FILE_NAME">%s</xliff:g> faylini ochib bo‘lmadi. Sababi: <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"<xliff:g id="FILE_NAME">%1$s</xliff:g> faylini ochib bo‘lmadi. Sababi: <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Eksport qilish funksiyasini ishga tushirib bo‘lmaydi. Sababi: “<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Eksport qilish kontaktlar yo‘q."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Kerakli ruxsat o‘chirib qo‘yilgan."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Eksport qilish vaqtida xatolik yuz berdi. Sababi: “<xliff:g id="EXACT_REASON">%s</xliff:g>”."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Fayl nomi juda uzun (“<xliff:g id="FILENAME">%s</xliff:g>”)."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O xato"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Xotira yetarli joy yo‘q. Fayl juda katta bo‘lishi mumkin."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"vCard faylini tahlil qilib bo‘lmadi."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Bu format qo‘llab-quvvatlanmaydi."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"vCard fayllarning meta ma’lumotlarini yig‘ib bo‘lmadi."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Bir yoki bir necha fayllarni import qilib bo‘lmadi (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"<xliff:g id="FILENAME">%s</xliff:g> eksport qilindi."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Kontaktlar eksport qilindi."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Kontaktlar eksport qilindi. Ularni baham ko‘rish uchun bildirishnoma ustiga bosing."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Kontakt ma’lumoti eksport qilinmoqda."</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Kontakt ma’lumotlari eksport qilinmoqda."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Ma’lumotlar bazasiga kirib bo‘lmadi."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Eksport qilish uchun kontaktlar yo‘q. Ba’zi tarmoq operatorlari kontaktlarni telefondan eksport qilishga ruxsat bermagan bo‘lishi mumkin."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Eksport qilish uchun hech qanday kontakt yo‘q."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard muharririni ishga tushirishda xatolik yuz berdi."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Eksport qilinmadi"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Kontakt ma’lumoti eksport qilinmadi.\nSababi: “<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"<xliff:g id="NAME">%s</xliff:g> import qilinmoqda"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"vCard fayli ma’lumot-ni o‘qib bo‘lmadi"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"vCard faylini o‘qish bekor qilindi"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"<xliff:g id="FILENAME">%s</xliff:g> vCard fayli import qilindi"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"<xliff:g id="FILENAME">%s</xliff:g> faylini import qilish bekor qilindi"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> tez orada import qilinadi."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Fayl tez orada import qilinadi."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Tashrifnomani import qilish so‘rovi rad qilindi. Keyinroq urinib ko‘ring."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> tezda eksport qilinadi."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Fayl tez orada eksport qilinadi."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Kontaktlar tez orada eksport qilinadi."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Tashrifnomani eksport qilish rad qilindi. Keyinroq urinib ko‘ring."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"kontakt"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"vCard fayllari vaqtinchalik ichki xotira keshiga yuklanmoqda. Import qilish jarayoni tezda boshlanadi."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Tashrifnoma import qilinmadi."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"NFC orq. olindi"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Kontaktlar eksport qilinsinmi?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Keshga yuklanmoqda"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Import qilinmoqda: <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g> – <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Import qilinmoqda: <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> – <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"VCF faylga eksport qilish"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Saralash tartibi"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Ismi"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Mening ma’lumotlarim"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Profilingizni sozlang"</string>
     <string name="setting_about" msgid="7014388749752042863">"Kontaktlar ilovasi haqida"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Ko‘rinadigan kontaktlarni yuborish"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Ko‘rinadigan kontaktlarni yuborib bo‘lmadi."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Sevimli kontaktlarni yuborish"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Barcha kontaktlarni yuborish"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Kontaktlarni yuborib bo‘lmadi."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Yuborish uchun hech qanday kontakt yo‘q."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Ko‘rsatiladigan kontaktlar"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Ko‘rsatiladigan kontaktlar"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Maxsus ko‘rinishni sozlash"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Ko‘rishni moslashtirish"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Saqlash"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Kontaktlar ichidan qidirish"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Saralangan"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Hech qanday kontakt yo‘q."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Tez-tez aloqa qiling. tozalash"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"SIM kartani tanlash"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Hisoblarni boshqarish"</string>
     <string name="menu_import" msgid="6107961135813836467">"Import qilish"</string>
     <string name="menu_export" msgid="2658783911863503902">"Eksport qilish"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Bloklangan raqamlar"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> – <xliff:g id="SOURCE">%2$s</xliff:g> orqali"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"qidiruvni to‘xtatish"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Izlashni tozalash"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Kontaktlarning namoyish etilishi parametrlari"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Hisob"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Har doim qo‘ng‘iroq. uchun foyd-sin"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Qo‘ng‘iroq uchun hisob"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Qo‘ng‘iroq vaqtida matn yuborish"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Qo‘ng‘iroq vaqtida yuborish lozim bo‘lgan matnni kiriting…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"XABAR YUBORISH VA QO‘NG‘. QILISH"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> ta o‘qilmagan narsa. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> ta o‘qilmagan narsa. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Versiyasi"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Ochiq kodli DT litsenziyalari"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Ochiq kodli DT litsenziyalari haqida ma’lumot"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"O‘chirib tashlash"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Uch nuqta"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> son."</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> daq. <xliff:g id="SECONDS">%s</xliff:g> son."</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> soat <xliff:g id="MINUTES_1">%s</xliff:g> daq. <xliff:g id="SECONDS">%s</xliff:g> son."</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> daq. <xliff:g id="SECONDS">%2$s</xliff:g> son."</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> soat <xliff:g id="MINUTES_1">%2$s</xliff:g> daq. <xliff:g id="SECONDS">%3$s</xliff:g> son."</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Bu yorliq o‘chirib tashlandi"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Kontakt olib tashlandi"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Import qilish"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Aloqa yo‘q"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM karta"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Yana"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Kontaktlar SIM kartadan import qilindi"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Import qilib bo‘lmadi"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Kontaktlarni SIM kartadan import qilib bo‘lmadi."</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Kontakt. SIM kartadan import qilinmoqda…"</string>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index d9edc91..c9fa110 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Danh bạ"</string>
     <string name="contactsList" msgid="8661624236494819731">"Danh bạ"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Thêm liên hệ"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Liên hệ"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Quay số trực tiếp"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Tin nhắn trực tiếp"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Chọn lối tắt cho liên hệ"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Chọn một số để gọi"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Chọn một số để gửi tin nhắn"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Chọn liên hệ"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Thêm vào liên hệ"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Chọn người liên hệ"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Chọn"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Tạo liên hệ mới"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Chi tiết liên hệ"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Giới thiệu"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Cập nhật"</string>
     <string name="searchHint" msgid="8482945356247760701">"Tìm kiếm trong danh bạ"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Xem liên hệ"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Thêm vào liên hệ ưa thích"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Xóa khỏi mục ưa thích"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Đã xóa khỏi mục ưa thích"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Tạo phím tắt"</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>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Hủy liên kết"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Xóa liên hệ"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Đổi tên nhãn"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Chọn liên hệ"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Thêm liên hệ"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Xóa khỏi nhãn"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Thêm liên hệ"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Tạo mới…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Tạo nhãn"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Bạn muốn hủy liên kết liên hệ này thành nhiều liên hệ?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Hủy liên kết"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Bạn có muốn lưu các thay đổi mình đã thực hiện và hủy liên kết liên hệ này thành nhiều liên hệ không?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Lưu"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Liên kết liên hệ"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Chọn liên hệ bạn muốn liên kết 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="contactsJoinedNamedMessage" msgid="1299418263439579455">"Đã liên kết <xliff:g id="NAME">%s</xliff:g>"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> liên hệ</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> liên hệ · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> liên hệ · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> liên hệ · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> liên hệ · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Từ Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Từ <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Xóa liên hệ này sẽ xóa thông tin chi tiết khỏi nhiều tài khoản."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Bạn muốn xóa liên hệ này?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Xóa"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Hủy các thay đổi"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Địa chỉ liên hệ không tồn tại."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Đã thêm liên hệ vào Màn hình chính."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"Đã thêm <xliff:g id="NAME">%s</xliff:g> vào Màn hình chính."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Tạo liên hệ mới"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Tạo địa chỉ liên hệ mới"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Không có ảnh nào trong máy tính bảng."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Không có ảnh nào trong điện thoại."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Ảnh của liên hệ"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Tên nhãn tùy chỉnh"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Gửi cuộc gọi trực tiếp tới thư thoại"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Xóa ảnh"</string>
     <string name="noContacts" msgid="2228592924476426108">"Danh sách liên hệ của bạn trống"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Không có nhãn."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Để tạo nhóm, bạn cần có tài khoản."</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Không có liên hệ nào có nhãn này"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Không có danh bạ trong tài khoản này"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Danh sách liên hệ của bạn trống"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Đã xảy ra lỗi khi lưu liên hệ"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Không thể lưu thay đổi đối với ảnh của liên hệ"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Không tải được nhãn"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Đã lưu nhãn"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Đã xóa nhãn"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Đã tạo nhãn"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Không thể tạo nhãn"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Gửi tin nhắn"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Chọn liên hệ"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Gửi"</string>
-    <plurals name="listTotalPhoneContacts" formatted="false" msgid="3692277679143308755">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> liên hệ có số điện thoại</item>
-      <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" 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" 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="5948889261993124839">"Tất cả"</string>
-    <string name="callBack" msgid="5498224409038809224">"Gọi lại"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Gọi lại"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Gọi lại"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Thêm \"<xliff:g id="EMAIL">%s</xliff:g>\" vào danh bạ?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"cộng"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> trong tổng số <xliff:g id="TOTAL_NUMBER">%s</xliff:g> liên hệ"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Tên danh bạ của bạn"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Không tìm thấy ứng dụng nào để xử lý tác vụ này."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Nhấp để quay lại màn hình trước đó"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Thêm số điện thoại"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Thêm email"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Tên nhãn"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Trò chuyện thoại"</string>
     <string name="video_chat" msgid="1872255818640336072">"Trò chuyện qua video"</string>
-    <string name="connections" msgid="8098440723172028350">"Kết nối"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Thêm kết nối"</string>
-    <string name="recent" msgid="2659189233141493004">"Gần đây"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Cập nhật gần đây"</string>
     <string name="account_type_format" msgid="718948015590343010">"Liên hệ <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"Tài khoản <xliff:g id="SOURCE">%1$s</xliff:g>"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Chụp ảnh"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Chụp ảnh mới"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Chọn ảnh"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Chọn ảnh mới"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Chọn tất cả"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Bỏ chọn tất cả"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Thêm mục mới"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Thêm tổ chức"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Ngày"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Nhãn"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Thay đổi"</string>
-    <string name="description_star" msgid="2605854427360036550">"Yêu thích"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Chỉnh sửa liên hệ"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Hủy"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Quay lại"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"đóng"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Liên kết liên hệ hiện tại với 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Thêm vào Danh bạ của tôi"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Thư mục <xliff:g id="TYPE">%1$s</xliff:g>"</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="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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Thêm vào danh bạ"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Thêm vào liên hệ"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Đóng"</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="7122002148518724139">"Bao gồm năm"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Liên hệ"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Đang tải…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Tạo liên hệ mới"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Thêm tài khoản"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Nhập"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Tạo mới…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Hủy"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Hủy"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Hủy tùy chỉnh?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Tìm kiếm trong danh bạ"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Xóa liên hệ"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"T.sử cục bộ của tôi"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Tiểu sử <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> của tôi"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Đang hiển thị tất cả liên hệ"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Đảm bảo an toàn cho danh sách liên hệ của bạn ngay cả khi bạn mất điện thoại: hãy đồng bộ hóa với một dịch vụ trực tuyến."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Thêm tài khoản"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Dành chút thời gian để thêm tài khoản mà sẽ sao lưu danh bạ của bạn vào Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Liên hệ mới sẽ được lưu vào <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Chọn tài khoản mặc định cho các liên hệ mới:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Xem bớt"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Gần đây"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Giới thiệu"</string>
-    <string name="send_message" msgid="8938418965550543196">"Gửi tin nhắn"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Đang tạo bản sao cá nhân..."</string>
     <string name="tomorrow" msgid="6241969467795308581">"Ngày mai"</string>
     <string name="today" msgid="8041090779381781781">"Hôm nay"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Hôm nay lúc <xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Ngày mai lúc <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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Sự kiện không có tiêu đề)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Đặt"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"IM"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Trang web"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Sự kiện"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Quan hệ"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"Tài khoản"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Tên"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"Email"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Điện thoại"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Nhấp để mở rộng trình chỉnh sửa liên hệ."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Nhấp để thu gọn trình chỉnh sửa liên hệ."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"chỉ đường tới địa điểm"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms gần đây. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. nhấp để trả lời"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"sms gần đây. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. nhấp để trả lời"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"cuộc gọi đến"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"cuộc gọi đi"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"cuộc gọi bị nhỡ"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"cuộc gọi gần đây. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Trường khác"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Thay đổi ảnh của liên hệ"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Thêm ảnh của liên hệ"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Không mở được trình chỉnh sửa."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Lưu vào"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Thông tin liên hệ từ <xliff:g id="ACCOUNT">%s</xliff:g> không thể chỉnh sửa được"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Hiện đang lưu vào <xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Hãy nhấn đúp để chọn tài khoản khác."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">Liên hệ được liên kết (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">Liên hệ được liên kết</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> liên hệ đã liên kết"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"LIÊN KẾT LIÊN HỆ"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"HỦY"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Liên hệ có thể trùng lặp</item>
-      <item quantity="one">1 liên hệ có thể trùng lặp</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> liên hệ được liên kết</item>
-      <item quantity="one">1 liên hệ được liên kết</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Liên hệ này"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Có thể trùng lặp"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Các liên hệ này có thể là cùng một người. Bạn có thể liên kết chúng với nhau thành một liên hệ duy nhất."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Liên hệ đã liên kết"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Từ các tài khoản của bạn"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Chọn ảnh"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Từ <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Xóa <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Xóa <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Xóa <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Ảnh từ <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>không được chọn"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Ảnh từ <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>được chọn"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Chưa chọn ảnh từ tài khoản không xác định"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Đã chọn ảnh từ tài khoản không xác định"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Đề xuất"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Mới"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Mở ngăn điều hướng"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Thư mục"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Thư mục công việc"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Tất cả địa chỉ liên hệ"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"Đã tìm thấy hơn <xliff:g id="COUNT">%d</xliff:g> địa chỉ liên hệ."</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Liên hệ nhanh cho <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(Không có tên)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Thường xuyên được liên hệ"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Xem địa chỉ liên hệ"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Tất cả địa chỉ liên hệ có số điện thoại"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Liên hệ trên hồ sơ công việc"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Xem thông tin c.nhật"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Tên"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Biệt hiệu"</string>
-    <string name="full_name" msgid="6602579550613988977">"Tên"</string>
     <string name="name_given" msgid="4280790853455320619">"Tên"</string>
     <string name="name_family" msgid="7466985689626017037">"Họ"</string>
     <string name="name_prefix" msgid="59756378548779822">"Tiền tố tên"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Gửi email tới <xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"Gửi email"</string>
     <string name="postal_street" msgid="8133143961580058972">"Đường phố"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"Hộp thư bưu điện"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Vùng lân cận"</string>
     <string name="postal_city" msgid="6597491300084895548">"Thành phố"</string>
     <string name="postal_region" msgid="6045263193478437672">"Tiểu bang"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Mã ZIP"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Nhóm khác…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Xóa \"<xliff:g id="GROUP">%s</xliff:g>\" khỏi đồng bộ hóa cũng sẽ xóa bất kỳ địa chỉ liên hệ nào đã được tách nhóm khỏi đồng bộ hóa."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Đang lưu tùy chọn hiển thị…"</string>
-    <string name="menu_done" msgid="796017761764190697">"Xong"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Hủy"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Chế độ xem tùy chỉnh"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Lưu danh bạ đã nhập vào:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"Thẻ SIM"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Hủy yêu cầu xuất <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Không thể nhập/xuất vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Lỗi không xác định."</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Không thể mở \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>."</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Không thể mở \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>."</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Không thể chạy trình xuất: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Không thể xuất địa chỉ liên hệ nào."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Bạn đã tắt quyền được yêu cầu."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Đã xảy ra lỗi khi xuất: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Tên tệp yêu cầu quá dài (\"<xliff:g id="FILENAME">%s</xliff:g>\")."</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Lỗi I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Không đủ bộ nhớ. Tệp có thể quá lớn."</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Không thể phân tích cú pháp vCard vì lý do không mong muốn."</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Định dạng không được hỗ trợ."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Không thể thu thập thông tin meta của (các) tệp vCard cụ thể."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Không thể nhập một hoặc nhiều tệp (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Đã xuất xong <xliff:g id="FILENAME">%s</xliff:g>."</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Đã xuất xong danh bạ."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Đã xuất xong liên hệ. Nhấp vào thông báo để chia sẻ liên hệ."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Xuất dữ liệu liên hệ"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Dữ liệu liên hệ đang được xuất."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Không thể nhận thông tin cơ sở dữ liệu."</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Không thể xuất địa chỉ liên hệ nào. Nếu bạn có danh bạ trên điện thoại của mình, một số nhà cung cấp dữ liệu không cho phép xuất danh bạ từ điện thoại."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Không có liên hệ nào có thể xuất."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Trình soạn vCard không khởi động đúng."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Không thể xuất"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Không xuất được dữ liệu địa chỉ liên hệ.\nLý do: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Đang nhập <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Không thể đọc dữ liệu vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Thao tác đọc dữ liệu vCard bị hủy"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Đã nhập xong vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Quá trình nhập <xliff:g id="FILENAME">%s</xliff:g> bị hủy"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> sẽ sớm được nhập."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Tệp sẽ sớm được nhập."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Yêu cầu nhập vCard bị từ chối. Hãy thử lại sau."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> sẽ sớm được xuất."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Tệp sẽ sớm được xuất."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Danh bạ sẽ được xuất ngay."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Yêu cầu xuất vCard bị từ chối. Hãy thử lại sau."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"địa chỉ liên hệ"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Đang lưu vào bộ nhớ cache các tệp vCard sẽ được nhập vào bộ nhớ cục bộ tạm thời. Thao tác nhập thực sự sẽ sớm bắt đầu."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Không thể nhập vCard."</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"L.h nhận qua NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Xuất danh bạ?"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Đang lưu vào bộ nhớ cache"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Đang nhập <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Đang nhập <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Xuất sang tệp .vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Sắp xếp theo"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Tên"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Thông tin của tôi"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Thiết lập hồ sơ của bạn"</string>
     <string name="setting_about" msgid="7014388749752042863">"Giới thiệu về Danh bạ"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Chia sẻ liên hệ hiển thị"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Không chia sẻ được liên hệ được hiển thị."</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Chia sẻ liên hệ yêu thích"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Chia sẻ tất cả các liên hệ"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Không chia sẻ được liên hệ."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Không có liên hệ nào để chia sẻ."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Danh bạ để hiển thị"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"DS liên hệ để hiển thị"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Xác định xem tùy chỉnh"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Tùy chỉnh chế độ xem"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Lưu"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Tìm kiếm liên hệ"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Mục ưa thích"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Không có địa chỉ liên hệ nào."</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Xóa DS liên hệ thường xuyên"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Chọn thẻ SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Quản lý tài khoản"</string>
     <string name="menu_import" msgid="6107961135813836467">"Nhập"</string>
     <string name="menu_export" msgid="2658783911863503902">"Xuất"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Số bị chặn"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> qua <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"ngừng tìm kiếm"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Xóa tìm kiếm"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Tùy chọn hiển thị liên hệ"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"Tài khoản"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Luôn sử dụng SIM này để gọi"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Gọi bằng"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Gọi điện kèm theo ghi chú"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Nhập ghi chú để gửi kèm cuộc gọi..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"GỬI VÀ GỌI"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> mục chưa đọc. </item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>. <xliff:g id="COUNT_1">%2$d</xliff:g> mục chưa đọc. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Phiên bản đóng gói"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Giấy phép nguồn mở"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Chi tiết giấy phép cho phần mềm nguồn mở"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Xóa"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Dấu ba chấm"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> giây"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> phút <xliff:g id="SECONDS">%s</xliff:g> giây"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> giờ <xliff:g id="MINUTES_1">%s</xliff:g> phút <xliff:g id="SECONDS">%s</xliff:g> giây"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> phút <xliff:g id="SECONDS">%2$s</xliff:g> giây"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> giờ <xliff:g id="MINUTES_1">%2$s</xliff:g> phút <xliff:g id="SECONDS">%3$s</xliff:g> giây"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Phím tắt này đã bị vô hiệu hóa"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Liên hệ đã bị xóa"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Nhập"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Không có kết nối"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Hiển thị thêm"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Đã nhập xong thẻ SIM"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Nhập không thành công"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Không thể nhập liên hệ từ thẻ SIM"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Đang nhập SIM"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index e542aa0..ac866a1 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"通讯录"</string>
     <string name="contactsList" msgid="8661624236494819731">"通讯录"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"添加联系人"</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="shortcutActivityTitle" msgid="1504383567778497348">"选择联系人"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"添加到通讯录"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"选择联系人"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"选择"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"创建新联系人"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"联系人详情"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"删除"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"更换照片"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"创建快捷方式"</string>
-    <string name="menu_call" msgid="3992595586042260618">"呼叫联系人"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"向联系人发送短信"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"取消关联"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"移除联系人"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"重命名标签"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"选择联系人"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"添加联系人"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"从标签中移除"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"添加联系人"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"新建…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"创建标签"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"要取消此联系人与多个联系人的关联吗？"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"取消关联"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"您要保存目前所做的更改，并取消此联系人与多个联系人的关联吗？"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"保存"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"关联联系人"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"选择您想与<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"已关联<xliff:g id="NAME">%s</xliff:g>"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位联系人</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> 位联系人 · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位联系人 · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> 位联系人 · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 位联系人 · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"来自 Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"来自 <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"删除此联系人也将删除多个帐号中的相关详细信息。"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"要删除此联系人吗？"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"删除"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"舍弃更改"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"该联系人不存在。"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"已将该联系人添加到主屏幕。"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"已将<xliff:g id="NAME">%s</xliff:g>添加到主屏幕。"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"新建联系人"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"创建新联系人"</string>
     <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="2228592924476426108">"联系人列表是空的"</string>
-    <string name="noGroups" msgid="4607906327968232225">"没有标签。"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"您需要拥有一个帐号才能创建群组。"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"此标签下没有联系人"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"此帐号中没有联系人"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"联系人列表是空的"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"保存联系人时出错"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"无法保存对联系人照片的更改"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"无法加载标签"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"标签已保存"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"已删除标签"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"已创建标签"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"无法创建标签"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"发送信息"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"选择联系人"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"发送"</string>
-    <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" 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" 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="5948889261993124839">"全部"</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_plus_button" msgid="515164827856229880">"添加"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 个联系人（共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 个）"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"联系人姓名"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"标签名称"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g>帐号"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"标签"</string>
-    <string name="change_photo" msgid="8530597935483526383">"更改"</string>
-    <string name="description_star" msgid="2605854427360036550">"收藏"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"编辑联系人"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"取消"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"返回"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"关闭"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"要将当前联系人与所选联系人关联吗？"</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="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="7122002148518724139">"包含年份"</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="4347232421410561500">"添加帐号"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"导入"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"新建…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"舍弃"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"取消"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"要舍弃自定义设置吗？"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"搜索联系人"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"移除联系人"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"我的本地个人资料"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"我的<xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g>个人资料"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"显示所有联系人"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"即使手机丢了，也能确保您的联系人信息的安全性：与在线服务同步。"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"添加帐号"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"请花一点时间添加帐号，以便将联系人备份到 Google。"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"新建的联系人将保存到 <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>。"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"选择用来保存新建联系人的默认帐号："</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"隐藏部分"</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="288549957278065542">"正在创建个人副本..."</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>，<xliff:g id="TIME_INTERVAL">%2$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">"聊天工具"</string>
@@ -285,20 +220,16 @@
     <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="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">"近期短信：<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_sms" msgid="1666389577263317445">"近期短信：<xliff:g id="MESSAGE_BODY">%1$s</xliff:g>。<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>，<xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"近期通话：<xliff:g id="CALL_TYPE">%1$s</xliff:g>，<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>，<xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"更多字段"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"更改联系人照片"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"添加联系人照片"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"无法开启编辑器。"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"保存到"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"无法修改来自 <xliff:g id="ACCOUNT">%s</xliff:g> 的联系人信息"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"目前的设置是保存到“<xliff:g id="ACCOUNT_NAME">%s</xliff:g>”。点按两次即可选择其他帐号。"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">已关联的联系人（<xliff:g id="COUNT">%d</xliff:g> 人）</item>
-      <item quantity="one">已关联的联系人</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> 位已关联的联系人"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"关联联系人"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"取消"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位可能重复的联系人</item>
-      <item quantity="one">1 位可能重复的联系人</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位已关联的联系人</item>
-      <item quantity="one">1 位已关联的联系人</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"此联系人"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"可能重复的联系人"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"这些联系人可能是同一个人。您可以将它们关联在一起，以合并成一个联系人。"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"已关联的联系人"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"来自您的帐号"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"选择照片"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"来源：<xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"删除<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"删除<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"删除<xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"未选中来自 <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> 的照片"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"已选中来自 <xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g> 的照片"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"未选中来自未知帐号的照片"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"已选中来自未知帐号的照片"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"建议"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"新徽章"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"打开抽屉式导航栏"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"目录"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"工作目录"</string>
     <string name="local_search_label" msgid="2551177578246113614">"所有联系人"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"找到的联系人超过 <xliff:g id="COUNT">%d</xliff:g> 位。"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g>的快捷联系方式"</string>
     <string name="missing_name" msgid="8745511583852904385">"（无姓名）"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"经常联系的人"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"查看联系人"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"所有拥有电话号码的联系人"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"工作资料联系人"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"查看更新"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM 卡"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"姓名"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"昵称"</string>
-    <string name="full_name" msgid="6602579550613988977">"姓名"</string>
     <string name="name_given" msgid="4280790853455320619">"名字"</string>
     <string name="name_family" msgid="7466985689626017037">"姓氏"</string>
     <string name="name_prefix" msgid="59756378548779822">"姓名前缀"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"向<xliff:g id="CUSTOM_LABEL">%s</xliff:g>邮箱发送电子邮件"</string>
     <string name="email" msgid="5668400997660065897">"电子邮件"</string>
     <string name="postal_street" msgid="8133143961580058972">"街道"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"信箱"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"街区"</string>
     <string name="postal_city" msgid="6597491300084895548">"城市"</string>
     <string name="postal_region" msgid="6045263193478437672">"省/直辖市/自治区"</string>
     <string name="postal_postcode" msgid="572136414136673751">"邮编"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"更多群组…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"如果您停止同步“<xliff:g id="GROUP">%s</xliff:g>”，将同时停止同步所有未分组的联系人。"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"正在保存显示选项…"</string>
-    <string name="menu_done" msgid="796017761764190697">"完成"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"取消"</string>
     <string name="listCustomView" msgid="1840624396582117590">"自定义视图"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"将导入的联系人保存到："</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM 卡"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"要取消导出 <xliff:g id="FILENAME">%s</xliff:g> 吗​​？"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"无法取消导入/导出 vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"未知错误。"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"无法打开“<xliff:g id="FILE_NAME">%s</xliff:g>”：<xliff:g id="EXACT_REASON">%s</xliff:g>。"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"无法打开“<xliff:g id="FILE_NAME">%1$s</xliff:g>”：<xliff:g id="EXACT_REASON">%2$s</xliff:g>。"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"无法启动导出程序：“<xliff:g id="EXACT_REASON">%s</xliff:g>”。"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"没有可导出的联系人。"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"您已停用一项必需权限。"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"导出时出错：“<xliff:g id="EXACT_REASON">%s</xliff:g>”。"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"指定的文件名过长（“<xliff:g id="FILENAME">%s</xliff:g>”）。"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O 错误"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"内存不足。该文件可能过大。"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"由于意外原因而无法解析 vCard。"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"该格式不受支持。"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"无法收集指定的 vCard 文件的元信息。"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"一个或多个文件无法导入 (%s)。"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"导出 <xliff:g id="FILENAME">%s</xliff:g> 已完成。"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"已成功导出联系人。"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"联系人导出已完成，点击通知即可分享联系人。"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"正在导出联系人数据"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"正在导出联系人数据。"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"无法获取数据库信息。"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"没有可导出的联系人。如果您的手机上确实存有联系人信息，可能是某些数据服务提供商不允许从手机中导出联系人。"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"没有可导出的联系人。"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard 制作程序未正确启动。"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"无法导出"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"未导出联系人数据。\n原因：“<xliff:g id="FAIL_REASON">%s</xliff:g>”"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"正在导入<xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"无法读取 vCard 数据"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"已取消读取 vCard 数据"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"导入 vCard <xliff:g id="FILENAME">%s</xliff:g> 已完成"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"已取消导入 <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> 将在稍后导入。"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"系统稍后就会导入该文件。"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard 导入请求遭拒，请稍后重试。"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> 将在稍后导出。"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"即将导出文件。"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"即将导出联系人。"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard 导出请求遭拒，请稍后重试。"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"联系人"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"正在将 vCard 缓存到本地临时存储空间。实际导入操作即将开始。"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"无法导入 vCard。"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"已通过 NFC 收到联系人信息"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"要导出联系人吗？"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"正在缓存..."</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"正在导入第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 个（共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 个）联系人：<xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"正在导入第 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> 个（共 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 个）联系人：<xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"导出为 .vcf 文件"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"排序方式"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"名字"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"我的信息"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"设置您的个人资料"</string>
     <string name="setting_about" msgid="7014388749752042863">"关于通讯录"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"分享可见的联系人"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"无法分享所显示的联系人。"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"分享收藏的联系人"</string>
     <string name="share_contacts" msgid="8109287987498711664">"分享所有联系人"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"无法分享联系人。"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"没有可分享的联系人。"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"要显示的联系人"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"要显示的联系人"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"自定义联系人视图"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"自定义视图"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"保存"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"搜索联系人"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"收藏"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"没有联系人。"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"清除常用联系人"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"选择SIM卡"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"管理帐号"</string>
     <string name="menu_import" msgid="6107961135813836467">"导入"</string>
     <string name="menu_export" msgid="2658783911863503902">"导出"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"已屏蔽的号码"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"时间：<xliff:g id="DATE">%1$s</xliff:g>，来源：<xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"停止搜索"</string>
     <string name="description_clear_search" msgid="688023606766232904">"清除搜索内容"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"联系人显示选项"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"帐号"</string>
     <string name="set_default_account" msgid="4311613760725609801">"一律使用这张卡进行通话"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"用于外拨电话的帐号"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"拨打电话并发送备注"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"输入要在拨打电话时发送的备注…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"发送并拨打电话"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"><xliff:g id="TITLE_2">%1$s</xliff:g>。<xliff:g id="COUNT_3">%2$d</xliff:g> 项未读内容。</item>
-      <item quantity="one"><xliff:g id="TITLE_0">%1$s</xliff:g>。<xliff:g id="COUNT_1">%2$d</xliff:g> 项未读内容。</item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"版本号"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"开放源代码许可"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"开放源代码软件的许可详情"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"删除"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"省略号"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> 分钟 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> 小时 <xliff:g id="MINUTES_1">%s</xliff:g> 分钟 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> 分钟 <xliff:g id="SECONDS">%2$s</xliff:g> 秒"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> 小时 <xliff:g id="MINUTES_1">%2$s</xliff:g> 分钟 <xliff:g id="SECONDS">%3$s</xliff:g> 秒"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"此快捷方式已失效"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"联系人已被移除"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"导入"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"无网络连接"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM 卡"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"显示更多"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"已导入 SIM 卡联系人"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"导入失败"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"无法导入 SIM 卡中的联系人"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"正在导入 SIM 卡联系人"</string>
 </resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index a89e136..4b01787 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"通訊錄"</string>
     <string name="contactsList" msgid="8661624236494819731">"通訊錄"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"新增聯絡人"</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="shortcutActivityTitle" msgid="1504383567778497348">"選擇聯絡人"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"新增至通訊錄"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"選擇聯絡人"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"選取"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"建立新聯絡人"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"聯絡人詳細資料"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"刪除"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"變更相片"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"建立捷徑"</string>
-    <string name="menu_call" msgid="3992595586042260618">"致電聯絡人"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"傳送短訊至聯絡人"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"解除連結"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"移除聯絡人"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"重新命名標籤"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"選取聯絡人"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"新增聯絡人"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"從標籤中移除"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"新增聯絡人"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"建立新…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"建立標籤"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"要解除連結，並設為多個聯絡人嗎？"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"解除連結"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"您要儲存變更，並解除連結此聯絡人為多個聯絡人嗎？"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"儲存"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"連結聯絡人"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"選擇要連結至<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"已連結<xliff:g id="NAME">%s</xliff:g>"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位聯絡人</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> 位聯絡人 · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位聯絡人 · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> 位聯絡人 · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 位聯絡人 · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"來自 Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"來自「<xliff:g id="ACCOUNT">%s</xliff:g>」"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"刪除此聯絡人將會刪除多個帳戶的資料。"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"要刪除此聯絡人嗎？"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"刪除"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"放棄變更"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"聯絡人不存在。"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"已將聯絡人增至主畫面"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"已將<xliff:g id="NAME">%s</xliff:g>增至主畫面。"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"建立新聯絡人"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"建立新聯絡人"</string>
     <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="2228592924476426108">"您的聯絡人名單是空白的"</string>
-    <string name="noGroups" msgid="4607906327968232225">"無標籤。"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"如要建立群組，您需要有一個帳戶。"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"沒有任何聯絡人有此標籤"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"此帳戶中沒有聯絡人"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"您的聯絡人名單是空白的"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"儲存聯絡人時發生錯誤"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"無法儲存聯絡人相片變更"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"無法載入標籤"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"已儲存標籤"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"已刪除標籤"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"已建立標籤"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"無法建立標籤"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"傳送訊息"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"選擇聯絡人"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"傳送"</string>
-    <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" 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" 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="5948889261993124839">"全部"</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_plus_button" msgid="515164827856229880">"加號"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 位聯絡人，共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 位"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"您的聯絡人姓名"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"標籤名稱"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> 帳戶"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"標籤"</string>
-    <string name="change_photo" msgid="8530597935483526383">"變更"</string>
-    <string name="description_star" msgid="2605854427360036550">"我的最愛"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"編輯聯絡人"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"取消"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"返回"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"關閉"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"要將目前的聯絡人連結至已選的聯絡人嗎？"</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="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="7122002148518724139">"包含年份"</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="4347232421410561500">"新增帳戶"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"匯入"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"建立新…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"捨棄"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"取消"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"要捨棄自訂內容嗎？"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"搜尋聯絡人"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"移除聯絡人"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"我的本機個人資料"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"我的 <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> 個人資料"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"顯示所有聯絡人"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"即使丟失手機，也要確保通訊錄安全：與網上服務保持同步。"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"新增帳戶"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"請花點時間新增帳戶，以便將您的聯絡人備份到 Google。"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"新聯絡人將會儲存至 <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>。"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"為新聯絡人選擇預設帳戶："</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"顯示較少"</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="288549957278065542">"正在建立個人副本…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g><xliff:g id="TIME_INTERVAL">%2$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">"即時通訊"</string>
@@ -285,20 +220,16 @@
     <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="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">"最近短訊 (<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_sms" msgid="1666389577263317445">"最近短訊 (<xliff:g id="MESSAGE_BODY">%1$s</xliff:g>、<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>、<xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"最近通話 (<xliff:g id="CALL_TYPE">%1$s</xliff:g>、<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>、<xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"更多欄位"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"變更聯絡人相片"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"新增聯絡人相片"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"無法打開編輯器。"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"儲存至："</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"無法編輯 <xliff:g id="ACCOUNT">%s</xliff:g> 的聯絡人資料"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"目前儲存至 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>。連按兩下即可選擇另一個帳戶。"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">已連結的聯絡人 (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one">已連結的聯絡人</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> 個已連結的聯絡人"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"連結聯絡人"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"取消"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 個可能重複的聯絡人</item>
-      <item quantity="one">1 個可能重複的聯絡人</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other">已連結 <xliff:g id="COUNT">%d</xliff:g> 個聯絡人</item>
-      <item quantity="one">已連結 1 個聯絡人</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"這個聯絡人"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"可能重複"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"這些聯絡人可能是同一個人，您可連結兩者成為單一聯絡人。"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"已連結的聯絡人"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"來自您的帳戶"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"選擇相片"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"來自 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"刪除<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"刪除<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"刪除<xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"未選擇 <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> 的相片"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"已選擇 <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> 的相片"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"未勾選不明帳戶中的相片"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"已勾選不明帳戶中的相片"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"建議"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"新"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"開啟導覽匣"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"名錄"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"工作目錄"</string>
     <string name="local_search_label" msgid="2551177578246113614">"全部聯絡人"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"找到超過 <xliff:g id="COUNT">%d</xliff:g> 位聯絡人。"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"快速聯絡<xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(沒有名稱)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"常用聯絡人"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"查看聯絡人資料"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"所有附有電話號碼的聯絡人"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"工作設定檔聯絡人"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"查看更新"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM 卡"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"名稱"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"暱稱"</string>
-    <string name="full_name" msgid="6602579550613988977">"名稱"</string>
     <string name="name_given" msgid="4280790853455320619">"名字"</string>
     <string name="name_family" msgid="7466985689626017037">"姓氏"</string>
     <string name="name_prefix" msgid="59756378548779822">"姓名前稱謂"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"寄電郵給<xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"電郵"</string>
     <string name="postal_street" msgid="8133143961580058972">"街道"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"郵政信箱"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"社區"</string>
     <string name="postal_city" msgid="6597491300084895548">"城市"</string>
     <string name="postal_region" msgid="6045263193478437672">"州/省"</string>
     <string name="postal_postcode" msgid="572136414136673751">"郵遞區號"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"更多群組…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"如果從同步設定中移除「<xliff:g id="GROUP">%s</xliff:g>」群組，也會移除任何未分組的聯絡人。"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"正在儲存顯示選項…"</string>
-    <string name="menu_done" msgid="796017761764190697">"完成"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"取消"</string>
     <string name="listCustomView" msgid="1840624396582117590">"自訂檢視"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"儲存匯入的聯絡人至以下帳戶："</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM 卡"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"要取消匯出「<xliff:g id="FILENAME">%s</xliff:g>」的操作嗎？"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"無法取消匯入/匯出 vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"不明錯誤。"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"無法開啟「<xliff:g id="FILE_NAME">%s</xliff:g>」：<xliff:g id="EXACT_REASON">%s</xliff:g>。"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"無法開啟「<xliff:g id="FILE_NAME">%1$s</xliff:g>」：<xliff:g id="EXACT_REASON">%2$s</xliff:g>。"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"無法啟動匯出程式：「<xliff:g id="EXACT_REASON">%s</xliff:g>」。"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"沒有聯絡人資料可以匯出。"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"您已停用所需權限。"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"匯出時發生錯誤：「<xliff:g id="EXACT_REASON">%s</xliff:g>」。"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"要求的檔案名稱過長 (「<xliff:g id="FILENAME">%s</xliff:g>」)。"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"匯入/匯出錯誤"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"記憶體不足，檔案可能過大。"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"由於未預期的原因，無法剖析 vCard。"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"不支援這種格式。"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"無法從指定的 vCard 檔案收集中繼資料。"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"無法匯入一個或多個檔案 (%s)。"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"匯出 <xliff:g id="FILENAME">%s</xliff:g> 完畢。"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"聯絡人匯出完成。"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"聯絡人匯出完成，按一下通知即可分享聯絡人。"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"正在匯出聯絡人資料"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"正在匯出聯絡人資料。"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"無法取得資料庫資訊。"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"沒有聯絡人資料可以匯出。如果您的手機中確實存有聯絡人資料，則可能是部分資料提供者不允許您將聯絡人資料從手機中匯出。"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"沒有可匯出的聯絡人。"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard 編輯器並未正確啟動。"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"無法匯出"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"聯絡人資料未匯出。\n原因：「<xliff:g id="FAIL_REASON">%s</xliff:g>」"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"匯入 <xliff:g id="NAME">%s</xliff:g> 中"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"無法讀取 vCard 資料"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"已取消讀取 vCard 資料的操作"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"已完成匯入 vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"已取消匯入「<xliff:g id="FILENAME">%s</xliff:g>」的操作"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> 將在稍後匯入。"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"稍後即將匯入檔案。"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard 匯入要求已被拒，請稍後再試。"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> 將在稍後匯出。"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"檔案即將匯出。"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"系統即將匯出聯絡人。"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard 匯出要求已被拒，請稍後再試。"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"聯絡人"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"正在將 vCard 資料快取至本機暫存空間，隨即將開始實際的匯入操作。"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"無法匯入 vCard。"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"已透過 NFC 收到聯絡人資訊"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"要匯出聯絡人資料嗎？"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"快取中"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"正在匯入第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 個：<xliff:g id="NAME">%s</xliff:g>，共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 個"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"正在匯入第 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> 個：<xliff:g id="NAME">%3$s</xliff:g>，共 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 個"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"匯出至 .vcf 檔案"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"排序方式"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"名字"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"我的資訊"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"設定您的個人檔案"</string>
     <string name="setting_about" msgid="7014388749752042863">"關於聯絡人"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"分享正常顯示的聯絡人"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"無法分享顯示的聯絡人。"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"分享常用聯絡人"</string>
     <string name="share_contacts" msgid="8109287987498711664">"分享所有聯絡人"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"無法分享聯絡人。"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"沒有聯絡人可供分享。"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"要顯示的聯絡人"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"要顯示的聯絡人"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"定義自訂檢視"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"自訂檢視"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"儲存"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"搜尋聯絡人"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"我的最愛"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"沒有聯絡人。"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"清除常用聯絡人"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"選取 SIM 卡"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"管理帳戶"</string>
     <string name="menu_import" msgid="6107961135813836467">"匯入"</string>
     <string name="menu_export" msgid="2658783911863503902">"匯出"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"已封鎖的號碼"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> (透過 <xliff:g id="SOURCE">%2$s</xliff:g>)"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"停止搜尋"</string>
     <string name="description_clear_search" msgid="688023606766232904">"清除搜尋"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"聯絡人顯示選項"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"帳戶"</string>
     <string name="set_default_account" msgid="4311613760725609801">"永遠使用這張 SIM 卡通話"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"選取用於撥號的手機帳戶："</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"撥號時傳送筆記"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"致電時可以輸入並傳送筆記…"</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"傳送和撥號"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g> (<xliff:g id="COUNT_3">%2$d</xliff:g> 個未讀取項目)。</item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g> (<xliff:g id="COUNT_1">%2$d</xliff:g> 個未讀取項目)。</item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"型號版本"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"開放原始碼授權"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"開放原始碼軟件的授權詳情"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"刪除"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"省略號"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> 分鐘 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> 小時 <xliff:g id="MINUTES_1">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> 分鐘 <xliff:g id="SECONDS">%2$s</xliff:g> 秒"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> 小時 <xliff:g id="MINUTES_1">%2$s</xliff:g> 分 <xliff:g id="SECONDS">%3$s</xliff:g> 秒"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"已停用此捷徑"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"聯絡人已移除"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"匯入"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"沒有網絡連線"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"顯示更多"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM 卡匯入完成"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"匯入失敗"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"無法從 SIM 卡匯入聯絡人"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"正在匯入 SIM 卡"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 6b621e8..4774a0a 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"通訊錄"</string>
     <string name="contactsList" msgid="8661624236494819731">"聯絡人"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"新增聯絡人"</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="shortcutActivityTitle" msgid="1504383567778497348">"選擇聯絡人"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"加入聯絡人"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"選擇聯絡人"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"選取"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"建立新聯絡人"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"聯絡資訊"</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>
@@ -41,8 +36,6 @@
     <string name="menu_deleteContact" msgid="6788644058868189393">"刪除"</string>
     <string name="menu_change_photo" msgid="7769177631511496210">"更換相片"</string>
     <string name="menu_create_contact_shortcut" msgid="1663022219127343858">"建立捷徑"</string>
-    <string name="menu_call" msgid="3992595586042260618">"去電聯絡人"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"傳送簡訊至聯絡人"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"取消連結"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"移除聯絡人"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"重新命名標籤"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"選取聯絡人"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"新增聯絡人"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"從標籤中移除"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"新增聯絡人"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"新建..."</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"建立標籤"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"確定要將這個聯絡人的連結取消，還原為多筆聯絡人資料嗎？"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"取消連結"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"您要儲存目前所做變更，並將這個聯絡人的連結取消，還原為多筆聯絡人資料嗎？"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"儲存"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"連結聯絡人"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"選擇要與<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"已連結<xliff:g id="NAME">%s</xliff:g>"</string>
@@ -83,8 +74,8 @@
       <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位聯絡人</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> 位聯絡人 · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 位聯絡人 · <xliff:g id="ACCOUNT_1">%s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> 位聯絡人 · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> 位聯絡人 · <xliff:g id="ACCOUNT_1">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"來自 Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"來自 <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"如果刪除這個聯絡人，系統將一併刪除多個帳戶中的相關詳細資料。"</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"確定要刪除這個聯絡人嗎？"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"刪除"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"捨棄變更"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"聯絡人不存在。"</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"已在主畫面中新增這個聯絡人的捷徑。"</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"已在主畫面中新增<xliff:g id="NAME">%s</xliff:g>的捷徑。"</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"建立新聯絡人"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"建立新聯絡人"</string>
     <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="2228592924476426108">"您的聯絡人清單沒有任何項目"</string>
-    <string name="noGroups" msgid="4607906327968232225">"沒有任何標籤。"</string>
-    <string name="noAccounts" msgid="7768267764545265909">"必須要有帳戶才能建立群組。"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"沒有任何聯絡人設有這個標籤"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"這個帳戶中沒有聯絡人"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"您的聯絡人清單沒有任何項目"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"儲存聯絡人時發生錯誤"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"無法儲存變更後的聯絡人相片"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"無法載入標籤"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"已儲存標籤"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"已刪除標籤"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"已建立標籤"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"無法建立標籤"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"傳送訊息"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"選擇聯絡人"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"傳送"</string>
-    <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" 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" 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="5948889261993124839">"全部"</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_plus_button" msgid="515164827856229880">"加號"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 位聯絡人，共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 位"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"您的聯絡人姓名"</string>
-    <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>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"標籤名稱"</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>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> 帳戶"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <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="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="8038224059926963133">"標籤"</string>
-    <string name="change_photo" msgid="8530597935483526383">"變更"</string>
-    <string name="description_star" msgid="2605854427360036550">"我的收藏"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"編輯聯絡人"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"取消"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"返回"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"關閉"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"要將目前聯絡人與所選聯絡人連結嗎？"</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="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_1">%1$s</xliff:g> <xliff:g id="COMPANY_0">%2$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="7122002148518724139">"包含年份"</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="4347232421410561500">"新增帳戶"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"匯入"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"新建..."</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"捨棄"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"取消"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"要捨棄自訂設定嗎？"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"搜尋聯絡人"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"移除聯絡人"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"我的本機個人資料"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"我的 <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> 個人資料"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"顯示所有聯絡人"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"即使手機遺失，聯絡人資訊依然萬無一失：與線上服務保持同步。"</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"新增帳戶"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"請花幾分鐘時間新增帳戶，即可將您的聯絡人資料備份到 Google。"</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"新聯絡人將儲存至 <xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>。"</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"為新建立的聯絡人選擇一個預設帳戶："</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"顯示較少"</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="288549957278065542">"正在建立個人副本…"</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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g><xliff:g id="TIME_INTERVAL">%2$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">"即時訊息"</string>
@@ -285,20 +220,16 @@
     <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="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">"近期簡訊。<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_sms" msgid="1666389577263317445">"近期簡訊。<xliff:g id="MESSAGE_BODY">%1$s</xliff:g>。<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>。<xliff:g id="DATE">%3$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="content_description_recent_call" msgid="5183800406316723676">"近期通話。<xliff:g id="CALL_TYPE">%1$s</xliff:g>。<xliff:g id="PHONE_NUMBER">%2$s</xliff:g>。<xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"更多欄位"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"變更聯絡人相片"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"新增聯絡人相片"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"無法開啟編輯器。"</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"儲存到"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"<xliff:g id="ACCOUNT">%s</xliff:g> 的聯絡人資訊不開放編輯"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"目前設為儲存到 <xliff:g id="ACCOUNT_NAME">%s</xliff:g>。輕觸兩下即可選擇其他帳戶。"</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="other">已連結的聯絡人 (<xliff:g id="COUNT">%d</xliff:g> 位)</item>
-      <item quantity="one">已連結的聯絡人</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> 位已連結的聯絡人"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"連結聯絡人"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"取消"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位可能重複的聯絡人</item>
-      <item quantity="one">1 位可能重複的聯絡人</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 位已連結的聯絡人</item>
-      <item quantity="one">1 位已連結的聯絡人</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <item quantity="other">(<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="one"></item>
-    </plurals>
-    <string name="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g> <xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"這位聯絡人"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"可能重複的聯絡人"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"這些聯絡人可能是同一人。您可以將這些聯絡人連結合併成單筆聯絡人資料。"</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"已連結的聯絡人"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"來自您的帳戶"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"選擇相片"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"來自<xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"刪除<xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"刪除<xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"刪除<xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"未勾選 <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> 的相片"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"已勾選 <xliff:g id="ACCOUNT_TYPE">%s </xliff:g> <xliff:g id="USER_NAME">%s </xliff:g> 的相片"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"未勾選不明帳戶中的相片"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"已勾選不明帳戶中的相片"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"建議"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"新功能"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"開啟導覽匣"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"目錄"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Work 聯絡人目錄"</string>
     <string name="local_search_label" msgid="2551177578246113614">"所有聯絡人"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"找到 <xliff:g id="COUNT">%d</xliff:g> 位以上的聯絡人。"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"<xliff:g id="NAME">%1$s</xliff:g>的快速聯絡人相片"</string>
     <string name="missing_name" msgid="8745511583852904385">"(無姓名)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"常用聯絡人"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"查看聯絡人"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"所有包含電話號碼的聯絡人資訊"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Work 設定檔聯絡人"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"查看更新"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"SIM 卡"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"姓名"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"暱稱"</string>
-    <string name="full_name" msgid="6602579550613988977">"姓名"</string>
     <string name="name_given" msgid="4280790853455320619">"名字"</string>
     <string name="name_family" msgid="7466985689626017037">"姓氏"</string>
     <string name="name_prefix" msgid="59756378548779822">"姓名前稱銜"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"傳送電子郵件給<xliff:g id="CUSTOM_LABEL">%s</xliff:g>電子郵件地址"</string>
     <string name="email" msgid="5668400997660065897">"傳送電子郵件"</string>
     <string name="postal_street" msgid="8133143961580058972">"街道"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"郵政信箱"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"鄰"</string>
     <string name="postal_city" msgid="6597491300084895548">"鄉/鎮/市/區"</string>
     <string name="postal_region" msgid="6045263193478437672">"州/省"</string>
     <string name="postal_postcode" msgid="572136414136673751">"郵遞區號"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"更多群組…"</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"如果停用「<xliff:g id="GROUP">%s</xliff:g>」群組的同步處理設定，也會停止同步處理任何未分組的聯絡人。"</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"正在儲存顯示選項…"</string>
-    <string name="menu_done" msgid="796017761764190697">"完成"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"取消"</string>
     <string name="listCustomView" msgid="1840624396582117590">"自訂檢視"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"將匯入的聯絡人儲存到："</string>
     <string name="import_from_sim" msgid="6912071635295799131">"SIM 卡"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"確定要取消匯出 <xliff:g id="FILENAME">%s</xliff:g>？"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"無法取消匯入/匯出 vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"不明錯誤。"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"無法開啟「<xliff:g id="FILE_NAME">%s</xliff:g>」：<xliff:g id="EXACT_REASON">%s</xliff:g>。"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"無法開啟「<xliff:g id="FILE_NAME">%1$s</xliff:g>」：<xliff:g id="EXACT_REASON">%2$s</xliff:g>。"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"無法啟動匯出程式：<xliff:g id="EXACT_REASON">%s</xliff:g>。"</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"沒有可匯出的聯絡人。"</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"必要權限已停用。"</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"匯出時發生錯誤：<xliff:g id="EXACT_REASON">%s</xliff:g>。"</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"要求的檔案名稱過長 (<xliff:g id="FILENAME">%s</xliff:g>)。"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"I/O 錯誤"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"記憶體不足，檔案可能過大。"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"由於意外因素，導致無法剖析 vCard。"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"不支援此格式。"</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"無法從指定的 vCard 檔案收集中繼資料。"</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"無法匯入一或多個檔案 (%s)。"</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"已完成 <xliff:g id="FILENAME">%s</xliff:g> 匯出作業。"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"聯絡人資料匯出完成。"</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"聯絡人資料匯出完成，按一下通知即可分享相關資料。"</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"正在匯出聯絡人資料"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"正在匯出聯絡人資料。"</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"無法取得資料庫資訊。"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"沒有可匯出的聯絡人。如果您的手機中確實有聯絡人資料，那麼可能是部分資料提供者不允許您將聯絡人資料從手機中匯出。"</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"沒有聯絡人資料可供匯出。"</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"vCard 編輯器並未正確啟動。"</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"無法匯出"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"聯絡人資料未匯出。\n原因：<xliff:g id="FAIL_REASON">%s</xliff:g>"</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"正在匯入 <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"無法讀取 vCard 資料"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"已取消讀取 vCard 資料"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"已完成匯入 vCard 的 <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"已取消匯入 <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"<xliff:g id="FILENAME">%s</xliff:g> 將在稍後匯入。"</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"稍候即將匯入該檔案。"</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"vCard 匯入要求遭到拒絕，請稍後再試。"</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"<xliff:g id="FILENAME">%s</xliff:g> 將在稍後匯出。"</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"即將匯出檔案。"</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"即將匯出聯絡人資料。"</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"vCard 匯出要求遭到拒絕，請稍後再試。"</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"聯絡人"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"正在將 vCard 資料快取至本機暫存空間，隨即將啟動實際的匯入作業。"</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"無法匯入 vCard。"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"已透過 NFC 收到聯絡人資訊"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"確定要匯出聯絡人？"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"快取中"</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"正在匯入第 <xliff:g id="CURRENT_NUMBER">%s</xliff:g> 筆資料：<xliff:g id="NAME">%s</xliff:g>，共 <xliff:g id="TOTAL_NUMBER">%s</xliff:g> 筆資料"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"正在匯入第 <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g> 筆資料：<xliff:g id="NAME">%3$s</xliff:g>，共 <xliff:g id="TOTAL_NUMBER">%2$s</xliff:g> 筆資料"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"匯出成 .vcf 檔案"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"排序依據"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"名字"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"我的資訊"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"設定你的個人資料"</string>
     <string name="setting_about" msgid="7014388749752042863">"關於聯絡人"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"分享正常顯示的聯絡人"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"無法分享目前顯示的聯絡人資料。"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"分享常用聯絡人資料"</string>
     <string name="share_contacts" msgid="8109287987498711664">"分享所有聯絡人資料"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"無法分享聯絡人資料。"</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"沒有任何聯絡人資料可分享。"</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"要顯示的聯絡人"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"要顯示的聯絡人"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"定義自訂檢視"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"自訂檢視"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"儲存"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"搜尋聯絡人"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"我的收藏"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"沒有聯絡人。"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"清除常用聯絡人"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"選取 SIM 卡"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"管理帳戶"</string>
     <string name="menu_import" msgid="6107961135813836467">"匯入"</string>
     <string name="menu_export" msgid="2658783911863503902">"匯出"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"已封鎖的號碼"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> (透過 <xliff:g id="SOURCE">%2$s</xliff:g>)"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"停止搜尋"</string>
     <string name="description_clear_search" msgid="688023606766232904">"清除搜尋"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"聯絡人顯示選項"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"帳戶"</string>
     <string name="set_default_account" msgid="4311613760725609801">"一律使用這張 SIM 卡通話"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"選擇通話帳戶"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"撥號時傳送備註"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"輸入可在撥號時傳送的備註..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"傳送並撥號"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g>/<xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>。<xliff:g id="COUNT_3">%2$d</xliff:g> 個未讀項目。</item>
-      <item quantity="one"> <xliff:g id="TITLE_0">%1$s</xliff:g>。<xliff:g id="COUNT_1">%2$d</xliff:g> 個未讀項目。</item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"版本"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"開放原始碼授權"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"開放原始碼軟體的授權詳細資料"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"刪除"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"省略符號"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> 分鐘 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> 小時 <xliff:g id="MINUTES_1">%s</xliff:g> 分鐘 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> 分鐘 <xliff:g id="SECONDS">%2$s</xliff:g> 秒"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> 小時 <xliff:g id="MINUTES_1">%2$s</xliff:g> 分鐘 <xliff:g id="SECONDS">%3$s</xliff:g> 秒"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"這個捷徑已停用"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"這位聯絡人已移除"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"匯入"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"沒有網路連線"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"SIM 卡"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"顯示更多"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"SIM 卡資料匯入完成"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"匯入失敗"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"無法從 SIM 卡匯入聯絡人資料"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"正在匯入 SIM 卡資料"</string>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 1ec8357..39c71d2 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -18,21 +18,16 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="applicationLabel" msgid="3906689777043645443">"Oxhumana nabo"</string>
     <string name="contactsList" msgid="8661624236494819731">"Othi tana nabo"</string>
+    <string name="shortcut_add_contact" msgid="7476283631356909204">"Faka oxhumana naye"</string>
     <string name="shortcutContact" msgid="749243779392912958">"Othintana naye"</string>
     <string name="shortcutDialContact" msgid="746622101599186779">"Ukudayela okuqondile"</string>
     <string name="shortcutMessageContact" msgid="2460337253595976198">"Umyalezo oqondile"</string>
-    <string name="shortcutActivityTitle" msgid="6642877210643565436">"Khetha isinqamuleli sothintana naye"</string>
-    <string name="callShortcutActivityTitle" msgid="6065749861423648991">"Khetha inombolo ozoyishayela"</string>
-    <string name="messageShortcutActivityTitle" msgid="3084542316620335911">"Khetha inombolo kumyalezo"</string>
+    <string name="shortcutActivityTitle" msgid="1504383567778497348">"Khetha oxhumana naye"</string>
     <string name="contactInsertOrEditActivityTitle" msgid="6527505405325862674">"Faka koxhumana nabo"</string>
     <string name="contactPickerActivityTitle" msgid="4301062192337417640">"Khetha oxhumana naye"</string>
     <string name="groupMemberPickerActivityTitle" msgid="1431750793695262522">"Khetha"</string>
     <string name="header_entry_contact_list_adapter_header_title" msgid="2436981165830115659">"Dala othintana naye omusha"</string>
-    <string name="viewContactTitle" msgid="7989394521836644384">"Imininingwane yothintana naye"</string>
-    <string name="contactDetailAbout" msgid="5430408883907061400">"Mayelana"</string>
-    <string name="contactDetailUpdates" msgid="3780588624763446941">"Izibuyekezo"</string>
     <string name="searchHint" msgid="8482945356247760701">"Sesha othintana nabo"</string>
-    <string name="menu_viewContact" msgid="2795575601596468581">"Buka othintana naye"</string>
     <string name="menu_addStar" msgid="2908478235715404876">"Engeza ezintandokazini"</string>
     <string name="menu_removeStar" msgid="5844227078364227030">"Susa ezintandokazini"</string>
     <string name="description_action_menu_remove_star" msgid="4699640108012265178">"Kukhishiwe kusuka kuzintandokazi"</string>
@@ -41,8 +36,6 @@
     <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="1663022219127343858">"Dala isinqamuleli"</string>
-    <string name="menu_call" msgid="3992595586042260618">"Shayela othintana naye"</string>
-    <string name="menu_sendSMS" msgid="5535886767547006515">"Bhalela othintana naye"</string>
     <string name="menu_splitAggregate" msgid="2627252205317945563">"Susa ukuxhumanisa"</string>
     <string name="menu_editGroup" msgid="6696843438454341063">"Susa oxhumana nabo"</string>
     <string name="menu_renameGroup" msgid="7169512355179757182">"Qamba kabusha ilebula"</string>
@@ -51,8 +44,7 @@
     <string name="menu_selectForGroup" msgid="3999234528229376098">"Khetha oxhumana nabo"</string>
     <string name="menu_addContactsToGroup" msgid="655196688840626483">"Engeza oxhumana nabo"</string>
     <string name="menu_removeFromGroup" msgid="6720354305399961978">"Susa kusuka kulebula"</string>
-    <string name="menu_new_contact_action_bar" msgid="7371001434034419566">"Engeza oxhumana naye"</string>
-    <string name="menu_new_group_action_bar" msgid="8726987769872493051">"Dala amasha…"</string>
+    <string name="menu_new_group_action_bar" msgid="3127059073617415221">"Dala ilebula"</string>
     <string name="splitConfirmation" msgid="7342030840130187290">"Susa ukuxhumanisa lo oxhumana naye umfake koxhumana nabo abaningi?"</string>
     <string name="splitConfirmation_positive_button" msgid="9129409098807939699">"Susa ukuxhumanisa"</string>
     <string name="splitConfirmationWithPendingChanges" msgid="7719062163511895696">"Ungathanda ukulondoloza ushintsho osuvele ulwenzile uphinde ususe ukuxhumana kwalo oxhumana naye kwiningi loxhumana nabo?"</string>
@@ -66,7 +58,6 @@
     <string name="menu_save" msgid="1727844363591825909">"Londoloza"</string>
     <string name="titleJoinContactDataWith" msgid="6825255752748313944">"Xhumanisa oxhumana nabo"</string>
     <string name="blurbJoinContactDataWith" msgid="5864256698061641841">"Khetha oxhumana naye ofuna ukumxhuma no-<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="contactsJoinedNamedMessage" msgid="1299418263439579455">"<xliff:g id="NAME">%s</xliff:g> uxhunyiwe"</string>
@@ -83,8 +74,8 @@
       <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> oxhumana nabo</item>
     </plurals>
     <plurals name="contacts_count_with_account" formatted="false" msgid="7402583111980220575">
-      <item quantity="one"><xliff:g id="COUNT_2">%d</xliff:g> oxhumana nabo · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
-      <item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> oxhumana nabo · <xliff:g id="ACCOUNT_3">%s</xliff:g></item>
+      <item quantity="one"><xliff:g id="COUNT_2">%1$d</xliff:g> oxhumana nabo · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
+      <item quantity="other"><xliff:g id="COUNT_2">%1$d</xliff:g> oxhumana nabo · <xliff:g id="ACCOUNT_3">%2$s</xliff:g></item>
     </plurals>
     <string name="title_from_google" msgid="4664084747121207202">"Kusukela ku-Google"</string>
     <string name="title_from_other_accounts" msgid="8307885412426754288">"Kusuka ku-<xliff:g id="ACCOUNT">%s</xliff:g>"</string>
@@ -101,21 +92,15 @@
     <string name="multipleContactDeleteConfirmation" msgid="5235324124905653550">"Ukususa lo oxhumana naye kuzosusa iminingwane kusukela kuma-akhawunti amaningi."</string>
     <string name="deleteConfirmation" msgid="3512271779086656043">"Susa lo oxhumana naye?"</string>
     <string name="deleteConfirmation_positive_button" msgid="7857888845028586365">"Susa"</string>
-    <string name="menu_discard" msgid="6854657936970228164">"Lahla izinguquko"</string>
     <string name="invalidContactMessage" msgid="8215051456181842274">"Oxhumana naye akekho."</string>
     <string name="createContactShortcutSuccessful_NoName" msgid="8831303345367275472">"Oxhumana naye ungezwe kusikrini sasekhaya."</string>
     <string name="createContactShortcutSuccessful" msgid="953651153238790069">"U-<xliff:g id="NAME">%s</xliff:g> ungezwe kusikrini sasekhaya."</string>
-    <string name="pickerNewContactHeader" msgid="7750705279843568147">"Dala othintana naye omusha"</string>
-    <string name="pickerNewContactText" msgid="6166997164401048211">"Dala othintana naye omusha"</string>
     <string name="photoPickerNotFoundText" product="tablet" msgid="6247290728908599701">"Azikho izithombe ezitholakalayo kwithebhulethi."</string>
     <string name="photoPickerNotFoundText" product="default" msgid="431331662154342581">"Azikho izithombe ezitholakalayo kwifoni."</string>
     <string name="attach_photo_dialog_title" msgid="5599827035558557169">"Isithombe sothintana naye"</string>
     <string name="customLabelPickerTitle" msgid="1081475101983255212">"Igama lelebula efiswayo"</string>
-    <string name="send_to_voicemail_checkbox" msgid="9001686764070676353">"Thumela ngokuqondile amakholi emyalezwini wezwi"</string>
     <string name="removePhoto" msgid="4898105274130284565">"Khipha isithombe"</string>
     <string name="noContacts" msgid="2228592924476426108">"Uhlu lwakho loxhumana nabo alunalutho"</string>
-    <string name="noGroups" msgid="4607906327968232225">"Awekho amalebula."</string>
-    <string name="noAccounts" msgid="7768267764545265909">"Ukuze wakhe iqembu udinga i-akhawunti"</string>
     <string name="emptyGroup" msgid="5102411903247859575">"Abekho oxhumana nabo abanale lebula"</string>
     <string name="emptyAccount" msgid="6873962901497975964">"Abekho oxhumana nabo kule akhawunti"</string>
     <string name="emptyMainList" msgid="2772242747899664460">"Uhlu lwakho loxhumana nabo alunalutho"</string>
@@ -128,7 +113,6 @@
     <string name="contactGenericErrorToast" msgid="3885457515665783976">"Iphutha lokulondoloza oxhumana naye"</string>
     <string name="contactPhotoSavedErrorToast" msgid="6860883564984042194">"Ayikwazanga ukulondoloza ushintsho lwesithombe loxhumana naye"</string>
     <string name="groupLoadErrorToast" msgid="7536267148196064554">"Yehlulekile ukulayisha ilebula"</string>
-    <string name="groupSavedToast" msgid="6491495462357722285">"Ilebula ilondoloziwe"</string>
     <string name="groupDeletedToast" msgid="520896687873262027">"Ilebula isusiwe"</string>
     <string name="groupCreatedToast" msgid="1924195126172834870">"Ilebula idaliwe"</string>
     <string name="groupCreateFailedToast" msgid="4359093891863474299">"Ayikwazi ukudala ilebuli"</string>
@@ -143,29 +127,9 @@
     <string name="menu_sendMessageOption" msgid="8850168125274916426">"Thumela umlayezo"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="1936544190231136729">"Khetha Oxhumana Nabo"</string>
     <string name="send_to_selection" msgid="2251339182881603540">"Thumela"</string>
-    <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" 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" 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="5948889261993124839">"Konke"</string>
-    <string name="callBack" msgid="5498224409038809224">"Phinda ushayele"</string>
-    <string name="callAgain" msgid="3197312117049874778">"Shayela futhi"</string>
-    <string name="returnCall" msgid="8171961914203617813">"Buyisela ikholi"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7986472669444326576">"Faka  \"<xliff:g id="EMAIL">%s</xliff:g>\"  kothintana nabo?"</string>
-    <string name="description_plus_button" msgid="515164827856229880">"kuhlanganise"</string>
-    <string name="exporting_contact_list_progress" msgid="560522409559101193">"<xliff:g id="CURRENT_NUMBER">%s</xliff:g> kothintana nabo abangu-<xliff:g id="TOTAL_NUMBER">%s</xliff:g>"</string>
     <string name="search_settings_description" msgid="2675223022992445813">"Amagama othintana nabo"</string>
-    <string name="quickcontact_missing_app" msgid="358168575340921552">"Ayikho uhlelo lokusebenza etholakele ukubhekana nalengxenye."</string>
     <string name="quickcontact_transparent_view_description" msgid="987959416759562455">"Chofoza ukuze ubuyele kusikrini sangaphambilini"</string>
     <string name="quickcontact_add_phone_number" msgid="731665835910658965">"Engeza inombolo yefoni"</string>
     <string name="quickcontact_add_email" msgid="739298028384348482">"Engeza i-imeyili"</string>
@@ -184,52 +148,28 @@
     <string name="label_name_dialog_hint" msgid="1276051790427638142">"Igama lelebula"</string>
     <string name="audio_chat" msgid="2535716629358298691">"Ingxoxo yezw"</string>
     <string name="video_chat" msgid="1872255818640336072">"Ingxoxo yevidiyo"</string>
-    <string name="connections" msgid="8098440723172028350">"Oxhumana nabo"</string>
-    <string name="add_connection_button" msgid="4861308615789601727">"Yengeza oxhumana nabo"</string>
-    <string name="recent" msgid="2659189233141493004">"Okwakamuva"</string>
-    <string name="recent_updates" msgid="4267258535615860710">"Izibuyekezo zamanje"</string>
     <string name="account_type_format" msgid="718948015590343010">"Othintana naye nge-<xliff:g id="SOURCE">%1$s</xliff:g>"</string>
     <string name="google_account_type_format" msgid="5283997303922067997">"<xliff:g id="SOURCE">%1$s</xliff:g> i-akhawunti"</string>
-    <!-- no translation found for from_account_format (4469138575127580203) -->
-    <skip />
     <string name="take_photo" msgid="7496128293167402354">"Thatha isithombe"</string>
     <string name="take_new_photo" msgid="7341354729436576304">"Thatha isithombe esisha"</string>
     <string name="pick_photo" msgid="2129509985223564942">"Khetha isithombe"</string>
     <string name="pick_new_photo" msgid="9122450996263688237">"Khetha isithombe"</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>
-    <string name="menu_select_all" msgid="621719255150713545">"Khetha konke"</string>
-    <string name="menu_select_none" msgid="7093222469852132345">"Ungakhethi konke"</string>
-    <string name="add_new_entry_for_section" msgid="5223080690667565044">"Faka okusha"</string>
-    <string name="add_organization" msgid="7311893231158291197">"Ngeza inhlangano"</string>
     <string name="event_edit_field_hint_text" msgid="5794424930242630477">"Idethi"</string>
     <string name="group_edit_field_hint_text" msgid="8038224059926963133">"Ilebula"</string>
-    <string name="change_photo" msgid="8530597935483526383">"Guqula"</string>
-    <string name="description_star" msgid="2605854427360036550">"intandokazi"</string>
-    <string name="edit_contact" msgid="7529281274005689512">"Hlela othintana naye"</string>
     <string name="cancel_button_content_description" msgid="1288652456274531846">"Khansela"</string>
     <string name="back_arrow_content_description" msgid="4355362760545735065">"Phindela emuva"</string>
     <string name="action_menu_back_from_edit_select" msgid="6435476408621731420">"vala"</string>
-    <string name="aggregation_suggestion_join_dialog_message" msgid="6786192560870357912">"Xhuma oxhumana naye wamanje noxhumana 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>
-    <string name="add_to_my_contacts" msgid="1068274916793627723">"Faka Kothintana Nabo"</string>
     <string name="contact_directory_description" msgid="683398073603909119">"Uhla lwemibhalo <xliff:g id="TYPE">%1$s</xliff:g>"</string>
     <string name="activity_title_settings" msgid="5464130076132770781">"Izilungiselelo"</string>
     <string name="menu_settings" msgid="377929915873428211">"Izilungiselelo"</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>
     <string name="non_phone_add_to_contacts" msgid="6590985286250471169">"Yengeza kothintana nabo"</string>
-    <string name="activity_title_confirm_add_detail" msgid="4065089866210730616">"Faka koxhumana nabo"</string>
     <string name="non_phone_close" msgid="7608506439725515667">"Vala"</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="7122002148518724139">"Faka unyaka"</string>
-    <string name="social_widget_label" msgid="6378905543028924592">"Othintana nabo"</string>
-    <string name="social_widget_loading" msgid="5327336597364074608">"Iyalayisha…"</string>
-    <string name="contacts_unavailable_create_contact" msgid="7014525713871959208">"Dala othintana naye omusha"</string>
     <string name="contacts_unavailable_add_account" msgid="4347232421410561500">"Engeza i-akhawunti"</string>
     <string name="contacts_unavailable_import_contacts" msgid="3182801738595937144">"Ngenisa"</string>
     <string name="create_group_item_label" msgid="3263064599743742865">"Dala amasha…"</string>
@@ -243,14 +183,10 @@
     <string name="cancel_confirmation_dialog_cancel_editing_button" msgid="3057023972074640671">"Lahla"</string>
     <string name="cancel_confirmation_dialog_keep_editing_button" msgid="3316573928085916146">"Khansela"</string>
     <string name="leave_customize_confirmation_dialog_message" msgid="4277114551206032979">"Lahla ukwenza ngezifiso?"</string>
-    <string name="call_type_and_date" msgid="747163730039311423">"<xliff:g id="CALL_TYPE">%1$s</xliff:g> <xliff:g id="CALL_SHORT_DATE">%2$s</xliff:g>"</string>
     <string name="enter_contact_name" msgid="4594274696120278368">"Sesha oxhumana nabo"</string>
     <string name="title_edit_group" msgid="8602752287270586734">"Susa oxhumana nabo"</string>
     <string name="local_profile_title" msgid="2021416826991393684">"Imininingwane yami yakuleli"</string>
     <string name="external_profile_title" msgid="8034998767621359438">"Imininingwane <xliff:g id="EXTERNAL_SOURCE">%1$s</xliff:g> yami"</string>
-    <string name="toast_displaying_all_contacts" msgid="2737388783898593875">"Ibonisa bonke abathintwayo"</string>
-    <string name="generic_no_account_prompt" msgid="7218827704367325460">"Gcina oxhumana nabo bephephile noma ngabe ulahlekelwa yiselula yakho: lungelanisa nensiza yokusebenzisa i-inthanethi."</string>
-    <string name="generic_no_account_prompt_title" msgid="753783911899054860">"Yengeza i-akhawunti"</string>
     <string name="contact_editor_prompt_zero_accounts" msgid="6648376557574360096">"Thatha iminithi ukungeza i-akhawunti ezokwenza isipele oxhumana nabo ku-Google."</string>
     <string name="contact_editor_prompt_one_account" msgid="3087691056345099310">"Oxhumana nabo bazolondolozwa ku-<xliff:g id="ACCOUNT_NAME">%1$s</xliff:g>."</string>
     <string name="contact_editor_prompt_multiple_accounts" msgid="8565761674283473549">"Khetha i-akhawunti ezenzakalelayo yoxhumana nabo abasha:"</string>
@@ -269,13 +205,12 @@
     <string name="expanding_entry_card_view_see_less" msgid="5344160551629714168">"Buka okuncane"</string>
     <string name="recent_card_title" msgid="8982782042698001695">"Okwakamuva"</string>
     <string name="about_card_title" msgid="2920942314212825637">"Mayelana"</string>
-    <string name="send_message" msgid="8938418965550543196">"Thumela umlayezo"</string>
     <string name="toast_making_personal_copy" msgid="288549957278065542">"Idala ikhophi yomuntu siqu"</string>
     <string name="tomorrow" msgid="6241969467795308581">"Kusasa"</string>
     <string name="today" msgid="8041090779381781781">"Namhlanje"</string>
     <string name="today_at_time_fmt" msgid="605665249491030460">"Namhlanje ngo-<xliff:g id="TIME_INTERVAL">%s</xliff:g>"</string>
     <string name="tomorrow_at_time_fmt" msgid="4856497969617819421">"Kusasa ngo-<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="date_time_fmt" msgid="5053178726906863812">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME_INTERVAL">%2$s</xliff:g>"</string>
     <string name="untitled_event" msgid="3484859385405939366">"(Umcimbi ongenasihloko)"</string>
     <string name="date_time_set" msgid="4761419824439606690">"Setha"</string>
     <string name="header_im_entry" msgid="3581720979640225615">"I-IM"</string>
@@ -285,20 +220,16 @@
     <string name="header_website_entry" msgid="1411467850000824745">"Iwebhusayithi"</string>
     <string name="header_event_entry" msgid="6738250422744401460">"Umcimbi"</string>
     <string name="header_relation_entry" msgid="1520292958088146460">"Ubudlelwano"</string>
-    <string name="header_account_entry" msgid="2684318506427891827">"I-Akhawunti"</string>
     <string name="header_name_entry" msgid="1592791008096288306">"Igama"</string>
     <string name="header_email_entry" msgid="8666093061171624478">"I-imeyili"</string>
     <string name="header_phone_entry" msgid="8450980572274173570">"Ifoni"</string>
-    <string name="content_description_expand_editor" msgid="1111381475901897470">"Chofoza ukuze unwebe isihleli soxhumana naye."</string>
-    <string name="content_description_collapse_editor" msgid="7598061318022977825">"Chofoza ukuze ugoqe isihleli soxhumana naye."</string>
     <string name="content_description_directions" msgid="2686791825798189335">"izikhombisi-ndlela eziya endaweni"</string>
-    <string name="content_description_recent_sms" msgid="1666389577263317445">"i-sms yakamuva. <xliff:g id="MESSAGE_BODY">%s</xliff:g>. <xliff:g id="PHONE_NUMBER">%s</xliff:g>. <xliff:g id="DATE">%s</xliff:g>. chofoza ukuze uphendule"</string>
+    <string name="content_description_recent_sms" msgid="1666389577263317445">"i-sms yakamuva. <xliff:g id="MESSAGE_BODY">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$s</xliff:g>. chofoza ukuze uphendule"</string>
     <string name="content_description_recent_call_type_incoming" msgid="5210739096863511410">"angenayo"</string>
     <string name="content_description_recent_call_type_outgoing" msgid="5156553338985232744">"aphumayo"</string>
     <string name="content_description_recent_call_type_missed" msgid="7371810920196048204">"akuphuthele"</string>
-    <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="content_description_recent_call" msgid="5183800406316723676">"ikholi yakamuva. <xliff:g id="CALL_TYPE">%1$s</xliff:g>. <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>. <xliff:g id="DATE">%3$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="editor_more_fields" msgid="3630987771304393421">"Izinkambu eziningi"</string>
     <string name="editor_change_photo_content_description" msgid="820879708069864340">"Shintsha isithombe soxhumana naye"</string>
     <string name="editor_add_photo_content_description" msgid="4194479313465418120">"Engeza isithombe soxhumana naye"</string>
@@ -306,41 +237,13 @@
     <string name="editor_failed_to_load" msgid="1623639078580475818">"Yehlulekile ukuvula umhleli."</string>
     <string name="editor_account_selector_title" msgid="4426337993307015833">"Ukulondoloza ku-"</string>
     <string name="editor_account_selector_read_only_title" msgid="4137969650184457126">"Ulwazi loxhumana naye kusuka ku-<xliff:g id="ACCOUNT">%s</xliff:g> aluhleleki"</string>
-    <string name="editor_account_selector_description" msgid="3324358600570627740">"Okwamanje ilondoloza ku-<xliff:g id="ACCOUNT_NAME">%s</xliff:g>. Thepha kabili ukuze ukhethe i-akhawunti ehlukile."</string>
-    <plurals name="editor_linked_contacts_selector_title" formatted="false" msgid="249075501821303190">
-      <item quantity="one">Oxhumana nabo abaxhunyiwe (<xliff:g id="COUNT">%d</xliff:g>)</item>
-      <item quantity="other">Oxhumana nabo abaxhunyiwe (<xliff:g id="COUNT">%d</xliff:g>)</item>
-    </plurals>
-    <string name="quickcontact_contacts_number" msgid="6036916944287597682">"<xliff:g id="COUNT">%d</xliff:g> oxhumana nabo abaxhunyiwe"</string>
-    <string name="quick_contact_display_name_with_phonetic" msgid="3692038078718876610">"<xliff:g id="DISPLAY_NAME">%s</xliff:g> (<xliff:g id="PHONETIC_NAME">%s</xliff:g>)"</string>
     <string name="quickcontact_suggestion_link_button" msgid="3244619714781727946">"XHUMANISA AMA-AKHAWUNTI"</string>
     <string name="quickcontact_suggestion_cancel_button" msgid="8236954313106630862">"KHANSELA"</string>
-    <plurals name="quickcontact_suggestion_card_title" formatted="false" msgid="2660005966628746406">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> Izimpinda ezingenzeka</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> Izimpinda ezingenzeka</item>
-    </plurals>
-    <plurals name="quickcontact_suggestions_number" formatted="false" msgid="495992931510695330">
-      <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> oxhumana nabo abaxhunyiwe</item>
-      <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> oxhumana nabo abaxhunyiwe</item>
-    </plurals>
-    <plurals name="quickcontact_suggestion_account_type_number" formatted="false" msgid="3001681298924002373">
-      <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="quickcontact_suggestion_account_type" msgid="5878263654735376962">"<xliff:g id="ACCOUNT_TYPE_0">%s</xliff:g><xliff:g id="ACCOUNT_TYPE_NUMBER">%s</xliff:g>"</string>
     <string name="suggestion_card_this_contact_title" msgid="3039457405374454914">"Lo oxhumana naye"</string>
     <string name="suggestion_card_duplicates_title" msgid="9107788743178980902">"Izimpinda ezingenzeka"</string>
     <string name="suggestion_card_help_message" msgid="4474061044387181093">"Laba oxhumana nabo kungaba umuntu ofanayo. Ungabaxhumanisa ndawonye njengoxhumana naye oyedwa."</string>
-    <string name="editor_linked_contacts_title" msgid="3077479751631492125">"Oxhumana nabo abaxhunyiwe"</string>
-    <string name="from_your_accounts" msgid="1746293107836889912">"Kusuka kuma-akhawunti wakho"</string>
-    <string name="photo_picker_title" msgid="5272832995550042801">"Khetha isithombe"</string>
-    <string name="contact_from_account_name" msgid="2078526819634079406">"Kusuka ku-<xliff:g id="ACCOUNT_NAME">%s</xliff:g>"</string>
-    <string name="editor_delete_view_description" msgid="8583095381562991959">"Susa <xliff:g id="DATA_TYPE">%s </xliff:g><xliff:g id="DATA_KIND">%s</xliff:g>"</string>
+    <string name="editor_delete_view_description" msgid="8583095381562991959">"Susa <xliff:g id="DATA_TYPE">%1$s </xliff:g><xliff:g id="DATA_KIND">%2$s</xliff:g>"</string>
     <string name="editor_delete_view_description_short" msgid="7335518371270844912">"Susa <xliff:g id="DATA_KIND">%s</xliff:g>"</string>
-    <string name="photo_view_description_not_checked" msgid="8876314195990885177">"Isithombe kusuka ku-<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>asimakiwe"</string>
-    <string name="photo_view_description_checked" msgid="3906597168607472795">"Isithombe kusuka ku-<xliff:g id="ACCOUNT_TYPE">%s </xliff:g><xliff:g id="USER_NAME">%s </xliff:g>simakiwe"</string>
-    <string name="photo_view_description_not_checked_no_info" msgid="2749154927006406981">"Isithombe esivela ku-akhawunti engaziwa asithikhiwe"</string>
-    <string name="photo_view_description_checked_no_info" msgid="4974335987092590591">"Isithombe esivela ku-akhawunti engaziwa sithikhiwe"</string>
     <string name="menu_assistant" msgid="5760693735722052454">"Iziphakamiso"</string>
     <string name="menu_assistant_new_badge" msgid="3132884821616980034">"Okusha"</string>
     <string name="navigation_drawer_open" msgid="1126498472143250642">"Vula ikhabethe lokuzulazula"</string>
@@ -409,11 +312,9 @@
     <string name="directory_search_label" msgid="1887759056597975053">"Uhla lwemibhalo"</string>
     <string name="directory_search_label_work" msgid="8618292129829443176">"Uhla lwemibhalo lomsebenzi"</string>
     <string name="local_search_label" msgid="2551177578246113614">"Bonke oxhumana nabo"</string>
-    <string name="foundTooManyContacts" msgid="5163335650920020220">"kutholakele <xliff:g id="COUNT">%d</xliff:g>edlula"</string>
     <string name="description_quick_contact_for" msgid="6737516415168327789">"Oxhumene naye ngokushesha ku <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="missing_name" msgid="8745511583852904385">"(alikho igama)"</string>
     <string name="favoritesFrequentContacted" msgid="6184232487472425690">"Abathintwa njalo"</string>
-    <string name="description_view_contact_detail" msgid="9133251213656414807">"Buka othintana naye"</string>
     <string name="list_filter_phones" msgid="735313795643493365">"Bonke othintana nabo kanye nezinombolo zabo zocingo"</string>
     <string name="list_filter_phones_work" msgid="1470173699551475015">"Oxhumana nabo bephrofayela yomsebenzi"</string>
     <string name="view_updates_from_group" msgid="1782685984905600034">"Buka Okwenziwe Kabusha"</string>
@@ -421,7 +322,6 @@
     <string name="account_sim" msgid="6519016427905087952">"I-SIM"</string>
     <string name="nameLabelsGroup" msgid="2034640839640477827">"Igama"</string>
     <string name="nicknameLabelsGroup" msgid="2891682101053358010">"Igama lokudlala"</string>
-    <string name="full_name" msgid="6602579550613988977">"Igama"</string>
     <string name="name_given" msgid="4280790853455320619">"Igama"</string>
     <string name="name_family" msgid="7466985689626017037">"Isibongo"</string>
     <string name="name_prefix" msgid="59756378548779822">"Qamba isiqalo"</string>
@@ -454,8 +354,6 @@
     <string name="email_custom" msgid="5536404237099078802">"Thumela i-imeyili ku-<xliff:g id="CUSTOM_LABEL">%s</xliff:g>"</string>
     <string name="email" msgid="5668400997660065897">"I-imeyili"</string>
     <string name="postal_street" msgid="8133143961580058972">"Isitaladi"</string>
-    <string name="postal_pobox" msgid="4431938829180269821">"PO box"</string>
-    <string name="postal_neighborhood" msgid="1450783874558956739">"Indawo yasekhaya"</string>
     <string name="postal_city" msgid="6597491300084895548">"Idolobha"</string>
     <string name="postal_region" msgid="6045263193478437672">"Idolobha"</string>
     <string name="postal_postcode" msgid="572136414136673751">"Ikhodi ye-ZIP"</string>
@@ -493,8 +391,6 @@
     <string name="display_more_groups" msgid="2682547080423434170">"Amanye amaqembu..."</string>
     <string name="display_warn_remove_ungrouped" msgid="8872290721676651414">"Iyasusa \"<xliff:g id="GROUP">%s</xliff:g>\" kokuvumelanisiwe izophinde isuse nanoma ibaphi oxhumana nabo abangelona iqoqo."</string>
     <string name="savingDisplayGroups" msgid="2133152192716475939">"Ilondoloza izinketho zokubonisa"</string>
-    <string name="menu_done" msgid="796017761764190697">"Kwenziwe"</string>
-    <string name="menu_doNotSave" msgid="58593876893538465">"Khansela"</string>
     <string name="listCustomView" msgid="1840624396582117590">"Ukubuka okungokwezifiso"</string>
     <string name="dialog_new_contact_account" msgid="4969619718062454756">"Londoloza oxhumana nabo abangenisiwe ku-:"</string>
     <string name="import_from_sim" msgid="6912071635295799131">"I-SIM card"</string>
@@ -514,18 +410,14 @@
     <string name="cancel_export_confirmation_message" msgid="1995462401949262638">"Misa ukulandwa kwe <xliff:g id="FILENAME">%s</xliff:g>?"</string>
     <string name="cancel_vcard_import_or_export_failed" msgid="6139900383366166706">"Yehlulekile ukukhansela ukungenisa/thekelisa i-vCard"</string>
     <string name="fail_reason_unknown" msgid="1714092345030570863">"Iphutha elingaziwa"</string>
-    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Ayikwazi ukuvula \"<xliff:g id="FILE_NAME">%s</xliff:g>\": <xliff:g id="EXACT_REASON">%s</xliff:g>"</string>
+    <string name="fail_reason_could_not_open_file" msgid="2067725459821997463">"Ayikwazi ukuvula \"<xliff:g id="FILE_NAME">%1$s</xliff:g>\": <xliff:g id="EXACT_REASON">%2$s</xliff:g>"</string>
     <string name="fail_reason_could_not_initialize_exporter" msgid="707260459259688510">"Ayikwazanga ukuqalisa isithekelisi: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\""</string>
     <string name="fail_reason_no_exportable_contact" msgid="8728506011371262065">"Abekho othintana nabo abathumelekayo."</string>
     <string name="missing_required_permission" msgid="5865884842972833120">"Ukhubaze imvume edingekayo."</string>
     <string name="fail_reason_error_occurred_during_export" msgid="3018855323913649063">"Kube khona iphutha ngesikhathi kuthunyelwa: \"<xliff:g id="EXACT_REASON">%s</xliff:g>\"."</string>
-    <string name="fail_reason_too_long_filename" msgid="3393764245254738333">"Igama lefayela elidingekayo lide kakhulu (\"<xliff:g id="FILENAME">%s</xliff:g>\")"</string>
     <string name="fail_reason_io_error" msgid="6748358842976073255">"Iphutha le-I/O"</string>
     <string name="fail_reason_low_memory_during_import" msgid="875222757734882898">"Isikhala asanele (kungenzeka ifayela ibe nkulu kakhulu)"</string>
-    <string name="fail_reason_vcard_parse_error" msgid="888263542360355784">"Yehlulekile ukunqunta i-vCard ngokwesizathu esingalindelekile"</string>
     <string name="fail_reason_not_supported" msgid="8219562769267148825">"Ifomethi ayisekelwe."</string>
-    <string name="fail_reason_failed_to_collect_vcard_meta_info" msgid="6427931733267328564">"Yehlulekile ukuqoqa ulwazi lwemetha lwefayela noma amafayela e-vCard."</string>
-    <string name="fail_reason_failed_to_read_files" msgid="5823434810622484922">"Ifayela elilodwa noma amafayela angaphezulu ehlulekile ukungenisa (%s)."</string>
     <string name="exporting_vcard_finished_title" msgid="4767045779458185251">"Iqedile ukuthumela kwenye indawo <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="exporting_vcard_finished_title_fallback" msgid="6060472638008218274">"Iqedile ukukhipha oxhumana nabo."</string>
     <string name="exporting_vcard_finished_toast" msgid="1739055986856453882">"Iqedile ukuthumela oxhumana nabo, chofoza isaziso ukuze wabelane ngoxhumana nabo."</string>
@@ -534,29 +426,25 @@
     <string name="exporting_contact_list_title" msgid="9072240631534457415">"Ithekelisa idatha yothintana naye"</string>
     <string name="exporting_contact_list_message" msgid="3367949209642931952">"Idatha yoxhumana nabo iyathunyelwa."</string>
     <string name="composer_failed_to_get_database_infomation" msgid="1765944280846236723">"Yehlulekile ukuthola ulwazi lwemininingo egciniwe"</string>
-    <string name="composer_has_no_exportable_contact" msgid="3296493229040294335">"Abekho oxhuana nabo abathuelekayo. Um unabo oxhuana nabo ocingweni lwakho, banye abahlinzeki be-data kungenzeka bangavumeli labo oxhuana nabo ukuthi bathunyelwe kolunye ucingo."</string>
+    <string name="composer_has_no_exportable_contact" msgid="5712531702823346549">"Abekho oxhumana nabo abangathunyelwa."</string>
     <string name="composer_not_initialized" msgid="2321648986367005254">"Umqambi we-Vcard akazange aqale ngendlela efanele."</string>
     <string name="exporting_contact_failed_title" msgid="4892358112409576342">"Yehlulekile ukuthumela"</string>
     <string name="exporting_contact_failed_message" msgid="4938527850142003141">"Imininingwane yoxhumana naye ayizange ithunyelwe.\nIsizathu: \"<xliff:g id="FAIL_REASON">%s</xliff:g>\""</string>
     <string name="importing_vcard_description" msgid="4245275224298571351">"Iyangenisa <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="reading_vcard_failed_title" msgid="4251647443358422855">"Yehlulekile ukufunda imininingo ye-vCard"</string>
-    <string name="reading_vcard_canceled_title" msgid="1925216585981542019">"Ukufundwa kwe-Vcard kumisiwe"</string>
     <string name="importing_vcard_finished_title" msgid="3341541727268747967">"Iqedile ukungenisa i-vCard <xliff:g id="FILENAME">%s</xliff:g>"</string>
     <string name="importing_vcard_canceled_title" msgid="2147475978165599336">"Ukulandwa <xliff:g id="FILENAME">%s</xliff:g> kukhanseliwe"</string>
     <string name="vcard_import_will_start_message" msgid="2804911199145873396">"i-<xliff:g id="FILENAME">%s</xliff:g> izongeniswa maduze nje."</string>
     <string name="vcard_import_will_start_message_with_default_name" msgid="1022969530654129470">"Ifayela izongeniswa maduze nje."</string>
     <string name="vcard_import_request_rejected_message" msgid="2890471184508516011">"Isicelo sokungenisa i-vCard sinqatshelwe. Sicela uzame futhi emva kwesikhathi."</string>
-    <string name="vcard_export_will_start_message" msgid="2210241345252081463">"i-<xliff:g id="FILENAME">%s</xliff:g> izothekeliswa maduze nje."</string>
-    <string name="vcard_export_will_start_message_fallback" msgid="6553826997490909749">"Ifayela lizokhishwa maduze."</string>
     <string name="contacts_export_will_start_message" msgid="8538705791417534431">"Oxhumana nabo bazothunyelwa maduze."</string>
     <string name="vcard_export_request_rejected_message" msgid="2844874826431327531">"Isicelo sokuthekelisa i-vCard sinqatshelwe. Sicela uzame futhi emva kwesikhathi."</string>
     <string name="vcard_unknown_filename" msgid="7171709890959915954">"othintana nabo"</string>
     <string name="caching_vcard_message" msgid="4926308675041506756">"Ifihla i-vCard/ama-vCard endaweni yokugcina eseduze. Ukulandwa kwangampela kuzoqala khona maduze."</string>
     <string name="vcard_import_failed" msgid="5223531255894842406">"Yehlulekile ukulanda i-vCard"</string>
     <string name="nfc_vcard_file_name" msgid="2823095213265993609">"Othintana naye utholakale nge-NFC"</string>
-    <string name="confirm_export_title" msgid="6834385377255286349">"Thekelisa othintana nabo"</string>
     <string name="caching_vcard_title" msgid="1226272312940516605">"Ukulondoloza isikhashana..."</string>
-    <string name="progress_notifier_message" msgid="2311011466908220528">"Ingenisa <xliff:g id="CURRENT_NUMBER">%s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%s</xliff:g>: <xliff:g id="NAME">%s</xliff:g>"</string>
+    <string name="progress_notifier_message" msgid="2311011466908220528">"Ingenisa <xliff:g id="CURRENT_NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL_NUMBER">%2$s</xliff:g>: <xliff:g id="NAME">%3$s</xliff:g>"</string>
     <string name="export_to_vcf_file" product="default" msgid="4407527157056120858">"Thumela kufayela le-.vcf"</string>
     <string name="display_options_sort_list_by" msgid="7028809117272018712">"Hlunga nge-"</string>
     <string name="display_options_sort_by_given_name" msgid="2778421332815687873">"Igama"</string>
@@ -569,8 +457,6 @@
     <string name="settings_my_info_title" msgid="1534272456405343119">"Ulwazi lwami"</string>
     <string name="set_up_profile" msgid="7370213843590143771">"Setha iphrofayela yakho"</string>
     <string name="setting_about" msgid="7014388749752042863">"Mayelana noxhumana nabo"</string>
-    <string name="share_visible_contacts" msgid="890150378880783797">"Yabelana nothintana nabo ababonakalayo"</string>
-    <string name="share_visible_contacts_failure" msgid="7324717548166915560">"Yehlulekile ukwabelana ngoxhumana nabo ababonakalayo"</string>
     <string name="share_favorite_contacts" msgid="4280926751003081042">"Yabelana ngoxhumana nabo obathandayo"</string>
     <string name="share_contacts" msgid="8109287987498711664">"Yabelana bonke oxhumana nabo"</string>
     <string name="share_contacts_failure" msgid="1216431977330560559">"Yehlulekile ukwabelana ngoxhumana nabo."</string>
@@ -580,14 +466,10 @@
     <string name="no_contact_to_share" msgid="1276397530378323033">"Abekho oxhumana nabo ongabelana nabo."</string>
     <string name="menu_contacts_filter" msgid="2165153460860262501">"Othintana nabo abazoboniswa"</string>
     <string name="activity_title_contacts_filter" msgid="8275542497615516969">"Othintana nabo abazoboniswa"</string>
-    <string name="custom_list_filter" msgid="2105275443109077687">"Cacisa ukubuka okungokwezifiso"</string>
+    <string name="custom_list_filter" msgid="9048525797111024204">"Enza ngendlela ofisa ngayo ukubuka"</string>
     <string name="menu_custom_filter_save" msgid="2679793632208086460">"Londoloza"</string>
     <string name="hint_findContacts" msgid="7128627979899070325">"Sesha oxhumana nabo"</string>
     <string name="contactsFavoritesLabel" msgid="8417039765586853670">"Izintandokazi"</string>
-    <string name="listTotalAllContactsZero" msgid="5513001821794568211">"Abekho othintana nabo"</string>
-    <string name="menu_clear_frequents" msgid="7688250191932838833">"Sula oxhumana nabo njalo"</string>
-    <string name="menu_select_sim" msgid="3603578201960504010">"Khetha ikhadi le-SIM"</string>
-    <string name="menu_accounts" msgid="1424330057450189074">"Phatha ama-akhawunti"</string>
     <string name="menu_import" msgid="6107961135813836467">"Ngenisa"</string>
     <string name="menu_export" msgid="2658783911863503902">"Hambisa"</string>
     <string name="menu_blocked_numbers" msgid="5272951629083025995">"Izinombolo ezivinjiwe"</string>
@@ -595,19 +477,13 @@
     <string name="contact_status_update_attribution_with_date" msgid="7358045508107825068">"<xliff:g id="DATE">%1$s</xliff:g> nge- <xliff:g id="SOURCE">%2$s</xliff:g>"</string>
     <string name="action_menu_back_from_search" msgid="8793348588949233348">"misa ukusesha"</string>
     <string name="description_clear_search" msgid="688023606766232904">"Sula usesho"</string>
-    <string name="settings_contact_display_options_title" msgid="4890258244494248687">"Izinketho yokubonisa oxhumana naye"</string>
     <string name="select_account_dialog_title" msgid="5478489655696599219">"I-Akhawunti"</string>
     <string name="set_default_account" msgid="4311613760725609801">"Njalo sebenzisa lokhu kumakholi"</string>
-    <string name="select_phone_account_for_calls" msgid="3810607744451014540">"Shaya nge"</string>
     <string name="call_with_a_note" msgid="8389827628360791676">"Shaya ngenothi"</string>
     <string name="call_subject_hint" msgid="3043028982108363572">"Thayipha inothi ukuze uthumele ngekholi..."</string>
     <string name="send_and_call_button" msgid="7740295432834590737">"THUMELA FUTHI USHAYE"</string>
     <string name="call_subject_limit" msgid="4545212901205397669">"<xliff:g id="COUNT">%1$s</xliff:g> / <xliff:g id="LIMIT">%2$s</xliff:g>"</string>
     <string name="call_subject_type_and_number" msgid="7667188212129152558">"<xliff:g id="TYPE">%1$s</xliff:g> • <xliff:g id="NUMBER">%2$s</xliff:g>"</string>
-    <plurals name="tab_title_with_unread_items" formatted="false" msgid="7682024005130747825">
-      <item quantity="one"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> izinto ezingafundiwe. </item>
-      <item quantity="other"> <xliff:g id="TITLE_2">%1$s</xliff:g>. <xliff:g id="COUNT_3">%2$d</xliff:g> izinto ezingafundiwe. </item>
-    </plurals>
     <string name="about_build_version" msgid="1765533099416999801">"Yakha inguqulo"</string>
     <string name="about_open_source_licenses" msgid="6479990452352919641">"Amalayisense womthombo ovulekile"</string>
     <string name="about_open_source_licenses_summary" msgid="57418386931763994">"Iminingwane yelayisensi yesofthiwe yomthombo ovulelekile"</string>
@@ -621,8 +497,8 @@
     <string name="description_delete_contact" msgid="53835657343783663">"Susa"</string>
     <string name="description_no_name_header" msgid="8884991311595943271">"Isiyingi"</string>
     <string name="callDurationSecondFormat" msgid="7067644915903528776">"<xliff:g id="SECONDS">%s</xliff:g> isekhondi"</string>
-    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%s</xliff:g> iminithi <xliff:g id="SECONDS">%s</xliff:g> isekhondi"</string>
-    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%s</xliff:g> ihora <xliff:g id="MINUTES_1">%s</xliff:g> iminithi <xliff:g id="SECONDS">%s</xliff:g> isekhondi"</string>
+    <string name="callDurationMinuteFormat" msgid="4647095486747447674">"<xliff:g id="MINUTES">%1$s</xliff:g> iminithi <xliff:g id="SECONDS">%2$s</xliff:g> isekhondi"</string>
+    <string name="callDurationHourFormat" msgid="7392254193808506640">"<xliff:g id="MINUTES_0">%1$s</xliff:g> ihora <xliff:g id="MINUTES_1">%2$s</xliff:g> iminithi <xliff:g id="SECONDS">%3$s</xliff:g> isekhondi"</string>
     <string name="dynamic_shortcut_disabled_message" msgid="249939425761315252">"Lesi sinqamuleli sikhutshaziwe"</string>
     <string name="dynamic_shortcut_contact_removed_message" msgid="6845645831837615899">"Oxhumana naye ususiwe"</string>
     <string name="sim_import_button_text" msgid="4270841592496619317">"Ngenisa"</string>
@@ -645,4 +521,8 @@
     <string name="connection_error_message" msgid="7046408921529247089">"Akukho ukuxhumana"</string>
     <string name="single_sim_display_label" msgid="6985770499439371497">"I-SIM"</string>
     <string name="show_more_content_description" msgid="4277410425912984722">"Bonisa okuningi"</string>
+    <string name="importing_sim_finished_title" msgid="5196369441294050721">"Iqedile ukungenisa ikhadi le-SIM"</string>
+    <string name="importing_sim_failed_title" msgid="39706901030537985">"Ukungenisa kuhlulekile"</string>
+    <string name="importing_sim_failed_message" msgid="3345258302998021066">"Ayikwazanga ukungenisa oxhumana nabo kusukela ku-SIM card"</string>
+    <string name="importing_sim_in_progress_title" msgid="3638299581276676109">"Ingenisa i-SIM"</string>
 </resources>
diff --git a/res/values/bools.xml b/res/values/bools.xml
index eef3808..175aeb1 100644
--- a/res/values/bools.xml
+++ b/res/values/bools.xml
@@ -16,7 +16,6 @@
 <resources>
 
     <bool name="quickcontact_two_panel">false</bool>
-    <bool name="contact_all_list_show_card_frame">false</bool>
     <bool name="contacteditor_two_panel">false</bool>
 
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 27759b9..61994da 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -23,7 +23,6 @@
     <!-- 38% black -->
     <color name="quantum_black_hint_text">#61000000</color>
 
-    <color name="quickcontact_name_detail_background">#66000000</color>
     <color name="quickcontact_entry_sub_header_text_color">#737373</color>
     <color name="quickcontact_entry_header_text_color">#202020</color>
 
@@ -31,12 +30,9 @@
 
     <color name="nav_item_selected_background">#0f000000</color>
 
-    <color name="background_social_updates">#ffeeeeee</color>
-
     <color name="action_bar_button_text_color">#FFFFFF</color>
 
     <color name="actionbar_background_color">@color/primary_color</color>
-    <color name="actionbar_background_color_dark">@color/primary_color_dark</color>
 
     <color name="contextual_selection_bar_color">#f6f6f6</color>
     <!-- Color of the status bar above the contextual selection bar. -->
@@ -95,14 +91,6 @@
     <color name="swipe_refresh_color3">#4285f4</color>
     <color name="swipe_refresh_color4">#f4b400</color>
 
-    <!-- Color of hamburger icon in promo -->
-    <color name="hamburger_feature_highlight_inner_color">#00ffffff</color>
-
-    <!-- Background color corresponding to the holo list 9-patch. -->
-    <color name="holo_list_background_color">#eeeeee</color>
-
-    <color name="focus_color">#44ff0000</color>
-
     <!-- Color of ripples used for views with dark backgrounds -->
     <color name="ripple_material_dark">#a0ffffff</color>
 
@@ -114,12 +102,6 @@
     <!-- Text color for section header. -->
     <color name="section_header_text_color">@color/dialtacts_theme_color</color>
 
-    <!-- Divider color for header separator -->
-    <color name="main_header_separator_color">#AAAAAA</color>
-
-    <!-- Divider color for header separator -->
-    <color name="secondary_header_separator_color">#D0D0D0</color>
-
     <!-- Color of the theme of the People app -->
     <color name="people_app_theme_color">#363636</color>
 
@@ -223,7 +205,6 @@
     <color name="searchbox_background_color">#ffffff</color>
 
     <color name="searchbox_hint_text_color">#66000000</color>
-    <color name="searchbox_icon_tint">@color/searchbox_hint_text_color</color>
 
     <color name="search_shortcut_icon_color">@color/dialtacts_theme_color</color>
 
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 2b7132e..44f86d9 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -14,8 +14,6 @@
      limitations under the License.
 -->
 <resources>
-    <dimen name="account_selector_popup_width">400dip</dimen>
-
     <!-- Initial height of transparent space above QuickContacts -->
     <dimen name="quickcontact_starting_empty_height">150dp</dimen>
     <!-- Initial size of QuickContact's title size -->
@@ -59,9 +57,6 @@
         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>
-
     <!-- The height and width of the delete button should be the same size as an editor row -->
     <dimen name="editor_delete_button_size">@dimen/editor_min_line_item_height</dimen>
 
@@ -82,9 +77,6 @@
     <!-- Size of input form text inside the contact editor -->
     <dimen name="editor_form_text_size">16sp</dimen>
 
-    <!-- Width and height of the mime-type icons inside the editor -->
-    <dimen name="editor_kind_icon_size">24dp</dimen>
-
     <!-- Total width of data-kind icon, including its start and end padding -->
     <dimen name="editor_kind_icon_total_width">68dp</dimen>
 
@@ -99,22 +91,6 @@
     <!-- Width of the Type-Label in the Editor -->
     <dimen name="editor_type_label_width">150dip</dimen>
 
-    <!-- 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 and bottom padding for the two text views in editor account header expandable -->
-    <dimen name="editor_account_header_expandable_top_bottom_padding">24dp</dimen>
-
-    <!-- left padding for the two text views in editor account header expandable -->
-    <dimen name="editor_account_header_expandable_left_padding">4dp</dimen>
-
-    <!-- Width and height of the expanded contact photo on the contact detail page -->
-    <dimen name="detail_contact_photo_expanded_size">400dip</dimen>
-
-    <!-- This is the minimum amount of space to leave underneath an expanded contact detail
-         photo -->
-    <dimen name="expanded_photo_height_offset">100dip</dimen>
-
     <!-- Minimum width for the photo action popup options -->
     <dimen name="photo_action_popup_min_width">300dip</dimen>
 
@@ -127,33 +103,6 @@
     <!-- Custom dialog layout dimens -->
     <dimen name="custom_dialog_layout">4dip</dimen>
 
-    <!-- Top and bottom padding for a contact detail item -->
-    <dimen name="detail_item_vertical_margin">8dip</dimen>
-
-    <!-- Minimum height of a row in the contact detail -->
-    <dimen name="detail_min_line_item_height">48dip</dimen>
-
-    <!-- Font size used for the contact name in the widget -->
-    <dimen name="widget_text_size_name">14sp</dimen>
-
-    <!-- Font size used for the social status in the widget -->
-    <dimen name="widget_text_size_snippet">13sp</dimen>
-
-    <!-- Account title left padding -->
-    <dimen name="account_container_left_padding">16dip</dimen>
-
-    <!-- Left and right padding for the group editor view -->
-    <dimen name="group_editor_side_padding">16dip</dimen>
-
-    <!-- Border padding for the group detail fragment -->
-    <dimen name="group_detail_border_padding">0dip</dimen>
-
-    <!-- Height of the quick contact photo container (for screens that are too large to use the screen width/height as a constraint)-->
-    <dimen name="quick_contact_photo_container_height">180dip</dimen>
-
-    <!-- Width of search view in action bar.  Use 0dip for MATCH_PARENT -->
-    <dimen name="search_view_width">0dip</dimen>
-
     <!-- For join screen. Mainly for tablet. -->
     <dimen name="join_header_left_margin">@dimen/contact_browser_list_header_left_margin</dimen>
     <dimen name="join_header_right_margin">@dimen/contact_browser_list_header_right_margin</dimen>
@@ -162,21 +111,9 @@
 
     <dimen name="contact_filter_header_min_height">24dip</dimen>
 
-    <!-- Max width of the SearchView when the contact picker is a dialog (on wide
-         screen devices). -->
-    <dimen name="contact_picker_search_view_max_width">550dip</dimen>
-
-    <!-- Min height of the list of contacts when the contact picker is a dialog (on
-        wide screen devices). -->
-    <dimen name="contact_picker_contact_list_min_height">550dip</dimen>
-
-
     <!-- Margins for ExpandingEntryCardView -->
     <dimen name="expanding_entry_card_marginStartEnd">8dp</dimen>
     <dimen name="expanding_entry_card_marginBottom">12dp</dimen>
-    <!-- Width of the grey border surrounding the expanding entry cards. If we ever add
-         a rounded corner to the expanding entry cards, than we will need to increase this value -->
-    <dimen name="expanding_entry_card_border_width">12dp</dimen>
 
     <!-- Top margin for the communication card, used to add space from header. -->
     <dimen name="first_card_marginTop">12dp</dimen>
@@ -227,7 +164,6 @@
     <dimen name="quickcontact_suggestion_card_icon_width">40dp</dimen>
     <dimen name="quickcontact_suggestion_card_image_spacing">20dp</dimen>
     <dimen name="quickcontact_suggestion_card_layout_margin">8dp</dimen>
-    <dimen name="quickcontact_suggestion_card_checkbox_right_margin">16dp</dimen>
     <dimen name="quickcontact_collapse_view_height">48dp</dimen>
     <dimen name="quickcontact_collapse_icon_size">24dp</dimen>
     <dimen name="quickcontact_collapse_text_padding">12dp</dimen>
@@ -235,7 +171,6 @@
     <dimen name="quickcontact_expanding_help_text_size">14sp</dimen>
     <dimen name="quickcontact_expanding_button_right_padding">16dp</dimen>
     <dimen name="quickcontact_expanding_item_height">72dp</dimen>
-    <dimen name="quickcontact_expanding_item_padding">8dp</dimen>
     <dimen name="quickcontact_expanding_item_image_padding">12dp</dimen>
     <dimen name="quickcontact_expanding_button_section_height">48dp</dimen>
     <dimen name="quickcontact_expanding_button_section_padding">8dp</dimen>
@@ -243,9 +178,6 @@
     <dimen name="expanding_entry_card_item_icon_height">24dp</dimen>
     <dimen name="expanding_entry_card_item_icon_width">24dp</dimen>
 
-    <!-- Width of the box around a tab when the tab has focus -->
-    <dimen name="tab_focused_stroke_width">1dp</dimen>
-
     <dimen name="contact_browser_list_item_padding_top_or_bottom">7dp</dimen>
 
     <dimen name="contact_browser_list_item_height">56dp</dimen>
@@ -325,9 +257,6 @@
     <!--  Horizontal whitespace (both padding and margin) before the first tile and after the last tile -->
     <dimen name="contact_tile_start_end_whitespace">16dip</dimen>
 
-    <!-- Left and right padding for a contact detail item -->
-    <dimen name="detail_item_side_margin">16dip</dimen>
-
     <!-- ContactTile Layouts -->
     <!--
       Use sp instead of dip so that the shadowbox heights can all scale uniformly
@@ -376,34 +305,19 @@
     <!-- Width of height of an icon from a third-party app in the networks section of the contact card. -->
     <dimen name="detail_network_icon_size">40dp</dimen>
 
-    <!-- Empty message margins -->
-    <dimen name="empty_message_top_margin">48dip</dimen>
-
     <!-- contact browser list margins -->
     <dimen name="contact_browser_list_item_text_size">16sp</dimen>
     <dimen name="contact_browser_list_item_photo_size">40dp</dimen>
     <dimen name="contact_browser_list_item_gap_between_image_and_text">15dp</dimen>
     <dimen name="contact_browser_list_item_gap_between_indexer_and_image">16dp</dimen>
-    <dimen name="contact_browser_list_top_margin">12dp</dimen>
-
-    <!-- Dimensions for "No contacts" string in PhoneFavoriteFragment for the All contacts
-         with phone numbers section
-    -->
-    <dimen name="contact_phone_list_empty_description_size">20sp</dimen>
-    <dimen name="contact_phone_list_empty_description_padding">10dip</dimen>
 
     <!-- Dimensions for contact letter tiles -->
-    <dimen name="tile_letter_font_size">40dp</dimen>
-    <dimen name="tile_letter_font_size_small">20dp</dimen>
-    <dimen name="tile_divider_width">1dp</dimen>
     <item name="letter_to_tile_ratio" type="dimen">67%</item>
 
     <!-- Height of the floating action button -->
     <dimen name="floating_action_button_height">56dp</dimen>
     <!-- Width of the floating action button -->
     <dimen name="floating_action_button_width">56dp</dimen>
-    <!-- Corner radius of the floating action button -->
-    <dimen name="floating_action_button_radius">28dp</dimen>
     <!-- Z translation of the floating action button -->
     <dimen name="floating_action_button_translation_z">8dp</dimen>
     <!-- Padding to be applied to the bottom of lists to make space for the floating action
@@ -413,14 +327,10 @@
     <dimen name="floating_action_button_margin_right">16dp</dimen>
     <!-- Bottom margin of the floating action button -->
     <dimen name="floating_action_button_margin_bottom">16dp</dimen>
-    <!-- Offset of bottom margin of the floating action button used when dialpad is up -->
-    <dimen name="floating_action_button_dialpad_margin_bottom_offset">4dp</dimen>
 
     <!-- Size of text in tabs. -->
     <dimen name="tab_elevation">2dp</dimen>
 
-    <!-- Padding around the icon in the search box. -->
-    <dimen name="search_box_icon_margin">4dp</dimen>
     <!-- Size of the icon (voice search, back arrow) in the search box. -->
     <dimen name="search_box_icon_size">56dp</dimen>
     <!-- Size of the close icon.-->
@@ -434,8 +344,6 @@
     <!-- Search box text size -->
     <dimen name="search_text_size">16sp</dimen>
 
-    <item name="close_icon_alpha" format="float" type="dimen">0.54</item>
-
     <!-- Size of the close icon in selection bar.-->
     <dimen name="selection_bar_close_icon_size">56dp</dimen>
 
@@ -447,11 +355,6 @@
 
     <dimen name="frequently_contacted_title_text_size">24sp</dimen>
 
-    <!-- Size of icon for contacts number shortcuts -->
-    <dimen name="search_shortcut_radius">40dp</dimen>
-
-    <dimen name="contact_list_card_elevation">2dp</dimen>
-
     <!-- Padding used around the periphery of the call subject dialog, as well as in between the
          items. -->
     <dimen name="call_subject_dialog_margin">20dp</dimen>
@@ -468,8 +371,4 @@
     <!-- Row padding for call subject history items. -->
     <dimen name="call_subject_history_item_padding">15dp</dimen>
 
-    <!-- Padding between SIM checkbox and end of row -->
-    <dimen name="sim_import_checkbox_end_padding">16dp</dimen>
-
-
 </resources>
diff --git a/res/values/donottranslate_config.xml b/res/values/donottranslate_config.xml
index c6542fb..5e46f81 100644
--- a/res/values/donottranslate_config.xml
+++ b/res/values/donottranslate_config.xml
@@ -19,9 +19,6 @@
 
 <resources>
 
-    <!-- If true, phonetic name is included in the contact editor by default -->
-    <bool name="config_editor_include_phonetic_name">false</bool>
-
     <!-- Help URL pointing to main TOC for People. This is intentionally empty because
          the overlay will fill this in during build time. -->
     <string name="help_url_people_main"></string>
@@ -59,40 +56,9 @@
     specific to some vendor (like DoCoMo), specify this type (e.g. "docomo") -->
     <string name="config_export_vcard_type" translatable="false">default</string>
 
-    <!-- The type of vcard for improt. If the vcard importer cannot guess the exact type
-    of a vCard type, the improter uses this type. -->
-    <string name="config_import_vcard_type" translatable="false">default</string>
-
-    <!-- Prefix of exported VCard file -->
-    <string name="config_export_file_prefix" translatable="false"></string>
-
-    <!-- Suffix of exported VCard file. Attached before an extension -->
-    <string name="config_export_file_suffix" translatable="false"></string>
-
-    <!-- Extension for exported VCard files -->
-    <string name="config_export_file_extension">vcf</string>
-
     <!-- The filename that is suggested that users use when exporting vCards. Should include the .vcf extension. -->
     <string name="exporting_vcard_filename" translatable="false">contacts.vcf</string>
 
-    <!-- Minimum number of exported VCard file index -->
-    <integer name="config_export_file_min_index">1</integer>
-
-    <!-- Maximum number of exported VCard file index -->
-    <integer name="config_export_file_max_index">99999</integer>
-
-    <!-- The list (separated by ',') of extensions should be checked in addition to
-     config_export_extension. e.g. If "aaa" is added to here and 00001.vcf and 00002.aaa
-     exist in a target directory, 00003.vcf becomes a next file name candidate.
-     Without this configuration, 00002.vcf becomes the candidate.-->
-    <string name="config_export_extensions_to_consider" translatable="false"></string>
-
-    <!-- If true, enable the "import contacts from SIM" feature if the device
-         has an appropriate SIM or ICC card.
-         Setting this flag to false in a resource overlay allows you to
-         entirely disable SIM import on a per-product basis. -->
-    <bool name="config_allow_sim_import">true</bool>
-
     <!-- Flag indicating whether Contacts app is allowed to export contacts -->
     <bool name="config_allow_export">true</bool>
 
diff --git a/res/values/integers.xml b/res/values/integers.xml
index 9ef7810..718e4f6 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -19,9 +19,6 @@
     <!-- Number of lines the QuickContact title can have -->
     <integer name="quickcontact_title_lines">1</integer>
 
-    <!-- Max suggestions limit showing in quick contact suggestion card -->
-    <integer name="quickcontact_suggestions_limit">10</integer>
-
     <!-- The maximum allowed group name length -->
     <integer name="group_name_max_length">40</integer>
 
@@ -37,10 +34,6 @@
     <!-- Top margin ratio for the image for empty contacts view-->
     <integer name="contacts_no_account_empty_image_margin_divisor">2</integer>
 
-    <!--  Determines the number of columns in a ContactTileRow in the favorites tab -->
-    <integer name="contact_tile_column_count_in_favorites">2</integer>
-    <integer name="contact_tile_column_count_in_favorites_new">3</integer>
-
     <!-- The number of characters in the snippet before we need to tokenize and ellipse. -->
     <integer name="snippet_length_before_tokenize">30</integer>
 
diff --git a/res/values/strings.xml b/res/values/strings.xml
index d381e53..053d0e3 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -22,6 +22,9 @@
     <!-- Directory partition name -->
     <string name="contactsList">Contacts</string>
 
+    <!-- Name of the dynamic shortcut that creates a new contact [CHAR LIMIT=30] -->
+    <string name="shortcut_add_contact">Add contact</string>
+
     <!-- Name of activity that allows users to create shortcuts on the home screen to a contact.
          This shows up in a list of things like bookmark, folder, music playlist, etc -->
     <string name="shortcutContact">Contact</string>
@@ -35,13 +38,7 @@
     <string name="shortcutMessageContact">Direct message</string>
 
     <!-- Activity title when the user is selecting a contact for a shortcut. -->
-    <string name="shortcutActivityTitle">Choose a contact shortcut</string>
-
-    <!-- Activity title when the user is selecting a contact for a direct dial shortcut. -->
-    <string name="callShortcutActivityTitle">Choose a number to call</string>
-
-    <!-- Activity title when the user is selecting a contact for a direct message shortcut. -->
-    <string name="messageShortcutActivityTitle">Choose a number to message</string>
+    <string name="shortcutActivityTitle">Choose contact</string>
 
     <!-- Activity title when the user is inserting into an existing contact, or creating a new one.  [CHAR LIMIT=128] -->
     <string name="contactInsertOrEditActivityTitle">Add to contact</string>
@@ -55,21 +52,9 @@
     <!-- Entry that prompts user to select a newly created contact.  [CHAR LIMIT=30] -->
     <string name="header_entry_contact_list_adapter_header_title">Create new contact</string>
 
-    <!-- The title bar when viewing the contact details activity -->
-    <string name="viewContactTitle">Contact details</string>
-
-    <!-- The tab label for the contact detail activity that displays information about the contact [CHAR LIMIT=15] -->
-    <string name="contactDetailAbout">About</string>
-
-    <!-- The tab label for the contact detail activity that displays information about the contact [CHAR LIMIT=15] -->
-    <string name="contactDetailUpdates">Updates</string>
-
     <!-- Hint text in the search box when the user hits the Search key while in the contacts app -->
     <string name="searchHint">Search contacts</string>
 
-    <!-- Menu item used to view the details for a specific contact -->
-    <string name="menu_viewContact">View contact</string>
-
     <!-- Menu item used to add a star to a contact, which makes that contact show up at the top of favorites -->
     <string name="menu_addStar">Add to favorites</string>
 
@@ -93,12 +78,6 @@
     <!-- Menu item used to create a contact shortcut when viewing contact details. [CHAR LIMIT=30] -->
     <string name="menu_create_contact_shortcut">Create shortcut</string>
 
-    <!-- Menu item used to call a specific contact when viewing the details of that contact. -->
-    <string name="menu_call">Call contact</string>
-
-    <!-- Menu item used to send an SMS or MMS message to a specific phone number or a contacts default phone number -->
-    <string name="menu_sendSMS">Text contact</string>
-
     <!-- Menu item that splits an item from the contact detail into a separate aggregate -->
     <string name="menu_splitAggregate">Unlink</string>
 
@@ -123,11 +102,8 @@
     <!-- Menu item to remove the currently selected contacts from the currently selected label. [CHAR LIMIT=60] -->
     <string name="menu_removeFromGroup">Remove from label</string>
 
-    <!-- Menu item (in the action bar) that creates a new contact [CHAR LIMIT=30] -->
-    <string name="menu_new_contact_action_bar">Add contact</string>
-
     <!-- Menu item (in the action bar) that creates a new label [CHAR LIMIT=30] -->
-    <string name="menu_new_group_action_bar">Create new&#8230;</string>
+    <string name="menu_new_group_action_bar">Create label</string>
 
     <!-- Confirmation dialog for unlinking contacts into multiple instances [CHAR LIMIT=NONE] -->
     <string name="splitConfirmation">Unlink this contact into multiple contacts?</string>
@@ -171,9 +147,6 @@
     <string name="blurbJoinContactDataWith">Choose the contact you want to link with <xliff:g
         id="name">%s</xliff:g>:</string>
 
-    <!-- An item in the Join Contact activity that opens up the full contact A-Z list -->
-    <string name="showAllContactsJoinItem">Show all contacts</string>
-
     <!-- List separator for the Join Contact list: Suggestions -->
     <string name="separatorJoinAggregateSuggestions">Suggested contacts</string>
 
@@ -209,8 +182,8 @@
 
     <!-- List header indicating the number of contacts and account name in the list [CHAR LIMIT=30] -->
     <plurals name="contacts_count_with_account">
-        <item quantity="one"><xliff:g id="count">%d</xliff:g> contact · <xliff:g id="account">%s</xliff:g></item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> contacts · <xliff:g id="account">%s</xliff:g></item>
+        <item quantity="one"><xliff:g id="count">%1$d</xliff:g> contact · <xliff:g id="account">%2$s</xliff:g></item>
+        <item quantity="other"><xliff:g id="count">%1$d</xliff:g> contacts · <xliff:g id="account">%2$s</xliff:g></item>
     </plurals>
 
     <!-- Activity title indicating contacts are from a Google account [CHAR LIMIT=30] -->
@@ -259,9 +232,6 @@
     <!-- Positive button text of confirmation dialog contents after users selects to delete a Writable contact. [CHAR LIMIT=30] -->
     <string name="deleteConfirmation_positive_button">Delete</string>
 
-    <!-- Menu item to indicate you want to stop editing a contact and NOT save the changes you've made [CHAR LIMIT=30] -->
-    <string name="menu_discard">Discard changes</string>
-
     <!-- Message displayed in a toast when you try to view the details of a contact that
          for some reason doesn't exist anymore. [CHAR LIMIT=NONE]-->
     <string name="invalidContactMessage">The contact doesn\'t exist.</string>
@@ -272,15 +242,6 @@
     <!-- Message with name displayed in a toast after you create a contact shortcut in the launcher [CHAR LIMIT=NONE]-->
     <string name="createContactShortcutSuccessful"><xliff:g id="name">%s</xliff:g> added to Home screen.</string>
 
-    <!-- When picking a contact from a list of all contacts there is an entry at the top of the
-         list that allows the user to create a new contact, which this string is used for -->
-    <string name="pickerNewContactHeader">Create new contact</string>
-
-    <!-- Text for a "create new contact" button on the bottom of the contact picker screen.
-         The text will be all capitalized.
-         [CHAR LIMIT=30] -->
-    <string name="pickerNewContactText">Create new contact</string>
-
     <!-- The order of the items below is important, don't reorder without changing EditContactActivity.java -->
     <skip/>
 
@@ -296,21 +257,12 @@
          For example, this may be used to set a phone number's label to "Vaction house" -->
     <string name="customLabelPickerTitle">Custom label name</string>
 
-    <!-- Check box label that allows calls to the contact to be sent directly to voicemail -->
-    <string name="send_to_voicemail_checkbox">Send calls directly to voicemail</string>
-
     <!-- The menu item that allows you to remove a photo from a contact [CHAR LIMIT=50] -->
     <string name="removePhoto">Remove photo</string>
 
     <!-- The text displayed when the contacts list is empty while displaying all contacts [CHAR LIMIT=NONE] -->
     <string name="noContacts">Your contacts list is empty</string>
 
-    <!-- The text displayed when the labels list is empty while displaying all labels [CHAR LIMIT=30] -->
-    <string name="noGroups">No labels.</string>
-
-    <!-- The text displayed when the groups list is empty and no accounts are set on the device while displaying all groups [CHAR LIMIT=NONE] -->
-    <string name="noAccounts">To create groups you need an account.</string>
-
     <!-- The text displayed when there are no members that have this label while displaying the label detail page [CHAR LIMIT=70] -->
     <string name="emptyGroup">No contacts with this label</string>
 
@@ -347,9 +299,6 @@
     <!-- Toast displayed when something goes wrong while loading a label. [CHAR LIMIT=70] -->
     <string name="groupLoadErrorToast">Failed to load label</string>
 
-    <!-- Toast displayed when a label is saved [CHAR LIMIT=30] -->
-    <string name="groupSavedToast">Label saved</string>
-
     <!-- Toast or snackbar displayed when a label name is deleted. [CHAR LIMIT=50] -->
     <string name="groupDeletedToast">Label deleted</string>
 
@@ -392,61 +341,16 @@
     <!-- The menu item to send the currently selected contacts to selected items [CHAR LIMIT=10] -->
     <string name="send_to_selection">Send</string>
 
-    <!-- Displayed at the top of the contacts showing the total number of contacts visible when "Only contacts with phones" is selected -->
-    <plurals name="listTotalPhoneContacts">
-        <item quantity="one">1 contact with phone number</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> contacts with phone numbers</item>
-    </plurals>
-
-    <!-- Displayed at the top of the contacts showing the zero as total number of contacts visible when "Only contacts with phones" is selected [CHAR LIMIT=64]-->
-    <string name="listTotalPhoneContactsZero">No contacts with phone numbers</string>
-
-    <!-- Displayed at the top of the contacts showing the total number of contacts found when "Only contacts with phones" not selected [CHAR LIMIT=30] -->
-    <plurals name="listFoundAllContacts">
-        <item quantity="one">1 found</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> found</item>
-    </plurals>
-
     <!-- Displayed at the top of the contacts showing the zero total number of contacts found when "Only contacts with phones" not selected. [CHAR LIMIT=30] -->
     <string name="listFoundAllContactsZero">No contacts</string>
 
-    <!-- Displayed at the top of the contacts showing the total number of contacts found when typing search query -->
-    <plurals name="searchFoundContacts">
-        <item quantity="one">1 found</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> found</item>
-    </plurals>
-
-    <!-- The title of "all contacts" tab. [CHAR LIMIT=14] -->
-    <string name="all_contacts_tab_label">All</string>
-
-    <!-- Action string for calling back a number in the call log -->
-    <string name="callBack">Call back</string>
-
-    <!-- Action string for calling a number in the call log again -->
-    <string name="callAgain">Call again</string>
-
-    <!-- Action string for returning a missed call in the call log -->
-    <string name="returnCall">Return call</string>
-
     <!-- Dialog message when prompting before creating a contact. Includes
          the email address, e.g. "Add xyz@foo.com to contacts?" -->
     <string name="add_contact_dlg_message_fmt">Add \"<xliff:g id="email">%s</xliff:g>\" to contacts?</string>
 
-    <!-- String describing the Contact Editor Plus button
-
-         Used by AccessibilityService to announce the purpose of the button.
-    -->
-    <string name="description_plus_button">plus</string>
-
-    <!-- Message in progress bar while exporting contact list to a file "(current number) of (total number) contacts" The order of "current number" and "total number" cannot be changed (like "total: (total number), current: (current number)")-->
-    <string name="exporting_contact_list_progress"><xliff:g id="current_number">%s</xliff:g> of <xliff:g id="total_number">%s</xliff:g> contacts</string>
-
     <!-- The string used to describe Contacts as a searchable item within system search settings. -->
     <string name="search_settings_description">Names of your contacts</string>
 
-    <!-- Shown as a toast when the user taps on a QuickContact icon, and no application
-         was found that could perform the selected action. [CHAR LIMIT=NONE] -->
-    <string name="quickcontact_missing_app">No app was found to handle this action.</string>
     <!-- Content description for the transparent views around the visible section of QuickContacts.
          Clicking this view causes Quick Contacts to close. [CHAR LIMIT=NONE] -->
     <string name="quickcontact_transparent_view_description">Click to return to previous screen</string>
@@ -496,27 +400,12 @@
     <!-- Generic action string for starting a video chat. Used by AccessibilityService to announce the purpose of the view. [CHAR LIMIT=NONE] -->
     <string name="video_chat">Video chat</string>
 
-    <!-- Title for the list of all contact details that come from third-party sources (including a corporate directory) [CHAR LIMIT=20] -->
-    <string name="connections">Connections</string>
-
-    <!-- Label of the button to open the "add connection" popup where the user can invite a contact to other social networks or services [CHAR LIMIT=32] -->
-    <string name="add_connection_button">Add connection</string>
-
-    <!-- Section title for the page containing the contact's social updates on the contact card (this abbreviated version of "Recent updates" is used when "updates" is already shown as the title of the page) [CHAR LIMIT=20]-->
-    <string name="recent" msgid="2062236709538790412">Recent</string>
-
-    <!-- Section title for the page containing the contact's social updates on the contact card [CHAR LIMIT=20]-->
-    <string name="recent_updates" msgid="2018245636796411442">Recent updates</string>
-
     <!-- String describing which account type a contact came from when editing it -->
     <string name="account_type_format"><xliff:g id="source" example="Gmail">%1$s</xliff:g> contact</string>
 
     <!-- String describing that a contact came from the google account type when editing it.  -->
     <string name="google_account_type_format"><xliff:g id="source" example="Google">%1$s</xliff:g> account</string>
 
-    <!-- String describing which account a contact came from when editing it -->
-    <string name="from_account_format"><xliff:g id="source" example="user@gmail.com">%1$s</xliff:g></string>
-
     <!-- An option in the 'Contact photo' dialog, if there is no photo yet [CHAR LIMIT=50] -->
     <string name="take_photo">Take photo</string>
 
@@ -532,42 +421,12 @@
     <!-- Title shown in the search result activity of contacts app while searching.  [CHAR LIMIT=20] -->
     <string name="search_results_searching">Searching\u2026</string>
 
-    <!-- Label to display only selection in multiple picker -->
-    <string name="menu_display_selected">"Show selected"</string>
-
-    <!-- Label to display all recipients in multiple picker -->
-    <string name="menu_display_all">"Show all"</string>
-
-    <!-- Label to select all contacts in multiple picker -->
-    <string name="menu_select_all">"Select all"</string>
-
-    <!-- Label to clear all selection in multiple picker -->
-    <string name="menu_select_none">"Unselect all"</string>
-
-    <!-- The button to add another entry of a specific data type (i.e. email, phone, address) to a contact in the Raw Contact Editor [CHAR LIMIT=22] -->
-    <string name="add_new_entry_for_section">Add new</string>
-
-    <!-- The button to add an organization field to a contact in the Raw Contact Editor [CHAR LIMIT=22] -->
-    <string name="add_organization">Add organization</string>
-
     <!-- The button to add an organization field to a contact in the Raw Contact Editor [CHAR LIMIT=12] -->
     <string name="event_edit_field_hint_text">Date</string>
 
     <!-- The button to add an label field to a contact in the Raw Contact Editor [CHAR LIMIT=15] -->
     <string name="group_edit_field_hint_text">Label</string>
 
-    <!-- Button used for changing a photo in the Raw Contact Editor [CHAR LIMIT=15] -->
-    <string name="change_photo">Change</string>
-
-    <!-- String describing the Star/Favorite checkbox
-
-         Used by AccessibilityService to announce the purpose of the view.
-    -->
-    <string name="description_star">favorite</string>
-
-    <!-- The title of the Edit-Contact screen -->
-    <string name="edit_contact">Edit contact</string>
-
     <!-- Content description for a cancel button. [CHAR LIMIT=NONE] -->
     <string name="cancel_button_content_description">Cancel</string>
 
@@ -580,23 +439,9 @@
 
     <!-- The message in a confirmation dialog shown when the user selects a
         contact aggregation suggestion in Contact editor. [CHAR LIMIT=512]-->
-    <string name="aggregation_suggestion_join_dialog_message">Link
-        the current contact with the selected contact?</string>
-
-    <!-- The message in a confirmation dialog shown when the user selects a
-        contact aggregation suggestion in Contact editor. [CHAR LIMIT=512]-->
     <string name="aggregation_suggestion_edit_dialog_message">Switch to editing
         the selected contact? Information you entered so far will be copied.</string>
 
-    <!-- The button that creates a local copy of a corporate contact. [CHAR LIMIT=40]-->
-    <string name="menu_copyContact">Copy to My Contacts</string>
-
-    <!-- The button that adds a contact to the predefined label "My Contacts" (as this is
-         mostly interesting for Google-contacts, this should have the same description as the
-         function of GMail/Contacts on the Web
-         [CHAR LIMIT=40] -->
-    <string name="add_to_my_contacts">Add to My Contacts</string>
-
     <!-- The description of the directory where the contact was found [CHAR LIMIT=100]-->
     <string name="contact_directory_description">Directory <xliff:g id="type" example="Corporate Directory">%1$s</xliff:g></string>
 
@@ -609,9 +454,6 @@
     <!-- 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>
-
     <!-- Text used to show a organization that has both a company and title. This is used in the Detail-View
     of a Contact. This is mostly about the formatting of the two elements, so it should be kept small [CHAR LIMIT=79] -->
     <string name="organization_company_and_title"><xliff:g id="company" example="Technical Program Manager">%2$s</xliff:g>, <xliff:g id="company" example="Google Inc.">%1$s</xliff:g></string>
@@ -622,28 +464,12 @@
     <!-- Button to add a phone number to contacts [CHAR LIMIT=25] -->
     <string name="non_phone_add_to_contacts">Add to contacts</string>
 
-    <!-- Title of the activity that allows the user to confirm the addition of a detail to 1 existing contact [CHAR LIMIT=25] -->
-    <string name="activity_title_confirm_add_detail">Add to contact</string>
-
     <!-- Button to close without add a phone number to contacts [CHAR LIMIT=25] -->
     <string name="non_phone_close">Close</string>
 
-    <!-- Format string that combines the name and the phonetic name for the widget. if the phonetic name is empty, only the display name is used instead [CHAR LIMIT=25] -->
-    <string name="widget_name_and_phonetic"><xliff:g id="display_name" example="John Huber">%1$s</xliff:g> (<xliff:g id="phonetic_name">%2$s</xliff:g>)</string>
-
     <!-- Checkbox whether to include a year for a birthday [CHAR LIMIT=30] -->
     <string name="date_year_toggle">Include year</string>
 
-    <!-- Label for the widget that shows picture and social status of a contact [CHAR LIMIT=20] -->
-    <string name="social_widget_label">Contact</string>
-
-    <!-- Message of widget while it is loading data [CHAR LIMIT=20] -->
-    <string name="social_widget_loading">Loading\u2026</string>
-
-    <!-- Button shown on the main contacts screen when there are no contacts on the device.
-    Creates a new contact. [CHAR LIMIT=128] -->
-    <string name="contacts_unavailable_create_contact">Create a new contact</string>
-
     <!-- Button shown on the main contacts screen when there are no contacts on the device.
     Navigates to account setup [CHAR LIMIT=128] -->
     <string name="contacts_unavailable_add_account">Add account</string>
@@ -695,11 +521,6 @@
     <!-- Contents of the alert dialog when the user hits the Cancel button in the customize screen [CHAR LIMIT=128] -->
     <string name="leave_customize_confirmation_dialog_message">Discard customizations?</string>
 
-    <!-- Description of a call log entry, made of a call type and a date -->
-    <string name="call_type_and_date">
-        <xliff:g id="call_type" example="Friends">%1$s</xliff:g>  <xliff:g id="call_short_date" example="Friends">%2$s</xliff:g>
-    </string>
-
     <!-- Label to instruct the user to type in a contact's name to add the contact as a member of the current group. [CHAR LIMIT=64] -->
     <string name="enter_contact_name">Search contacts</string>
 
@@ -712,16 +533,6 @@
     <!-- Header label in the contact editor for a profile that comes from an external third-party app whose name is given by source [CHAR LIMIT=20] -->
     <string name="external_profile_title">My <xliff:g id="external_source">%1$s</xliff:g> profile</string>
 
-    <!-- Toast shown when the app starts showing all contacts regardless of its current
-         contact filter state. [CHAR LIMIT=64] -->
-    <string name="toast_displaying_all_contacts">Displaying all contacts</string>
-
-    <!-- Message in the standard "no account" prompt that encourages the user to add any account (non Google-specific) before continuing to use the People app [CHAR LIMIT=NONE] -->
-    <string name="generic_no_account_prompt">Keep your contacts safe even if you lose your phone: synchronize with an online service.</string>
-
-    <!-- Title of the screen that encourages the user to add any account (non Google-specific) for a better Contacts app experience [CHAR LIMIT=20] -->
-    <string name="generic_no_account_prompt_title">Add an account</string>
-
     <!-- Message in the contact editor prompt that notifies the user that the newly created contact will not be saved to any account, and prompts addition of an account [CHAR LIMIT=NONE] -->
     <string name="contact_editor_prompt_zero_accounts">Take a minute to add an account that will back up your contacts to Google.</string>
 
@@ -781,9 +592,6 @@
     <!-- Title of recent card. [CHAR LIMIT=40] -->
     <string name="about_card_title">About</string>
 
-    <!-- Title of sms action entry. [CHAR LIMIT=60] -->
-    <string name="send_message">Send message</string>
-
     <!-- Toast that appears when you are copying a directory contact into your personal contacts -->
     <string name="toast_making_personal_copy">Creating a personal copy&#8230;</string>
     <!-- Timestamp string for interactions from tomorrow. [CHAR LIMIT=40] -->
@@ -798,7 +606,7 @@
     <string name="tomorrow_at_time_fmt">"Tomorrow at <xliff:g id="time_interval">%s</xliff:g>"</string>
     <!-- Format string for a date and time description.  For ex:
          "April 19, 2012, 3:00pm - 4:00pm" [CHAR LIMIT=NONE] -->
-    <string name="date_time_fmt">"<xliff:g id="date">%s</xliff:g>, <xliff:g id="time_interval">%s</xliff:g>"</string>
+    <string name="date_time_fmt">"<xliff:g id="date">%1$s</xliff:g>, <xliff:g id="time_interval">%2$s</xliff:g>"</string>
     <!-- Title for untitled calendar interactions [CHAR LIMIT=40] -->
     <string name="untitled_event">(Untitled event)</string>
 
@@ -819,8 +627,6 @@
     <string name="header_event_entry">Event</string>
     <!-- Header for the Relation entry [CHAR LIMIT=40] -->
     <string name="header_relation_entry">Relation</string>
-    <!-- Content description for the account field header image. Example accounts listed in this field: Google, Hotmail and Exchange. [CHAR LIMIT=NONE] -->
-    <string name="header_account_entry">Account</string>
     <!-- Content description for the name fields header entry [CHAR LIMIT=NONE] -->
     <string name="header_name_entry">Name</string>
     <!-- Content description for the email fields header entry [CHAR LIMIT=NONE] -->
@@ -828,16 +634,11 @@
     <!-- Content description for the phone fields header entry [CHAR LIMIT=NONE] -->
     <string name="header_phone_entry">Phone</string>
 
-    <!-- Content description for the expand button inside the raw contact editor's header. [CHAR LIMIT=NONE] -->
-    <string name="content_description_expand_editor">Click to expand contact editor.</string>
-    <!-- Content description for the collapse button inside the raw contact editor's header. [CHAR LIMIT=NONE] -->
-    <string name="content_description_collapse_editor">Click to collapse contact editor.</string>
-
     <!-- Content description for directions secondary button [CHAR LIMIT=NONE] -->
     <string name="content_description_directions">directions to location</string>
 
     <!-- Content description for recent sms interaction [CHAR LIMIT=NONE] -->
-    <string name="content_description_recent_sms">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_sms">recent sms. <xliff:g id="message_body">%1$s</xliff:g>. <xliff:g id="phone_number">%2$s</xliff:g>. <xliff:g id="date">%3$s</xliff:g>. click to respond</string>
 
     <!-- Header for the Relation entry [CHAR LIMIT=NONE] -->
     <string name="content_description_recent_call_type_incoming">incoming</string>
@@ -847,14 +648,11 @@
     <string name="content_description_recent_call_type_missed">missed</string>
 
     <!-- Content description for recent sms interaction [CHAR LIMIT=NONE] -->
-    <string name="content_description_recent_call">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="content_description_recent_call">recent call. <xliff:g id="call_type">%1$s</xliff:g>. <xliff:g id="phone_number">%2$s</xliff:g>. <xliff:g id="date">%3$s</xliff:g>. click to call back</string>
 
     <!-- Prefix for messages that you sent [CHAR LIMIT=40] -->
     <string name="message_from_you_prefix">You: <xliff:g id="sms_body">%s</xliff:g></string>
 
-    <!-- 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 contact editor to show all available input fields. [CHAR LIMIT=60] -->
     <string name="editor_more_fields">More fields</string>
 
@@ -876,48 +674,12 @@
     <!-- Label for the account selector to indicate the current information (name, phone number, email etc.) about the contact comes from a read-only account. [CHAR LIMIT=55] -->
     <string name="editor_account_selector_read_only_title">Contact info from <xliff:g id="account">%s</xliff:g> is not editable</string>
 
-    <!-- Content description for the account selector to indicate which account a contact will be saved to. [CHAR LIMIT=NONE] -->
-    <string name="editor_account_selector_description">Currently saving to <xliff:g id="account_name">%s</xliff:g>. Double-tap to pick a different account.</string>
-
-    <!-- Label for the linked contacts selector which indicates the number of raw contacts which have been linked together into the aggregate being viewed. [CHAR LIMIT=40] -->
-    <plurals name="editor_linked_contacts_selector_title">
-        <item quantity="one">Linked contact</item>
-        <item quantity="other">Linked contacts (<xliff:g id="count">%d</xliff:g>)</item>
-    </plurals>
-
-    <!-- Number of linked contacts of the current contact, only shown when there are more than 2 linked contacts (plural only!!!) [CHAR LIMIT=60] -->
-    <string name="quickcontact_contacts_number"><xliff:g id="count">%d</xliff:g> linked contacts</string>
-
-    <!-- Quick contact display name with phonetic name -->
-    <string name="quick_contact_display_name_with_phonetic"><xliff:g id="display_name">%s</xliff:g> (<xliff:g id="phonetic_name">%s</xliff:g>)</string>
-
     <!-- Button used in quick contact suggestion card to link selected contacts. [CHAR LIMIT=30]-->
     <string name="quickcontact_suggestion_link_button">LINK CONTACTS</string>
 
     <!-- Button used in quick contact suggestion card to collapse suggestion card. [CHAR LIMIT=30]-->
     <string name="quickcontact_suggestion_cancel_button">CANCEL</string>
 
-    <!-- Suggestion card title in quick contact UI [CHAR LIMIT=100] -->
-    <plurals name="quickcontact_suggestion_card_title">
-        <item quantity="one">1 Possible duplicate</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> Possible duplicates</item>
-    </plurals>
-
-    <!-- Suggestions number in quick contact suggestion card [CHAR LIMIT=60] -->
-    <plurals name="quickcontact_suggestions_number">
-        <item quantity="one">1 linked contact</item>
-        <item quantity="other"><xliff:g id="count">%d</xliff:g> linked contacts</item>
-    </plurals>
-
-    <!-- Account type number for suggestions in quick contact suggestion card [CHAR LIMIT=30]-->
-    <plurals name="quickcontact_suggestion_account_type_number">
-        <item quantity="one"></item>
-        <item quantity="other">(<xliff:g id="count">%d</xliff:g>)</item>
-    </plurals>
-
-    <!-- Account type with number in quick contact suggestion card [CHAR LIMIT=30]-->
-    <string name="quickcontact_suggestion_account_type"><xliff:g id="account_type">%s</xliff:g><xliff:g id="account_type_number">%s</xliff:g></string>
-
     <!-- "This contact" title showing in suggestion card in Quick contact. [CHAR LIMIT=30]-->
     <string name="suggestion_card_this_contact_title">This contact</string>
 
@@ -927,40 +689,14 @@
     <!-- Help message showing in suggestion card in Quick contact. [CHAR LIMIT=NONE]-->
     <string name="suggestion_card_help_message">These contacts might be the same person. You can link them together as a single contact.</string>
 
-    <!-- Linked contacts title showing in contact editor UI. [CHAR LIMIT=30]-->
-    <string name="editor_linked_contacts_title">Linked contacts</string>
-
-    <!-- Title of profile photos that are from your various accounts -->
-    <string name="from_your_accounts">From your accounts</string>
-
-    <!-- Title of photo picker [CHAR LIMIT=30]-->
-    <string name="photo_picker_title">Choose photo</string>
-
-    <!-- Message below contact name, showing from which account [CHAR LIMIT=NONE]-->
-    <string name="contact_from_account_name">From <xliff:g id="account_name">%s</xliff:g></string>
-
     <!-- Content description of delete button to the right of each section in editor, including
     data type. For example: Delete Home Phone, Delete Work Email, etc [CHAR LIMIT=30]-->
-    <string name="editor_delete_view_description">Delete <xliff:g id="data_type">%s </xliff:g><xliff:g id="data_kind">%s</xliff:g></string>
+    <string name="editor_delete_view_description">Delete <xliff:g id="data_type">%1$s </xliff:g><xliff:g id="data_kind">%2$s</xliff:g></string>
 
     <!-- Content description of delete button to the right of each section in editor, without data
     type. For example: Delete Website, Delete SIP, etc [CHAR LIMIT=30]-->
     <string name="editor_delete_view_description_short">Delete <xliff:g id="data_kind">%s</xliff:g></string>
 
-    <!-- Content description of photo in photo picker indicating a photo from a specific account is *not* selected.
-         For example: Photo from Google abc@gmail.com not checked. [CHAR LIMIT=60]-->
-    <string name="photo_view_description_not_checked">Photo from <xliff:g id="account_type">%s </xliff:g><xliff:g id="user_name">%s </xliff:g>not checked</string>
-
-    <!-- Content description of photo in photo picker indicating a photo from a specific account is selected.
-         For example: Photo from Google abc@gmail.com checked. [CHAR LIMIT=60]-->
-    <string name="photo_view_description_checked">Photo from <xliff:g id="account_type">%s </xliff:g><xliff:g id="user_name">%s </xliff:g>checked</string>
-
-    <!-- Content description of photo in photo picker indicating a photo from unknown account is *not* selected.-->
-    <string name="photo_view_description_not_checked_no_info">Photo from unknown account not checked</string>
-
-    <!-- Content description of photo in photo picker indicating a photo from unknown account is selected. -->
-    <string name="photo_view_description_checked_no_info">Photo from unknown account checked</string>
-
     <!-- Left drawer menu item to open contacts assistant/suggestion cards. [CHAR LIMIT=20]-->
     <string name="menu_assistant">Suggestions</string>
 
@@ -1138,9 +874,6 @@
     <!-- The label in section header in the contact list for a local contacts [CHAR LIMIT=128] -->
     <string name="local_search_label">All contacts</string>
 
-    <!-- Displayed at the top of search results indicating that more contacts were found than shown [CHAR LIMIT=64] -->
-    <string name="foundTooManyContacts">More than <xliff:g id="count">%d</xliff:g> found.</string>
-
     <!-- String describing the text for photo of a contact in a contacts list.
 
         Note: AccessibilityServices use this attribute to announce what the view represents.
@@ -1154,14 +887,6 @@
     <!-- The text displayed on the divider for the Favorites tab in People app indicating that items below it are frequently contacted [CHAR LIMIT = 39] -->
     <string name="favoritesFrequentContacted">Frequently contacted</string>
 
-    <!-- String describing a contact picture that introduces users to the contact detail screen.
-
-       Used by AccessibilityService to announce the purpose of the button.
-
-       [CHAR LIMIT=NONE]
-    -->
-    <string name="description_view_contact_detail" msgid="2795575601596468581">View contact</string>
-
     <!-- Contact list filter selection indicating that the list shows all contacts with phone numbers [CHAR LIMIT=64] -->
     <string name="list_filter_phones">All contacts with phone numbers</string>
 
@@ -1189,8 +914,6 @@
          [CHAR LIMIT=20] -->
     <string name="nicknameLabelsGroup">Nickname</string>
 
-    <!-- Field title for the full name of a contact [CHAR LIMIT=64]-->
-    <string name="full_name">Name</string>
     <!-- Field title for the given name of a contact -->
     <string name="name_given">First name</string>
     <!-- Field title for the family name of a contact -->
@@ -1285,10 +1008,6 @@
 
     <!-- Field title for the street of a structured postal address of a contact -->
     <string name="postal_street">Street</string>
-    <!-- Field title for the PO box of a structured postal address of a contact -->
-    <string name="postal_pobox">PO box</string>
-    <!-- Field title for the neighborhood of a structured postal address of a contact -->
-    <string name="postal_neighborhood">Neighborhood</string>
     <!-- Field title for the city of a structured postal address of a contact -->
     <string name="postal_city">City</string>
     <!-- Field title for the region, or state, of a structured postal address of a contact -->
@@ -1398,12 +1117,6 @@
     <!-- Displayed in a spinner dialog as user changes to display options are saved -->
     <string name="savingDisplayGroups">Saving display options\u2026</string>
 
-    <!-- Menu item to indicate you are done editing a contact and want to save the changes you've made -->
-    <string name="menu_done">Done</string>
-
-    <!-- Menu item to indicate you want to cancel the current editing process and NOT save the changes you've made [CHAR LIMIT=12] -->
-    <string name="menu_doNotSave">Cancel</string>
-
     <!-- Displayed at the top of the contacts showing single contact. [CHAR LIMIT=50] -->
     <string name="listCustomView">Customized view</string>
 
@@ -1462,7 +1175,7 @@
 
     <!-- The failed reason shown when vCard importer/exporter could not open the file
          specified by a user. The file name should be in the message. [CHAR LIMIT=NONE] -->
-    <string name="fail_reason_could_not_open_file">Couldn\'t open \"<xliff:g id="file_name">%s</xliff:g>\": <xliff:g id="exact_reason">%s</xliff:g>.</string>
+    <string name="fail_reason_could_not_open_file">Couldn\'t open \"<xliff:g id="file_name">%1$s</xliff:g>\": <xliff:g id="exact_reason">%2$s</xliff:g>.</string>
 
     <!-- The failed reason shown when contacts exporter fails to be initialized.
          Some exact reason must follow this. [CHAR LIMIT=NONE]-->
@@ -1481,11 +1194,6 @@
          Some exact reason must follow this. [CHAR LIMIT=NONE] -->
     <string name="fail_reason_error_occurred_during_export">An error occurred during export: \"<xliff:g id="exact_reason">%s</xliff:g>\".</string>
 
-    <!-- The failed reason shown when the given file name is too long for the system.
-         The length limit of each file is different in each Android device, so we don't need to
-         mention it here. [CHAR LIMIT=NONE] -->
-    <string name="fail_reason_too_long_filename">Required filename is too long (\"<xliff:g id="filename">%s</xliff:g>\").</string>
-
     <!-- The failed reason shown when Contacts app (especially vCard importer/exporter)
          emitted some I/O error. Exact reason will be appended by the system. [CHAR LIMIT=NONE] -->
     <string name="fail_reason_io_error">I/O error</string>
@@ -1494,22 +1202,10 @@
          low memory problem and could not proceed its import procedure. [CHAR LIMIT=NONE] -->
     <string name="fail_reason_low_memory_during_import">Not enough memory. The file may be too large.</string>
 
-    <!-- The failed reason shown when vCard parser was not able to be parsed by the current vCard
-         implementation. This might happen even when the input vCard is completely valid, though
-         we believe it is rather rare in the actual world. [CHAR LIMIT=NONE] -->
-    <string name="fail_reason_vcard_parse_error">Couldn\'t parse vCard for an unexpected reason.</string>
-
     <!-- The failed reason shown when vCard importer doesn't support the format.
          This may be shown when the vCard is corrupted [CHAR LIMIT=40] -->
     <string name="fail_reason_not_supported">The format isn\'t supported.</string>
 
-    <!-- Fail reason shown when vCard importer failed to look over meta information stored in vCard file(s). -->
-    <string name="fail_reason_failed_to_collect_vcard_meta_info">Couldn\'t collect meta information of given vCard file(s).</string>
-
-    <!-- The failed reason shown when the import of some of vCard files failed during multiple vCard
-         files import. It includes the case where all files were failed to be imported. -->
-    <string name="fail_reason_failed_to_read_files">One or more files couldn\'t be imported (%s).</string>
-
     <!-- The title shown when exporting vCard is successfuly finished [CHAR LIMIT=40] -->
     <string name="exporting_vcard_finished_title">Finished exporting <xliff:g id="filename" example="export.vcf">%s</xliff:g>.</string>
 
@@ -1540,7 +1236,7 @@
     <!-- This error message shown when the user actually have no contact
          (e.g. just after data-wiping), or, data providers of the contact list prohibits their
          contacts from being exported to outside world via vcard exporter, etc. [CHAR LIMIT=NONE] -->
-    <string name="composer_has_no_exportable_contact">There are no exportable contacts. If you do have contacts on your phone, some data providers may not allow the contacts to be exported from the phone.</string>
+    <string name="composer_has_no_exportable_contact">There are no exportable contacts.</string>
 
     <!-- The error reason the vCard composer may emit when vCard composer is not initialized
          even when needed.
@@ -1561,10 +1257,6 @@
     <!-- Dialog title shown when reading vCard data failed [CHAR LIMIT=40] -->
     <string name="reading_vcard_failed_title">Couldn\'t read vCard data</string>
 
-    <!-- The title shown when reading vCard is canceled (probably by a user)
-         [CHAR LIMIT=40] -->
-    <string name="reading_vcard_canceled_title">Reading vCard data canceled</string>
-
     <!-- The title shown when reading vCard finished
          The argument is file name the user imported.
          [CHAR LIMIT=40] -->
@@ -1586,14 +1278,6 @@
     <string name="vcard_import_will_start_message_with_default_name">The file will be imported shortly.</string>
     <!-- The message shown when a given vCard import request is rejected by the system. [CHAR LIMIT=NONE] -->
     <string name="vcard_import_request_rejected_message">vCard import request was rejected. Try again later.</string>
-    <!-- The message shown when vCard export request is accepted. The system may start that work soon, or do it later
-         when there are already other import/export requests.
-         The argument is file name the user exported.
-         [CHAR LIMIT=40] -->
-    <string name="vcard_export_will_start_message"><xliff:g id="filename" example="import.vcf">%s</xliff:g> will be exported shortly.</string>
-
-    <!-- The message shown when a vCard export request is accepted but the destination filename could not be resolved. [CHAR LIMIT=NONE] -->
-    <string name="vcard_export_will_start_message_fallback">The file will be exported shortly.</string>
 
     <!-- The message shown when a vCard export request is accepted and contacts will be exported shortly. [CHAR LIMIT=70]-->
     <string name="contacts_export_will_start_message">Contacts will be exported shortly.</string>
@@ -1614,9 +1298,6 @@
     <!-- The "file name" displayed for vCards received directly via NFC [CHAR LIMIT=50] -->
     <string name="nfc_vcard_file_name">Contact received over NFC</string>
 
-    <!-- Dialog title shown when a user confirms whether he/she export Contact data. [CHAR LIMIT=32] -->
-    <string name="confirm_export_title">Export contacts?</string>
-
     <!-- The title shown when vCard importer is caching files to be imported into local temporary
          data storage.  [CHAR LIMIT=40] -->
     <string name="caching_vcard_title">Caching</string>
@@ -1626,7 +1307,7 @@
          Second argument is the total number of contacts.
          Third argument is the name of a contact which is being read.
          [CHAR LIMIT=20] -->
-    <string name="progress_notifier_message">Importing <xliff:g id="current_number">%s</xliff:g>/<xliff:g id="total_number">%s</xliff:g>: <xliff:g id="name" example="Joe Due">%s</xliff:g></string>
+    <string name="progress_notifier_message">Importing <xliff:g id="current_number">%1$s</xliff:g>/<xliff:g id="total_number">%2$s</xliff:g>: <xliff:g id="name" example="Joe Due">%3$s</xliff:g></string>
 
     <!-- Action that exports all contacts to a user selected destination. [CHAR LIMIT=25] -->
     <string name="export_to_vcf_file" product="default">Export to .vcf file</string>
@@ -1666,12 +1347,6 @@
     <!-- Label of the "About" setting -->
     <string name="setting_about">About Contacts</string>
 
-    <!-- Action that shares visible contacts -->
-    <string name="share_visible_contacts">Share visible contacts</string>
-
-    <!-- A framework exception (ie, transaction too large) can be thrown while attempting to share all visible contacts. If so, show this toast. -->
-    <string name="share_visible_contacts_failure">Failed to share visible contacts.</string>
-
     <!-- Action that shares favorite contacts [CHAR LIMIT=40]-->
     <string name="share_favorite_contacts">Share favorite contacts</string>
 
@@ -1684,7 +1359,7 @@
     <!-- Dialog title when selecting the bulk operation to perform from a list. [CHAR LIMIT=36] -->
     <string name="dialog_export">Export contacts</string>
 
-    <!-- Dialog title when importing contacts from an external source. [CHAR LIMIT=36] -->
+    <!-- Dialog title when importing contacts from an external source such as SIM card or a vcf file. [CHAR LIMIT=36] -->
     <string name="dialog_import">Import contacts from</string>
 
     <!-- Toast indicating that sharing a contact has failed. [CHAR LIMIT=NONE]  -->
@@ -1700,7 +1375,7 @@
     <string name="activity_title_contacts_filter">Contacts to display</string>
 
     <!-- Title of the activity that allows the user to customize filtering of contact list [CHAR LIMIT=128] -->
-    <string name="custom_list_filter">Define customized view</string>
+    <string name="custom_list_filter">Customize view</string>
 
     <!-- Menu item to save changes to custom filter. [CHAR LIMIT=15] -->
     <string name="menu_custom_filter_save">Save</string>
@@ -1711,18 +1386,6 @@
     <!-- The content description text for star icon in contacts list [CHAR LIMIT=30] -->
     <string name="contactsFavoritesLabel">Favorites</string>
 
-    <!-- Displayed at the top of the contacts showing the zero total number of contacts visible when "All contacts" is selected  [CHAR LIMIT=64]-->
-    <string name="listTotalAllContactsZero">No contacts.</string>
-
-    <!--  The menu item to clear frequents [CHAR LIMIT=40] -->
-    <string name="menu_clear_frequents">Clear frequents</string>
-
-    <!-- Menu item to select SIM card -->
-    <string name="menu_select_sim">Select SIM card</string>
-
-    <!-- The menu item to open the list of accounts. [CHAR LIMIT=60]-->
-    <string name="menu_accounts">Manage accounts</string>
-
     <!-- The menu item to bulk import contacts from SIM card or SD card.  [CHAR LIMIT=30]-->
     <string name="menu_import">Import</string>
 
@@ -1732,10 +1395,6 @@
     <!-- The menu item to open blocked numbers activity [CHAR LIMIT=60]-->
     <string name="menu_blocked_numbers">Blocked numbers</string>
 
-    <!-- The font-family to use for tab text.
-         Do not translate. -->
-    <string name="tab_font_family">sans-serif</string>
-
     <!-- Attribution of a contact status update, when the time of update is unknown -->
     <string name="contact_status_update_attribution">via <xliff:g id="source" example="Google Talk">%1$s</xliff:g></string>
 
@@ -1757,19 +1416,12 @@
          Do not translate. -->
     <string name="search_font_family">sans-serif</string>
 
-    <!-- The title of the preference section that allows users to configure how they want their
-         contacts to be displayed. [CHAR LIMIT=128] -->
-    <string name="settings_contact_display_options_title">Contact display options</string>
-
     <!-- Title for Select Account Dialog [CHAR LIMIT=30] -->
     <string name="select_account_dialog_title">Account</string>
 
     <!-- Label for the check box to toggle default sim card setting [CHAR LIMIT=35]-->
     <string name="set_default_account">Always use this for calls</string>
 
-    <!-- Title for dialog to select Phone Account for outgoing call.  [CHAR LIMIT=40] -->
-    <string name="select_phone_account_for_calls">Call with</string>
-
     <!-- String used for actions in the dialer call log and the quick contact card to initiate
          a call to an individual.  The user is prompted to enter a note which is sent along with
          the call (e.g. a call subject). [CHAR LIMIT=40] -->
@@ -1789,20 +1441,6 @@
          Example: Mobile • 650-555-1212  -->
     <string name="call_subject_type_and_number"><xliff:g id="type" example="Mobile">%1$s</xliff:g> • <xliff:g id="number" example="(650) 555-1212">%2$s</xliff:g></string>
 
-    <!-- String format to describe the number of unread items in a tab.
-
-        Note: AccessibilityServices use this attribute to announce what the view represents.
-              This is especially valuable for views without textual representation like ImageView.
-    -->
-    <plurals name="tab_title_with_unread_items">
-        <item quantity="one">
-            <xliff:g id="title">%1$s</xliff:g>. <xliff:g id="count">%2$d</xliff:g> unread item.
-        </item>
-        <item quantity="other">
-            <xliff:g id="title">%1$s</xliff:g>. <xliff:g id="count">%2$d</xliff:g> unread items.
-        </item>
-    </plurals>
-
     <!-- Build version title in About preference. [CHAR LIMIT=40]-->
     <string name="about_build_version">Build version</string>
 
@@ -1849,10 +1487,10 @@
     <string name="callDurationSecondFormat"><xliff:g id="seconds">%s</xliff:g> sec</string>
 
     <!-- Formatted call duration displayed in recent card in QuickContact, for duration less than 1 hour -->
-    <string name="callDurationMinuteFormat"><xliff:g id="minutes">%s</xliff:g> min <xliff:g id="seconds">%s</xliff:g> sec</string>
+    <string name="callDurationMinuteFormat"><xliff:g id="minutes">%1$s</xliff:g> min <xliff:g id="seconds">%2$s</xliff:g> sec</string>
 
     <!-- Formatted call duration displayed in recent card in QuickContact, for duration more than 1 hour -->
-    <string name="callDurationHourFormat"><xliff:g id="minutes">%s</xliff:g> hr <xliff:g id="minutes">%s</xliff:g> min <xliff:g id="seconds">%s</xliff:g> sec</string>
+    <string name="callDurationHourFormat"><xliff:g id="minutes">%1$s</xliff:g> hr <xliff:g id="minutes">%2$s</xliff:g> min <xliff:g id="seconds">%3$s</xliff:g> sec</string>
 
     <!-- Toast shown when a dynamic shortcut is tapped after being disabled because the experiment was turned off on the device -->
     <string name="dynamic_shortcut_disabled_message">This shortcut has been disabled</string>
@@ -1921,4 +1559,16 @@
          [CHAR LIMIT=NONE] -->
     <string name="show_more_content_description">Show more</string>
 
+    <!-- The notification title shown when importing a SIM card finishes [CHAR LIMIT=40] -->
+    <string name="importing_sim_finished_title">Finished importing SIM card</string>
+
+    <!-- Notification title shown when importing SIM contacts failed [CHAR LIMIT=40] -->
+    <string name="importing_sim_failed_title">Import failed</string>
+
+    <!-- Notification message shown when importing SIM contacts failed [CHAR LIMIT=NONE] -->
+    <string name="importing_sim_failed_message">Couldn\'t import contacts from SIM card</string>
+
+    <!-- The notification title shown while SIM contacts are being imported [CHAR LIMIT=40] -->
+    <string name="importing_sim_in_progress_title">Importing SIM</string>
+
 </resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 7f0191e..31c0f6b 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -15,15 +15,10 @@
 -->
 <resources>
 
-    <style name="EditorActivityTheme" parent="@style/PeopleTheme">
-        <item name="android:listViewStyle">@style/ListViewStyle</item>
-        <item name="android:actionBarStyle">@style/EditorActionBarStyle</item>
-        <item name="android:colorButtonNormal">@color/background_primary</item>
-        <item name="android:windowActionBar">false</item>
-        <item name="android:windowNoTitle">true</item>
-    </style>
-
-    <style name="Theme">
+    <style name="EditorActivityTheme" parent="@style/PeopleActivityTheme">
+        <item name="actionBarStyle">@style/EditorActionBarStyle</item>
+        <item name="colorButtonNormal">@color/background_primary</item>
+        <item name="windowActionModeOverlay">true</item>
     </style>
 
     <style name="Theme.QuickContact" parent="@style/PeopleTheme">
@@ -43,13 +38,11 @@
         </item>
     </style>
 
-    <style name="PeopleTheme" parent="@android:style/Theme.Material.Light">
+    <style name="PeopleTheme" parent="@android:style/Theme.Material.Light.DarkActionBar">
         <item name="android:actionBarStyle">@style/ContactsActionBarStyle</item>
-        <!--  Drawable for the back button -->
-        <item name="android:homeAsUpIndicator">@drawable/ic_back_arrow</item>
         <!-- Style for the overflow button in the actionbar. -->
         <item name="android:actionOverflowButtonStyle">@style/ContactsActionBarOverflowQP</item>
-        <item name="android:actionModeCloseDrawable">@drawable/ic_close_lt</item>
+        <item name="android:actionModeCloseDrawable">@drawable/quantum_ic_close_vd_theme_24</item>
         <item name="android:textColorPrimary">@color/primary_text_color</item>
         <item name="android:textColorSecondary">@color/secondary_text_color</item>
         <item name="android:icon">@android:color/transparent</item>
@@ -60,8 +53,6 @@
         <item name="android:colorAccent">@color/primary_color</item>
         <item name="android:alertDialogTheme">@style/ContactsAlertDialogTheme</item>
         <item name="list_item_height">@dimen/contact_browser_list_item_height</item>
-        <item name="activated_background">@drawable/list_item_activated_background</item>
-        <item name="section_header_background">@drawable/list_title_holo</item>
         <item name="list_section_header_height">24dip</item>
         <item name="list_item_padding_top">
             @dimen/contact_browser_list_item_padding_top_or_bottom
@@ -105,20 +96,17 @@
         <item name="android:listSelector">?android:attr/listChoiceBackgroundIndicator</item>
     </style>
 
-    <style name="PeopleThemeAppCompat" parent="Theme.AppCompat.Light">
+    <style name="PeopleThemeAppCompat" parent="Theme.AppCompat.Light.DarkActionBar">
         <!-- Styles that require AppCompat compatibility, remember to update both sets -->
         <item name="android:actionBarStyle">@style/ContactsActionBarStyleAppCompat</item>
         <item name="actionBarStyle">@style/ContactsActionBarStyleAppCompat</item>
         <item name="android:actionButtonStyle">@style/ContactsActionButtonStyle</item>
         <item name="actionButtonStyle">@style/ContactsActionButtonStyle</item>
-        <!--  Drawable for the back button -->
-        <item name="android:homeAsUpIndicator">@drawable/ic_back_arrow</item>
-        <item name="homeAsUpIndicator">@drawable/ic_back_arrow</item>
         <!-- Style for the overflow button in the actionbar. -->
         <item name="android:actionOverflowButtonStyle">@style/ContactsActionBarOverflowQP</item>
         <item name="actionOverflowButtonStyle">@style/ContactsActionBarOverflowQP</item>
         <item name="toolbarNavigationButtonStyle">@style/ContactToolbarNavigationButtonStyle</item>
-        <item name="android:actionModeCloseDrawable">@drawable/ic_close_lt</item>
+        <item name="android:actionModeCloseDrawable">@drawable/quantum_ic_close_vd_theme_24</item>
         <item name="android:textColorPrimary">@color/primary_text_color</item>
         <item name="android:textColorSecondary">@color/secondary_text_color</item>
         <item name="android:icon">@android:color/transparent</item>
@@ -133,8 +121,6 @@
         <item name="android:alertDialogTheme">@style/ContactsAlertDialogThemeAppCompat</item>
         <item name="alertDialogTheme">@style/ContactsAlertDialogThemeAppCompat</item>
         <item name="list_item_height">@dimen/contact_browser_list_item_height</item>
-        <item name="activated_background">@drawable/list_item_activated_background</item>
-        <item name="section_header_background">@drawable/list_title_holo</item>
         <item name="list_section_header_height">24dip</item>
         <item name="list_item_padding_top">
             @dimen/contact_browser_list_item_padding_top_or_bottom
@@ -196,9 +182,6 @@
         <item name="android:color">@android:color/white</item>
     </style>
 
-    <style name="ContactsUnavailableButtonStyle" parent="@style/Widget.AppCompat.Button.Colored">
-    </style>
-
     <!-- Use the non-light style so that the up button & icons aren't black. If we use the
          Light style, then it is impossible to tint the homeAsUp icon anything other than black -->
     <style name="ContactsActionBarStyle" parent="@android:style/Widget.Material.ActionBar">
@@ -210,7 +193,7 @@
     </style>
 
     <style name="ContactsActionBarStyleAppCompat"
-        parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
+        parent="@style/Widget.AppCompat.ActionBar.Solid">
         <!-- Styles that require AppCompat compatibility, remember to update both sets -->
         <item name="android:background">@color/actionbar_background_color</item>
         <item name="background">@color/actionbar_background_color</item>
@@ -223,7 +206,7 @@
         <item name="icon">@android:color/transparent</item>
     </style>
 
-    <style name="EditorActionBarStyle" parent="@style/ContactsActionBarStyle">
+    <style name="EditorActionBarStyle" parent="@style/ContactsToolbarStyle">
         <item name="android:contentInsetStart">72dp</item>
         <item name="android:contentInsetStartWithNavigation">72dp</item>
         <item name="android:titleTextAppearance">@style/ContactsActionBarTitleText</item>
@@ -271,7 +254,7 @@
     <!-- Action bar overflow menu icon. -->
     <style name="ContactsActionBarOverflowQP"
         parent="Widget.AppCompat.Light.ActionButton.Overflow">
-        <item name="android:src">@drawable/ic_more_vert</item>
+        <item name="android:src">@drawable/quantum_ic_more_vert_vd_theme_24</item>
         <item name="android:tint">@color/action_bar_button_text_color</item>
     </style>
 
@@ -280,10 +263,6 @@
         <item name="android:tint">@color/action_bar_button_text_color</item>
     </style>
 
-    <style name="ListViewDropdownStyle" parent="@android:style/Widget.ListView.DropDown">
-        <item name="android:listSelector">?android:attr/listChoiceBackgroundIndicator</item>
-    </style>
-
     <style name="ContactPickerTheme" parent="PeopleActivityTheme">
     </style>
 
@@ -314,30 +293,10 @@
         <item name="android:colorAccent">@color/primary_color</item>
     </style>
 
-    <style name="SectionDivider">
-        <item name="android:background">#7e7e87</item>
-        <item name="android:layout_height">1dip</item>
-        <item name="android:layout_width">match_parent</item>
-    </style>
-
     <style name="SelectableItem" parent="@android:style/Theme.Material.Light">
         <item name="android:background">?android:attr/selectableItemBackground</item>
     </style>
 
-    <style name="QuickContactListItemTextWrapperStyle">
-        <item name="android:layout_width">0dip</item>
-        <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_weight">1</item>
-        <item name="android:paddingLeft">16dip</item>
-        <item name="android:paddingRight">16dip</item>
-        <item name="android:paddingStart">16dip</item>
-        <item name="android:paddingEnd">16dip</item>
-        <item name="android:gravity">center_vertical</item>
-        <item name="android:orientation">vertical</item>
-    </style>
-
-    <style name="GroupMembershipSizeTextAppearance" parent="@android:style/TextAppearance.Small"/>
-
     <style name="ExpandingEntryCardStyle">
         <item name="android:elevation">@dimen/expanding_entry_card_elevation</item>
         <item name="android:background">@color/expanding_entry_card_background_color</item>
@@ -444,10 +403,6 @@
         <item name="android:textAllCaps">true</item>
     </style>
 
-    <style name="DirectoryHeader">
-        <item name="android:background">@android:color/transparent</item>
-    </style>
-
     <style name="SectionHeaderStyle" parent="@android:style/TextAppearance.Large">
         <item name="android:textSize">16sp</item>
         <item name="android:textAllCaps">true</item>
diff --git a/res/xml/preference_display_options.xml b/res/xml/preference_display_options.xml
index bf7e871..ca9365c 100644
--- a/res/xml/preference_display_options.xml
+++ b/res/xml/preference_display_options.xml
@@ -26,7 +26,7 @@
         android:title="@string/settings_accounts">
     </Preference>
 
-    <com.android.contacts.common.preference.DefaultAccountPreference
+    <com.android.contacts.preference.DefaultAccountPreference
         android:icon="@null"
         android:key="defaultAccount"
         android:title="@string/default_editor_account"
@@ -37,13 +37,13 @@
         android:key="customContactsFilter"
         android:title="@string/menu_contacts_filter"/>
 
-    <com.android.contacts.common.preference.SortOrderPreference
+    <com.android.contacts.preference.SortOrderPreference
         android:icon="@null"
         android:key="sortOrder"
         android:title="@string/display_options_sort_list_by"
         android:dialogTitle="@string/display_options_sort_list_by" />
 
-    <com.android.contacts.common.preference.DisplayOrderPreference
+    <com.android.contacts.preference.DisplayOrderPreference
         android:icon="@null"
         android:key="displayOrder"
         android:title="@string/display_options_view_names_as"
diff --git a/res/xml/shortcuts.xml b/res/xml/shortcuts.xml
new file mode 100644
index 0000000..c33893a
--- /dev/null
+++ b/res/xml/shortcuts.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
+    <shortcut
+        android:enabled="true"
+        android:icon="@drawable/ic_add_circle_24dp"
+        android:shortcutId="shortcut-add-contact"
+        android:shortcutShortLabel="@string/shortcut_add_contact">
+        <intent
+            android:action="android.intent.action.INSERT"
+            android:data="content://com.android.contacts/contacts"
+            android:targetPackage="com.android.contacts"
+            android:targetClass="com.android.contacts.activities.ContactEditorActivity"/>
+    </shortcut>
+</shortcuts>
diff --git a/src-bind/com/android/contactsbind/ObjectFactory.java b/src-bind/com/android/contactsbind/ObjectFactory.java
index 6697ebc..41e9df4 100644
--- a/src-bind/com/android/contactsbind/ObjectFactory.java
+++ b/src-bind/com/android/contactsbind/ObjectFactory.java
@@ -13,14 +13,15 @@
  */
 package com.android.contactsbind;
 
-import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.util.DeviceLocalAccountTypeFactory;
-
 import android.app.Fragment;
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
 
+import com.android.contacts.logging.Logger;
+import com.android.contacts.util.DeviceLocalAccountTypeFactory;
+import com.android.contactsbind.search.AutocompleteHelper;
+
 /**
  * Creates default bindings for overlays.
  */
@@ -30,6 +31,10 @@
         return null;
     }
 
+    public static AutocompleteHelper getAutocompleteHelper(Context context) {
+        return null;
+    }
+
     public static DeviceLocalAccountTypeFactory getDeviceLocalAccountTypeFactory(Context context) {
         return new DeviceLocalAccountTypeFactory.Default(context);
     }
diff --git a/src-bind/com/android/contactsbind/analytics/AnalyticsUtil.java b/src-bind/com/android/contactsbind/analytics/AnalyticsUtil.java
index 53b59eb..4234ea1 100644
--- a/src-bind/com/android/contactsbind/analytics/AnalyticsUtil.java
+++ b/src-bind/com/android/contactsbind/analytics/AnalyticsUtil.java
@@ -14,10 +14,7 @@
 
 package com.android.contactsbind.analytics;
 
-import android.app.Activity;
 import android.app.Application;
-import android.app.Fragment;
-import android.text.TextUtils;
 
 public class AnalyticsUtil {
 
diff --git a/src-bind/com/android/contactsbind/search/AutocompleteHelper.java b/src-bind/com/android/contactsbind/search/AutocompleteHelper.java
index c37a828..ff0678c 100644
--- a/src-bind/com/android/contactsbind/search/AutocompleteHelper.java
+++ b/src-bind/com/android/contactsbind/search/AutocompleteHelper.java
@@ -25,7 +25,7 @@
         void onAutocompletesAvailable(Cursor cursor);
     }
 
-    private AutocompleteHelper() {
+    public AutocompleteHelper() {
     }
 
     public void setListener(Listener listener) {
diff --git a/src-bind/com/android/contactsbind/util/UserAgentGenerator.java b/src-bind/com/android/contactsbind/util/UserAgentGenerator.java
index 1cb44b8..be985ee 100644
--- a/src-bind/com/android/contactsbind/util/UserAgentGenerator.java
+++ b/src-bind/com/android/contactsbind/util/UserAgentGenerator.java
@@ -17,8 +17,6 @@
 package com.android.contactsbind.util;
 
 import android.content.Context;
-import android.content.pm.PackageManager;
-import android.os.Build;
 
 /**
  * Generates a user agent string for the application.
diff --git a/src/com/android/contacts/AppCompatContactsActivity.java b/src/com/android/contacts/AppCompatContactsActivity.java
index 7654b27..27fbec9 100644
--- a/src/com/android/contacts/AppCompatContactsActivity.java
+++ b/src/com/android/contacts/AppCompatContactsActivity.java
@@ -25,8 +25,8 @@
 import android.os.Bundle;
 import android.view.View;
 
-import com.android.contacts.common.activity.AppCompatTransactionSafeActivity;
-import com.android.contacts.common.testing.InjectedServices;
+import com.android.contacts.activities.AppCompatTransactionSafeActivity;
+import com.android.contacts.testing.InjectedServices;
 
 /**
  * A common superclass for Contacts activities that handles application-wide services, copied from
diff --git a/src/com/android/contacts/CallUtil.java b/src/com/android/contacts/CallUtil.java
new file mode 100644
index 0000000..ddde01c
--- /dev/null
+++ b/src/com/android/contacts/CallUtil.java
@@ -0,0 +1,202 @@
+/*
+ * 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;
+
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.telecom.VideoProfile;
+import android.text.TextUtils;
+
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.PhoneAccountSdkCompat;
+import com.android.contacts.util.PermissionsUtil;
+import com.android.contacts.util.PhoneNumberHelper;
+import com.android.contactsbind.FeedbackHelper;
+import com.android.phone.common.PhoneConstants;
+
+import java.util.List;
+
+/**
+ * Utilities related to calls that can be used by non system apps. These
+ * use {@link Intent#ACTION_CALL} instead of ACTION_CALL_PRIVILEGED.
+ *
+ * The privileged version of this util exists inside Dialer.
+ */
+public class CallUtil {
+
+    public static final String TAG = "CallUtil";
+
+    /**
+     * Indicates that the video calling is not available.
+     */
+    public static final int VIDEO_CALLING_DISABLED = 0;
+
+    /**
+     * Indicates that video calling is enabled, regardless of presence status.
+     */
+    public static final int VIDEO_CALLING_ENABLED = 1;
+
+    /**
+     * Indicates that video calling is enabled, but the availability of video call affordances is
+     * determined by the presence status associated with contacts.
+     */
+    public static final int VIDEO_CALLING_PRESENCE = 2;
+
+    /**
+     * Return an Intent for making a phone call. Scheme (e.g. tel, sip) will be determined
+     * automatically.
+     */
+    public static Intent getCallWithSubjectIntent(String number,
+            PhoneAccountHandle phoneAccountHandle, String callSubject) {
+
+        final Intent intent = getCallIntent(getCallUri(number));
+        intent.putExtra(TelecomManager.EXTRA_CALL_SUBJECT, callSubject);
+        if (phoneAccountHandle != null) {
+            intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
+        }
+        return intent;
+    }
+
+    /**
+     * Return an Intent for making a phone call. Scheme (e.g. tel, sip) will be determined
+     * automatically.
+     */
+    public static Intent getCallIntent(String number) {
+        return getCallIntent(getCallUri(number));
+    }
+
+    /**
+     * Return an Intent for making a phone call. A given Uri will be used as is (without any
+     * sanity check).
+     */
+    public static Intent getCallIntent(Uri uri) {
+        return new Intent(Intent.ACTION_CALL, uri);
+    }
+
+    /**
+     * A variant of {@link #getCallIntent} for starting a video call.
+     */
+    public static Intent getVideoCallIntent(String number, String callOrigin) {
+        final Intent intent = new Intent(Intent.ACTION_CALL, getCallUri(number));
+        intent.putExtra(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE,
+                VideoProfile.STATE_BIDIRECTIONAL);
+        if (!TextUtils.isEmpty(callOrigin)) {
+            intent.putExtra(PhoneConstants.EXTRA_CALL_ORIGIN, callOrigin);
+        }
+        return intent;
+    }
+
+    /**
+     * Return Uri with an appropriate scheme, accepting both SIP and usual phone call
+     * numbers.
+     */
+    public static Uri getCallUri(String number) {
+        if (PhoneNumberHelper.isUriNumber(number)) {
+             return Uri.fromParts(PhoneAccount.SCHEME_SIP, number, null);
+        }
+        return Uri.fromParts(PhoneAccount.SCHEME_TEL, number, null);
+    }
+
+    /**
+     * Determines if video calling is available, and if so whether presence checking is available
+     * as well.
+     *
+     * Returns a bitmask with {@link #VIDEO_CALLING_ENABLED} to indicate that video calling is
+     * available, and {@link #VIDEO_CALLING_PRESENCE} if presence indication is also available.
+     *
+     * @param context The context
+     * @return A bit-mask describing the current video capabilities.
+     */
+    public static int getVideoCallingAvailability(Context context) {
+        if (!PermissionsUtil.hasPermission(context, android.Manifest.permission.READ_PHONE_STATE)
+                || !CompatUtils.isVideoCompatible()) {
+            return VIDEO_CALLING_DISABLED;
+        }
+        TelecomManager telecommMgr = (TelecomManager)
+                context.getSystemService(Context.TELECOM_SERVICE);
+        if (telecommMgr == null) {
+            return VIDEO_CALLING_DISABLED;
+        }
+
+        try {
+            List<PhoneAccountHandle> accountHandles = telecommMgr.getCallCapablePhoneAccounts();
+            for (PhoneAccountHandle accountHandle : accountHandles) {
+                PhoneAccount account = telecommMgr.getPhoneAccount(accountHandle);
+                if (account != null) {
+                    if (account.hasCapabilities(PhoneAccount.CAPABILITY_VIDEO_CALLING)) {
+                        // Builds prior to N do not have presence support.
+                        if (!CompatUtils.isVideoPresenceCompatible()) {
+                            return VIDEO_CALLING_ENABLED;
+                        }
+
+                        int videoCapabilities = VIDEO_CALLING_ENABLED;
+                        if (account.hasCapabilities(PhoneAccountSdkCompat
+                                .CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE)) {
+                            videoCapabilities |= VIDEO_CALLING_PRESENCE;
+                        }
+                        return videoCapabilities;
+                    }
+                }
+            }
+            return VIDEO_CALLING_DISABLED;
+        } catch (SecurityException e) {
+            FeedbackHelper.sendFeedback(context, TAG,
+                    "Security exception when getting call capable phone accounts", e);
+            return VIDEO_CALLING_DISABLED;
+        }
+    }
+
+    /**
+     * Determines if one of the call capable phone accounts defined supports calling with a subject
+     * specified.
+     *
+     * @param context The context.
+     * @return {@code true} if one of the call capable phone accounts supports calling with a
+     *      subject specified, {@code false} otherwise.
+     */
+    public static boolean isCallWithSubjectSupported(Context context) {
+        if (!PermissionsUtil.hasPermission(context, android.Manifest.permission.READ_PHONE_STATE)
+                || !CompatUtils.isCallSubjectCompatible()) {
+            return false;
+        }
+        TelecomManager telecommMgr = (TelecomManager)
+                context.getSystemService(Context.TELECOM_SERVICE);
+        if (telecommMgr == null) {
+            return false;
+        }
+
+        try {
+            List<PhoneAccountHandle> accountHandles = telecommMgr.getCallCapablePhoneAccounts();
+            for (PhoneAccountHandle accountHandle : accountHandles) {
+                PhoneAccount account = telecommMgr.getPhoneAccount(accountHandle);
+                if (account != null && account.hasCapabilities(PhoneAccount.CAPABILITY_CALL_SUBJECT)) {
+                    return true;
+                }
+            }
+            return false;
+        } catch (SecurityException e) {
+            FeedbackHelper.sendFeedback(context, TAG,
+                    "Security exception when getting call capable phone accounts", e);
+            return false;
+        }
+
+    }
+}
diff --git a/src/com/android/contacts/ClipboardUtils.java b/src/com/android/contacts/ClipboardUtils.java
new file mode 100644
index 0000000..647cb99
--- /dev/null
+++ b/src/com/android/contacts/ClipboardUtils.java
@@ -0,0 +1,52 @@
+/*
+ * 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;
+
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.content.Context;
+import android.text.TextUtils;
+import android.widget.Toast;
+
+public class ClipboardUtils {
+    private static final String TAG = "ClipboardUtils";
+
+    private ClipboardUtils() { }
+
+    /**
+     * Copy a text to clipboard.
+     *
+     * @param context Context
+     * @param label Label to show to the user describing this clip.
+     * @param text Text to copy.
+     * @param showToast If {@code true}, a toast is shown to the user.
+     */
+    public static void copyText(Context context, CharSequence label, CharSequence text,
+            boolean showToast) {
+        if (TextUtils.isEmpty(text)) return;
+
+        ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(
+                Context.CLIPBOARD_SERVICE);
+        ClipData clipData = ClipData.newPlainText(label == null ? "" : label, text);
+        clipboardManager.setPrimaryClip(clipData);
+
+        if (showToast) {
+            String toastText = context.getString(R.string.toast_text_copied);
+            Toast.makeText(context, toastText, Toast.LENGTH_SHORT).show();
+        }
+    }
+}
diff --git a/src/com/android/contacts/Collapser.java b/src/com/android/contacts/Collapser.java
new file mode 100644
index 0000000..b9d069f
--- /dev/null
+++ b/src/com/android/contacts/Collapser.java
@@ -0,0 +1,96 @@
+/*
+ * 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;
+
+import android.content.Context;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Class used for collapsing data items into groups of similar items. The data items that should be
+ * collapsible should implement the Collapsible interface. The class also contains a utility
+ * function that takes an ArrayList of items and returns a list of the same items collapsed into
+ * groups.
+ */
+public final class Collapser {
+
+    /*
+     * This utility class cannot be instantiated.
+     */
+    private Collapser() {}
+
+    /*
+     * The Collapser uses an n^2 algorithm so we don't want it to run on
+     * lists beyond a certain size. This specifies the maximum size to collapse.
+     */
+    private static final int MAX_LISTSIZE_TO_COLLAPSE = 20;
+
+    /*
+     * Interface implemented by data types that can be collapsed into groups of similar data. This
+     * can be used for example to collapse similar contact data items into a single item.
+     */
+    public interface Collapsible<T> {
+        public void collapseWith(T t);
+        public boolean shouldCollapseWith(T t, Context context);
+
+    }
+
+    /**
+     * Collapses a list of Collapsible items into a list of collapsed items. Items are collapsed
+     * if {@link Collapsible#shouldCollapseWith(Object)} returns true, and are collapsed
+     * through the {@Link Collapsible#collapseWith(Object)} function implemented by the data item.
+     *
+     * @param list List of Objects of type <T extends Collapsible<T>> to be collapsed.
+     */
+    public static <T extends Collapsible<T>> void collapseList(List<T> list, Context context) {
+
+        int listSize = list.size();
+        // The algorithm below is n^2 so don't run on long lists
+        if (listSize > MAX_LISTSIZE_TO_COLLAPSE) {
+            return;
+        }
+
+        for (int i = 0; i < listSize; i++) {
+            T iItem = list.get(i);
+            if (iItem != null) {
+                for (int j = i + 1; j < listSize; j++) {
+                    T jItem = list.get(j);
+                    if (jItem != null) {
+                        if (iItem.shouldCollapseWith(jItem, context)) {
+                            iItem.collapseWith(jItem);
+                            list.set(j, null);
+                        } else if (jItem.shouldCollapseWith(iItem, context)) {
+                            jItem.collapseWith(iItem);
+                            list.set(i, null);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+
+        // Remove the null items
+        Iterator<T> itr = list.iterator();
+        while (itr.hasNext()) {
+            if (itr.next() == null) {
+                itr.remove();
+            }
+        }
+
+    }
+}
diff --git a/src/com/android/contacts/ContactPhotoManager.java b/src/com/android/contacts/ContactPhotoManager.java
new file mode 100644
index 0000000..b43af19
--- /dev/null
+++ b/src/com/android/contacts/ContactPhotoManager.java
@@ -0,0 +1,1743 @@
+/*
+ * 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.ActivityManager;
+import android.content.ComponentCallbacks2;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Paint.Style;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.TransitionDrawable;
+import android.media.ThumbnailUtils;
+import android.net.TrafficStats;
+import android.net.Uri;
+import android.net.Uri.Builder;
+import android.os.Handler;
+import android.os.Handler.Callback;
+import android.os.HandlerThread;
+import android.os.Message;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Contacts.Photo;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.LruCache;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+
+import com.android.contacts.lettertiles.LetterTileDrawable;
+import com.android.contacts.util.BitmapUtil;
+import com.android.contacts.util.PermissionsUtil;
+import com.android.contacts.util.TrafficStatsTags;
+import com.android.contacts.util.UriUtils;
+import com.android.contactsbind.util.UserAgentGenerator;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.ref.Reference;
+import java.lang.ref.SoftReference;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Asynchronously loads contact photos and maintains a cache of photos.
+ */
+public abstract class ContactPhotoManager implements ComponentCallbacks2 {
+    static final String TAG = "ContactPhotoManager";
+    static final boolean DEBUG = false; // Don't submit with true
+    static final boolean DEBUG_SIZES = false; // Don't submit with true
+
+    /** Contact type constants used for default letter images */
+    public static final int TYPE_PERSON = LetterTileDrawable.TYPE_PERSON;
+    public static final int TYPE_BUSINESS = LetterTileDrawable.TYPE_BUSINESS;
+    public static final int TYPE_VOICEMAIL = LetterTileDrawable.TYPE_VOICEMAIL;
+    public static final int TYPE_DEFAULT = LetterTileDrawable.TYPE_DEFAULT;
+
+    /** Scale and offset default constants used for default letter images */
+    public static final float SCALE_DEFAULT = 1.0f;
+    public static final float OFFSET_DEFAULT = 0.0f;
+
+    public static final boolean IS_CIRCULAR_DEFAULT = false;
+
+    /** Uri-related constants used for default letter images */
+    private static final String DISPLAY_NAME_PARAM_KEY = "display_name";
+    private static final String IDENTIFIER_PARAM_KEY = "identifier";
+    private static final String CONTACT_TYPE_PARAM_KEY = "contact_type";
+    private static final String SCALE_PARAM_KEY = "scale";
+    private static final String OFFSET_PARAM_KEY = "offset";
+    private static final String IS_CIRCULAR_PARAM_KEY = "is_circular";
+    private static final String DEFAULT_IMAGE_URI_SCHEME = "defaultimage";
+    private static final Uri DEFAULT_IMAGE_URI = Uri.parse(DEFAULT_IMAGE_URI_SCHEME + "://");
+
+    // Static field used to cache the default letter avatar drawable that is created
+    // using a null {@link DefaultImageRequest}
+    private static Drawable sDefaultLetterAvatar = null;
+
+    private static ContactPhotoManager sInstance;
+
+    /**
+     * Given a {@link DefaultImageRequest}, returns a {@link Drawable}, that when drawn, will
+     * draw a letter tile avatar based on the request parameters defined in the
+     * {@link DefaultImageRequest}.
+     */
+    public static Drawable getDefaultAvatarDrawableForContact(Resources resources, boolean hires,
+            DefaultImageRequest defaultImageRequest) {
+        if (defaultImageRequest == null) {
+            if (sDefaultLetterAvatar == null) {
+                // Cache and return the letter tile drawable that is created by a null request,
+                // so that it doesn't have to be recreated every time it is requested again.
+                sDefaultLetterAvatar = LetterTileDefaultImageProvider.getDefaultImageForContact(
+                        resources, null);
+            }
+            return sDefaultLetterAvatar;
+        }
+        return LetterTileDefaultImageProvider.getDefaultImageForContact(resources,
+                defaultImageRequest);
+    }
+
+    /**
+     * Given a {@link DefaultImageRequest}, returns an Uri that can be used to request a
+     * letter tile avatar when passed to the {@link ContactPhotoManager}. The internal
+     * implementation of this uri is not guaranteed to remain the same across application
+     * versions, so the actual uri should never be persisted in long-term storage and reused.
+     *
+     * @param request A {@link DefaultImageRequest} object with the fields configured
+     * to return a
+     * @return A Uri that when later passed to the {@link ContactPhotoManager} via
+     * {@link #loadPhoto(ImageView, Uri, int, boolean, DefaultImageRequest)}, can be
+     * used to request a default contact image, drawn as a letter tile using the
+     * parameters as configured in the provided {@link DefaultImageRequest}
+     */
+    public static Uri getDefaultAvatarUriForContact(DefaultImageRequest request) {
+        final Builder builder = DEFAULT_IMAGE_URI.buildUpon();
+        if (request != null) {
+            if (!TextUtils.isEmpty(request.displayName)) {
+                builder.appendQueryParameter(DISPLAY_NAME_PARAM_KEY, request.displayName);
+            }
+            if (!TextUtils.isEmpty(request.identifier)) {
+                builder.appendQueryParameter(IDENTIFIER_PARAM_KEY, request.identifier);
+            }
+            if (request.contactType != TYPE_DEFAULT) {
+                builder.appendQueryParameter(CONTACT_TYPE_PARAM_KEY,
+                        String.valueOf(request.contactType));
+            }
+            if (request.scale != SCALE_DEFAULT) {
+                builder.appendQueryParameter(SCALE_PARAM_KEY, String.valueOf(request.scale));
+            }
+            if (request.offset != OFFSET_DEFAULT) {
+                builder.appendQueryParameter(OFFSET_PARAM_KEY, String.valueOf(request.offset));
+            }
+            if (request.isCircular != IS_CIRCULAR_DEFAULT) {
+                builder.appendQueryParameter(IS_CIRCULAR_PARAM_KEY,
+                        String.valueOf(request.isCircular));
+            }
+
+        }
+        return builder.build();
+    }
+
+    /**
+     * Adds a business contact type encoded fragment to the URL.  Used to ensure photo URLS
+     * from Nearby Places can be identified as business photo URLs rather than URLs for personal
+     * contact photos.
+     *
+     * @param photoUrl The photo URL to modify.
+     * @return URL with the contact type parameter added and set to TYPE_BUSINESS.
+     */
+    public static String appendBusinessContactType(String photoUrl) {
+        Uri uri = Uri.parse(photoUrl);
+        Builder builder = uri.buildUpon();
+        builder.encodedFragment(String.valueOf(TYPE_BUSINESS));
+        return builder.build().toString();
+    }
+
+    /**
+     * Removes the contact type information stored in the photo URI encoded fragment.
+     *
+     * @param photoUri The photo URI to remove the contact type from.
+     * @return The photo URI with contact type removed.
+     */
+    public static Uri removeContactType(Uri photoUri) {
+        String encodedFragment = photoUri.getEncodedFragment();
+        if (!TextUtils.isEmpty(encodedFragment)) {
+            Builder builder = photoUri.buildUpon();
+            builder.encodedFragment(null);
+            return builder.build();
+        }
+        return photoUri;
+    }
+
+    /**
+     * Inspects a photo URI to determine if the photo URI represents a business.
+     *
+     * @param photoUri The URI to inspect.
+     * @return Whether the URI represents a business photo or not.
+     */
+    public static boolean isBusinessContactUri(Uri photoUri) {
+        if (photoUri == null) {
+            return false;
+        }
+
+        String encodedFragment = photoUri.getEncodedFragment();
+        return !TextUtils.isEmpty(encodedFragment)
+                && encodedFragment.equals(String.valueOf(TYPE_BUSINESS));
+    }
+
+    protected static DefaultImageRequest getDefaultImageRequestFromUri(Uri uri) {
+        final DefaultImageRequest request = new DefaultImageRequest(
+                uri.getQueryParameter(DISPLAY_NAME_PARAM_KEY),
+                uri.getQueryParameter(IDENTIFIER_PARAM_KEY), false);
+        try {
+            String contactType = uri.getQueryParameter(CONTACT_TYPE_PARAM_KEY);
+            if (!TextUtils.isEmpty(contactType)) {
+                request.contactType = Integer.valueOf(contactType);
+            }
+
+            String scale = uri.getQueryParameter(SCALE_PARAM_KEY);
+            if (!TextUtils.isEmpty(scale)) {
+                request.scale = Float.valueOf(scale);
+            }
+
+            String offset = uri.getQueryParameter(OFFSET_PARAM_KEY);
+            if (!TextUtils.isEmpty(offset)) {
+                request.offset = Float.valueOf(offset);
+            }
+
+            String isCircular = uri.getQueryParameter(IS_CIRCULAR_PARAM_KEY);
+            if (!TextUtils.isEmpty(isCircular)) {
+                request.isCircular = Boolean.valueOf(isCircular);
+            }
+        } catch (NumberFormatException e) {
+            Log.w(TAG, "Invalid DefaultImageRequest image parameters provided, ignoring and using "
+                    + "defaults.");
+        }
+
+        return request;
+    }
+
+    protected boolean isDefaultImageUri(Uri uri) {
+        return DEFAULT_IMAGE_URI_SCHEME.equals(uri.getScheme());
+    }
+
+    /**
+     * Contains fields used to contain contact details and other user-defined settings that might
+     * be used by the ContactPhotoManager to generate a default contact image. This contact image
+     * takes the form of a letter or bitmap drawn on top of a colored tile.
+     */
+    public static class DefaultImageRequest {
+        /**
+         * The contact's display name. The display name is used to
+         */
+        public String displayName;
+
+        /**
+         * A unique and deterministic string that can be used to identify this contact. This is
+         * usually the contact's lookup key, but other contact details can be used as well,
+         * especially for non-local or temporary contacts that might not have a lookup key. This
+         * is used to determine the color of the tile.
+         */
+        public String identifier;
+
+        /**
+         * The type of this contact. This contact type may be used to decide the kind of
+         * image to use in the case where a unique letter cannot be generated from the contact's
+         * display name and identifier. See:
+         * {@link #TYPE_PERSON}
+         * {@link #TYPE_BUSINESS}
+         * {@link #TYPE_PERSON}
+         * {@link #TYPE_DEFAULT}
+         */
+        public int contactType = TYPE_DEFAULT;
+
+        /**
+         * The amount to scale the letter or bitmap to, as a ratio of its default size (from a
+         * range of 0.0f to 2.0f). The default value is 1.0f.
+         */
+        public float scale = SCALE_DEFAULT;
+
+        /**
+         * The amount to vertically offset the letter or image to within the tile.
+         * The provided offset must be within the range of -0.5f to 0.5f.
+         * If set to -0.5f, the letter will be shifted upwards by 0.5 times the height of the canvas
+         * it is being drawn on, which means it will be drawn with the center of the letter starting
+         * at the top edge of the canvas.
+         * If set to 0.5f, the letter will be shifted downwards by 0.5 times the height of the
+         * canvas it is being drawn on, which means it will be drawn with the center of the letter
+         * starting at the bottom edge of the canvas.
+         * The default is 0.0f, which means the letter is drawn in the exact vertical center of
+         * the tile.
+         */
+        public float offset = OFFSET_DEFAULT;
+
+        /**
+         * Whether or not to draw the default image as a circle, instead of as a square/rectangle.
+         */
+        public boolean isCircular = false;
+
+        /**
+         * Used to indicate that a drawable that represents a contact without any contact details
+         * should be returned.
+         */
+        public static DefaultImageRequest EMPTY_DEFAULT_IMAGE_REQUEST = new DefaultImageRequest();
+
+        /**
+         * Used to indicate that a drawable that represents a business without a business photo
+         * should be returned.
+         */
+        public static DefaultImageRequest EMPTY_DEFAULT_BUSINESS_IMAGE_REQUEST =
+                new DefaultImageRequest(null, null, TYPE_BUSINESS, false);
+
+        /**
+         * Used to indicate that a circular drawable that represents a contact without any contact
+         * details should be returned.
+         */
+        public static DefaultImageRequest EMPTY_CIRCULAR_DEFAULT_IMAGE_REQUEST =
+                new DefaultImageRequest(null, null, true);
+
+        /**
+         * Used to indicate that a circular drawable that represents a business without a business
+         * photo should be returned.
+         */
+        public static DefaultImageRequest EMPTY_CIRCULAR_BUSINESS_IMAGE_REQUEST =
+                new DefaultImageRequest(null, null, TYPE_BUSINESS, true);
+
+        public DefaultImageRequest() {
+        }
+
+        public DefaultImageRequest(String displayName, String identifier, boolean isCircular) {
+            this(displayName, identifier, TYPE_DEFAULT, SCALE_DEFAULT, OFFSET_DEFAULT, isCircular);
+        }
+
+        public DefaultImageRequest(String displayName, String identifier, int contactType,
+                boolean isCircular) {
+            this(displayName, identifier, contactType, SCALE_DEFAULT, OFFSET_DEFAULT, isCircular);
+        }
+
+        public DefaultImageRequest(String displayName, String identifier, int contactType,
+                float scale, float offset, boolean isCircular) {
+            this.displayName = displayName;
+            this.identifier = identifier;
+            this.contactType = contactType;
+            this.scale = scale;
+            this.offset = offset;
+            this.isCircular = isCircular;
+        }
+    }
+
+    public static abstract class DefaultImageProvider {
+        /**
+         * Applies the default avatar to the ImageView. Extent is an indicator for the size (width
+         * or height). If darkTheme is set, the avatar is one that looks better on dark background
+         *
+         * @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a
+         * default letter tile avatar should be drawn.
+         */
+        public abstract void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
+                DefaultImageRequest defaultImageRequest);
+    }
+
+    /**
+     * A default image provider that applies a letter tile consisting of a colored background
+     * and a letter in the foreground as the default image for a contact. The color of the
+     * background and the type of letter is decided based on the contact's details.
+     */
+    private static class LetterTileDefaultImageProvider extends DefaultImageProvider {
+        @Override
+        public void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
+                DefaultImageRequest defaultImageRequest) {
+            final Drawable drawable = getDefaultImageForContact(view.getResources(),
+                    defaultImageRequest);
+            view.setImageDrawable(drawable);
+        }
+
+        public static Drawable getDefaultImageForContact(Resources resources,
+                DefaultImageRequest defaultImageRequest) {
+            final LetterTileDrawable drawable = new LetterTileDrawable(resources);
+            if (defaultImageRequest != null) {
+                // If the contact identifier is null or empty, fallback to the
+                // displayName. In that case, use {@code null} for the contact's
+                // display name so that a default bitmap will be used instead of a
+                // letter
+                if (TextUtils.isEmpty(defaultImageRequest.identifier)) {
+                    drawable.setLetterAndColorFromContactDetails(null,
+                            defaultImageRequest.displayName);
+                } else {
+                    drawable.setLetterAndColorFromContactDetails(defaultImageRequest.displayName,
+                            defaultImageRequest.identifier);
+                }
+                drawable.setContactType(defaultImageRequest.contactType);
+                drawable.setScale(defaultImageRequest.scale);
+                drawable.setOffset(defaultImageRequest.offset);
+                drawable.setIsCircular(defaultImageRequest.isCircular);
+            }
+            return drawable;
+        }
+    }
+
+    private static class BlankDefaultImageProvider extends DefaultImageProvider {
+        private static Drawable sDrawable;
+
+        @Override
+        public void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
+                DefaultImageRequest defaultImageRequest) {
+            if (sDrawable == null) {
+                Context context = view.getContext();
+                sDrawable = new ColorDrawable(context.getResources().getColor(
+                        R.color.image_placeholder));
+            }
+            view.setImageDrawable(sDrawable);
+        }
+    }
+
+    public static DefaultImageProvider DEFAULT_AVATAR = new LetterTileDefaultImageProvider();
+
+    public static final DefaultImageProvider DEFAULT_BLANK = new BlankDefaultImageProvider();
+
+    public static ContactPhotoManager getInstance(Context context) {
+        if (sInstance == null) {
+            Context applicationContext = context.getApplicationContext();
+            sInstance = createContactPhotoManager(applicationContext);
+            applicationContext.registerComponentCallbacks(sInstance);
+            if (PermissionsUtil.hasContactsPermissions(context)) {
+                sInstance.preloadPhotosInBackground();
+            }
+        }
+        return sInstance;
+    }
+
+    public static synchronized ContactPhotoManager createContactPhotoManager(Context context) {
+        return new ContactPhotoManagerImpl(context);
+    }
+
+    @VisibleForTesting
+    public static void injectContactPhotoManagerForTesting(ContactPhotoManager photoManager) {
+        sInstance = photoManager;
+    }
+
+    /**
+     * Load thumbnail image into the supplied image view. If the photo is already cached,
+     * it is displayed immediately.  Otherwise a request is sent to load the photo
+     * from the database.
+     */
+    public abstract void loadThumbnail(ImageView view, long photoId, boolean darkTheme,
+            boolean isCircular, DefaultImageRequest defaultImageRequest,
+            DefaultImageProvider defaultProvider);
+
+    /**
+     * Calls {@link #loadThumbnail(ImageView, long, boolean, DefaultImageRequest,
+     * DefaultImageProvider)} using the {@link DefaultImageProvider} {@link #DEFAULT_AVATAR}.
+     */
+    public final void loadThumbnail(ImageView view, long photoId, boolean darkTheme,
+            boolean isCircular, DefaultImageRequest defaultImageRequest) {
+        loadThumbnail(view, photoId, darkTheme, isCircular, defaultImageRequest, DEFAULT_AVATAR);
+    }
+
+
+    /**
+     * Load photo into the supplied image view. If the photo is already cached,
+     * it is displayed immediately. Otherwise a request is sent to load the photo
+     * from the location specified by the URI.
+     *
+     * @param view The target view
+     * @param photoUri The uri of the photo to load
+     * @param requestedExtent Specifies an approximate Max(width, height) of the targetView.
+     * This is useful if the source image can be a lot bigger that the target, so that the decoding
+     * is done using efficient sampling. If requestedExtent is specified, no sampling of the image
+     * is performed
+     * @param darkTheme Whether the background is dark. This is used for default avatars
+     * @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a default
+     * letter tile avatar should be drawn.
+     * @param defaultProvider The provider of default avatars (this is used if photoUri doesn't
+     * refer to an existing image)
+     */
+    public abstract void loadPhoto(ImageView view, Uri photoUri, int requestedExtent,
+            boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest,
+            DefaultImageProvider defaultProvider);
+
+    /**
+     * Calls {@link #loadPhoto(ImageView, Uri, int, boolean, DefaultImageRequest,
+     * DefaultImageProvider)} with {@link #DEFAULT_AVATAR} and {@code null} display names and
+     * lookup keys.
+     *
+     * @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a default
+     * letter tile avatar should be drawn.
+     */
+    public final void loadPhoto(ImageView view, Uri photoUri, int requestedExtent,
+            boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest) {
+        loadPhoto(view, photoUri, requestedExtent, darkTheme, isCircular,
+                defaultImageRequest, DEFAULT_AVATAR);
+    }
+
+    /**
+     * Calls {@link #loadPhoto(ImageView, Uri, boolean, boolean, DefaultImageRequest,
+     * DefaultImageProvider)} with {@link #DEFAULT_AVATAR} and with the assumption, that
+     * the image is a thumbnail.
+     *
+     * @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a default
+     * letter tile avatar should be drawn.
+     */
+    public final void loadDirectoryPhoto(ImageView view, Uri photoUri, boolean darkTheme,
+            boolean isCircular, DefaultImageRequest defaultImageRequest) {
+        loadPhoto(view, photoUri, -1, darkTheme, isCircular, defaultImageRequest, DEFAULT_AVATAR);
+    }
+
+    /**
+     * Remove photo from the supplied image view. This also cancels current pending load request
+     * inside this photo manager.
+     */
+    public abstract void removePhoto(ImageView view);
+
+    /**
+     * Cancels all pending requests to load photos asynchronously.
+     */
+    public abstract void cancelPendingRequests(View fragmentRootView);
+
+    /**
+     * Temporarily stops loading photos from the database.
+     */
+    public abstract void pause();
+
+    /**
+     * Resumes loading photos from the database.
+     */
+    public abstract void resume();
+
+    /**
+     * Marks all cached photos for reloading.  We can continue using cache but should
+     * also make sure the photos haven't changed in the background and notify the views
+     * if so.
+     */
+    public abstract void refreshCache();
+
+    /**
+     * Stores the given bitmap directly in the LRU bitmap cache.
+     * @param photoUri The URI of the photo (for future requests).
+     * @param bitmap The bitmap.
+     * @param photoBytes The bytes that were parsed to create the bitmap.
+     */
+    public abstract void cacheBitmap(Uri photoUri, Bitmap bitmap, byte[] photoBytes);
+
+    /**
+     * Initiates a background process that over time will fill up cache with
+     * preload photos.
+     */
+    public abstract void preloadPhotosInBackground();
+
+    // ComponentCallbacks2
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+    }
+
+    // ComponentCallbacks2
+    @Override
+    public void onLowMemory() {
+    }
+
+    // ComponentCallbacks2
+    @Override
+    public void onTrimMemory(int level) {
+    }
+}
+
+class ContactPhotoManagerImpl extends ContactPhotoManager implements Callback {
+    private static final String LOADER_THREAD_NAME = "ContactPhotoLoader";
+
+    private static final int FADE_TRANSITION_DURATION = 200;
+
+    /**
+     * Type of message sent by the UI thread to itself to indicate that some photos
+     * need to be loaded.
+     */
+    private static final int MESSAGE_REQUEST_LOADING = 1;
+
+    /**
+     * Type of message sent by the loader thread to indicate that some photos have
+     * been loaded.
+     */
+    private static final int MESSAGE_PHOTOS_LOADED = 2;
+
+    private static final String[] EMPTY_STRING_ARRAY = new String[0];
+
+    private static final String[] COLUMNS = new String[] { Photo._ID, Photo.PHOTO };
+
+    /**
+     * Dummy object used to indicate that a bitmap for a given key could not be stored in the
+     * cache.
+     */
+    private static final BitmapHolder BITMAP_UNAVAILABLE;
+
+    static {
+        BITMAP_UNAVAILABLE = new BitmapHolder(new byte[0], 0);
+        BITMAP_UNAVAILABLE.bitmapRef = new SoftReference<Bitmap>(null);
+    }
+
+    /**
+     * Maintains the state of a particular photo.
+     */
+    private static class BitmapHolder {
+        final byte[] bytes;
+        final int originalSmallerExtent;
+
+        volatile boolean fresh;
+        Bitmap bitmap;
+        Reference<Bitmap> bitmapRef;
+        int decodedSampleSize;
+
+        public BitmapHolder(byte[] bytes, int originalSmallerExtent) {
+            this.bytes = bytes;
+            this.fresh = true;
+            this.originalSmallerExtent = originalSmallerExtent;
+        }
+    }
+
+    private final Context mContext;
+
+    /**
+     * An LRU cache for bitmap holders. The cache contains bytes for photos just
+     * as they come from the database. Each holder has a soft reference to the
+     * actual bitmap.
+     */
+    private final LruCache<Object, BitmapHolder> mBitmapHolderCache;
+
+    /**
+     * {@code true} if ALL entries in {@link #mBitmapHolderCache} are NOT fresh.
+     */
+    private volatile boolean mBitmapHolderCacheAllUnfresh = true;
+
+    /**
+     * Cache size threshold at which bitmaps will not be preloaded.
+     */
+    private final int mBitmapHolderCacheRedZoneBytes;
+
+    /**
+     * Level 2 LRU cache for bitmaps. This is a smaller cache that holds
+     * the most recently used bitmaps to save time on decoding
+     * them from bytes (the bytes are stored in {@link #mBitmapHolderCache}.
+     */
+    private final LruCache<Object, Bitmap> mBitmapCache;
+
+    /**
+     * A map from ImageView to the corresponding photo ID or uri, encapsulated in a request.
+     * The request may swapped out before the photo loading request is started.
+     */
+    private final ConcurrentHashMap<ImageView, Request> mPendingRequests =
+            new ConcurrentHashMap<ImageView, Request>();
+
+    /**
+     * Handler for messages sent to the UI thread.
+     */
+    private final Handler mMainThreadHandler = new Handler(this);
+
+    /**
+     * Thread responsible for loading photos from the database. Created upon
+     * the first request.
+     */
+    private LoaderThread mLoaderThread;
+
+    /**
+     * A gate to make sure we only send one instance of MESSAGE_PHOTOS_NEEDED at a time.
+     */
+    private boolean mLoadingRequested;
+
+    /**
+     * Flag indicating if the image loading is paused.
+     */
+    private boolean mPaused;
+
+    /** Cache size for {@link #mBitmapHolderCache} for devices with "large" RAM. */
+    private static final int HOLDER_CACHE_SIZE = 2000000;
+
+    /** Cache size for {@link #mBitmapCache} for devices with "large" RAM. */
+    private static final int BITMAP_CACHE_SIZE = 36864 * 48; // 1728K
+
+    /** Height/width of a thumbnail image */
+    private static int mThumbnailSize;
+
+    /** For debug: How many times we had to reload cached photo for a stale entry */
+    private final AtomicInteger mStaleCacheOverwrite = new AtomicInteger();
+
+    /** For debug: How many times we had to reload cached photo for a fresh entry.  Should be 0. */
+    private final AtomicInteger mFreshCacheOverwrite = new AtomicInteger();
+
+    /**
+     * The user agent string to use when loading URI based photos.
+     */
+    private String mUserAgent;
+
+    public ContactPhotoManagerImpl(Context context) {
+        mContext = context;
+
+        final ActivityManager am = ((ActivityManager) context.getSystemService(
+                Context.ACTIVITY_SERVICE));
+
+        final float cacheSizeAdjustment = (am.isLowRamDevice()) ? 0.5f : 1.0f;
+
+        final int bitmapCacheSize = (int) (cacheSizeAdjustment * BITMAP_CACHE_SIZE);
+        mBitmapCache = new LruCache<Object, Bitmap>(bitmapCacheSize) {
+            @Override protected int sizeOf(Object key, Bitmap value) {
+                return value.getByteCount();
+            }
+
+            @Override protected void entryRemoved(
+                    boolean evicted, Object key, Bitmap oldValue, Bitmap newValue) {
+                if (DEBUG) dumpStats();
+            }
+        };
+        final int holderCacheSize = (int) (cacheSizeAdjustment * HOLDER_CACHE_SIZE);
+        mBitmapHolderCache = new LruCache<Object, BitmapHolder>(holderCacheSize) {
+            @Override protected int sizeOf(Object key, BitmapHolder value) {
+                return value.bytes != null ? value.bytes.length : 0;
+            }
+
+            @Override protected void entryRemoved(
+                    boolean evicted, Object key, BitmapHolder oldValue, BitmapHolder newValue) {
+                if (DEBUG) dumpStats();
+            }
+        };
+        mBitmapHolderCacheRedZoneBytes = (int) (holderCacheSize * 0.75);
+        Log.i(TAG, "Cache adj: " + cacheSizeAdjustment);
+        if (DEBUG) {
+            Log.d(TAG, "Cache size: " + btk(mBitmapHolderCache.maxSize())
+                    + " + " + btk(mBitmapCache.maxSize()));
+        }
+
+        mThumbnailSize = context.getResources().getDimensionPixelSize(
+                R.dimen.contact_browser_list_item_photo_size);
+
+        // Get a user agent string to use for URI photo requests.
+        mUserAgent = UserAgentGenerator.getUserAgent(context);
+        if (mUserAgent == null) {
+            mUserAgent = "";
+        }
+    }
+
+    /** Converts bytes to K bytes, rounding up.  Used only for debug log. */
+    private static String btk(int bytes) {
+        return ((bytes + 1023) / 1024) + "K";
+    }
+
+    private static final int safeDiv(int dividend, int divisor) {
+        return (divisor  == 0) ? 0 : (dividend / divisor);
+    }
+
+    /**
+     * Dump cache stats on logcat.
+     */
+    private void dumpStats() {
+        if (!DEBUG) return;
+        {
+            int numHolders = 0;
+            int rawBytes = 0;
+            int bitmapBytes = 0;
+            int numBitmaps = 0;
+            for (BitmapHolder h : mBitmapHolderCache.snapshot().values()) {
+                numHolders++;
+                if (h.bytes != null) {
+                    rawBytes += h.bytes.length;
+                }
+                Bitmap b = h.bitmapRef != null ? h.bitmapRef.get() : null;
+                if (b != null) {
+                    numBitmaps++;
+                    bitmapBytes += b.getByteCount();
+                }
+            }
+            Log.d(TAG, "L1: " + btk(rawBytes) + " + " + btk(bitmapBytes) + " = "
+                    + btk(rawBytes + bitmapBytes) + ", " + numHolders + " holders, "
+                    + numBitmaps + " bitmaps, avg: "
+                    + btk(safeDiv(rawBytes, numHolders))
+                    + "," + btk(safeDiv(bitmapBytes,numBitmaps)));
+            Log.d(TAG, "L1 Stats: " + mBitmapHolderCache.toString()
+                    + ", overwrite: fresh=" + mFreshCacheOverwrite.get()
+                    + " stale=" + mStaleCacheOverwrite.get());
+        }
+
+        {
+            int numBitmaps = 0;
+            int bitmapBytes = 0;
+            for (Bitmap b : mBitmapCache.snapshot().values()) {
+                numBitmaps++;
+                bitmapBytes += b.getByteCount();
+            }
+            Log.d(TAG, "L2: " + btk(bitmapBytes) + ", " + numBitmaps + " bitmaps"
+                    + ", avg: " + btk(safeDiv(bitmapBytes, numBitmaps)));
+            // We don't get from L2 cache, so L2 stats is meaningless.
+        }
+    }
+
+    @Override
+    public void onTrimMemory(int level) {
+        if (DEBUG) Log.d(TAG, "onTrimMemory: " + level);
+        if (level >= ComponentCallbacks2.TRIM_MEMORY_MODERATE) {
+            // Clear the caches.  Note all pending requests will be removed too.
+            clear();
+        }
+    }
+
+    @Override
+    public void preloadPhotosInBackground() {
+        ensureLoaderThread();
+        mLoaderThread.requestPreloading();
+    }
+
+    @Override
+    public void loadThumbnail(ImageView view, long photoId, boolean darkTheme, boolean isCircular,
+            DefaultImageRequest defaultImageRequest, DefaultImageProvider defaultProvider) {
+        if (photoId == 0) {
+            // No photo is needed
+            defaultProvider.applyDefaultImage(view, -1, darkTheme, defaultImageRequest);
+            mPendingRequests.remove(view);
+        } else {
+            if (DEBUG) Log.d(TAG, "loadPhoto request: " + photoId);
+            loadPhotoByIdOrUri(view, Request.createFromThumbnailId(photoId, darkTheme, isCircular,
+                    defaultProvider, defaultImageRequest));
+        }
+    }
+
+    @Override
+    public void loadPhoto(ImageView view, Uri photoUri, int requestedExtent, boolean darkTheme,
+            boolean isCircular, DefaultImageRequest defaultImageRequest,
+            DefaultImageProvider defaultProvider) {
+        if (photoUri == null) {
+            // No photo is needed
+            defaultProvider.applyDefaultImage(view, requestedExtent, darkTheme,
+                    defaultImageRequest);
+            mPendingRequests.remove(view);
+        } else {
+            if (DEBUG) Log.d(TAG, "loadPhoto request: " + photoUri);
+            if (isDefaultImageUri(photoUri)) {
+                createAndApplyDefaultImageForUri(view, photoUri, requestedExtent, darkTheme,
+                        isCircular, defaultProvider);
+            } else {
+                loadPhotoByIdOrUri(view, Request.createFromUri(photoUri, requestedExtent,
+                        darkTheme, isCircular, defaultProvider, defaultImageRequest));
+            }
+        }
+    }
+
+    private void createAndApplyDefaultImageForUri(ImageView view, Uri uri, int requestedExtent,
+            boolean darkTheme, boolean isCircular, DefaultImageProvider defaultProvider) {
+        DefaultImageRequest request = getDefaultImageRequestFromUri(uri);
+        request.isCircular = isCircular;
+        defaultProvider.applyDefaultImage(view, requestedExtent, darkTheme, request);
+    }
+
+    private void loadPhotoByIdOrUri(ImageView view, Request request) {
+        boolean loaded = loadCachedPhoto(view, request, false);
+        if (loaded) {
+            mPendingRequests.remove(view);
+        } else {
+            mPendingRequests.put(view, request);
+            if (!mPaused) {
+                // Send a request to start loading photos
+                requestLoading();
+            }
+        }
+    }
+
+    @Override
+    public void removePhoto(ImageView view) {
+        view.setImageDrawable(null);
+        mPendingRequests.remove(view);
+    }
+
+
+    /**
+     * Cancels pending requests to load photos asynchronously for views inside
+     * {@param fragmentRootView}. If {@param fragmentRootView} is null, cancels all requests.
+     */
+    @Override
+    public void cancelPendingRequests(View fragmentRootView) {
+        if (fragmentRootView == null) {
+            mPendingRequests.clear();
+            return;
+        }
+        final Iterator<Entry<ImageView, Request>> iterator = mPendingRequests.entrySet().iterator();
+        while (iterator.hasNext()) {
+            final ImageView imageView = iterator.next().getKey();
+            // If an ImageView is orphaned (currently scrap) or a child of fragmentRootView, then
+            // we can safely remove its request.
+            if (imageView.getParent() == null || isChildView(fragmentRootView, imageView)) {
+                iterator.remove();
+            }
+        }
+    }
+
+    private static boolean isChildView(View parent, View potentialChild) {
+        return potentialChild.getParent() != null && (potentialChild.getParent() == parent || (
+                potentialChild.getParent() instanceof ViewGroup && isChildView(parent,
+                        (ViewGroup) potentialChild.getParent())));
+    }
+
+    @Override
+    public void refreshCache() {
+        if (mBitmapHolderCacheAllUnfresh) {
+            if (DEBUG) Log.d(TAG, "refreshCache -- no fresh entries.");
+            return;
+        }
+        if (DEBUG) Log.d(TAG, "refreshCache");
+        mBitmapHolderCacheAllUnfresh = true;
+        for (BitmapHolder holder : mBitmapHolderCache.snapshot().values()) {
+            if (holder != BITMAP_UNAVAILABLE) {
+                holder.fresh = false;
+            }
+        }
+    }
+
+    /**
+     * Checks if the photo is present in cache.  If so, sets the photo on the view.
+     *
+     * @return false if the photo needs to be (re)loaded from the provider.
+     */
+    private boolean loadCachedPhoto(ImageView view, Request request, boolean fadeIn) {
+        BitmapHolder holder = mBitmapHolderCache.get(request.getKey());
+        if (holder == null) {
+            // The bitmap has not been loaded ==> show default avatar
+            request.applyDefaultImage(view, request.mIsCircular);
+            return false;
+        }
+
+        if (holder.bytes == null || holder.bytes.length == 0) {
+            request.applyDefaultImage(view, request.mIsCircular);
+            return holder.fresh;
+        }
+
+        Bitmap cachedBitmap = holder.bitmapRef == null ? null : holder.bitmapRef.get();
+        if (cachedBitmap == null) {
+            if (holder.bytes.length < 8 * 1024) {
+                // Small thumbnails are usually quick to inflate. Let's do that on the UI thread
+                inflateBitmap(holder, request.getRequestedExtent());
+                cachedBitmap = holder.bitmap;
+                if (cachedBitmap == null) return false;
+            } else {
+                // This is bigger data. Let's send that back to the Loader so that we can
+                // inflate this in the background
+                request.applyDefaultImage(view, request.mIsCircular);
+                return false;
+            }
+        }
+
+        final Drawable previousDrawable = view.getDrawable();
+        if (fadeIn && previousDrawable != null) {
+            final Drawable[] layers = new Drawable[2];
+            // Prevent cascade of TransitionDrawables.
+            if (previousDrawable instanceof TransitionDrawable) {
+                final TransitionDrawable previousTransitionDrawable =
+                        (TransitionDrawable) previousDrawable;
+                layers[0] = previousTransitionDrawable.getDrawable(
+                        previousTransitionDrawable.getNumberOfLayers() - 1);
+            } else {
+                layers[0] = previousDrawable;
+            }
+            layers[1] = getDrawableForBitmap(mContext.getResources(), cachedBitmap, request);
+            TransitionDrawable drawable = new TransitionDrawable(layers);
+            view.setImageDrawable(drawable);
+            drawable.startTransition(FADE_TRANSITION_DURATION);
+        } else {
+            view.setImageDrawable(
+                    getDrawableForBitmap(mContext.getResources(), cachedBitmap, request));
+        }
+
+        // Put the bitmap in the LRU cache. But only do this for images that are small enough
+        // (we require that at least six of those can be cached at the same time)
+        if (cachedBitmap.getByteCount() < mBitmapCache.maxSize() / 6) {
+            mBitmapCache.put(request.getKey(), cachedBitmap);
+        }
+
+        // Soften the reference
+        holder.bitmap = null;
+
+        return holder.fresh;
+    }
+
+    /**
+     * Given a bitmap, returns a drawable that is configured to display the bitmap based on the
+     * specified request.
+     */
+    private Drawable getDrawableForBitmap(Resources resources, Bitmap bitmap, Request request) {
+        if (request.mIsCircular) {
+            final RoundedBitmapDrawable drawable =
+                    RoundedBitmapDrawableFactory.create(resources, bitmap);
+            drawable.setAntiAlias(true);
+            drawable.setCornerRadius(bitmap.getHeight() / 2);
+            return drawable;
+        } else {
+            return new BitmapDrawable(resources, bitmap);
+        }
+    }
+
+    /**
+     * If necessary, decodes bytes stored in the holder to Bitmap.  As long as the
+     * bitmap is held either by {@link #mBitmapCache} or by a soft reference in
+     * the holder, it will not be necessary to decode the bitmap.
+     */
+    private static void inflateBitmap(BitmapHolder holder, int requestedExtent) {
+        final int sampleSize =
+                BitmapUtil.findOptimalSampleSize(holder.originalSmallerExtent, requestedExtent);
+        byte[] bytes = holder.bytes;
+        if (bytes == null || bytes.length == 0) {
+            return;
+        }
+
+        if (sampleSize == holder.decodedSampleSize) {
+            // Check the soft reference.  If will be retained if the bitmap is also
+            // in the LRU cache, so we don't need to check the LRU cache explicitly.
+            if (holder.bitmapRef != null) {
+                holder.bitmap = holder.bitmapRef.get();
+                if (holder.bitmap != null) {
+                    return;
+                }
+            }
+        }
+
+        try {
+            Bitmap bitmap = BitmapUtil.decodeBitmapFromBytes(bytes, sampleSize);
+
+            // TODO: As a temporary workaround while framework support is being added to
+            // clip non-square bitmaps into a perfect circle, manually crop the bitmap into
+            // into a square if it will be displayed as a thumbnail so that it can be cropped
+            // into a circle.
+            final int height = bitmap.getHeight();
+            final int width = bitmap.getWidth();
+
+            // The smaller dimension of a scaled bitmap can range from anywhere from 0 to just
+            // below twice the length of a thumbnail image due to the way we calculate the optimal
+            // sample size.
+            if (height != width && Math.min(height, width) <= mThumbnailSize * 2) {
+                final int dimension = Math.min(height, width);
+                bitmap = ThumbnailUtils.extractThumbnail(bitmap, dimension, dimension);
+            }
+            // make bitmap mutable and draw size onto it
+            if (DEBUG_SIZES) {
+                Bitmap original = bitmap;
+                bitmap = bitmap.copy(bitmap.getConfig(), true);
+                original.recycle();
+                Canvas canvas = new Canvas(bitmap);
+                Paint paint = new Paint();
+                paint.setTextSize(16);
+                paint.setColor(Color.BLUE);
+                paint.setStyle(Style.FILL);
+                canvas.drawRect(0.0f, 0.0f, 50.0f, 20.0f, paint);
+                paint.setColor(Color.WHITE);
+                paint.setAntiAlias(true);
+                canvas.drawText(bitmap.getWidth() + "/" + sampleSize, 0, 15, paint);
+            }
+
+            holder.decodedSampleSize = sampleSize;
+            holder.bitmap = bitmap;
+            holder.bitmapRef = new SoftReference<Bitmap>(bitmap);
+            if (DEBUG) {
+                Log.d(TAG, "inflateBitmap " + btk(bytes.length) + " -> "
+                        + bitmap.getWidth() + "x" + bitmap.getHeight()
+                        + ", " + btk(bitmap.getByteCount()));
+            }
+        } catch (OutOfMemoryError e) {
+            // Do nothing - the photo will appear to be missing
+        }
+    }
+
+    public void clear() {
+        if (DEBUG) Log.d(TAG, "clear");
+        mPendingRequests.clear();
+        mBitmapHolderCache.evictAll();
+        mBitmapCache.evictAll();
+    }
+
+    @Override
+    public void pause() {
+        mPaused = true;
+    }
+
+    @Override
+    public void resume() {
+        mPaused = false;
+        if (DEBUG) dumpStats();
+        if (!mPendingRequests.isEmpty()) {
+            requestLoading();
+        }
+    }
+
+    /**
+     * Sends a message to this thread itself to start loading images.  If the current
+     * view contains multiple image views, all of those image views will get a chance
+     * to request their respective photos before any of those requests are executed.
+     * This allows us to load images in bulk.
+     */
+    private void requestLoading() {
+        if (!mLoadingRequested) {
+            mLoadingRequested = true;
+            mMainThreadHandler.sendEmptyMessage(MESSAGE_REQUEST_LOADING);
+        }
+    }
+
+    /**
+     * Processes requests on the main thread.
+     */
+    @Override
+    public boolean handleMessage(Message msg) {
+        switch (msg.what) {
+            case MESSAGE_REQUEST_LOADING: {
+                mLoadingRequested = false;
+                if (!mPaused) {
+                    ensureLoaderThread();
+                    mLoaderThread.requestLoading();
+                }
+                return true;
+            }
+
+            case MESSAGE_PHOTOS_LOADED: {
+                if (!mPaused) {
+                    processLoadedImages();
+                }
+                if (DEBUG) dumpStats();
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public void ensureLoaderThread() {
+        if (mLoaderThread == null) {
+            mLoaderThread = new LoaderThread(mContext.getContentResolver());
+            mLoaderThread.start();
+        }
+    }
+
+    /**
+     * Goes over pending loading requests and displays loaded photos.  If some of the
+     * photos still haven't been loaded, sends another request for image loading.
+     */
+    private void processLoadedImages() {
+        final Iterator<Entry<ImageView, Request>> iterator = mPendingRequests.entrySet().iterator();
+        while (iterator.hasNext()) {
+            final Entry<ImageView, Request> entry = iterator.next();
+            // TODO: Temporarily disable contact photo fading in, until issues with
+            // RoundedBitmapDrawables overlapping the default image drawables are resolved.
+            final boolean loaded = loadCachedPhoto(entry.getKey(), entry.getValue(), false);
+            if (loaded) {
+                iterator.remove();
+            }
+        }
+
+        softenCache();
+
+        if (!mPendingRequests.isEmpty()) {
+            requestLoading();
+        }
+    }
+
+    /**
+     * Removes strong references to loaded bitmaps to allow them to be garbage collected
+     * if needed.  Some of the bitmaps will still be retained by {@link #mBitmapCache}.
+     */
+    private void softenCache() {
+        for (BitmapHolder holder : mBitmapHolderCache.snapshot().values()) {
+            holder.bitmap = null;
+        }
+    }
+
+    /**
+     * Stores the supplied bitmap in cache.
+     * bytes should be null to indicate a failure to load the photo. An empty byte[] signifies
+     * a successful load but no photo was available.
+     */
+    private void cacheBitmap(Object key, byte[] bytes, boolean preloading, int requestedExtent) {
+        if (DEBUG) {
+            BitmapHolder prev = mBitmapHolderCache.get(key);
+            if (prev != null && prev.bytes != null) {
+                Log.d(TAG, "Overwriting cache: key=" + key + (prev.fresh ? " FRESH" : " stale"));
+                if (prev.fresh) {
+                    mFreshCacheOverwrite.incrementAndGet();
+                } else {
+                    mStaleCacheOverwrite.incrementAndGet();
+                }
+            }
+            Log.d(TAG, "Caching data: key=" + key + ", " +
+                    (bytes == null ? "<null>" : btk(bytes.length)));
+        }
+        BitmapHolder holder = new BitmapHolder(bytes,
+                bytes == null ? -1 : BitmapUtil.getSmallerExtentFromBytes(bytes));
+
+        // Unless this image is being preloaded, decode it right away while
+        // we are still on the background thread.
+        if (!preloading) {
+            inflateBitmap(holder, requestedExtent);
+        }
+
+        if (bytes != null) {
+            mBitmapHolderCache.put(key, holder);
+            if (mBitmapHolderCache.get(key) != holder) {
+                Log.w(TAG, "Bitmap too big to fit in cache.");
+                mBitmapHolderCache.put(key, BITMAP_UNAVAILABLE);
+            }
+        } else {
+            mBitmapHolderCache.put(key, BITMAP_UNAVAILABLE);
+        }
+
+        mBitmapHolderCacheAllUnfresh = false;
+    }
+
+    @Override
+    public void cacheBitmap(Uri photoUri, Bitmap bitmap, byte[] photoBytes) {
+        final int smallerExtent = Math.min(bitmap.getWidth(), bitmap.getHeight());
+        // We can pretend here that the extent of the photo was the size that we originally
+        // requested
+        Request request = Request.createFromUri(photoUri, smallerExtent, false /* darkTheme */,
+                false /* isCircular */ , DEFAULT_AVATAR);
+        BitmapHolder holder = new BitmapHolder(photoBytes, smallerExtent);
+        holder.bitmapRef = new SoftReference<Bitmap>(bitmap);
+        mBitmapHolderCache.put(request.getKey(), holder);
+        mBitmapHolderCacheAllUnfresh = false;
+        mBitmapCache.put(request.getKey(), bitmap);
+    }
+
+    /**
+     * Populates an array of photo IDs that need to be loaded. Also decodes bitmaps that we have
+     * already loaded
+     */
+    private void obtainPhotoIdsAndUrisToLoad(Set<Long> photoIds,
+            Set<String> photoIdsAsStrings, Set<Request> uris) {
+        photoIds.clear();
+        photoIdsAsStrings.clear();
+        uris.clear();
+
+        boolean jpegsDecoded = false;
+
+        /*
+         * Since the call is made from the loader thread, the map could be
+         * changing during the iteration. That's not really a problem:
+         * ConcurrentHashMap will allow those changes to happen without throwing
+         * exceptions. Since we may miss some requests in the situation of
+         * concurrent change, we will need to check the map again once loading
+         * is complete.
+         */
+        Iterator<Request> iterator = mPendingRequests.values().iterator();
+        while (iterator.hasNext()) {
+            Request request = iterator.next();
+            final BitmapHolder holder = mBitmapHolderCache.get(request.getKey());
+            if (holder == BITMAP_UNAVAILABLE) {
+                continue;
+            }
+            if (holder != null && holder.bytes != null && holder.fresh &&
+                    (holder.bitmapRef == null || holder.bitmapRef.get() == null)) {
+                // This was previously loaded but we don't currently have the inflated Bitmap
+                inflateBitmap(holder, request.getRequestedExtent());
+                jpegsDecoded = true;
+            } else {
+                if (holder == null || !holder.fresh) {
+                    if (request.isUriRequest()) {
+                        uris.add(request);
+                    } else {
+                        photoIds.add(request.getId());
+                        photoIdsAsStrings.add(String.valueOf(request.mId));
+                    }
+                }
+            }
+        }
+
+        if (jpegsDecoded) mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
+    }
+
+    /**
+     * The thread that performs loading of photos from the database.
+     */
+    private class LoaderThread extends HandlerThread implements Callback {
+        private static final int BUFFER_SIZE = 1024*16;
+        private static final int MESSAGE_PRELOAD_PHOTOS = 0;
+        private static final int MESSAGE_LOAD_PHOTOS = 1;
+
+        /**
+         * A pause between preload batches that yields to the UI thread.
+         */
+        private static final int PHOTO_PRELOAD_DELAY = 1000;
+
+        /**
+         * Number of photos to preload per batch.
+         */
+        private static final int PRELOAD_BATCH = 25;
+
+        /**
+         * Maximum number of photos to preload.  If the cache size is 2Mb and
+         * the expected average size of a photo is 4kb, then this number should be 2Mb/4kb = 500.
+         */
+        private static final int MAX_PHOTOS_TO_PRELOAD = 100;
+
+        private final ContentResolver mResolver;
+        private final StringBuilder mStringBuilder = new StringBuilder();
+        private final Set<Long> mPhotoIds = Sets.newHashSet();
+        private final Set<String> mPhotoIdsAsStrings = Sets.newHashSet();
+        private final Set<Request> mPhotoUris = Sets.newHashSet();
+        private final List<Long> mPreloadPhotoIds = Lists.newArrayList();
+
+        private Handler mLoaderThreadHandler;
+        private byte mBuffer[];
+
+        private static final int PRELOAD_STATUS_NOT_STARTED = 0;
+        private static final int PRELOAD_STATUS_IN_PROGRESS = 1;
+        private static final int PRELOAD_STATUS_DONE = 2;
+
+        private int mPreloadStatus = PRELOAD_STATUS_NOT_STARTED;
+
+        public LoaderThread(ContentResolver resolver) {
+            super(LOADER_THREAD_NAME);
+            mResolver = resolver;
+        }
+
+        public void ensureHandler() {
+            if (mLoaderThreadHandler == null) {
+                mLoaderThreadHandler = new Handler(getLooper(), this);
+            }
+        }
+
+        /**
+         * Kicks off preloading of the next batch of photos on the background thread.
+         * Preloading will happen after a delay: we want to yield to the UI thread
+         * as much as possible.
+         * <p>
+         * If preloading is already complete, does nothing.
+         */
+        public void requestPreloading() {
+            if (mPreloadStatus == PRELOAD_STATUS_DONE) {
+                return;
+            }
+
+            ensureHandler();
+            if (mLoaderThreadHandler.hasMessages(MESSAGE_LOAD_PHOTOS)) {
+                return;
+            }
+
+            mLoaderThreadHandler.sendEmptyMessageDelayed(
+                    MESSAGE_PRELOAD_PHOTOS, PHOTO_PRELOAD_DELAY);
+        }
+
+        /**
+         * Sends a message to this thread to load requested photos.  Cancels a preloading
+         * request, if any: we don't want preloading to impede loading of the photos
+         * we need to display now.
+         */
+        public void requestLoading() {
+            ensureHandler();
+            mLoaderThreadHandler.removeMessages(MESSAGE_PRELOAD_PHOTOS);
+            mLoaderThreadHandler.sendEmptyMessage(MESSAGE_LOAD_PHOTOS);
+        }
+
+        /**
+         * Receives the above message, loads photos and then sends a message
+         * to the main thread to process them.
+         */
+        @Override
+        public boolean handleMessage(Message msg) {
+            switch (msg.what) {
+                case MESSAGE_PRELOAD_PHOTOS:
+                    preloadPhotosInBackground();
+                    break;
+                case MESSAGE_LOAD_PHOTOS:
+                    loadPhotosInBackground();
+                    break;
+            }
+            return true;
+        }
+
+        /**
+         * The first time it is called, figures out which photos need to be preloaded.
+         * Each subsequent call preloads the next batch of photos and requests
+         * another cycle of preloading after a delay.  The whole process ends when
+         * we either run out of photos to preload or fill up cache.
+         */
+        private void preloadPhotosInBackground() {
+            if (mPreloadStatus == PRELOAD_STATUS_DONE) {
+                return;
+            }
+
+            if (mPreloadStatus == PRELOAD_STATUS_NOT_STARTED) {
+                queryPhotosForPreload();
+                if (mPreloadPhotoIds.isEmpty()) {
+                    mPreloadStatus = PRELOAD_STATUS_DONE;
+                } else {
+                    mPreloadStatus = PRELOAD_STATUS_IN_PROGRESS;
+                }
+                requestPreloading();
+                return;
+            }
+
+            if (mBitmapHolderCache.size() > mBitmapHolderCacheRedZoneBytes) {
+                mPreloadStatus = PRELOAD_STATUS_DONE;
+                return;
+            }
+
+            mPhotoIds.clear();
+            mPhotoIdsAsStrings.clear();
+
+            int count = 0;
+            int preloadSize = mPreloadPhotoIds.size();
+            while(preloadSize > 0 && mPhotoIds.size() < PRELOAD_BATCH) {
+                preloadSize--;
+                count++;
+                Long photoId = mPreloadPhotoIds.get(preloadSize);
+                mPhotoIds.add(photoId);
+                mPhotoIdsAsStrings.add(photoId.toString());
+                mPreloadPhotoIds.remove(preloadSize);
+            }
+
+            loadThumbnails(true);
+
+            if (preloadSize == 0) {
+                mPreloadStatus = PRELOAD_STATUS_DONE;
+            }
+
+            Log.v(TAG, "Preloaded " + count + " photos.  Cached bytes: "
+                    + mBitmapHolderCache.size());
+
+            requestPreloading();
+        }
+
+        private void queryPhotosForPreload() {
+            Cursor cursor = null;
+            try {
+                Uri uri = Contacts.CONTENT_URI.buildUpon().appendQueryParameter(
+                        ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
+                        .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
+                                String.valueOf(MAX_PHOTOS_TO_PRELOAD))
+                        .build();
+                cursor = mResolver.query(uri, new String[] { Contacts.PHOTO_ID },
+                        Contacts.PHOTO_ID + " NOT NULL AND " + Contacts.PHOTO_ID + "!=0",
+                        null,
+                        Contacts.STARRED + " DESC, " + Contacts.LAST_TIME_CONTACTED + " DESC");
+
+                if (cursor != null) {
+                    while (cursor.moveToNext()) {
+                        // Insert them in reverse order, because we will be taking
+                        // them from the end of the list for loading.
+                        mPreloadPhotoIds.add(0, cursor.getLong(0));
+                    }
+                }
+            } finally {
+                if (cursor != null) {
+                    cursor.close();
+                }
+            }
+        }
+
+        private void loadPhotosInBackground() {
+            if (!PermissionsUtil.hasPermission(mContext,
+                    android.Manifest.permission.READ_CONTACTS)) {
+                return;
+            }
+            obtainPhotoIdsAndUrisToLoad(mPhotoIds, mPhotoIdsAsStrings, mPhotoUris);
+            loadThumbnails(false);
+            loadUriBasedPhotos();
+            requestPreloading();
+        }
+
+        /** Loads thumbnail photos with ids */
+        private void loadThumbnails(boolean preloading) {
+            if (mPhotoIds.isEmpty()) {
+                return;
+            }
+
+            // Remove loaded photos from the preload queue: we don't want
+            // the preloading process to load them again.
+            if (!preloading && mPreloadStatus == PRELOAD_STATUS_IN_PROGRESS) {
+                for (Long id : mPhotoIds) {
+                    mPreloadPhotoIds.remove(id);
+                }
+                if (mPreloadPhotoIds.isEmpty()) {
+                    mPreloadStatus = PRELOAD_STATUS_DONE;
+                }
+            }
+
+            mStringBuilder.setLength(0);
+            mStringBuilder.append(Photo._ID + " IN(");
+            for (int i = 0; i < mPhotoIds.size(); i++) {
+                if (i != 0) {
+                    mStringBuilder.append(',');
+                }
+                mStringBuilder.append('?');
+            }
+            mStringBuilder.append(')');
+
+            Cursor cursor = null;
+            try {
+                if (DEBUG) Log.d(TAG, "Loading " + TextUtils.join(",", mPhotoIdsAsStrings));
+                cursor = mResolver.query(Data.CONTENT_URI,
+                        COLUMNS,
+                        mStringBuilder.toString(),
+                        mPhotoIdsAsStrings.toArray(EMPTY_STRING_ARRAY),
+                        null);
+
+                if (cursor != null) {
+                    while (cursor.moveToNext()) {
+                        Long id = cursor.getLong(0);
+                        byte[] bytes = cursor.getBlob(1);
+                        if (bytes == null) {
+                            bytes = new byte[0];
+                        }
+                        cacheBitmap(id, bytes, preloading, -1);
+                        mPhotoIds.remove(id);
+                    }
+                }
+            } finally {
+                if (cursor != null) {
+                    cursor.close();
+                }
+            }
+
+            // Remaining photos were not found in the contacts database (but might be in profile).
+            for (Long id : mPhotoIds) {
+                if (ContactsContract.isProfileId(id)) {
+                    Cursor profileCursor = null;
+                    try {
+                        profileCursor = mResolver.query(
+                                ContentUris.withAppendedId(Data.CONTENT_URI, id),
+                                COLUMNS, null, null, null);
+                        if (profileCursor != null && profileCursor.moveToFirst()) {
+                            byte[] bytes = profileCursor.getBlob(1);
+                            if (bytes == null) {
+                                bytes = new byte[0];
+                            }
+                            cacheBitmap(profileCursor.getLong(0), bytes, preloading, -1);
+                        } else {
+                            // Couldn't load a photo this way either.
+                            cacheBitmap(id, null, preloading, -1);
+                        }
+                    } finally {
+                        if (profileCursor != null) {
+                            profileCursor.close();
+                        }
+                    }
+                } else {
+                    // Not a profile photo and not found - mark the cache accordingly
+                    cacheBitmap(id, null, preloading, -1);
+                }
+            }
+
+            mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
+        }
+
+        /**
+         * Loads photos referenced with Uris. Those can be remote thumbnails
+         * (from directory searches), display photos etc
+         */
+        private void loadUriBasedPhotos() {
+            for (Request uriRequest : mPhotoUris) {
+                // Keep the original URI and use this to key into the cache.  Failure to do so will
+                // result in an image being continually reloaded into cache if the original URI
+                // has a contact type encodedFragment (eg nearby places business photo URLs).
+                Uri originalUri = uriRequest.getUri();
+
+                // Strip off the "contact type" we added to the URI to ensure it was identifiable as
+                // a business photo -- there is no need to pass this on to the server.
+                Uri uri = ContactPhotoManager.removeContactType(originalUri);
+
+                if (mBuffer == null) {
+                    mBuffer = new byte[BUFFER_SIZE];
+                }
+                try {
+                    if (DEBUG) Log.d(TAG, "Loading " + uri);
+                    final String scheme = uri.getScheme();
+                    InputStream is = null;
+                    if (scheme.equals("http") || scheme.equals("https")) {
+                        TrafficStats.setThreadStatsTag(TrafficStatsTags.CONTACT_PHOTO_DOWNLOAD_TAG);
+                        final HttpURLConnection connection =
+                                (HttpURLConnection) new URL(uri.toString()).openConnection();
+
+                        // Include the user agent if it is specified.
+                        if (!TextUtils.isEmpty(mUserAgent)) {
+                            connection.setRequestProperty("User-Agent", mUserAgent);
+                        }
+                        try {
+                            is = connection.getInputStream();
+                        } catch (IOException e) {
+                            connection.disconnect();
+                            is = null;
+                        }
+                        TrafficStats.clearThreadStatsTag();
+                    } else {
+                        is = mResolver.openInputStream(uri);
+                    }
+                    if (is != null) {
+                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                        try {
+                            int size;
+                            while ((size = is.read(mBuffer)) != -1) {
+                                baos.write(mBuffer, 0, size);
+                            }
+                        } finally {
+                            is.close();
+                        }
+                        cacheBitmap(originalUri, baos.toByteArray(), false,
+                                uriRequest.getRequestedExtent());
+                        mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
+                    } else {
+                        Log.v(TAG, "Cannot load photo " + uri);
+                        cacheBitmap(originalUri, null, false, uriRequest.getRequestedExtent());
+                    }
+                } catch (final Exception | OutOfMemoryError ex) {
+                    Log.v(TAG, "Cannot load photo " + uri, ex);
+                    cacheBitmap(originalUri, null, false, uriRequest.getRequestedExtent());
+                }
+            }
+        }
+    }
+
+    /**
+     * A holder for either a Uri or an id and a flag whether this was requested for the dark or
+     * light theme
+     */
+    private static final class Request {
+        private final long mId;
+        private final Uri mUri;
+        private final boolean mDarkTheme;
+        private final int mRequestedExtent;
+        private final DefaultImageProvider mDefaultProvider;
+        private final DefaultImageRequest mDefaultRequest;
+        /**
+         * Whether or not the contact photo is to be displayed as a circle
+         */
+        private final boolean mIsCircular;
+
+        private Request(long id, Uri uri, int requestedExtent, boolean darkTheme,
+                boolean isCircular, DefaultImageProvider defaultProvider,
+                DefaultImageRequest defaultRequest) {
+            mId = id;
+            mUri = uri;
+            mDarkTheme = darkTheme;
+            mIsCircular = isCircular;
+            mRequestedExtent = requestedExtent;
+            mDefaultProvider = defaultProvider;
+            mDefaultRequest = defaultRequest;
+        }
+
+        public static Request createFromThumbnailId(long id, boolean darkTheme, boolean isCircular,
+                DefaultImageProvider defaultProvider, DefaultImageRequest defaultRequest) {
+            return new Request(id, null /* no URI */, -1, darkTheme, isCircular, defaultProvider,
+                    defaultRequest);
+        }
+
+        public static Request createFromUri(Uri uri, int requestedExtent, boolean darkTheme,
+                boolean isCircular, DefaultImageProvider defaultProvider) {
+            return createFromUri(uri, requestedExtent, darkTheme, isCircular, defaultProvider,
+                    /* defaultRequest */ null);
+        }
+
+        public static Request createFromUri(Uri uri, int requestedExtent, boolean darkTheme,
+                boolean isCircular, DefaultImageProvider defaultProvider,
+                DefaultImageRequest defaultRequest) {
+            return new Request(0 /* no ID */, uri, requestedExtent, darkTheme, isCircular,
+                    defaultProvider, defaultRequest);
+        }
+
+        public boolean isUriRequest() {
+            return mUri != null;
+        }
+
+        public Uri getUri() {
+            return mUri;
+        }
+
+        public long getId() {
+            return mId;
+        }
+
+        public int getRequestedExtent() {
+            return mRequestedExtent;
+        }
+
+        @Override
+        public int hashCode() {
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + (int) (mId ^ (mId >>> 32));
+            result = prime * result + mRequestedExtent;
+            result = prime * result + ((mUri == null) ? 0 : mUri.hashCode());
+            return result;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) return true;
+            if (obj == null) return false;
+            if (getClass() != obj.getClass()) return false;
+            final Request that = (Request) obj;
+            if (mId != that.mId) return false;
+            if (mRequestedExtent != that.mRequestedExtent) return false;
+            if (!UriUtils.areEqual(mUri, that.mUri)) return false;
+            // Don't compare equality of mDarkTheme because it is only used in the default contact
+            // photo case. When the contact does have a photo, the contact photo is the same
+            // regardless of mDarkTheme, so we shouldn't need to put the photo request on the queue
+            // twice.
+            return true;
+        }
+
+        public Object getKey() {
+            return mUri == null ? mId : mUri;
+        }
+
+        /**
+         * Applies the default image to the current view. If the request is URI-based, looks for
+         * the contact type encoded fragment to determine if this is a request for a business photo,
+         * in which case we will load the default business photo.
+         *
+         * @param view The current image view to apply the image to.
+         * @param isCircular Whether the image is circular or not.
+         */
+        public void applyDefaultImage(ImageView view, boolean isCircular) {
+            final DefaultImageRequest request;
+
+            if (mDefaultRequest == null) {
+                if (isCircular) {
+                    request = ContactPhotoManager.isBusinessContactUri(mUri)
+                            ? DefaultImageRequest.EMPTY_CIRCULAR_BUSINESS_IMAGE_REQUEST
+                            : DefaultImageRequest.EMPTY_CIRCULAR_DEFAULT_IMAGE_REQUEST;
+                } else {
+                    request = ContactPhotoManager.isBusinessContactUri(mUri)
+                            ? DefaultImageRequest.EMPTY_DEFAULT_BUSINESS_IMAGE_REQUEST
+                            : DefaultImageRequest.EMPTY_DEFAULT_IMAGE_REQUEST;
+                }
+            } else {
+                request = mDefaultRequest;
+            }
+            mDefaultProvider.applyDefaultImage(view, mRequestedExtent, mDarkTheme, request);
+        }
+    }
+}
diff --git a/src/com/android/contacts/ContactPresenceIconUtil.java b/src/com/android/contacts/ContactPresenceIconUtil.java
new file mode 100644
index 0000000..0cb5b93
--- /dev/null
+++ b/src/com/android/contacts/ContactPresenceIconUtil.java
@@ -0,0 +1,48 @@
+/*
+ * 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.content.Context;
+import android.graphics.drawable.Drawable;
+import android.provider.ContactsContract.StatusUpdates;
+
+/**
+ * Define the contact present show policy in Contacts
+ */
+public class ContactPresenceIconUtil {
+    /**
+     * Get the presence icon resource according the status.
+     *
+     * @return null means don't show the status icon.
+     */
+    public static Drawable getPresenceIcon (Context context, int status) {
+        // We don't show the offline status in Contacts
+        switch(status) {
+            case StatusUpdates.AVAILABLE:
+            case StatusUpdates.IDLE:
+            case StatusUpdates.AWAY:
+            case StatusUpdates.DO_NOT_DISTURB:
+            case StatusUpdates.INVISIBLE:
+                return context.getResources().getDrawable(
+                        StatusUpdates.getPresenceIconResourceId(status));
+            case StatusUpdates.OFFLINE:
+            // The undefined status is treated as OFFLINE in getPresenceIconResourceId();
+            default:
+                return null;
+        }
+    }
+}
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index 6c44a42..e05f7c6 100755
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -49,28 +49,25 @@
 import android.provider.ContactsContract.RawContactsEntity;
 import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.os.ResultReceiver;
-import android.telephony.SubscriptionInfo;
 import android.text.TextUtils;
 import android.util.Log;
 import android.widget.Toast;
 
 import com.android.contacts.activities.ContactEditorActivity;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.database.ContactUpdateUtils;
-import com.android.contacts.common.database.SimContactDao;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.CPOWrapper;
-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.SimCard;
-import com.android.contacts.common.model.SimContact;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.common.util.ContactDisplayUtils;
-import com.android.contacts.common.util.PermissionsUtil;
+import com.android.contacts.compat.CompatUtils;
 import com.android.contacts.compat.PinnedPositionsCompat;
+import com.android.contacts.database.ContactUpdateUtils;
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.CPOWrapper;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.ContactDisplayUtils;
 import com.android.contacts.util.ContactPhotoUtils;
+import com.android.contacts.util.PermissionsUtil;
 import com.android.contactsbind.FeedbackHelper;
 
 import com.google.common.collect.Lists;
@@ -149,16 +146,11 @@
     public static final String EXTRA_UNDO_ACTION = "undoAction";
     public static final String EXTRA_UNDO_DATA = "undoData";
 
-    public static final String ACTION_IMPORT_FROM_SIM = "importFromSim";
-    public static final String EXTRA_SIM_CONTACTS = "simContacts";
-    public static final String EXTRA_SIM_SUBSCRIPTION_ID = "simSubscriptionId";
-
     // For debugging and testing what happens when requests are queued up.
     public static final String ACTION_SLEEP = "sleep";
     public static final String EXTRA_SLEEP_DURATION = "sleepDuration";
 
     public static final String BROADCAST_GROUP_DELETED = "groupDeleted";
-    public static final String BROADCAST_SIM_IMPORT_COMPLETE = "simImportComplete";
     public static final String BROADCAST_LINK_COMPLETE = "linkComplete";
     public static final String BROADCAST_UNLINK_COMPLETE = "unlinkComplete";
 
@@ -166,7 +158,6 @@
 
     public static final String EXTRA_RESULT_CODE = "resultCode";
     public static final String EXTRA_RESULT_COUNT = "count";
-    public static final String EXTRA_OPERATION_REQUESTED_AT_TIME = "requestedTime";
 
     public static final int CP2_ERROR = 0;
     public static final int CONTACTS_LINKED = 1;
@@ -361,8 +352,6 @@
             setRingtone(intent);
         } else if (ACTION_UNDO.equals(action)) {
             undo(intent);
-        } else if (ACTION_IMPORT_FROM_SIM.equals(action)) {
-            importFromSim(intent);
         } else if (ACTION_SLEEP.equals(action)) {
             sleepForDebugging(intent);
         }
@@ -1752,58 +1741,6 @@
     }
 
     /**
-     * Returns an intent that can be used to import the contacts into targetAccount.
-     *
-     * @param context context to use for creating the intent
-     * @param subscriptionId the subscriptionId of the SIM card that is being imported. See
-     *                       {@link SubscriptionInfo#getSubscriptionId()}. Upon completion the
-     *                       SIM for that subscription ID will be marked as imported
-     * @param contacts the contacts to import
-     * @param targetAccount the account import the contacts into
-     */
-    public static Intent createImportFromSimIntent(Context context, int subscriptionId,
-            ArrayList<SimContact> contacts, AccountWithDataSet targetAccount) {
-        return new Intent(context, ContactSaveService.class)
-                .setAction(ACTION_IMPORT_FROM_SIM)
-                .putExtra(EXTRA_SIM_CONTACTS, contacts)
-                .putExtra(EXTRA_SIM_SUBSCRIPTION_ID, subscriptionId)
-                .putExtra(EXTRA_ACCOUNT, targetAccount);
-    }
-
-    private void importFromSim(Intent intent) {
-        final Intent result = new Intent(BROADCAST_SIM_IMPORT_COMPLETE)
-                .putExtra(EXTRA_OPERATION_REQUESTED_AT_TIME, System.currentTimeMillis());
-        final int subscriptionId = intent.getIntExtra(EXTRA_SIM_SUBSCRIPTION_ID,
-                SimCard.NO_SUBSCRIPTION_ID);
-        try {
-            final AccountWithDataSet targetAccount = intent.getParcelableExtra(EXTRA_ACCOUNT);
-            final ArrayList<SimContact> contacts =
-                    intent.getParcelableArrayListExtra(EXTRA_SIM_CONTACTS);
-            mSimContactDao.importContacts(contacts, targetAccount);
-
-            // Update the imported state of the SIM card that was imported
-            final SimCard sim = mSimContactDao.getSimBySubscriptionId(subscriptionId);
-            if (sim != null) {
-                mSimContactDao.persistSimState(sim.withImportedState(true));
-            }
-
-            // notify success
-            LocalBroadcastManager.getInstance(this).sendBroadcast(result
-                    .putExtra(EXTRA_RESULT_COUNT, contacts.size())
-                    .putExtra(EXTRA_RESULT_CODE, RESULT_SUCCESS)
-                    .putExtra(EXTRA_SIM_SUBSCRIPTION_ID, subscriptionId));
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, "importFromSim completed successfully");
-            }
-        } catch (RemoteException|OperationApplicationException e) {
-            FeedbackHelper.sendFeedback(this, TAG, "Failed to import contacts from SIM card", e);
-            LocalBroadcastManager.getInstance(this).sendBroadcast(result
-                    .putExtra(EXTRA_RESULT_CODE, RESULT_FAILURE)
-                    .putExtra(EXTRA_SIM_SUBSCRIPTION_ID, subscriptionId));
-        }
-    }
-
-    /**
      * Returns an intent that can start this service and cause it to sleep for the specified time.
      *
      * This exists purely for debugging and manual testing. Since this service uses a single thread
diff --git a/src/com/android/contacts/ContactStatusUtil.java b/src/com/android/contacts/ContactStatusUtil.java
new file mode 100644
index 0000000..4aa24b0
--- /dev/null
+++ b/src/com/android/contacts/ContactStatusUtil.java
@@ -0,0 +1,47 @@
+/*
+ * 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;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.provider.ContactsContract.StatusUpdates;
+
+/**
+ * Provides static function to get default contact status message.
+ */
+public class ContactStatusUtil {
+
+    private static final String TAG = "ContactStatusUtil";
+
+    public static String getStatusString(Context context, int presence) {
+        Resources resources = context.getResources();
+        switch (presence) {
+            case StatusUpdates.AVAILABLE:
+                return resources.getString(R.string.status_available);
+            case StatusUpdates.IDLE:
+            case StatusUpdates.AWAY:
+                return resources.getString(R.string.status_away);
+            case StatusUpdates.DO_NOT_DISTURB:
+                return resources.getString(R.string.status_busy);
+            case StatusUpdates.OFFLINE:
+            case StatusUpdates.INVISIBLE:
+            default:
+                return null;
+        }
+    }
+
+}
diff --git a/src/com/android/contacts/ContactTileLoaderFactory.java b/src/com/android/contacts/ContactTileLoaderFactory.java
new file mode 100644
index 0000000..566ebae
--- /dev/null
+++ b/src/com/android/contacts/ContactTileLoaderFactory.java
@@ -0,0 +1,108 @@
+/*
+ * 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;
+
+import android.content.Context;
+import android.content.CursorLoader;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Contacts;
+
+import com.google.common.annotations.VisibleForTesting;
+
+/**
+ * Used to create {@link CursorLoader}s to load different groups of
+ * {@link com.android.contacts.list.ContactTileView}.
+ */
+public final class ContactTileLoaderFactory {
+
+    public final static int CONTACT_ID = 0;
+    public final static int DISPLAY_NAME = 1;
+    public final static int STARRED = 2;
+    public final static int PHOTO_URI = 3;
+    public final static int LOOKUP_KEY = 4;
+    public final static int CONTACT_PRESENCE = 5;
+    public final static int CONTACT_STATUS = 6;
+
+    // Only used for StrequentPhoneOnlyLoader
+    public final static int PHONE_NUMBER = 5;
+    public final static int PHONE_NUMBER_TYPE = 6;
+    public final static int PHONE_NUMBER_LABEL = 7;
+    public final static int IS_DEFAULT_NUMBER = 8;
+    public final static int PINNED = 9;
+    // The _ID field returned for strequent items actually contains data._id instead of
+    // contacts._id because the query is performed on the data table. In order to obtain the
+    // contact id for strequent items, we thus have to use Phone.contact_id instead.
+    public final static int CONTACT_ID_FOR_DATA = 10;
+    public final static int DISPLAY_NAME_ALTERNATIVE = 11;
+
+    private static final String[] COLUMNS = new String[] {
+        Contacts._ID, // ..........................................0
+        Contacts.DISPLAY_NAME, // .................................1
+        Contacts.STARRED, // ......................................2
+        Contacts.PHOTO_URI, // ....................................3
+        Contacts.LOOKUP_KEY, // ...................................4
+        Contacts.CONTACT_PRESENCE, // .............................5
+        Contacts.CONTACT_STATUS, // ...............................6
+    };
+
+    /**
+     * Projection used for the {@link Contacts#CONTENT_STREQUENT_URI}
+     * query when {@link ContactsContract#STREQUENT_PHONE_ONLY} flag
+     * is set to true. The main difference is the lack of presence
+     * and status data and the addition of phone number and label.
+     */
+    @VisibleForTesting
+    public static final String[] COLUMNS_PHONE_ONLY = new String[] {
+        Contacts._ID, // ..........................................0
+        Contacts.DISPLAY_NAME_PRIMARY, // .........................1
+        Contacts.STARRED, // ......................................2
+        Contacts.PHOTO_URI, // ....................................3
+        Contacts.LOOKUP_KEY, // ...................................4
+        Phone.NUMBER, // ..........................................5
+        Phone.TYPE, // ............................................6
+        Phone.LABEL, // ...........................................7
+        Phone.IS_SUPER_PRIMARY, //.................................8
+        Contacts.PINNED, // .......................................9
+        Phone.CONTACT_ID, //.......................................10
+        Contacts.DISPLAY_NAME_ALTERNATIVE, // .....................11
+    };
+
+    private static final String STARRED_ORDER = Contacts.DISPLAY_NAME+" COLLATE NOCASE ASC";
+
+    public static CursorLoader createStrequentLoader(Context context) {
+        return new CursorLoader(context, Contacts.CONTENT_STREQUENT_URI, COLUMNS, null, null,
+                STARRED_ORDER);
+    }
+
+    public static CursorLoader createStrequentPhoneOnlyLoader(Context context) {
+        Uri uri = Contacts.CONTENT_STREQUENT_URI.buildUpon()
+                .appendQueryParameter(ContactsContract.STREQUENT_PHONE_ONLY, "true").build();
+
+        return new CursorLoader(context, uri, COLUMNS_PHONE_ONLY, null, null, null);
+    }
+
+    public static CursorLoader createStarredLoader(Context context) {
+        return new CursorLoader(context, Contacts.CONTENT_URI, COLUMNS, Contacts.STARRED + "=?",
+                new String[]{"1"},  STARRED_ORDER);
+    }
+
+    public static CursorLoader createFrequentLoader(Context context) {
+        return new CursorLoader(context, Contacts.CONTENT_FREQUENT_URI, COLUMNS,
+                 Contacts.STARRED + "=?", new String[]{"0"}, null);
+    }
+}
diff --git a/src/com/android/contacts/ContactsActivity.java b/src/com/android/contacts/ContactsActivity.java
index 82d1f98..87c0d62 100644
--- a/src/com/android/contacts/ContactsActivity.java
+++ b/src/com/android/contacts/ContactsActivity.java
@@ -25,8 +25,8 @@
 import android.os.Bundle;
 import android.view.View;
 
-import com.android.contacts.common.activity.TransactionSafeActivity;
-import com.android.contacts.common.testing.InjectedServices;
+import com.android.contacts.activities.TransactionSafeActivity;
+import com.android.contacts.testing.InjectedServices;
 
 /**
  * A common superclass for Contacts activities that handles application-wide services.
diff --git a/src/com/android/contacts/ContactsApplication.java b/src/com/android/contacts/ContactsApplication.java
index 6fa9df1..1507ace 100644
--- a/src/com/android/contacts/ContactsApplication.java
+++ b/src/com/android/contacts/ContactsApplication.java
@@ -29,8 +29,8 @@
 import android.provider.ContactsContract.Contacts;
 import android.util.Log;
 
-import com.android.contacts.common.testing.InjectedServices;
-import com.android.contacts.common.util.Constants;
+import com.android.contacts.testing.InjectedServices;
+import com.android.contacts.util.Constants;
 import com.android.contactsbind.analytics.AnalyticsUtil;
 
 import com.google.common.annotations.VisibleForTesting;
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index b6dbe9d..f0bc37e 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -47,21 +47,7 @@
 import android.widget.Toast;
 
 import com.android.contacts.activities.ActionBarAdapter;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.list.AccountFilterActivity;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.ContactListFilterController;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.preference.ContactsPreferenceActivity;
-import com.android.contacts.common.util.AccountFilterUtil;
-import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.util.MaterialColorMapUtils;
-import com.android.contacts.common.util.ViewUtil;
+import com.android.contacts.compat.CompatUtils;
 import com.android.contacts.editor.ContactEditorFragment;
 import com.android.contacts.editor.SelectAccountDialogFragment;
 import com.android.contacts.group.GroupListItem;
@@ -73,9 +59,22 @@
 import com.android.contacts.group.GroupsFragment.GroupsListener;
 import com.android.contacts.interactions.AccountFiltersFragment;
 import com.android.contacts.interactions.AccountFiltersFragment.AccountFiltersListener;
+import com.android.contacts.list.AccountFilterActivity;
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.list.ContactListFilterController;
 import com.android.contacts.list.DefaultContactBrowseListFragment;
 import com.android.contacts.list.MultiSelectContactsListFragment;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferenceActivity;
+import com.android.contacts.util.AccountFilterUtil;
+import com.android.contacts.util.AccountsListAdapter.AccountListFilter;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.MaterialColorMapUtils;
 import com.android.contacts.util.SharedPreferenceUtil;
+import com.android.contacts.util.ViewUtil;
 import com.android.contactsbind.HelpUtils;
 import com.android.contactsbind.ObjectFactory;
 
@@ -426,7 +425,7 @@
                         && groupMetaData.groupId == groupListItem.getGroupId()) {
                     updateMenuSelection(menuItem);
                 }
-                menuItem.setIcon(R.drawable.ic_menu_label);
+                menuItem.setIcon(R.drawable.quantum_ic_label_vd_theme_24);
                 menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                     @Override
                     public boolean onMenuItemClick(MenuItem item) {
@@ -451,7 +450,7 @@
         // Create a menu item in the sub menu to add new groups
         final MenuItem menuItem = subMenu.add(R.id.nav_groups_items, Menu.NONE,
                 Menu.NONE, getString(R.string.menu_new_group_action_bar));
-        menuItem.setIcon(R.drawable.ic_add);
+        menuItem.setIcon(R.drawable.quantum_ic_add_vd_theme_24);
         menuItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
             @Override
             public boolean onMenuItemClick(MenuItem item) {
diff --git a/src/com/android/contacts/ContactsUtils.java b/src/com/android/contacts/ContactsUtils.java
new file mode 100644
index 0000000..448e696
--- /dev/null
+++ b/src/com/android/contacts/ContactsUtils.java
@@ -0,0 +1,278 @@
+/*
+ * 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;
+
+import android.content.Context;
+import android.content.Intent;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.DisplayPhoto;
+import android.support.annotation.IntDef;
+import android.text.TextUtils;
+import android.util.Pair;
+
+import com.android.contacts.compat.ContactsCompat;
+import com.android.contacts.compat.DirectoryCompat;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.dataitem.ImDataItem;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.List;
+
+public class ContactsUtils {
+    private static final String TAG = "ContactsUtils";
+
+    // Telecomm related schemes are in CallUtil
+    public static final String SCHEME_IMTO = "imto";
+    public static final String SCHEME_MAILTO = "mailto";
+    public static final String SCHEME_SMSTO = "smsto";
+
+    private static final int DEFAULT_THUMBNAIL_SIZE = 96;
+
+    private static int sThumbnailSize = -1;
+
+    public static final boolean FLAG_N_FEATURE = Build.VERSION.SDK_INT >= 24;
+
+    // TODO find a proper place for the canonical version of these
+    public interface ProviderNames {
+        String YAHOO = "Yahoo";
+        String GTALK = "GTalk";
+        String MSN = "MSN";
+        String ICQ = "ICQ";
+        String AIM = "AIM";
+        String XMPP = "XMPP";
+        String JABBER = "JABBER";
+        String SKYPE = "SKYPE";
+        String QQ = "QQ";
+    }
+
+    /**
+     * This looks up the provider name defined in
+     * ProviderNames from the predefined IM protocol id.
+     * This is used for interacting with the IM application.
+     *
+     * @param protocol the protocol ID
+     * @return the provider name the IM app uses for the given protocol, or null if no
+     * provider is defined for the given protocol
+     * @hide
+     */
+    public static String lookupProviderNameFromId(int protocol) {
+        switch (protocol) {
+            case Im.PROTOCOL_GOOGLE_TALK:
+                return ProviderNames.GTALK;
+            case Im.PROTOCOL_AIM:
+                return ProviderNames.AIM;
+            case Im.PROTOCOL_MSN:
+                return ProviderNames.MSN;
+            case Im.PROTOCOL_YAHOO:
+                return ProviderNames.YAHOO;
+            case Im.PROTOCOL_ICQ:
+                return ProviderNames.ICQ;
+            case Im.PROTOCOL_JABBER:
+                return ProviderNames.JABBER;
+            case Im.PROTOCOL_SKYPE:
+                return ProviderNames.SKYPE;
+            case Im.PROTOCOL_QQ:
+                return ProviderNames.QQ;
+        }
+        return null;
+    }
+
+
+    public static final long USER_TYPE_CURRENT = 0;
+    public static final long USER_TYPE_WORK = 1;
+
+    /**
+     * UserType indicates the user type of the contact. If the contact is from Work User (Work
+     * Profile in Android Multi-User System), it's {@link #USER_TYPE_WORK}, otherwise,
+     * {@link #USER_TYPE_CURRENT}. Please note that current user can be in work profile, where the
+     * dialer is running inside Work Profile.
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({USER_TYPE_CURRENT, USER_TYPE_WORK})
+    public @interface UserType {}
+
+    /**
+     * Test if the given {@link CharSequence} contains any graphic characters,
+     * first checking {@link TextUtils#isEmpty(CharSequence)} to handle null.
+     */
+    public static boolean isGraphic(CharSequence str) {
+        return !TextUtils.isEmpty(str) && TextUtils.isGraphic(str);
+    }
+
+    /**
+     * Returns true if two objects are considered equal.  Two null references are equal here.
+     */
+    public static boolean areObjectsEqual(Object a, Object b) {
+        return a == b || (a != null && a.equals(b));
+    }
+
+    /**
+     * Returns true if two {@link Intent}s are both null, or have the same action.
+     */
+    public static final boolean areIntentActionEqual(Intent a, Intent b) {
+        if (a == b) {
+            return true;
+        }
+        if (a == null || b == null) {
+            return false;
+        }
+        return TextUtils.equals(a.getAction(), b.getAction());
+    }
+
+    public static boolean areGroupWritableAccountsAvailable(Context context) {
+        final List<AccountWithDataSet> accounts =
+                AccountTypeManager.getInstance(context).getGroupWritableAccounts();
+        return !accounts.isEmpty();
+    }
+
+    /**
+     * Returns the size (width and height) of thumbnail pictures as configured in the provider. This
+     * can safely be called from the UI thread, as the provider can serve this without performing
+     * a database access
+     */
+    public static int getThumbnailSize(Context context) {
+        if (sThumbnailSize == -1) {
+            final Cursor c = context.getContentResolver().query(
+                    DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI,
+                    new String[] { DisplayPhoto.THUMBNAIL_MAX_DIM }, null, null, null);
+            if (c != null) {
+                try {
+                    if (c.moveToFirst()) {
+                        sThumbnailSize = c.getInt(0);
+                    }
+                } finally {
+                    c.close();
+                }
+            }
+        }
+        return sThumbnailSize != -1 ? sThumbnailSize : DEFAULT_THUMBNAIL_SIZE;
+    }
+
+    private static Intent getCustomImIntent(ImDataItem im, int protocol) {
+        String host = im.getCustomProtocol();
+        final String data = im.getData();
+        if (TextUtils.isEmpty(data)) {
+            return null;
+        }
+        if (protocol != Im.PROTOCOL_CUSTOM) {
+            // Try bringing in a well-known host for specific protocols
+            host = ContactsUtils.lookupProviderNameFromId(protocol);
+        }
+        if (TextUtils.isEmpty(host)) {
+            return null;
+        }
+        final String authority = host.toLowerCase();
+        final Uri imUri = new Uri.Builder().scheme(SCHEME_IMTO).authority(
+                authority).appendPath(data).build();
+        final Intent intent = new Intent(Intent.ACTION_SENDTO, imUri);
+        return intent;
+    }
+
+    /**
+     * Returns the proper Intent for an ImDatItem. If available, a secondary intent is stored
+     * in the second Pair slot
+     */
+    public static Pair<Intent, Intent> buildImIntent(Context context, ImDataItem im) {
+        Intent intent = null;
+        Intent secondaryIntent = null;
+        final boolean isEmail = im.isCreatedFromEmail();
+
+        if (!isEmail && !im.isProtocolValid()) {
+            return new Pair<>(null, null);
+        }
+
+        final String data = im.getData();
+        if (TextUtils.isEmpty(data)) {
+            return new Pair<>(null, null);
+        }
+
+        final int protocol = isEmail ? Im.PROTOCOL_GOOGLE_TALK : im.getProtocol();
+
+        if (protocol == Im.PROTOCOL_GOOGLE_TALK) {
+            final int chatCapability = im.getChatCapability();
+            if ((chatCapability & Im.CAPABILITY_HAS_CAMERA) != 0) {
+                intent = new Intent(Intent.ACTION_SENDTO,
+                                Uri.parse("xmpp:" + data + "?message"));
+                secondaryIntent = new Intent(Intent.ACTION_SENDTO,
+                        Uri.parse("xmpp:" + data + "?call"));
+            } else if ((chatCapability & Im.CAPABILITY_HAS_VOICE) != 0) {
+                // Allow Talking and Texting
+                intent =
+                    new Intent(Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?message"));
+                secondaryIntent =
+                    new Intent(Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?call"));
+            } else {
+                intent =
+                    new Intent(Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?message"));
+            }
+        } else {
+            // Build an IM Intent
+            intent = getCustomImIntent(im, protocol);
+        }
+        return new Pair<>(intent, secondaryIntent);
+    }
+
+    /**
+     * Determine UserType from directory id and contact id.
+     *
+     * 3 types of query
+     *
+     * 1. 2 profile query: content://com.android.contacts/phone_lookup_enterprise/1234567890
+     * personal and work contact are mixed into one cursor. no directory id. contact_id indicates if
+     * it's work contact
+     *
+     * 2. work local query:
+     * content://com.android.contacts/phone_lookup_enterprise/1234567890?directory=1000000000
+     * either directory_id or contact_id is enough to identify work contact
+     *
+     * 3. work remote query:
+     * content://com.android.contacts/phone_lookup_enterprise/1234567890?directory=1000000003
+     * contact_id is random. only directory_id is available
+     *
+     * Summary: If directory_id is not null, always use directory_id to identify work contact.
+     * (which is the case here) Otherwise, use contact_id.
+     *
+     * @param directoryId directory id of ContactsProvider query
+     * @param contactId contact id
+     * @return UserType indicates the user type of the contact. A directory id or contact id larger
+     *         than a thredshold indicates that the contact is stored in Work Profile, but not in
+     *         current user. It's a contract by ContactsProvider and check by
+     *         Contacts.isEnterpriseDirectoryId and Contacts.isEnterpriseContactId. Currently, only
+     *         2 kinds of users can be detected from the directoryId and contactId as
+     *         ContactsProvider can only access current and work user's contacts
+     */
+    public static @UserType long determineUserType(Long directoryId, Long contactId) {
+        // First check directory id
+        if (directoryId != null) {
+            return DirectoryCompat.isEnterpriseDirectoryId(directoryId) ? USER_TYPE_WORK
+                    : USER_TYPE_CURRENT;
+        }
+        // Only check contact id if directory id is null
+        if (contactId != null && contactId != 0L
+                && ContactsCompat.isEnterpriseContactId(contactId)) {
+            return USER_TYPE_WORK;
+        } else {
+            return USER_TYPE_CURRENT;
+        }
+
+    }
+}
diff --git a/src/com/android/contacts/DynamicShortcuts.java b/src/com/android/contacts/DynamicShortcuts.java
index 170d9b4..c7d8456 100644
--- a/src/com/android/contacts/DynamicShortcuts.java
+++ b/src/com/android/contacts/DynamicShortcuts.java
@@ -47,13 +47,11 @@
 import android.support.v4.content.LocalBroadcastManager;
 import android.util.Log;
 
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.Experiments;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.util.BitmapUtil;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.util.PermissionsUtil;
+import com.android.contacts.activities.RequestPermissionsActivity;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.util.BitmapUtil;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.PermissionsUtil;
 import com.android.contactsbind.experiments.Flags;
 
 import java.io.IOException;
diff --git a/src/com/android/contacts/Experiments.java b/src/com/android/contacts/Experiments.java
new file mode 100644
index 0000000..9dbe1bf
--- /dev/null
+++ b/src/com/android/contacts/Experiments.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.contacts;
+
+/**
+ * Experiment flag names.
+ */
+public final class Experiments {
+    /**
+     * Whether to open contact sheet (aka smart profile) instead of our own QuickContact.
+     */
+    public static final String CONTACT_SHEET = "QuickContact__contact_sheet";
+
+    /**
+     * Flags for maximum content update time
+     */
+    public static final String DYNAMIC_MAX_CONTENT_CHANGE_UPDATE_DELAY_MILLIS =
+            "Shortcuts__dynamic_max_content_change_update_delay_millis";
+
+    /**
+     * Flags for minimum content update time
+     */
+    public static final String DYNAMIC_MIN_CONTENT_CHANGE_UPDATE_DELAY_MILLIS =
+            "Shortcuts__dynamic_min_content_change_update_delay_millis";
+
+    /**
+     * Experiment to enable device account detection using CP2 queries
+     */
+    public static final String OEM_CP2_DEVICE_ACCOUNT_DETECTION_ENABLED =
+            "OEM__cp2_device_account_detection_enabled";
+
+    /**
+     * Flags for maximum time to show spinner for a contacts sync.
+     */
+    public static final String PULL_TO_REFRESH_CANCEL_REFRESH_MILLIS =
+            "PullToRefresh__cancel_refresh_millis";
+
+    /**
+     * Search study boolean indicating whether to inject yenta search results before CP2 results.
+     */
+    public static final String SEARCH_YENTA = "Search__yenta";
+
+    /**
+     * The time to wait for Yenta search results before giving up.
+     */
+    public static final String SEARCH_YENTA_TIMEOUT_MILLIS = "Search__yenta_timeout";
+
+    private Experiments() {
+    }
+}
diff --git a/src/com/android/contacts/GeoUtil.java b/src/com/android/contacts/GeoUtil.java
new file mode 100644
index 0000000..a4c2ed8
--- /dev/null
+++ b/src/com/android/contacts/GeoUtil.java
@@ -0,0 +1,60 @@
+/*
+ * 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;
+
+import android.app.Application;
+import android.content.Context;
+
+import com.android.contacts.location.CountryDetector;
+
+import com.google.i18n.phonenumbers.NumberParseException;
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+import com.google.i18n.phonenumbers.Phonenumber;
+import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;
+
+import java.util.Locale;
+
+/**
+ * Static methods related to Geo.
+ */
+public class GeoUtil {
+
+    /**
+     * Returns the country code of the country the user is currently in. Before calling this
+     * method, make sure that {@link CountryDetector#initialize(Context)} has already been called
+     * in {@link Application#onCreate()}.
+     * @return The ISO 3166-1 two letters country code of the country the user
+     *         is in.
+     */
+    public static String getCurrentCountryIso(Context context) {
+        // The {@link CountryDetector} should never return null so this is safe to return as-is.
+        return CountryDetector.getInstance(context).getCurrentCountryIso();
+    }
+
+    public static String getGeocodedLocationFor(Context context,  String phoneNumber) {
+        final PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder.getInstance();
+        final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
+        try {
+            final Phonenumber.PhoneNumber structuredPhoneNumber =
+                    phoneNumberUtil.parse(phoneNumber, getCurrentCountryIso(context));
+            final Locale locale = context.getResources().getConfiguration().locale;
+            return geocoder.getDescriptionForNumber(structuredPhoneNumber, locale);
+        } catch (NumberParseException e) {
+            return null;
+        }
+    }
+}
diff --git a/src/com/android/contacts/MoreContactUtils.java b/src/com/android/contacts/MoreContactUtils.java
new file mode 100644
index 0000000..7f000ec
--- /dev/null
+++ b/src/com/android/contacts/MoreContactUtils.java
@@ -0,0 +1,243 @@
+/*
+ * 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;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.telephony.PhoneNumberUtils;
+import android.text.TextUtils;
+import android.view.View;
+import android.widget.TextView;
+
+import com.android.contacts.model.account.AccountType;
+
+import com.google.i18n.phonenumbers.NumberParseException;
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+
+/**
+ * Shared static contact utility methods.
+ */
+public class MoreContactUtils {
+
+    private static final String WAIT_SYMBOL_AS_STRING = String.valueOf(PhoneNumberUtils.WAIT);
+
+    /**
+     * Returns true if two data with mimetypes which represent values in contact entries are
+     * considered equal for collapsing in the GUI. For caller-id, use
+     * {@link android.telephony.PhoneNumberUtils#compare(android.content.Context, String, String)}
+     * instead
+     */
+    public static boolean shouldCollapse(CharSequence mimetype1, CharSequence data1,
+              CharSequence mimetype2, CharSequence data2) {
+        // different mimetypes? don't collapse
+        if (!TextUtils.equals(mimetype1, mimetype2)) return false;
+
+        // exact same string? good, bail out early
+        if (TextUtils.equals(data1, data2)) return true;
+
+        // so if either is null, these two must be different
+        if (data1 == null || data2 == null) return false;
+
+        // if this is not about phone numbers, we know this is not a match (of course, some
+        // mimetypes could have more sophisticated matching is the future, e.g. addresses)
+        if (!TextUtils.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
+                mimetype1)) {
+            return false;
+        }
+
+        return shouldCollapsePhoneNumbers(data1.toString(), data2.toString());
+    }
+
+    // TODO: Move this to PhoneDataItem.shouldCollapse override
+    private static boolean shouldCollapsePhoneNumbers(String number1, String number2) {
+        // Work around to address b/20724444. We want to distinguish between #555, *555 and 555.
+        // This makes no attempt to distinguish between 555 and 55*5, since 55*5 is an improbable
+        // number. PhoneNumberUtil already distinguishes between 555 and 55#5.
+        if (number1.contains("#") != number2.contains("#")
+                || number1.contains("*") != number2.contains("*")) {
+            return false;
+        }
+
+        // Now do the full phone number thing. split into parts, separated by waiting symbol
+        // and compare them individually
+        final String[] dataParts1 = number1.split(WAIT_SYMBOL_AS_STRING);
+        final String[] dataParts2 = number2.split(WAIT_SYMBOL_AS_STRING);
+        if (dataParts1.length != dataParts2.length) return false;
+        final PhoneNumberUtil util = PhoneNumberUtil.getInstance();
+        for (int i = 0; i < dataParts1.length; i++) {
+            // Match phone numbers represented by keypad letters, in which case prefer the
+            // phone number with letters.
+            final String dataPart1 = PhoneNumberUtils.convertKeypadLettersToDigits(dataParts1[i]);
+            final String dataPart2 = dataParts2[i];
+
+            // substrings equal? shortcut, don't parse
+            if (TextUtils.equals(dataPart1, dataPart2)) continue;
+
+            // do a full parse of the numbers
+            final PhoneNumberUtil.MatchType result = util.isNumberMatch(dataPart1, dataPart2);
+            switch (result) {
+                case NOT_A_NUMBER:
+                    // don't understand the numbers? let's play it safe
+                    return false;
+                case NO_MATCH:
+                    return false;
+                case EXACT_MATCH:
+                    break;
+                case NSN_MATCH:
+                    try {
+                        // For NANP phone numbers, match when one has +1 and the other does not.
+                        // In this case, prefer the +1 version.
+                        if (util.parse(dataPart1, null).getCountryCode() == 1) {
+                            // At this point, the numbers can be either case 1 or 2 below....
+                            //
+                            // case 1)
+                            // +14155551212    <--- country code 1
+                            //  14155551212    <--- 1 is trunk prefix, not country code
+                            //
+                            // and
+                            //
+                            // case 2)
+                            // +14155551212
+                            //   4155551212
+                            //
+                            // From b/7519057, case 2 needs to be equal.  But also that bug, case 3
+                            // below should not be equal.
+                            //
+                            // case 3)
+                            // 14155551212
+                            //  4155551212
+                            //
+                            // So in order to make sure transitive equality is valid, case 1 cannot
+                            // be equal.  Otherwise, transitive equality breaks and the following
+                            // would all be collapsed:
+                            //   4155551212  |
+                            //  14155551212  |---->   +14155551212
+                            // +14155551212  |
+                            //
+                            // With transitive equality, the collapsed values should be:
+                            //   4155551212  |         14155551212
+                            //  14155551212  |---->   +14155551212
+                            // +14155551212  |
+
+                            // Distinguish between case 1 and 2 by checking for trunk prefix '1'
+                            // at the start of number 2.
+                            if (dataPart2.trim().charAt(0) == '1') {
+                                // case 1
+                                return false;
+                            }
+                            break;
+                        }
+                    } catch (NumberParseException e) {
+                        // This is the case where the first number does not have a country code.
+                        // examples:
+                        // (123) 456-7890   &   123-456-7890  (collapse)
+                        // 0049 (8092) 1234   &   +49/80921234  (unit test says do not collapse)
+
+                        // Check the second number.  If it also does not have a country code, then
+                        // we should collapse.  If it has a country code, then it's a different
+                        // number and we should not collapse (this conclusion is based on an
+                        // existing unit test).
+                        try {
+                            util.parse(dataPart2, null);
+                        } catch (NumberParseException e2) {
+                            // Number 2 also does not have a country.  Collapse.
+                            break;
+                        }
+                    }
+                    return false;
+                case SHORT_NSN_MATCH:
+                    return false;
+                default:
+                    throw new IllegalStateException("Unknown result value from phone number " +
+                            "library");
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Returns the {@link android.graphics.Rect} with left, top, right, and bottom coordinates
+     * that are equivalent to the given {@link android.view.View}'s bounds. This is equivalent to
+     * how the target {@link android.graphics.Rect} is calculated in
+     * {@link android.provider.ContactsContract.QuickContact#showQuickContact}.
+     */
+    public static Rect getTargetRectFromView(View view) {
+        final int[] pos = new int[2];
+        view.getLocationOnScreen(pos);
+
+        final Rect rect = new Rect();
+        rect.left = pos[0];
+        rect.top = pos[1];
+        rect.right = pos[0] + view.getWidth();
+        rect.bottom = pos[1] + view.getHeight();
+        return rect;
+    }
+
+    /**
+     * Returns a header view based on the R.layout.list_separator, where the
+     * containing {@link android.widget.TextView} is set using the given textResourceId.
+     */
+    public static TextView createHeaderView(Context context, int textResourceId) {
+        final TextView textView = (TextView) View.inflate(context, R.layout.list_separator, null);
+        textView.setText(context.getString(textResourceId));
+        return textView;
+    }
+
+    /**
+     * Set the top padding on the header view dynamically, based on whether the header is in
+     * the first row or not.
+     */
+    public static void setHeaderViewBottomPadding(Context context, TextView textView,
+            boolean isFirstRow) {
+        final int topPadding;
+        if (isFirstRow) {
+            topPadding = (int) context.getResources().getDimension(
+                    R.dimen.frequently_contacted_title_top_margin_when_first_row);
+        } else {
+            topPadding = (int) context.getResources().getDimension(
+                    R.dimen.frequently_contacted_title_top_margin);
+        }
+        textView.setPaddingRelative(textView.getPaddingStart(), topPadding,
+                textView.getPaddingEnd(), textView.getPaddingBottom());
+    }
+
+
+    /**
+     * Returns the intent to launch for the given invitable account type and contact lookup URI.
+     * This will return null if the account type is not invitable (i.e. there is no
+     * {@link AccountType#getInviteContactActivityClassName()} or
+     * {@link AccountType#syncAdapterPackageName}).
+     */
+    public static Intent getInvitableIntent(AccountType accountType, Uri lookupUri) {
+        String syncAdapterPackageName = accountType.syncAdapterPackageName;
+        String className = accountType.getInviteContactActivityClassName();
+        if (TextUtils.isEmpty(syncAdapterPackageName) || TextUtils.isEmpty(className)) {
+            return null;
+        }
+        Intent intent = new Intent();
+        intent.setClassName(syncAdapterPackageName, className);
+
+        intent.setAction(ContactsContract.Intents.INVITE_CONTACT);
+
+        // Data is the lookup URI.
+        intent.setData(lookupUri);
+        return intent;
+    }
+}
diff --git a/src/com/android/contacts/NonPhoneActivity.java b/src/com/android/contacts/NonPhoneActivity.java
index 05c556b..066c4d3 100644
--- a/src/com/android/contacts/NonPhoneActivity.java
+++ b/src/com/android/contacts/NonPhoneActivity.java
@@ -16,9 +16,6 @@
 
 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;
@@ -33,6 +30,9 @@
 import android.telecom.PhoneAccount;
 import android.text.TextUtils;
 
+import com.android.contacts.activities.RequestPermissionsActivity;
+import com.android.contacts.util.ImplicitIntentsUtil;
+
 /**
  * Activity that intercepts DIAL and VIEW intents for phone numbers for devices that can not
  * be used as a phone. This allows the user to see the phone number
diff --git a/src/com/android/contacts/SimImportFragment.java b/src/com/android/contacts/SimImportFragment.java
index b512599..a8db4ee 100644
--- a/src/com/android/contacts/SimImportFragment.java
+++ b/src/com/android/contacts/SimImportFragment.java
@@ -18,13 +18,15 @@
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.LoaderManager;
-import android.content.AsyncTaskLoader;
+import android.content.BroadcastReceiver;
 import android.content.Context;
+import android.content.IntentFilter;
 import android.content.Loader;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.design.widget.Snackbar;
+import android.support.v4.content.LocalBroadcastManager;
 import android.support.v4.util.ArrayMap;
 import android.support.v4.view.ViewCompat;
 import android.support.v4.widget.ContentLoadingProgressBar;
@@ -39,14 +41,20 @@
 import android.widget.ListView;
 import android.widget.TextView;
 
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.database.SimContactDao;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.SimCard;
-import com.android.contacts.common.model.SimContact;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.database.SimContactDao;
 import com.android.contacts.editor.AccountHeaderPresenter;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.concurrent.ContactsExecutors;
+import com.android.contacts.util.concurrent.ListenableFutureLoader;
+import com.google.common.base.Function;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -54,6 +62,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.Callable;
 
 /**
  * Dialog that presents a list of contacts from a SIM card that can be imported into a selected
@@ -77,6 +86,8 @@
     private ListView mListView;
     private View mImportButton;
 
+    private Bundle mSavedInstanceState;
+
     private final Map<AccountWithDataSet, long[]> mPerAccountCheckedIds = new ArrayMap<>();
 
     private int mSubscriptionId;
@@ -85,6 +96,7 @@
     public void onCreate(final Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        mSavedInstanceState = savedInstanceState;
         mPreferences = new ContactsPreferences(getContext());
         mAccountTypeManager = AccountTypeManager.getInstance(getActivity());
         mAdapter = new SimContactAdapter(getActivity());
@@ -128,7 +140,6 @@
             }
         });
         mAdapter.setAccount(mAccountHeaderPresenter.getCurrentAccount());
-        restoreAdapterSelectedStates(savedInstanceState);
 
         mListView = (ListView) view.findViewById(R.id.list);
         mListView.setOnScrollListener(this);
@@ -224,7 +235,7 @@
     }
 
     @Override
-    public SimContactLoader onCreateLoader(int id, Bundle args) {
+    public Loader<LoaderResult> onCreateLoader(int id, Bundle args) {
         return new SimContactLoader(getContext(), mSubscriptionId);
     }
 
@@ -235,6 +246,8 @@
         if (data == null) {
             return;
         }
+        mAccountHeaderPresenter.setAccounts(data.accounts);
+        restoreAdapterSelectedStates(data.accounts);
         mAdapter.setData(data);
         mListView.setEmptyView(getView().findViewById(R.id.empty_message));
 
@@ -246,17 +259,17 @@
     public void onLoaderReset(Loader<LoaderResult> loader) {
     }
 
-    private void restoreAdapterSelectedStates(Bundle savedInstanceState) {
-        if (savedInstanceState == null) {
+    private void restoreAdapterSelectedStates(List<AccountInfo> accounts) {
+        if (mSavedInstanceState == null) {
             return;
         }
 
-        final List<AccountWithDataSet> accounts = mAccountTypeManager.getAccounts(true);
-        for (AccountWithDataSet account : accounts) {
-            final long[] selections = savedInstanceState.getLongArray(
-                    account.stringify() + KEY_SUFFIX_SELECTED_IDS);
-            mPerAccountCheckedIds.put(account, selections);
+        for (AccountInfo account : accounts) {
+            final long[] selections = mSavedInstanceState.getLongArray(
+                    account.getAccount().stringify() + KEY_SUFFIX_SELECTED_IDS);
+            mPerAccountCheckedIds.put(account.getAccount(), selections);
         }
+        mSavedInstanceState = null;
     }
 
     private void saveAdapterSelectedStates(Bundle outState) {
@@ -281,10 +294,8 @@
                 importableContacts.add(mAdapter.getItem(checked.keyAt(i)));
             }
         }
-        ContactSaveService.startService(getContext(), ContactSaveService
-                .createImportFromSimIntent(getContext(), mSubscriptionId,
-                        importableContacts,
-                        mAccountHeaderPresenter.getCurrentAccount()));
+        SimImportService.startImport(getContext(), mSubscriptionId, importableContacts,
+                mAccountHeaderPresenter.getCurrentAccount());
     }
 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
@@ -431,34 +442,42 @@
     }
 
 
-    private static class SimContactLoader extends AsyncTaskLoader<LoaderResult> {
+    private static class SimContactLoader extends ListenableFutureLoader<LoaderResult> {
         private SimContactDao mDao;
+        private AccountTypeManager mAccountTypeManager;
         private final int mSubscriptionId;
-        LoaderResult mResult;
 
         public SimContactLoader(Context context, int subscriptionId) {
-            super(context);
+            super(context, new IntentFilter(AccountTypeManager.BROADCAST_ACCOUNTS_CHANGED));
             mDao = SimContactDao.create(context);
+            mAccountTypeManager = AccountTypeManager.getInstance(getContext());
             mSubscriptionId = subscriptionId;
         }
 
         @Override
-        protected void onStartLoading() {
-            if (mResult != null) {
-                deliverResult(mResult);
-            } else {
-                forceLoad();
-            }
+        protected ListenableFuture<LoaderResult> loadData() {
+            final ListenableFuture<List<Object>> future = Futures.<Object>allAsList(
+                    mAccountTypeManager
+                            .filterAccountsAsync(AccountTypeManager.writableFilter()),
+                    ContactsExecutors.getSimReadExecutor().<Object>submit(
+                            new Callable<Object>() {
+                        @Override
+                        public LoaderResult call() throws Exception {
+                            return loadFromSim();
+                        }
+                    }));
+            return Futures.transform(future, new Function<List<Object>, LoaderResult>() {
+                @Override
+                public LoaderResult apply(List<Object> input) {
+                    final List<AccountInfo> accounts = (List<AccountInfo>) input.get(0);
+                    final LoaderResult simLoadResult = (LoaderResult) input.get(1);
+                    simLoadResult.accounts = accounts;
+                    return simLoadResult;
+                }
+            });
         }
 
-        @Override
-        public void deliverResult(LoaderResult result) {
-            mResult = result;
-            super.deliverResult(result);
-        }
-
-        @Override
-        public LoaderResult loadInBackground() {
+        private LoaderResult loadFromSim() {
             final SimCard sim = mDao.getSimBySubscriptionId(mSubscriptionId);
             LoaderResult result = new LoaderResult();
             if (sim == null) {
@@ -470,15 +489,10 @@
             result.accountsMap = mDao.findAccountsOfExistingSimContacts(result.contacts);
             return result;
         }
-
-        @Override
-        protected void onReset() {
-            mResult = null;
-        }
-
     }
 
     public static class LoaderResult {
+        public List<AccountInfo> accounts;
         public ArrayList<SimContact> contacts;
         public Map<AccountWithDataSet, Set<SimContact>> accountsMap;
     }
diff --git a/src/com/android/contacts/SimImportService.java b/src/com/android/contacts/SimImportService.java
new file mode 100644
index 0000000..f21e1e1
--- /dev/null
+++ b/src/com/android/contacts/SimImportService.java
@@ -0,0 +1,341 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.content.OperationApplicationException;
+import android.os.AsyncTask;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.support.annotation.Nullable;
+import android.support.v4.app.NotificationCompat;
+import android.support.v4.content.LocalBroadcastManager;
+import android.util.TimingLogger;
+
+import com.android.contacts.activities.PeopleActivity;
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contactsbind.FeedbackHelper;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * Imports {@link SimContact}s from a background thread
+ */
+public class SimImportService extends Service {
+
+    private static final String TAG = "SimImportService";
+
+    /**
+     * Wrapper around the service state for testability
+     */
+    public interface StatusProvider {
+
+        /**
+         * Returns whether there is any imports still pending
+         *
+         * <p>This should be called from the UI thread</p>
+         */
+        boolean isRunning();
+
+        /**
+         * Returns whether an import for sim has been requested
+         *
+         * <p>This should be called from the UI thread</p>
+         */
+        boolean isImporting(SimCard sim);
+    }
+
+    public static final String EXTRA_ACCOUNT = "account";
+    public static final String EXTRA_SIM_CONTACTS = "simContacts";
+    public static final String EXTRA_SIM_SUBSCRIPTION_ID = "simSubscriptionId";
+    public static final String EXTRA_RESULT_CODE = "resultCode";
+    public static final String EXTRA_RESULT_COUNT = "count";
+    public static final String EXTRA_OPERATION_REQUESTED_AT_TIME = "requestedTime";
+
+    public static final String BROADCAST_SERVICE_STATE_CHANGED =
+            SimImportService.class.getName() + "#serviceStateChanged";
+    public static final String BROADCAST_SIM_IMPORT_COMPLETE =
+            SimImportService.class.getName() + "#simImportComplete";
+
+    public static final int RESULT_UNKNOWN = 0;
+    public static final int RESULT_SUCCESS = 1;
+    public static final int RESULT_FAILURE = 2;
+
+    // VCardService uses jobIds for it's notifications which count up from 0 so we just use a
+    // bigger number to prevent overlap.
+    private static final int NOTIFICATION_ID = 100;
+
+    private ExecutorService mExecutor = Executors.newSingleThreadExecutor();
+
+    // Keeps track of current tasks. This is only modified from the UI thread.
+    private static List<ImportTask> sPending = new ArrayList<>();
+
+    private static StatusProvider sStatusProvider = new StatusProvider() {
+        @Override
+        public boolean isRunning() {
+            return !sPending.isEmpty();
+        }
+
+        @Override
+        public boolean isImporting(SimCard sim) {
+            return SimImportService.isImporting(sim);
+        }
+    };
+
+    /**
+     * Returns whether an import for sim has been requested
+     *
+     * <p>This should be called from the UI thread</p>
+     */
+    private static boolean isImporting(SimCard sim) {
+        for (ImportTask task : sPending) {
+            if (task.getSim().equals(sim)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public static StatusProvider getStatusProvider() {
+        return sStatusProvider;
+    }
+
+    /**
+     * Starts an import of the contacts from the sim into the target account
+     *
+     * @param context context to use for starting the service
+     * @param subscriptionId the subscriptionId of the SIM card that is being imported. See
+     *                       {@link android.telephony.SubscriptionInfo#getSubscriptionId()}.
+     *                       Upon completion the SIM for that subscription ID will be marked as
+     *                       imported
+     * @param contacts the contacts to import
+     * @param targetAccount the account import the contacts into
+     */
+    public static void startImport(Context context, int subscriptionId,
+            ArrayList<SimContact> contacts, AccountWithDataSet targetAccount) {
+        context.startService(new Intent(context, SimImportService.class)
+                .putExtra(EXTRA_SIM_CONTACTS, contacts)
+                .putExtra(EXTRA_SIM_SUBSCRIPTION_ID, subscriptionId)
+                .putExtra(EXTRA_ACCOUNT, targetAccount));
+    }
+
+
+    @Nullable
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, final int startId) {
+        final ImportTask task = createTaskForIntent(intent, startId);
+        if (task == null) {
+            new StopTask(this, startId).executeOnExecutor(mExecutor);
+            return START_NOT_STICKY;
+        }
+        sPending.add(task);
+        task.executeOnExecutor(mExecutor);
+        notifyStateChanged();
+        return START_REDELIVER_INTENT;
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        mExecutor.shutdown();
+    }
+
+    private ImportTask createTaskForIntent(Intent intent, int startId) {
+        final AccountWithDataSet targetAccount = intent.getParcelableExtra(EXTRA_ACCOUNT);
+        final ArrayList<SimContact> contacts =
+                intent.getParcelableArrayListExtra(EXTRA_SIM_CONTACTS);
+
+        final int subscriptionId = intent.getIntExtra(EXTRA_SIM_SUBSCRIPTION_ID,
+                SimCard.NO_SUBSCRIPTION_ID);
+        final SimContactDao dao = SimContactDao.create(this);
+        final SimCard sim = dao.getSimBySubscriptionId(subscriptionId);
+        if (sim != null) {
+            return new ImportTask(sim, contacts, targetAccount, dao, startId);
+        } else {
+            return null;
+        }
+    }
+
+    private Notification getCompletedNotification() {
+        final Intent intent = new Intent(this, PeopleActivity.class);
+        final NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
+        builder.setOngoing(false)
+                .setAutoCancel(true)
+                .setContentTitle(this.getString(R.string.importing_sim_finished_title))
+                .setColor(this.getResources().getColor(R.color.dialtacts_theme_color))
+                .setSmallIcon(R.drawable.quantum_ic_done_vd_theme_24)
+                .setContentIntent(PendingIntent.getActivity(this, 0, intent, 0));
+        return builder.build();
+    }
+
+    private Notification getFailedNotification() {
+        final Intent intent = new Intent(this, PeopleActivity.class);
+        final NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
+        builder.setOngoing(false)
+                .setAutoCancel(true)
+                .setContentTitle(this.getString(R.string.importing_sim_failed_title))
+                .setContentText(this.getString(R.string.importing_sim_failed_message))
+                .setColor(this.getResources().getColor(R.color.dialtacts_theme_color))
+                .setSmallIcon(R.drawable.quantum_ic_error_vd_theme_24)
+                .setContentIntent(PendingIntent.getActivity(this, 0, intent, 0));
+        return builder.build();
+    }
+
+    private Notification getImportingNotification() {
+        final NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
+        final String description = getString(R.string.importing_sim_in_progress_title);
+        builder.setOngoing(true)
+                .setProgress(/* current */ 0, /* max */ 100, /* indeterminate */ true)
+                .setContentTitle(description)
+                .setColor(this.getResources().getColor(R.color.dialtacts_theme_color))
+                .setSmallIcon(android.R.drawable.stat_sys_download);
+        return builder.build();
+    }
+
+    private void notifyStateChanged() {
+        LocalBroadcastManager.getInstance(this).sendBroadcast(
+                new Intent(BROADCAST_SERVICE_STATE_CHANGED));
+    }
+
+    // Schedule a task that calls stopSelf when it completes. This is used to ensure that the
+    // calls to stopSelf occur in the correct order (because this service uses a single thread
+    // executor this won't run until all work that was requested before it has finished)
+    private static class StopTask extends AsyncTask<Void, Void, Void> {
+        private Service mHost;
+        private final int mStartId;
+
+        private StopTask(Service host, int startId) {
+            mHost = host;
+            mStartId = startId;
+        }
+
+        @Override
+        protected Void doInBackground(Void... params) {
+            return null;
+        }
+
+        @Override
+        protected void onPostExecute(Void aVoid) {
+            super.onPostExecute(aVoid);
+            mHost.stopSelf(mStartId);
+        }
+    }
+
+    private class ImportTask extends AsyncTask<Void, Void, Boolean> {
+        private final SimCard mSim;
+        private final List<SimContact> mContacts;
+        private final AccountWithDataSet mTargetAccount;
+        private final SimContactDao mDao;
+        private final NotificationManager mNotificationManager;
+        private final int mStartId;
+        private final long mStartTime;
+
+        public ImportTask(SimCard sim, List<SimContact> contacts, AccountWithDataSet targetAccount,
+                SimContactDao dao, int startId) {
+            mSim = sim;
+            mContacts = contacts;
+            mTargetAccount = targetAccount;
+            mDao = dao;
+            mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
+            mStartId = startId;
+            mStartTime = System.currentTimeMillis();
+        }
+
+        @Override
+        protected void onPreExecute() {
+            super.onPreExecute();
+            startForeground(NOTIFICATION_ID, getImportingNotification());
+        }
+
+        @Override
+        protected Boolean doInBackground(Void... params) {
+            final TimingLogger timer = new TimingLogger(TAG, "import");
+            try {
+                // Just import them all at once.
+                // Experimented with using smaller batches (e.g. 25 and 50) so that percentage
+                // progress could be displayed however this slowed down the import by over a factor
+                // of 2. If the batch size is over a 100 then most cases will only require a single
+                // batch so we don't even worry about displaying accurate progress
+                mDao.importContacts(mContacts, mTargetAccount);
+                mDao.persistSimState(mSim.withImportedState(true));
+                timer.addSplit("done");
+                timer.dumpToLog();
+            } catch (RemoteException|OperationApplicationException e) {
+                FeedbackHelper.sendFeedback(SimImportService.this, TAG,
+                        "Failed to import contacts from SIM card", e);
+                return false;
+            }
+            return true;
+        }
+
+        public SimCard getSim() {
+            return mSim;
+        }
+
+        @Override
+        protected void onPostExecute(Boolean success) {
+            super.onPostExecute(success);
+            stopSelf(mStartId);
+
+            Intent result;
+            final Notification notification;
+            if (success) {
+                result = new Intent(BROADCAST_SIM_IMPORT_COMPLETE)
+                        .putExtra(EXTRA_RESULT_CODE, RESULT_SUCCESS)
+                        .putExtra(EXTRA_RESULT_COUNT, mContacts.size())
+                        .putExtra(EXTRA_OPERATION_REQUESTED_AT_TIME, mStartTime)
+                        .putExtra(EXTRA_SIM_SUBSCRIPTION_ID, mSim.getSubscriptionId());
+
+                notification = getCompletedNotification();
+            } else {
+                result = new Intent(BROADCAST_SIM_IMPORT_COMPLETE)
+                        .putExtra(EXTRA_RESULT_CODE, RESULT_FAILURE)
+                        .putExtra(EXTRA_OPERATION_REQUESTED_AT_TIME, mStartTime)
+                        .putExtra(EXTRA_SIM_SUBSCRIPTION_ID, mSim.getSubscriptionId());
+
+                notification = getFailedNotification();
+            }
+            LocalBroadcastManager.getInstance(SimImportService.this).sendBroadcast(result);
+
+            sPending.remove(this);
+
+            // Only notify of completion if all the import requests have finished. We're using
+            // the same notification for imports so in the rare case that a user has started
+            // multiple imports the notification won't go away until all of them complete.
+            if (sPending.isEmpty()) {
+                stopForeground(false);
+                mNotificationManager.notify(NOTIFICATION_ID, notification);
+            }
+            notifyStateChanged();
+        }
+    }
+}
diff --git a/src/com/android/contacts/SplitAggregateView.java b/src/com/android/contacts/SplitAggregateView.java
index 2281ec6..5c822ba 100644
--- a/src/com/android/contacts/SplitAggregateView.java
+++ b/src/com/android/contacts/SplitAggregateView.java
@@ -35,8 +35,8 @@
 import android.widget.ListView;
 import android.widget.TextView;
 
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
 
 import java.util.ArrayList;
 import java.util.Collections;
diff --git a/src/com/android/contacts/TypePrecedence.java b/src/com/android/contacts/TypePrecedence.java
index 0a193b5..53b8343 100644
--- a/src/com/android/contacts/TypePrecedence.java
+++ b/src/com/android/contacts/TypePrecedence.java
@@ -23,7 +23,7 @@
 import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 
-import com.android.contacts.common.model.RawContactModifier;
+import com.android.contacts.model.RawContactModifier;
 
 /**
  * This class contains utility functions for determining the precedence of
diff --git a/src/com/android/contacts/ViewNotificationService.java b/src/com/android/contacts/ViewNotificationService.java
index 0f2922a..3bc5ed2 100644
--- a/src/com/android/contacts/ViewNotificationService.java
+++ b/src/com/android/contacts/ViewNotificationService.java
@@ -23,8 +23,8 @@
 import android.os.IBinder;
 import android.util.Log;
 
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.ContactLoader;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.ContactLoader;
 
 
 /**
diff --git a/src/com/android/contacts/activities/ActionBarAdapter.java b/src/com/android/contacts/activities/ActionBarAdapter.java
index c91f608..1bfd832 100644
--- a/src/com/android/contacts/activities/ActionBarAdapter.java
+++ b/src/com/android/contacts/activities/ActionBarAdapter.java
@@ -31,24 +31,25 @@
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.view.ViewTreeObserver;
 import android.view.Window;
 import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
 import android.widget.FrameLayout;
+import android.widget.ImageButton;
 import android.widget.ImageView;
 import android.widget.LinearLayout.LayoutParams;
 import android.widget.SearchView.OnCloseListener;
-import android.view.View.OnClickListener;
-import android.widget.EditText;
 import android.widget.TextView;
 
 import com.android.contacts.ContactsDrawerActivity;
 import com.android.contacts.R;
 import com.android.contacts.activities.ActionBarAdapter.Listener.Action;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.util.MaterialColorMapUtils;
+import com.android.contacts.compat.CompatUtils;
 import com.android.contacts.list.ContactsRequest;
+import com.android.contacts.util.MaterialColorMapUtils;
 
 import java.util.ArrayList;
 
@@ -152,7 +153,9 @@
         mSearchView = (EditText) mSearchContainer.findViewById(R.id.search_view);
         mSearchView.setHint(mActivity.getString(mSearchHintResId));
         mSearchView.addTextChangedListener(new SearchTextWatcher());
-        mSearchContainer.findViewById(R.id.search_back_button).setOnClickListener(
+        final ImageButton searchBackButton = (ImageButton) mSearchContainer
+                .findViewById(R.id.search_back_button);
+        searchBackButton.setOnClickListener(
                 new OnClickListener() {
             @Override
             public void onClick(View v) {
@@ -161,6 +164,7 @@
                 }
             }
         });
+        searchBackButton.getDrawable().setAutoMirrored(true);
 
         mClearSearchView = mSearchContainer.findViewById(R.id.search_close_button);
         mClearSearchView.setOnClickListener(
@@ -331,7 +335,7 @@
             newFlags |= ActionBar.DISPLAY_SHOW_TITLE;
             mToolbar.setContentInsetsRelative(mMaxToolbarContentInsetStart,
                     mToolbar.getContentInsetEnd());
-            mToolbar.setNavigationIcon(R.drawable.ic_menu_hamburger);
+            mToolbar.setNavigationIcon(R.drawable.quantum_ic_menu_vd_theme_24);
         } else {
             mToolbar.setNavigationIcon(null);
         }
diff --git a/src/com/android/contacts/activities/AppCompatTransactionSafeActivity.java b/src/com/android/contacts/activities/AppCompatTransactionSafeActivity.java
new file mode 100644
index 0000000..c638e26
--- /dev/null
+++ b/src/com/android/contacts/activities/AppCompatTransactionSafeActivity.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.activities;
+
+import android.os.Bundle;
+import android.support.v7.app.AppCompatActivity;
+
+/**
+ * A common superclass that keeps track of whether an {@link AppCompatActivity} has saved its state
+ * yet or not, copied from {@link TransactionSafeActivity},
+ * which will be deprecated after Kitkat backporting is done.
+ */
+public abstract class AppCompatTransactionSafeActivity extends AppCompatActivity {
+
+    private boolean mIsSafeToCommitTransactions;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mIsSafeToCommitTransactions = true;
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        mIsSafeToCommitTransactions = true;
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        mIsSafeToCommitTransactions = true;
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        mIsSafeToCommitTransactions = false;
+    }
+
+    /**
+     * Returns true if it is safe to commit {@link FragmentTransaction}s at this time, based on
+     * whether {@link FragmentActivity#onSaveInstanceState} has been called or not.
+     *
+     * Make sure that the current activity calls into
+     * {@link super.onSaveInstanceState(Bundle outState)} (if that method is overridden),
+     * so the flag is properly set.
+     */
+    public boolean isSafeToCommitTransactions() {
+        return mIsSafeToCommitTransactions;
+    }
+}
diff --git a/src/com/android/contacts/activities/AttachPhotoActivity.java b/src/com/android/contacts/activities/AttachPhotoActivity.java
index 096349c..24f9029 100644
--- a/src/com/android/contacts/activities/AttachPhotoActivity.java
+++ b/src/com/android/contacts/activities/AttachPhotoActivity.java
@@ -39,19 +39,23 @@
 
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.ContactsActivity;
+import com.android.contacts.ContactsUtils;
 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;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.editor.ContactEditorUtils;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.ContactLoader;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
 import com.android.contacts.util.ContactPhotoUtils;
+import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
 
 import java.io.FileNotFoundException;
 import java.util.List;
@@ -78,6 +82,8 @@
 
     private ContentResolver mContentResolver;
 
+    private ListenableFuture<List<AccountInfo>> mAccountsFuture;
+
     // Height and width (in pixels) to request for the photo - queried from the provider.
     private static int mPhotoDim;
     // Default photo dimension to use if unable to query the provider.
@@ -125,6 +131,10 @@
                 }
             }
         }
+
+        // Start loading accounts in case they are needed.
+        mAccountsFuture = AccountTypeManager.getInstance(this).filterAccountsAsync(
+                AccountTypeManager.writableFilter());
     }
 
     @Override
@@ -342,16 +352,26 @@
     }
 
     private void selectAccountAndCreateContact() {
+        Preconditions.checkNotNull(mAccountsFuture, "Accounts future must be initialized first");
         // 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.
         final ContactEditorUtils editorUtils = ContactEditorUtils.create(this);
-        if (editorUtils.shouldShowAccountChangedNotification()) {
+
+        // Technically this could block but in reality this method won't be called until the user
+        // presses the save button which should allow plenty of time for the accounts to
+        // finish loading. Note also that this could be stale if the accounts have changed since
+        // we requested them but that's OK since ContactEditorAccountsChangedActivity will reload
+        // the accounts
+        final List<AccountInfo> accountInfos = Futures.getUnchecked(mAccountsFuture);
+
+        final List<AccountWithDataSet> accounts = AccountInfo.extractAccounts(accountInfos);
+        if (editorUtils.shouldShowAccountChangedNotification(accounts)) {
             Intent intent = new Intent(this, ContactEditorAccountsChangedActivity.class);
             startActivityForResult(intent, REQUEST_PICK_DEFAULT_ACCOUNT_FOR_NEW_CONTACT);
         } else {
             // Otherwise, there should be a default account. Then either create a null contact
             // (if default account is null) or create a contact with the specified account.
-            final AccountWithDataSet targetAccount = editorUtils.getOnlyOrDefaultAccount();
+            final AccountWithDataSet targetAccount = editorUtils.getOnlyOrDefaultAccount(accounts);
             createNewRawContact(targetAccount);
         }
     }
diff --git a/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java b/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
index 3027707..3531125 100644
--- a/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java
@@ -18,8 +18,10 @@
 
 import android.app.Activity;
 import android.app.AlertDialog;
+import android.app.LoaderManager;
 import android.content.DialogInterface;
 import android.content.Intent;
+import android.content.Loader;
 import android.os.Bundle;
 import android.provider.ContactsContract.Intents;
 import android.view.View;
@@ -32,11 +34,14 @@
 
 import com.android.contacts.R;
 import com.android.contacts.editor.ContactEditorUtils;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.AccountsListAdapter;
-import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.AccountsLoader;
+import com.android.contacts.util.AccountsListAdapter;
+import com.android.contacts.util.AccountsListAdapter.AccountListFilter;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.google.common.util.concurrent.Futures;
 
 import java.util.List;
 
@@ -48,7 +53,8 @@
  * the new contact in. If the activity result doesn't contain intent data, then there is no
  * account for this contact.
  */
-public class ContactEditorAccountsChangedActivity extends Activity {
+public class ContactEditorAccountsChangedActivity extends Activity
+        implements LoaderManager.LoaderCallbacks<List<AccountInfo>> {
 
     private static final String TAG = ContactEditorAccountsChangedActivity.class.getSimpleName();
 
@@ -95,10 +101,30 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-
         mEditorUtils = ContactEditorUtils.create(this);
-        final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(this).
-                getAccounts(true);
+        getLoaderManager().initLoader(0, null, this);
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == SUBACTIVITY_ADD_NEW_ACCOUNT) {
+            // If the user canceled the account setup process, then keep this activity visible to
+            // the user.
+            if (resultCode != RESULT_OK) {
+                return;
+            }
+            // Subactivity was successful, so pass the result back and finish the activity.
+            AccountWithDataSet account = mEditorUtils.getCreatedAccount(resultCode, data);
+            if (account == null) {
+                setResult(resultCode);
+                finish();
+                return;
+            }
+            saveAccountAndReturnResult(account);
+        }
+    }
+
+    private void updateDisplayedAccounts(List<AccountInfo> accounts) {
         final int numAccounts = accounts.size();
         if (numAccounts < 0) {
             throw new IllegalStateException("Cannot have a negative number of accounts");
@@ -123,7 +149,7 @@
                     AccountListFilter.ACCOUNTS_CONTACT_WRITABLE);
             accountListView.setAdapter(mAccountListAdapter);
             accountListView.setOnItemClickListener(mAccountListItemClickListener);
-        } else if (numAccounts == 1 && !accounts.get(0).isNullAccount()) {
+        } else if (numAccounts == 1 && !accounts.get(0).getAccount().isNullAccount()) {
             // If the user has 1 writable account we will just show the user a message with 2
             // possible action buttons.
             view = View.inflate(this,
@@ -133,9 +159,9 @@
             final Button leftButton = (Button) view.findViewById(R.id.left_button);
             final Button rightButton = (Button) view.findViewById(R.id.right_button);
 
-            final AccountWithDataSet account = accounts.get(0);
+            final AccountInfo accountInfo = accounts.get(0);
             textView.setText(getString(R.string.contact_editor_prompt_one_account,
-                    account.name));
+                    accountInfo.getNameLabel()));
 
             // This button allows the user to add a new account to the device and return to
             // this app afterwards.
@@ -148,7 +174,7 @@
             rightButton.setOnClickListener(new OnClickListener() {
                 @Override
                 public void onClick(View v) {
-                    saveAccountAndReturnResult(account);
+                    saveAccountAndReturnResult(accountInfo.getAccount());
                 }
             });
         } else {
@@ -183,6 +209,9 @@
             rightButton.setOnClickListener(mAddAccountClickListener);
         }
 
+        if (mDialog != null && mDialog.isShowing()) {
+            mDialog.dismiss();
+        }
         mDialog = new AlertDialog.Builder(this)
                 .setView(view)
                 .setOnCancelListener(new DialogInterface.OnCancelListener() {
@@ -195,25 +224,6 @@
         mDialog.show();
     }
 
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == SUBACTIVITY_ADD_NEW_ACCOUNT) {
-            // If the user canceled the account setup process, then keep this activity visible to
-            // the user.
-            if (resultCode != RESULT_OK) {
-                return;
-            }
-            // Subactivity was successful, so pass the result back and finish the activity.
-            AccountWithDataSet account = mEditorUtils.getCreatedAccount(resultCode, data);
-            if (account == null) {
-                setResult(resultCode);
-                finish();
-                return;
-            }
-            saveAccountAndReturnResult(account);
-        }
-    }
-
     private void saveAccountAndReturnResult(AccountWithDataSet account) {
         // Save this as the default account
         mEditorUtils.saveDefaultAccount(account);
@@ -224,4 +234,18 @@
         setResult(RESULT_OK, intent);
         finish();
     }
+
+    @Override
+    public Loader<List<AccountInfo>> onCreateLoader(int id, Bundle args) {
+        return new AccountsLoader(this, AccountTypeManager.writableFilter());
+    }
+
+    @Override
+    public void onLoadFinished(Loader<List<AccountInfo>> loader, List<AccountInfo> data) {
+        updateDisplayedAccounts(data);
+    }
+
+    @Override
+    public void onLoaderReset(Loader<List<AccountInfo>> loader) {
+    }
 }
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 4298d7c..a33e92f 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -23,24 +23,23 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.QuickContact;
+import android.support.v7.widget.Toolbar;
 import android.util.Log;
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
-import android.widget.Toolbar;
 
+import com.android.contacts.AppCompatContactsActivity;
 import com.android.contacts.ContactSaveService;
-import com.android.contacts.ContactsActivity;
 import com.android.contacts.DynamicShortcuts;
 import com.android.contacts.R;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.detail.PhotoSelectionHandler;
 import com.android.contacts.editor.ContactEditorFragment;
 import com.android.contacts.editor.EditorIntents;
 import com.android.contacts.editor.PhotoSourceDialogFragment;
 import com.android.contacts.interactions.ContactDeletionInteraction;
+import com.android.contacts.model.RawContactDeltaList;
 import com.android.contacts.util.DialogManager;
+import com.android.contacts.util.ImplicitIntentsUtil;
 
 import java.io.FileNotFoundException;
 import java.util.ArrayList;
@@ -48,7 +47,7 @@
 /**
  * Contact editor with only the most important fields displayed initially.
  */
-public class ContactEditorActivity extends ContactsActivity implements
+public class ContactEditorActivity extends AppCompatContactsActivity implements
         PhotoSourceDialogFragment.Listener,
         DialogManager.DialogShowingViewActivity {
     private static final String TAG = "ContactEditorActivity";
@@ -61,13 +60,13 @@
     public static final int RESULT_CODE_EDITED = 4;
 
     /**
-     * The contact will be saved to the device local account when this is set for an insert. This
+     * The contact will be saved to this account when this is set for an insert. This
      * is necessary because {@link android.accounts.Account} cannot be created with null values
      * for the name and type and an Account is needed for
      * {@link android.provider.ContactsContract.Intents.Insert#EXTRA_ACCOUNT}
      */
-    public static final String EXTRA_SAVE_TO_DEVICE_FLAG =
-            "com.android.contacts.SAVE_TO_DEVICE_FLAG";
+    public static final String EXTRA_ACCOUNT_WITH_DATA_SET =
+            "com.android.contacts.ACCOUNT_WITH_DATA_SET";
 
     private static final String TAG_EDITOR_FRAGMENT = "editor_fragment";
 
@@ -347,6 +346,7 @@
 
         setContentView(R.layout.contact_editor_activity);
         mToolbar = (Toolbar) findViewById(R.id.toolbar);
+        setSupportActionBar(mToolbar);
         if (Intent.ACTION_EDIT.equals(action)) {
             mActionBarTitleResId = R.string.contact_editor_title_existing_contact;
         } else {
@@ -355,7 +355,6 @@
         mToolbar.setTitle(mActionBarTitleResId);
         // Set activity title for Talkback
         setTitle(mActionBarTitleResId);
-        setActionBar(mToolbar);
 
         if (savedState == null) {
             // Create the editor and photo selection fragments
@@ -469,7 +468,12 @@
      */
     public void changePhoto(int photoMode) {
         mPhotoMode = photoMode;
-        PhotoSourceDialogFragment.show(this, mPhotoMode);
+        // This method is called from an onClick handler in the PhotoEditorView. It's possible for
+        // onClick methods to run after onSaveInstanceState is called for the activity, so check
+        // if it's safe to commit transactions before trying.
+        if (isSafeToCommitTransactions()) {
+            PhotoSourceDialogFragment.show(this, mPhotoMode);
+        }
     }
 
     public Toolbar getToolbar() {
diff --git a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
index 0c60203..5ad05dc 100644
--- a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
@@ -16,19 +16,18 @@
 import com.android.contacts.AppCompatContactsActivity;
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.R;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.logging.EditorEvent;
-import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
 import com.android.contacts.editor.ContactEditorFragment;
 import com.android.contacts.editor.EditorIntents;
 import com.android.contacts.editor.PickRawContactDialogFragment;
 import com.android.contacts.editor.PickRawContactLoader;
 import com.android.contacts.editor.PickRawContactLoader.RawContactsMetadata;
 import com.android.contacts.editor.SplitContactConfirmationDialogFragment;
+import com.android.contacts.logging.EditorEvent;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.model.AccountTypeManager;
 import com.android.contacts.quickcontact.QuickContactActivity;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.MaterialColorMapUtils.MaterialPalette;
 import com.android.contactsbind.FeedbackHelper;
 
 /**
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index cbf6a69..654263b 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -19,9 +19,12 @@
 import android.app.Fragment;
 import android.content.ActivityNotFoundException;
 import android.content.Intent;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
+import android.support.v4.content.ContextCompat;
 import android.support.v7.widget.Toolbar;
 import android.text.TextUtils;
 import android.util.Log;
@@ -36,31 +39,30 @@
 
 import com.android.contacts.AppCompatContactsActivity;
 import com.android.contacts.R;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.DirectoryListLoader;
-import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
-import com.android.contacts.common.list.PhoneNumberPickerFragment;
-import com.android.contacts.common.logging.ListEvent;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.util.ViewUtil;
 import com.android.contacts.editor.EditorIntents;
+import com.android.contacts.list.ContactEntryListFragment;
 import com.android.contacts.list.ContactPickerFragment;
 import com.android.contacts.list.ContactsIntentResolver;
 import com.android.contacts.list.ContactsRequest;
+import com.android.contacts.list.DirectoryListLoader;
 import com.android.contacts.list.EmailAddressPickerFragment;
 import com.android.contacts.list.GroupMemberPickerFragment;
 import com.android.contacts.list.JoinContactListFragment;
 import com.android.contacts.list.LegacyPhoneNumberPickerFragment;
-import com.android.contacts.list.MultiSelectEmailAddressesListFragment;
-import com.android.contacts.list.MultiSelectPhoneNumbersListFragment;
 import com.android.contacts.list.MultiSelectContactsListFragment;
 import com.android.contacts.list.MultiSelectContactsListFragment.OnCheckBoxListActionListener;
+import com.android.contacts.list.MultiSelectEmailAddressesListFragment;
+import com.android.contacts.list.MultiSelectPhoneNumbersListFragment;
 import com.android.contacts.list.OnContactPickerActionListener;
 import com.android.contacts.list.OnEmailAddressPickerActionListener;
+import com.android.contacts.list.OnPhoneNumberPickerActionListener;
 import com.android.contacts.list.OnPostalAddressPickerActionListener;
+import com.android.contacts.list.PhoneNumberPickerFragment;
 import com.android.contacts.list.PostalAddressPickerFragment;
 import com.android.contacts.list.UiIntentActions;
+import com.android.contacts.logging.ListEvent;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.ViewUtil;
 
 import java.util.ArrayList;
 
@@ -170,18 +172,17 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                // Go back to previous screen, intending "cancel"
-                setResult(RESULT_CANCELED);
-                onBackPressed();
-                return true;
-            case R.id.menu_search:
-                mIsSearchMode = !mIsSearchMode;
-                configureSearchMode();
-                return true;
+        final int id = item.getItemId();
+        if (id == android.R.id.home) {// Go back to previous screen, intending "cancel"
+            setResult(RESULT_CANCELED);
+            onBackPressed();
+        } else if (id == R.id.menu_search) {
+            mIsSearchMode = !mIsSearchMode;
+            configureSearchMode();
+        } else {
+            return super.onOptionsItemSelected(item);
         }
-        return super.onOptionsItemSelected(item);
+        return true;
     }
 
     @Override
@@ -235,11 +236,11 @@
                 break;
             }
             case ContactsRequest.ACTION_CREATE_SHORTCUT_CALL: {
-                titleResId = R.string.callShortcutActivityTitle;
+                titleResId = R.string.shortcutActivityTitle;
                 break;
             }
             case ContactsRequest.ACTION_CREATE_SHORTCUT_SMS: {
-                titleResId = R.string.messageShortcutActivityTitle;
+                titleResId = R.string.shortcutActivityTitle;
                 break;
             }
             case ContactsRequest.ACTION_PICK_POSTAL: {
@@ -629,11 +630,9 @@
 
     @Override
     public void onFocusChange(View view, boolean hasFocus) {
-        switch (view.getId()) {
-            case R.id.search_view: {
-                if (hasFocus) {
-                    mActionBarAdapter.setFocusOnSearchView();
-                }
+        if (view.getId() == R.id.search_view) {
+            if (hasFocus) {
+                mActionBarAdapter.setFocusOnSearchView();
             }
         }
     }
@@ -652,11 +651,8 @@
 
     @Override
     public void onClick(View view) {
-        switch (view.getId()) {
-            case R.id.floating_action_button: {
-                startCreateNewContactActivity();
-                break;
-            }
+        if (view.getId() == R.id.floating_action_button) {
+            startCreateNewContactActivity();
         }
     }
 
@@ -690,6 +686,12 @@
 
         final MenuItem searchItem = menu.findItem(R.id.menu_search);
         searchItem.setVisible(!mIsSearchMode && mIsSearchSupported);
+
+        final Drawable searchIcon = searchItem.getIcon();
+        if (searchIcon != null) {
+            searchIcon.mutate().setColorFilter(ContextCompat.getColor(this,
+                    R.color.actionbar_icon_color), PorterDuff.Mode.SRC_ATOP);
+        }
         return true;
     }
 
diff --git a/src/com/android/contacts/activities/LicenseActivity.java b/src/com/android/contacts/activities/LicenseActivity.java
new file mode 100644
index 0000000..4ccaa93
--- /dev/null
+++ b/src/com/android/contacts/activities/LicenseActivity.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.activities;
+
+import android.os.Bundle;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
+import android.view.MenuItem;
+import android.webkit.WebView;
+
+import com.android.contacts.R;
+
+/**
+ * Displays the licenses for all open source libraries.
+ */
+public class LicenseActivity extends AppCompatActivity {
+    private static final String LICENSE_FILE = "file:///android_asset/licenses.html";
+    private WebView mWebView;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.licenses);
+        mWebView = (WebView) findViewById(R.id.webview);
+        mWebView.loadUrl(LICENSE_FILE);
+        final ActionBar actionBar = getSupportActionBar();
+        if (actionBar != null) {
+            actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
+        }
+    }
+
+    @Override
+    protected void onDestroy() {
+        mWebView.destroy();
+        super.onDestroy();
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (item.getItemId() == android.R.id.home) {
+            finish();
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+}
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index c3308b5..28891e5 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -53,33 +53,33 @@
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.ContactsDrawerActivity;
 import com.android.contacts.R;
-import com.android.contacts.common.Experiments;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.ContactListFilterController.ContactListFilterListener;
-import com.android.contacts.common.list.ProviderStatusWatcher;
-import com.android.contacts.common.list.ProviderStatusWatcher.ProviderStatusListener;
-import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.logging.ScreenEvent.ScreenType;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.AccountFilterUtil;
-import com.android.contacts.common.util.Constants;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.widget.FloatingActionButtonController;
+import com.android.contacts.compat.CompatUtils;
 import com.android.contacts.group.GroupMembersFragment;
 import com.android.contacts.group.GroupMetaData;
 import com.android.contacts.group.GroupUtil;
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.list.ContactListFilterController.ContactListFilterListener;
 import com.android.contacts.list.ContactsIntentResolver;
 import com.android.contacts.list.ContactsRequest;
 import com.android.contacts.list.ContactsUnavailableFragment;
 import com.android.contacts.list.DefaultContactBrowseListFragment;
+import com.android.contacts.list.ProviderStatusWatcher;
+import com.android.contacts.list.ProviderStatusWatcher.ProviderStatusListener;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.logging.ScreenEvent.ScreenType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.AccountFilterUtil;
+import com.android.contacts.util.Constants;
+import com.android.contacts.util.ImplicitIntentsUtil;
 import com.android.contacts.util.SyncUtil;
+import com.android.contacts.widget.FloatingActionButtonController;
 import com.android.contactsbind.FeatureHighlightHelper;
 import com.android.contactsbind.ObjectFactory;
-import com.android.contactsbind.experiments.Flags;
 
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -103,6 +103,7 @@
 
     private ContactsIntentResolver mIntentResolver;
     private ContactsRequest mRequest;
+    private AccountTypeManager mAccountTypeManager;
 
     private FloatingActionButtonController mFloatingActionButtonController;
     private View mFloatingActionButtonContainer;
@@ -166,17 +167,19 @@
                 return;
             }
 
-            final List<AccountWithDataSet> accounts = AccountTypeManager.getInstance(this)
-                    .getAccounts(/* contactsWritableOnly */ true);
-            final List<Account> syncableAccounts = filter.getSyncableAccounts(accounts);
-            // If one of the accounts is active or pending, use spinning circle to indicate one of
-            // the syncs is in progress.
-            if (syncableAccounts != null && syncableAccounts.size() > 0) {
-                for (Account account: syncableAccounts) {
-                    if (SyncUtil.isSyncStatusPendingOrActive(account)) {
-                        return;
-                    }
-                }
+            final List<AccountWithDataSet> accounts;
+            if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT &&
+                    filter.isGoogleAccountType()) {
+                accounts = Collections.singletonList(new AccountWithDataSet(filter.accountName,
+                        filter.accountType, null));
+            } else if (filter.shouldShowSyncState()) {
+                accounts = AccountInfo.extractAccounts(
+                        mAccountTypeManager.getWritableGoogleAccounts());
+            } else {
+                accounts = Collections.emptyList();
+            }
+            if (SyncUtil.isAnySyncing(accounts)) {
+                return;
             }
             swipeRefreshLayout.setRefreshing(false);
         }
@@ -225,6 +228,7 @@
             Log.d(Constants.PERFORMANCE_TAG, "PeopleActivity.onCreate start");
         }
         super.onCreate(savedState);
+        mAccountTypeManager = AccountTypeManager.getInstance(this);
 
         if (RequestPermissionsActivity.startPermissionActivity(this)) {
             return;
@@ -576,21 +580,9 @@
 
     private boolean shouldShowList() {
         return mProviderStatus != null
-                && ((mProviderStatus.equals(ProviderStatus.STATUS_EMPTY) && hasNonLocalAccount())
-                        || mProviderStatus.equals(ProviderStatus.STATUS_NORMAL));
-    }
-
-    // Returns true if there are real accounts (not "local" account) in the list of accounts.
-    private boolean hasNonLocalAccount() {
-        final List<AccountWithDataSet> allAccounts =
-                AccountTypeManager.getInstance(this).getAccounts(/* contactWritableOnly */ false);
-        if (allAccounts == null || allAccounts.size() == 0) {
-            return false;
-        }
-        if (allAccounts.size() > 1) {
-            return true;
-        }
-        return !allAccounts.get(0).isNullAccount();
+                && ((mProviderStatus.equals(ProviderStatus.STATUS_EMPTY)
+                && mAccountTypeManager.hasNonLocalAccount())
+                || mProviderStatus.equals(ProviderStatus.STATUS_NORMAL));
     }
 
     private void invalidateOptionsMenuIfNeeded() {
diff --git a/src/com/android/contacts/activities/RequestDesiredPermissionsActivity.java b/src/com/android/contacts/activities/RequestDesiredPermissionsActivity.java
new file mode 100644
index 0000000..0e0d5da
--- /dev/null
+++ b/src/com/android/contacts/activities/RequestDesiredPermissionsActivity.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.activities;
+
+import android.Manifest.permission;
+import android.app.Activity;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Requests permissions that are not absolutely required by the calling Activity;
+ * if permissions are denied, the calling Activity is still restarted.
+ *
+ * Activities that have a set of permissions that must be granted in order for the Activity to
+ * function propertly should call
+ * {@link RequestPermissionsActivity#startPermissionActivity(Activity, String[], Class)}
+ * before calling {@link RequestDesiredPermissionsActivity#startPermissionActivity(Activity)}.
+ */
+public class RequestDesiredPermissionsActivity extends RequestPermissionsActivityBase {
+
+    private static String[] sDesiredPermissions;
+
+    @Override
+    protected String[] getPermissions() {
+        return getPermissions(getPackageManager());
+    }
+
+    /**
+     * If any desired permission that Contacts app needs are missing, open an Activity
+     * to prompt user for these permissions. After that calling activity is restarted
+     * and in the second run permission check is skipped.
+     *
+     * This is designed to be called inside {@link android.app.Activity#onCreate}
+     */
+    public static boolean startPermissionActivity(Activity activity) {
+        final Bundle extras = activity.getIntent().getExtras();
+        if (extras != null && extras.getBoolean(EXTRA_STARTED_PERMISSIONS_ACTIVITY, false)) {
+            return false;
+        }
+        return startPermissionActivity(activity,
+                getPermissions(activity.getPackageManager()),
+                RequestDesiredPermissionsActivity.class);
+    }
+
+    private static String[] getPermissions(PackageManager packageManager) {
+        if (sDesiredPermissions == null) {
+            final List<String> permissions = new ArrayList<>();
+            // Calendar group
+            permissions.add(permission.READ_CALENDAR);
+
+            if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
+                // SMS group
+                permissions.add(permission.READ_SMS);
+            }
+            sDesiredPermissions = permissions.toArray(new String[0]);
+        }
+        return sDesiredPermissions;
+    }
+
+    @Override
+    public void onRequestPermissionsResult(
+            int requestCode, String permissions[], int[] grantResults) {
+        mPreviousActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
+        startActivity(mPreviousActivityIntent);
+        overridePendingTransition(0, 0);
+
+        finish();
+        overridePendingTransition(0, 0);
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/contacts/activities/RequestImportVCardPermissionsActivity.java b/src/com/android/contacts/activities/RequestImportVCardPermissionsActivity.java
new file mode 100644
index 0000000..224339a
--- /dev/null
+++ b/src/com/android/contacts/activities/RequestImportVCardPermissionsActivity.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.activities;
+
+import android.Manifest.permission;
+import android.app.Activity;
+
+/**
+ * Activity that requests permissions needed for ImportVCardActivity.
+ */
+public class RequestImportVCardPermissionsActivity extends RequestPermissionsActivity {
+
+    private static final String[] REQUIRED_PERMISSIONS = new String[] {
+            // Contacts group
+            permission.GET_ACCOUNTS,
+            permission.READ_CONTACTS,
+            permission.WRITE_CONTACTS,
+            // Storage group
+            permission.READ_EXTERNAL_STORAGE,
+    };
+
+    @Override
+    protected String[] getPermissions() {
+        return REQUIRED_PERMISSIONS;
+    }
+
+    /**
+     * If any permissions the Contacts app needs are missing, open an Activity
+     * to prompt the user for these permissions. Moreover, finish the current activity.
+     *
+     * This is designed to be called inside {@link android.app.Activity#onCreate}
+     *
+     * @param isCallerSelf whether the vcard import was started from the contacts app itself.
+     */
+    public static boolean startPermissionActivity(Activity activity, boolean isCallerSelf) {
+        return startPermissionActivity(activity, REQUIRED_PERMISSIONS, isCallerSelf,
+                RequestImportVCardPermissionsActivity.class);
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/contacts/activities/RequestPermissionsActivity.java b/src/com/android/contacts/activities/RequestPermissionsActivity.java
new file mode 100644
index 0000000..02ddf34
--- /dev/null
+++ b/src/com/android/contacts/activities/RequestPermissionsActivity.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.activities;
+
+import android.Manifest.permission;
+import android.app.Activity;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.support.v4.content.LocalBroadcastManager;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Activity that requests permissions needed for activities exported from Contacts.
+ */
+public class RequestPermissionsActivity extends RequestPermissionsActivityBase {
+
+    public static final String BROADCAST_PERMISSIONS_GRANTED = "broadcastPermissionsGranted";
+
+    private static String[] sRequiredPermissions;
+
+    @Override
+    protected String[] getPermissions() {
+        return getPermissions(getPackageManager());
+    }
+
+    public static boolean startPermissionActivity(Activity activity) {
+        return startPermissionActivity(activity,
+                getPermissions(activity.getPackageManager()),
+                RequestPermissionsActivity.class);
+    }
+
+    private static String[] getPermissions(PackageManager packageManager) {
+        if (sRequiredPermissions == null) {
+            final List<String> permissions = new ArrayList<>();
+            // Contacts group
+            permissions.add(permission.GET_ACCOUNTS);
+            permissions.add(permission.READ_CONTACTS);
+            permissions.add(permission.WRITE_CONTACTS);
+
+            if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
+                // Phone group
+                // These are only used in a few places such as QuickContactActivity and
+                // ImportExportDialogFragment.  We work around missing this permission when
+                // telephony is not available on the device (i.e. on tablets).
+                permissions.add(permission.CALL_PHONE);
+                permissions.add(permission.READ_CALL_LOG);
+                permissions.add(permission.READ_PHONE_STATE);
+            }
+            sRequiredPermissions = permissions.toArray(new String[0]);
+        }
+        return sRequiredPermissions;
+    }
+
+    @Override
+    public void onRequestPermissionsResult(
+            int requestCode, String permissions[], int[] grantResults) {
+        if (permissions != null && permissions.length > 0
+                && isAllGranted(permissions, grantResults)) {
+            mPreviousActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
+            if (mIsCallerSelf) {
+                startActivityForResult(mPreviousActivityIntent, 0);
+            } else {
+                startActivity(mPreviousActivityIntent);
+            }
+            finish();
+            overridePendingTransition(0, 0);
+
+            LocalBroadcastManager.getInstance(this).sendBroadcast(
+                    new Intent(BROADCAST_PERMISSIONS_GRANTED));
+        } else {
+            Toast.makeText(this, R.string.missing_required_permission, Toast.LENGTH_SHORT).show();
+            finish();
+        }
+    }
+}
diff --git a/src/com/android/contacts/activities/RequestPermissionsActivityBase.java b/src/com/android/contacts/activities/RequestPermissionsActivityBase.java
new file mode 100644
index 0000000..1c11905
--- /dev/null
+++ b/src/com/android/contacts/activities/RequestPermissionsActivityBase.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.activities;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.os.Trace;
+import android.support.v4.app.ActivityCompat;
+
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.util.PermissionsUtil;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+/**
+ * Activity that asks the user for all {@link #getPermissions} if any are missing.
+ *
+ * NOTE: As a result of b/22095159, this can behave oddly in the case where the final permission
+ * you are requesting causes an application restart.
+ */
+public abstract class RequestPermissionsActivityBase extends Activity
+        implements ActivityCompat.OnRequestPermissionsResultCallback {
+
+    public static final String PREVIOUS_ACTIVITY_INTENT = "previous_intent";
+
+    /** Whether the permissions activity was already started. */
+    protected static final String EXTRA_STARTED_PERMISSIONS_ACTIVITY =
+            "started_permissions_activity";
+
+    protected static final String EXTRA_IS_CALLER_SELF = "is_caller_self";
+
+    private static final int PERMISSIONS_REQUEST_ALL_PERMISSIONS = 1;
+
+    /**
+     * @return list of permissions that are needed in order for {@link #PREVIOUS_ACTIVITY_INTENT}
+     * to operate. You only need to return a single permission per permission group you care about.
+     */
+    protected abstract String[] getPermissions();
+
+    protected Intent mPreviousActivityIntent;
+
+    /** If true then start the target activity "for result" after permissions are granted. */
+    protected boolean mIsCallerSelf;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mPreviousActivityIntent = (Intent) getIntent().getExtras().get(PREVIOUS_ACTIVITY_INTENT);
+        mIsCallerSelf = getIntent().getBooleanExtra(EXTRA_IS_CALLER_SELF, false);
+
+        // Only start a requestPermissions() flow when first starting this activity the first time.
+        // The process is likely to be restarted during the permission flow (necessary to enable
+        // permissions) so this is important to track.
+        if (savedInstanceState == null) {
+            requestPermissions();
+        }
+    }
+
+    /**
+     * If any permissions the Contacts app needs are missing, open an Activity
+     * to prompt the user for these permissions. Moreover, finish the current activity.
+     *
+     * This is designed to be called inside {@link android.app.Activity#onCreate}
+     */
+    protected static boolean startPermissionActivity(Activity activity,
+            String[] requiredPermissions, Class<?> newActivityClass) {
+        return startPermissionActivity(activity, requiredPermissions, /* isCallerSelf */ false,
+                newActivityClass);
+    }
+
+    protected static boolean startPermissionActivity(Activity activity,
+                String[] requiredPermissions, boolean isCallerSelf, Class<?> newActivityClass) {
+        if (!hasPermissions(activity, requiredPermissions)) {
+            final Intent intent = new Intent(activity,  newActivityClass);
+            activity.getIntent().putExtra(EXTRA_STARTED_PERMISSIONS_ACTIVITY, true);
+            intent.putExtra(PREVIOUS_ACTIVITY_INTENT, activity.getIntent());
+            intent.putExtra(EXTRA_IS_CALLER_SELF, isCallerSelf);
+            activity.startActivity(intent);
+            activity.finish();
+            return true;
+        }
+
+        // Account type initialization must be delayed until the Contacts permission group
+        // has been granted (since GET_ACCOUNTS) falls under that groups.  Previously it
+        // was initialized in ContactApplication which would cause problems as
+        // AccountManager.getAccounts would return an empty array. See b/22690336
+        AccountTypeManager.getInstance(activity);
+
+        return false;
+    }
+
+    protected boolean isAllGranted(String permissions[], int[] grantResult) {
+        for (int i = 0; i < permissions.length; i++) {
+            if (grantResult[i] != PackageManager.PERMISSION_GRANTED
+                    && isPermissionRequired(permissions[i])) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private boolean isPermissionRequired(String p) {
+        return Arrays.asList(getPermissions()).contains(p);
+    }
+
+    private void requestPermissions() {
+        Trace.beginSection("requestPermissions");
+        try {
+            // Construct a list of missing permissions
+            final ArrayList<String> unsatisfiedPermissions = new ArrayList<>();
+            for (String permission : getPermissions()) {
+                if (!PermissionsUtil.hasPermission(this, permission)) {
+                    unsatisfiedPermissions.add(permission);
+                }
+            }
+            if (unsatisfiedPermissions.size() == 0) {
+                throw new RuntimeException("Request permission activity was called even"
+                        + " though all permissions are satisfied.");
+            }
+            ActivityCompat.requestPermissions(
+                    this,
+                    unsatisfiedPermissions.toArray(new String[unsatisfiedPermissions.size()]),
+                    PERMISSIONS_REQUEST_ALL_PERMISSIONS);
+        } finally {
+            Trace.endSection();
+        }
+    }
+
+    protected static boolean hasPermissions(Context context, String[] permissions) {
+        Trace.beginSection("hasPermission");
+        try {
+            for (String permission : permissions) {
+                if (!PermissionsUtil.hasPermission(context, permission)) {
+                    return false;
+                }
+            }
+            return true;
+        } finally {
+            Trace.endSection();
+        }
+    }
+}
diff --git a/src/com/android/contacts/activities/ShowOrCreateActivity.java b/src/com/android/contacts/activities/ShowOrCreateActivity.java
index 6a516ad..91c93b9 100755
--- a/src/com/android/contacts/activities/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/activities/ShowOrCreateActivity.java
@@ -34,11 +34,10 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.android.contacts.common.ContactsUtils;
 import com.android.contacts.ContactsActivity;
+import com.android.contacts.ContactsUtils;
 import com.android.contacts.R;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
+import com.android.contacts.util.ImplicitIntentsUtil;
 import com.android.contacts.util.NotifyingAsyncQueryHandler;
 
 /**
diff --git a/src/com/android/contacts/activities/SimImportActivity.java b/src/com/android/contacts/activities/SimImportActivity.java
index 391cd8b..2dff45b 100644
--- a/src/com/android/contacts/activities/SimImportActivity.java
+++ b/src/com/android/contacts/activities/SimImportActivity.java
@@ -22,7 +22,7 @@
 import com.android.contacts.AppCompatContactsActivity;
 import com.android.contacts.R;
 import com.android.contacts.SimImportFragment;
-import com.android.contacts.common.model.SimCard;
+import com.android.contacts.model.SimCard;
 
 /**
  * Host activity for SimImportFragment
diff --git a/src/com/android/contacts/activities/TransactionSafeActivity.java b/src/com/android/contacts/activities/TransactionSafeActivity.java
new file mode 100644
index 0000000..b177665
--- /dev/null
+++ b/src/com/android/contacts/activities/TransactionSafeActivity.java
@@ -0,0 +1,65 @@
+/*
+ * 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.app.Activity;
+import android.os.Bundle;
+
+/**
+ * A common superclass that keeps track of whether an {@link Activity} has saved its state yet or
+ * not.
+ */
+public abstract class TransactionSafeActivity extends Activity {
+
+    private boolean mIsSafeToCommitTransactions;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mIsSafeToCommitTransactions = true;
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        mIsSafeToCommitTransactions = true;
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        mIsSafeToCommitTransactions = true;
+    }
+
+    @Override
+    protected void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        mIsSafeToCommitTransactions = false;
+    }
+
+    /**
+     * Returns true if it is safe to commit {@link FragmentTransaction}s at this time, based on
+     * whether {@link Activity#onSaveInstanceState} has been called or not.
+     *
+     * Make sure that the current activity calls into
+     * {@link super.onSaveInstanceState(Bundle outState)} (if that method is overridden),
+     * so the flag is properly set.
+     */
+    public boolean isSafeToCommitTransactions() {
+        return mIsSafeToCommitTransactions;
+    }
+}
diff --git a/src/com/android/contacts/common/CallUtil.java b/src/com/android/contacts/common/CallUtil.java
deleted file mode 100644
index 4ef7220..0000000
--- a/src/com/android/contacts/common/CallUtil.java
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.contacts.common;
-
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.PhoneAccountSdkCompat;
-import com.android.contacts.common.util.PermissionsUtil;
-import com.android.contacts.common.util.PhoneNumberHelper;
-import com.android.contactsbind.FeedbackHelper;
-import com.android.phone.common.PhoneConstants;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.telecom.PhoneAccount;
-import android.telecom.PhoneAccountHandle;
-import android.telecom.TelecomManager;
-import android.telecom.VideoProfile;
-import android.text.TextUtils;
-
-import java.util.List;
-
-/**
- * Utilities related to calls that can be used by non system apps. These
- * use {@link Intent#ACTION_CALL} instead of ACTION_CALL_PRIVILEGED.
- *
- * The privileged version of this util exists inside Dialer.
- */
-public class CallUtil {
-
-    public static final String TAG = "CallUtil";
-
-    /**
-     * Indicates that the video calling is not available.
-     */
-    public static final int VIDEO_CALLING_DISABLED = 0;
-
-    /**
-     * Indicates that video calling is enabled, regardless of presence status.
-     */
-    public static final int VIDEO_CALLING_ENABLED = 1;
-
-    /**
-     * Indicates that video calling is enabled, but the availability of video call affordances is
-     * determined by the presence status associated with contacts.
-     */
-    public static final int VIDEO_CALLING_PRESENCE = 2;
-
-    /**
-     * Return an Intent for making a phone call. Scheme (e.g. tel, sip) will be determined
-     * automatically.
-     */
-    public static Intent getCallWithSubjectIntent(String number,
-            PhoneAccountHandle phoneAccountHandle, String callSubject) {
-
-        final Intent intent = getCallIntent(getCallUri(number));
-        intent.putExtra(TelecomManager.EXTRA_CALL_SUBJECT, callSubject);
-        if (phoneAccountHandle != null) {
-            intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
-        }
-        return intent;
-    }
-
-    /**
-     * Return an Intent for making a phone call. Scheme (e.g. tel, sip) will be determined
-     * automatically.
-     */
-    public static Intent getCallIntent(String number) {
-        return getCallIntent(getCallUri(number));
-    }
-
-    /**
-     * Return an Intent for making a phone call. A given Uri will be used as is (without any
-     * sanity check).
-     */
-    public static Intent getCallIntent(Uri uri) {
-        return new Intent(Intent.ACTION_CALL, uri);
-    }
-
-    /**
-     * A variant of {@link #getCallIntent} for starting a video call.
-     */
-    public static Intent getVideoCallIntent(String number, String callOrigin) {
-        final Intent intent = new Intent(Intent.ACTION_CALL, getCallUri(number));
-        intent.putExtra(TelecomManager.EXTRA_START_CALL_WITH_VIDEO_STATE,
-                VideoProfile.STATE_BIDIRECTIONAL);
-        if (!TextUtils.isEmpty(callOrigin)) {
-            intent.putExtra(PhoneConstants.EXTRA_CALL_ORIGIN, callOrigin);
-        }
-        return intent;
-    }
-
-    /**
-     * Return Uri with an appropriate scheme, accepting both SIP and usual phone call
-     * numbers.
-     */
-    public static Uri getCallUri(String number) {
-        if (PhoneNumberHelper.isUriNumber(number)) {
-             return Uri.fromParts(PhoneAccount.SCHEME_SIP, number, null);
-        }
-        return Uri.fromParts(PhoneAccount.SCHEME_TEL, number, null);
-    }
-
-    /**
-     * Determines if video calling is available, and if so whether presence checking is available
-     * as well.
-     *
-     * Returns a bitmask with {@link #VIDEO_CALLING_ENABLED} to indicate that video calling is
-     * available, and {@link #VIDEO_CALLING_PRESENCE} if presence indication is also available.
-     *
-     * @param context The context
-     * @return A bit-mask describing the current video capabilities.
-     */
-    public static int getVideoCallingAvailability(Context context) {
-        if (!PermissionsUtil.hasPermission(context, android.Manifest.permission.READ_PHONE_STATE)
-                || !CompatUtils.isVideoCompatible()) {
-            return VIDEO_CALLING_DISABLED;
-        }
-        TelecomManager telecommMgr = (TelecomManager)
-                context.getSystemService(Context.TELECOM_SERVICE);
-        if (telecommMgr == null) {
-            return VIDEO_CALLING_DISABLED;
-        }
-
-        try {
-            List<PhoneAccountHandle> accountHandles = telecommMgr.getCallCapablePhoneAccounts();
-            for (PhoneAccountHandle accountHandle : accountHandles) {
-                PhoneAccount account = telecommMgr.getPhoneAccount(accountHandle);
-                if (account != null) {
-                    if (account.hasCapabilities(PhoneAccount.CAPABILITY_VIDEO_CALLING)) {
-                        // Builds prior to N do not have presence support.
-                        if (!CompatUtils.isVideoPresenceCompatible()) {
-                            return VIDEO_CALLING_ENABLED;
-                        }
-
-                        int videoCapabilities = VIDEO_CALLING_ENABLED;
-                        if (account.hasCapabilities(PhoneAccountSdkCompat
-                                .CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE)) {
-                            videoCapabilities |= VIDEO_CALLING_PRESENCE;
-                        }
-                        return videoCapabilities;
-                    }
-                }
-            }
-            return VIDEO_CALLING_DISABLED;
-        } catch (SecurityException e) {
-            FeedbackHelper.sendFeedback(context, TAG,
-                    "Security exception when getting call capable phone accounts", e);
-            return VIDEO_CALLING_DISABLED;
-        }
-    }
-
-    /**
-     * Determines if one of the call capable phone accounts defined supports calling with a subject
-     * specified.
-     *
-     * @param context The context.
-     * @return {@code true} if one of the call capable phone accounts supports calling with a
-     *      subject specified, {@code false} otherwise.
-     */
-    public static boolean isCallWithSubjectSupported(Context context) {
-        if (!PermissionsUtil.hasPermission(context, android.Manifest.permission.READ_PHONE_STATE)
-                || !CompatUtils.isCallSubjectCompatible()) {
-            return false;
-        }
-        TelecomManager telecommMgr = (TelecomManager)
-                context.getSystemService(Context.TELECOM_SERVICE);
-        if (telecommMgr == null) {
-            return false;
-        }
-
-        try {
-            List<PhoneAccountHandle> accountHandles = telecommMgr.getCallCapablePhoneAccounts();
-            for (PhoneAccountHandle accountHandle : accountHandles) {
-                PhoneAccount account = telecommMgr.getPhoneAccount(accountHandle);
-                if (account != null
-                        && account.hasCapabilities(PhoneAccount.CAPABILITY_CALL_SUBJECT)) {
-                    return true;
-                }
-            }
-            return false;
-        } catch (SecurityException e) {
-            FeedbackHelper.sendFeedback(context, TAG,
-                    "Security exception when getting call capable phone accounts", e);
-            return false;
-        }
-
-    }
-}
diff --git a/src/com/android/contacts/common/ClipboardUtils.java b/src/com/android/contacts/common/ClipboardUtils.java
deleted file mode 100644
index 27af963..0000000
--- a/src/com/android/contacts/common/ClipboardUtils.java
+++ /dev/null
@@ -1,52 +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.common;
-
-import android.content.ClipData;
-import android.content.ClipboardManager;
-import android.content.Context;
-import android.text.TextUtils;
-import android.widget.Toast;
-
-public class ClipboardUtils {
-    private static final String TAG = "ClipboardUtils";
-
-    private ClipboardUtils() { }
-
-    /**
-     * Copy a text to clipboard.
-     *
-     * @param context Context
-     * @param label Label to show to the user describing this clip.
-     * @param text Text to copy.
-     * @param showToast If {@code true}, a toast is shown to the user.
-     */
-    public static void copyText(Context context, CharSequence label, CharSequence text,
-            boolean showToast) {
-        if (TextUtils.isEmpty(text)) return;
-
-        ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(
-                Context.CLIPBOARD_SERVICE);
-        ClipData clipData = ClipData.newPlainText(label == null ? "" : label, text);
-        clipboardManager.setPrimaryClip(clipData);
-
-        if (showToast) {
-            String toastText = context.getString(R.string.toast_text_copied);
-            Toast.makeText(context, toastText, Toast.LENGTH_SHORT).show();
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/Collapser.java b/src/com/android/contacts/common/Collapser.java
deleted file mode 100644
index 1ab63c5..0000000
--- a/src/com/android/contacts/common/Collapser.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common;
-
-import android.content.Context;
-
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Class used for collapsing data items into groups of similar items. The data items that should be
- * collapsible should implement the Collapsible interface. The class also contains a utility
- * function that takes an ArrayList of items and returns a list of the same items collapsed into
- * groups.
- */
-public final class Collapser {
-
-    /*
-     * This utility class cannot be instantiated.
-     */
-    private Collapser() {}
-
-    /*
-     * The Collapser uses an n^2 algorithm so we don't want it to run on
-     * lists beyond a certain size. This specifies the maximum size to collapse.
-     */
-    private static final int MAX_LISTSIZE_TO_COLLAPSE = 20;
-
-    /*
-     * Interface implemented by data types that can be collapsed into groups of similar data. This
-     * can be used for example to collapse similar contact data items into a single item.
-     */
-    public interface Collapsible<T> {
-        public void collapseWith(T t);
-        public boolean shouldCollapseWith(T t, Context context);
-
-    }
-
-    /**
-     * Collapses a list of Collapsible items into a list of collapsed items. Items are collapsed
-     * if {@link Collapsible#shouldCollapseWith(Object)} returns true, and are collapsed
-     * through the {@Link Collapsible#collapseWith(Object)} function implemented by the data item.
-     *
-     * @param list List of Objects of type <T extends Collapsible<T>> to be collapsed.
-     */
-    public static <T extends Collapsible<T>> void collapseList(List<T> list, Context context) {
-
-        int listSize = list.size();
-        // The algorithm below is n^2 so don't run on long lists
-        if (listSize > MAX_LISTSIZE_TO_COLLAPSE) {
-            return;
-        }
-
-        for (int i = 0; i < listSize; i++) {
-            T iItem = list.get(i);
-            if (iItem != null) {
-                for (int j = i + 1; j < listSize; j++) {
-                    T jItem = list.get(j);
-                    if (jItem != null) {
-                        if (iItem.shouldCollapseWith(jItem, context)) {
-                            iItem.collapseWith(jItem);
-                            list.set(j, null);
-                        } else if (jItem.shouldCollapseWith(iItem, context)) {
-                            jItem.collapseWith(iItem);
-                            list.set(i, null);
-                            break;
-                        }
-                    }
-                }
-            }
-        }
-
-        // Remove the null items
-        Iterator<T> itr = list.iterator();
-        while (itr.hasNext()) {
-            if (itr.next() == null) {
-                itr.remove();
-            }
-        }
-
-    }
-}
diff --git a/src/com/android/contacts/common/ContactPhotoManager.java b/src/com/android/contacts/common/ContactPhotoManager.java
deleted file mode 100644
index b9b4bcc..0000000
--- a/src/com/android/contacts/common/ContactPhotoManager.java
+++ /dev/null
@@ -1,1743 +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.common;
-
-import android.app.ActivityManager;
-import android.content.ComponentCallbacks2;
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Paint.Style;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.TransitionDrawable;
-import android.media.ThumbnailUtils;
-import android.net.TrafficStats;
-import android.net.Uri;
-import android.net.Uri.Builder;
-import android.os.Handler;
-import android.os.Handler.Callback;
-import android.os.HandlerThread;
-import android.os.Message;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Contacts.Photo;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Directory;
-import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
-import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.LruCache;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ImageView;
-
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
-import com.android.contacts.common.util.BitmapUtil;
-import com.android.contacts.common.util.PermissionsUtil;
-import com.android.contacts.common.util.TrafficStatsTags;
-import com.android.contacts.common.util.UriUtils;
-import com.android.contactsbind.util.UserAgentGenerator;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.ref.Reference;
-import java.lang.ref.SoftReference;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * Asynchronously loads contact photos and maintains a cache of photos.
- */
-public abstract class ContactPhotoManager implements ComponentCallbacks2 {
-    static final String TAG = "ContactPhotoManager";
-    static final boolean DEBUG = false; // Don't submit with true
-    static final boolean DEBUG_SIZES = false; // Don't submit with true
-
-    /** Contact type constants used for default letter images */
-    public static final int TYPE_PERSON = LetterTileDrawable.TYPE_PERSON;
-    public static final int TYPE_BUSINESS = LetterTileDrawable.TYPE_BUSINESS;
-    public static final int TYPE_VOICEMAIL = LetterTileDrawable.TYPE_VOICEMAIL;
-    public static final int TYPE_DEFAULT = LetterTileDrawable.TYPE_DEFAULT;
-
-    /** Scale and offset default constants used for default letter images */
-    public static final float SCALE_DEFAULT = 1.0f;
-    public static final float OFFSET_DEFAULT = 0.0f;
-
-    public static final boolean IS_CIRCULAR_DEFAULT = false;
-
-    /** Uri-related constants used for default letter images */
-    private static final String DISPLAY_NAME_PARAM_KEY = "display_name";
-    private static final String IDENTIFIER_PARAM_KEY = "identifier";
-    private static final String CONTACT_TYPE_PARAM_KEY = "contact_type";
-    private static final String SCALE_PARAM_KEY = "scale";
-    private static final String OFFSET_PARAM_KEY = "offset";
-    private static final String IS_CIRCULAR_PARAM_KEY = "is_circular";
-    private static final String DEFAULT_IMAGE_URI_SCHEME = "defaultimage";
-    private static final Uri DEFAULT_IMAGE_URI = Uri.parse(DEFAULT_IMAGE_URI_SCHEME + "://");
-
-    // Static field used to cache the default letter avatar drawable that is created
-    // using a null {@link DefaultImageRequest}
-    private static Drawable sDefaultLetterAvatar = null;
-
-    private static ContactPhotoManager sInstance;
-
-    /**
-     * Given a {@link DefaultImageRequest}, returns a {@link Drawable}, that when drawn, will
-     * draw a letter tile avatar based on the request parameters defined in the
-     * {@link DefaultImageRequest}.
-     */
-    public static Drawable getDefaultAvatarDrawableForContact(Resources resources, boolean hires,
-            DefaultImageRequest defaultImageRequest) {
-        if (defaultImageRequest == null) {
-            if (sDefaultLetterAvatar == null) {
-                // Cache and return the letter tile drawable that is created by a null request,
-                // so that it doesn't have to be recreated every time it is requested again.
-                sDefaultLetterAvatar = LetterTileDefaultImageProvider.getDefaultImageForContact(
-                        resources, null);
-            }
-            return sDefaultLetterAvatar;
-        }
-        return LetterTileDefaultImageProvider.getDefaultImageForContact(resources,
-                defaultImageRequest);
-    }
-
-    /**
-     * Given a {@link DefaultImageRequest}, returns an Uri that can be used to request a
-     * letter tile avatar when passed to the {@link ContactPhotoManager}. The internal
-     * implementation of this uri is not guaranteed to remain the same across application
-     * versions, so the actual uri should never be persisted in long-term storage and reused.
-     *
-     * @param request A {@link DefaultImageRequest} object with the fields configured
-     * to return a
-     * @return A Uri that when later passed to the {@link ContactPhotoManager} via
-     * {@link #loadPhoto(ImageView, Uri, int, boolean, DefaultImageRequest)}, can be
-     * used to request a default contact image, drawn as a letter tile using the
-     * parameters as configured in the provided {@link DefaultImageRequest}
-     */
-    public static Uri getDefaultAvatarUriForContact(DefaultImageRequest request) {
-        final Builder builder = DEFAULT_IMAGE_URI.buildUpon();
-        if (request != null) {
-            if (!TextUtils.isEmpty(request.displayName)) {
-                builder.appendQueryParameter(DISPLAY_NAME_PARAM_KEY, request.displayName);
-            }
-            if (!TextUtils.isEmpty(request.identifier)) {
-                builder.appendQueryParameter(IDENTIFIER_PARAM_KEY, request.identifier);
-            }
-            if (request.contactType != TYPE_DEFAULT) {
-                builder.appendQueryParameter(CONTACT_TYPE_PARAM_KEY,
-                        String.valueOf(request.contactType));
-            }
-            if (request.scale != SCALE_DEFAULT) {
-                builder.appendQueryParameter(SCALE_PARAM_KEY, String.valueOf(request.scale));
-            }
-            if (request.offset != OFFSET_DEFAULT) {
-                builder.appendQueryParameter(OFFSET_PARAM_KEY, String.valueOf(request.offset));
-            }
-            if (request.isCircular != IS_CIRCULAR_DEFAULT) {
-                builder.appendQueryParameter(IS_CIRCULAR_PARAM_KEY,
-                        String.valueOf(request.isCircular));
-            }
-
-        }
-        return builder.build();
-    }
-
-    /**
-     * Adds a business contact type encoded fragment to the URL.  Used to ensure photo URLS
-     * from Nearby Places can be identified as business photo URLs rather than URLs for personal
-     * contact photos.
-     *
-     * @param photoUrl The photo URL to modify.
-     * @return URL with the contact type parameter added and set to TYPE_BUSINESS.
-     */
-    public static String appendBusinessContactType(String photoUrl) {
-        Uri uri = Uri.parse(photoUrl);
-        Builder builder = uri.buildUpon();
-        builder.encodedFragment(String.valueOf(TYPE_BUSINESS));
-        return builder.build().toString();
-    }
-
-    /**
-     * Removes the contact type information stored in the photo URI encoded fragment.
-     *
-     * @param photoUri The photo URI to remove the contact type from.
-     * @return The photo URI with contact type removed.
-     */
-    public static Uri removeContactType(Uri photoUri) {
-        String encodedFragment = photoUri.getEncodedFragment();
-        if (!TextUtils.isEmpty(encodedFragment)) {
-            Builder builder = photoUri.buildUpon();
-            builder.encodedFragment(null);
-            return builder.build();
-        }
-        return photoUri;
-    }
-
-    /**
-     * Inspects a photo URI to determine if the photo URI represents a business.
-     *
-     * @param photoUri The URI to inspect.
-     * @return Whether the URI represents a business photo or not.
-     */
-    public static boolean isBusinessContactUri(Uri photoUri) {
-        if (photoUri == null) {
-            return false;
-        }
-
-        String encodedFragment = photoUri.getEncodedFragment();
-        return !TextUtils.isEmpty(encodedFragment)
-                && encodedFragment.equals(String.valueOf(TYPE_BUSINESS));
-    }
-
-    protected static DefaultImageRequest getDefaultImageRequestFromUri(Uri uri) {
-        final DefaultImageRequest request = new DefaultImageRequest(
-                uri.getQueryParameter(DISPLAY_NAME_PARAM_KEY),
-                uri.getQueryParameter(IDENTIFIER_PARAM_KEY), false);
-        try {
-            String contactType = uri.getQueryParameter(CONTACT_TYPE_PARAM_KEY);
-            if (!TextUtils.isEmpty(contactType)) {
-                request.contactType = Integer.valueOf(contactType);
-            }
-
-            String scale = uri.getQueryParameter(SCALE_PARAM_KEY);
-            if (!TextUtils.isEmpty(scale)) {
-                request.scale = Float.valueOf(scale);
-            }
-
-            String offset = uri.getQueryParameter(OFFSET_PARAM_KEY);
-            if (!TextUtils.isEmpty(offset)) {
-                request.offset = Float.valueOf(offset);
-            }
-
-            String isCircular = uri.getQueryParameter(IS_CIRCULAR_PARAM_KEY);
-            if (!TextUtils.isEmpty(isCircular)) {
-                request.isCircular = Boolean.valueOf(isCircular);
-            }
-        } catch (NumberFormatException e) {
-            Log.w(TAG, "Invalid DefaultImageRequest image parameters provided, ignoring and using "
-                    + "defaults.");
-        }
-
-        return request;
-    }
-
-    protected boolean isDefaultImageUri(Uri uri) {
-        return DEFAULT_IMAGE_URI_SCHEME.equals(uri.getScheme());
-    }
-
-    /**
-     * Contains fields used to contain contact details and other user-defined settings that might
-     * be used by the ContactPhotoManager to generate a default contact image. This contact image
-     * takes the form of a letter or bitmap drawn on top of a colored tile.
-     */
-    public static class DefaultImageRequest {
-        /**
-         * The contact's display name. The display name is used to
-         */
-        public String displayName;
-
-        /**
-         * A unique and deterministic string that can be used to identify this contact. This is
-         * usually the contact's lookup key, but other contact details can be used as well,
-         * especially for non-local or temporary contacts that might not have a lookup key. This
-         * is used to determine the color of the tile.
-         */
-        public String identifier;
-
-        /**
-         * The type of this contact. This contact type may be used to decide the kind of
-         * image to use in the case where a unique letter cannot be generated from the contact's
-         * display name and identifier. See:
-         * {@link #TYPE_PERSON}
-         * {@link #TYPE_BUSINESS}
-         * {@link #TYPE_PERSON}
-         * {@link #TYPE_DEFAULT}
-         */
-        public int contactType = TYPE_DEFAULT;
-
-        /**
-         * The amount to scale the letter or bitmap to, as a ratio of its default size (from a
-         * range of 0.0f to 2.0f). The default value is 1.0f.
-         */
-        public float scale = SCALE_DEFAULT;
-
-        /**
-         * The amount to vertically offset the letter or image to within the tile.
-         * The provided offset must be within the range of -0.5f to 0.5f.
-         * If set to -0.5f, the letter will be shifted upwards by 0.5 times the height of the canvas
-         * it is being drawn on, which means it will be drawn with the center of the letter starting
-         * at the top edge of the canvas.
-         * If set to 0.5f, the letter will be shifted downwards by 0.5 times the height of the
-         * canvas it is being drawn on, which means it will be drawn with the center of the letter
-         * starting at the bottom edge of the canvas.
-         * The default is 0.0f, which means the letter is drawn in the exact vertical center of
-         * the tile.
-         */
-        public float offset = OFFSET_DEFAULT;
-
-        /**
-         * Whether or not to draw the default image as a circle, instead of as a square/rectangle.
-         */
-        public boolean isCircular = false;
-
-        /**
-         * Used to indicate that a drawable that represents a contact without any contact details
-         * should be returned.
-         */
-        public static DefaultImageRequest EMPTY_DEFAULT_IMAGE_REQUEST = new DefaultImageRequest();
-
-        /**
-         * Used to indicate that a drawable that represents a business without a business photo
-         * should be returned.
-         */
-        public static DefaultImageRequest EMPTY_DEFAULT_BUSINESS_IMAGE_REQUEST =
-                new DefaultImageRequest(null, null, TYPE_BUSINESS, false);
-
-        /**
-         * Used to indicate that a circular drawable that represents a contact without any contact
-         * details should be returned.
-         */
-        public static DefaultImageRequest EMPTY_CIRCULAR_DEFAULT_IMAGE_REQUEST =
-                new DefaultImageRequest(null, null, true);
-
-        /**
-         * Used to indicate that a circular drawable that represents a business without a business
-         * photo should be returned.
-         */
-        public static DefaultImageRequest EMPTY_CIRCULAR_BUSINESS_IMAGE_REQUEST =
-                new DefaultImageRequest(null, null, TYPE_BUSINESS, true);
-
-        public DefaultImageRequest() {
-        }
-
-        public DefaultImageRequest(String displayName, String identifier, boolean isCircular) {
-            this(displayName, identifier, TYPE_DEFAULT, SCALE_DEFAULT, OFFSET_DEFAULT, isCircular);
-        }
-
-        public DefaultImageRequest(String displayName, String identifier, int contactType,
-                boolean isCircular) {
-            this(displayName, identifier, contactType, SCALE_DEFAULT, OFFSET_DEFAULT, isCircular);
-        }
-
-        public DefaultImageRequest(String displayName, String identifier, int contactType,
-                float scale, float offset, boolean isCircular) {
-            this.displayName = displayName;
-            this.identifier = identifier;
-            this.contactType = contactType;
-            this.scale = scale;
-            this.offset = offset;
-            this.isCircular = isCircular;
-        }
-    }
-
-    public static abstract class DefaultImageProvider {
-        /**
-         * Applies the default avatar to the ImageView. Extent is an indicator for the size (width
-         * or height). If darkTheme is set, the avatar is one that looks better on dark background
-         *
-         * @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a
-         * default letter tile avatar should be drawn.
-         */
-        public abstract void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
-                DefaultImageRequest defaultImageRequest);
-    }
-
-    /**
-     * A default image provider that applies a letter tile consisting of a colored background
-     * and a letter in the foreground as the default image for a contact. The color of the
-     * background and the type of letter is decided based on the contact's details.
-     */
-    private static class LetterTileDefaultImageProvider extends DefaultImageProvider {
-        @Override
-        public void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
-                DefaultImageRequest defaultImageRequest) {
-            final Drawable drawable = getDefaultImageForContact(view.getResources(),
-                    defaultImageRequest);
-            view.setImageDrawable(drawable);
-        }
-
-        public static Drawable getDefaultImageForContact(Resources resources,
-                DefaultImageRequest defaultImageRequest) {
-            final LetterTileDrawable drawable = new LetterTileDrawable(resources);
-            if (defaultImageRequest != null) {
-                // If the contact identifier is null or empty, fallback to the
-                // displayName. In that case, use {@code null} for the contact's
-                // display name so that a default bitmap will be used instead of a
-                // letter
-                if (TextUtils.isEmpty(defaultImageRequest.identifier)) {
-                    drawable.setLetterAndColorFromContactDetails(null,
-                            defaultImageRequest.displayName);
-                } else {
-                    drawable.setLetterAndColorFromContactDetails(defaultImageRequest.displayName,
-                            defaultImageRequest.identifier);
-                }
-                drawable.setContactType(defaultImageRequest.contactType);
-                drawable.setScale(defaultImageRequest.scale);
-                drawable.setOffset(defaultImageRequest.offset);
-                drawable.setIsCircular(defaultImageRequest.isCircular);
-            }
-            return drawable;
-        }
-    }
-
-    private static class BlankDefaultImageProvider extends DefaultImageProvider {
-        private static Drawable sDrawable;
-
-        @Override
-        public void applyDefaultImage(ImageView view, int extent, boolean darkTheme,
-                DefaultImageRequest defaultImageRequest) {
-            if (sDrawable == null) {
-                Context context = view.getContext();
-                sDrawable = new ColorDrawable(context.getResources().getColor(
-                        R.color.image_placeholder));
-            }
-            view.setImageDrawable(sDrawable);
-        }
-    }
-
-    public static DefaultImageProvider DEFAULT_AVATAR = new LetterTileDefaultImageProvider();
-
-    public static final DefaultImageProvider DEFAULT_BLANK = new BlankDefaultImageProvider();
-
-    public static ContactPhotoManager getInstance(Context context) {
-        if (sInstance == null) {
-            Context applicationContext = context.getApplicationContext();
-            sInstance = createContactPhotoManager(applicationContext);
-            applicationContext.registerComponentCallbacks(sInstance);
-            if (PermissionsUtil.hasContactsPermissions(context)) {
-                sInstance.preloadPhotosInBackground();
-            }
-        }
-        return sInstance;
-    }
-
-    public static synchronized ContactPhotoManager createContactPhotoManager(Context context) {
-        return new ContactPhotoManagerImpl(context);
-    }
-
-    @VisibleForTesting
-    public static void injectContactPhotoManagerForTesting(ContactPhotoManager photoManager) {
-        sInstance = photoManager;
-    }
-
-    /**
-     * Load thumbnail image into the supplied image view. If the photo is already cached,
-     * it is displayed immediately.  Otherwise a request is sent to load the photo
-     * from the database.
-     */
-    public abstract void loadThumbnail(ImageView view, long photoId, boolean darkTheme,
-            boolean isCircular, DefaultImageRequest defaultImageRequest,
-            DefaultImageProvider defaultProvider);
-
-    /**
-     * Calls {@link #loadThumbnail(ImageView, long, boolean, DefaultImageRequest,
-     * DefaultImageProvider)} using the {@link DefaultImageProvider} {@link #DEFAULT_AVATAR}.
-     */
-    public final void loadThumbnail(ImageView view, long photoId, boolean darkTheme,
-            boolean isCircular, DefaultImageRequest defaultImageRequest) {
-        loadThumbnail(view, photoId, darkTheme, isCircular, defaultImageRequest, DEFAULT_AVATAR);
-    }
-
-
-    /**
-     * Load photo into the supplied image view. If the photo is already cached,
-     * it is displayed immediately. Otherwise a request is sent to load the photo
-     * from the location specified by the URI.
-     *
-     * @param view The target view
-     * @param photoUri The uri of the photo to load
-     * @param requestedExtent Specifies an approximate Max(width, height) of the targetView.
-     * This is useful if the source image can be a lot bigger that the target, so that the decoding
-     * is done using efficient sampling. If requestedExtent is specified, no sampling of the image
-     * is performed
-     * @param darkTheme Whether the background is dark. This is used for default avatars
-     * @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a default
-     * letter tile avatar should be drawn.
-     * @param defaultProvider The provider of default avatars (this is used if photoUri doesn't
-     * refer to an existing image)
-     */
-    public abstract void loadPhoto(ImageView view, Uri photoUri, int requestedExtent,
-            boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest,
-            DefaultImageProvider defaultProvider);
-
-    /**
-     * Calls {@link #loadPhoto(ImageView, Uri, int, boolean, DefaultImageRequest,
-     * DefaultImageProvider)} with {@link #DEFAULT_AVATAR} and {@code null} display names and
-     * lookup keys.
-     *
-     * @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a default
-     * letter tile avatar should be drawn.
-     */
-    public final void loadPhoto(ImageView view, Uri photoUri, int requestedExtent,
-            boolean darkTheme, boolean isCircular, DefaultImageRequest defaultImageRequest) {
-        loadPhoto(view, photoUri, requestedExtent, darkTheme, isCircular,
-                defaultImageRequest, DEFAULT_AVATAR);
-    }
-
-    /**
-     * Calls {@link #loadPhoto(ImageView, Uri, boolean, boolean, DefaultImageRequest,
-     * DefaultImageProvider)} with {@link #DEFAULT_AVATAR} and with the assumption, that
-     * the image is a thumbnail.
-     *
-     * @param defaultImageRequest {@link DefaultImageRequest} object that specifies how a default
-     * letter tile avatar should be drawn.
-     */
-    public final void loadDirectoryPhoto(ImageView view, Uri photoUri, boolean darkTheme,
-            boolean isCircular, DefaultImageRequest defaultImageRequest) {
-        loadPhoto(view, photoUri, -1, darkTheme, isCircular, defaultImageRequest, DEFAULT_AVATAR);
-    }
-
-    /**
-     * Remove photo from the supplied image view. This also cancels current pending load request
-     * inside this photo manager.
-     */
-    public abstract void removePhoto(ImageView view);
-
-    /**
-     * Cancels all pending requests to load photos asynchronously.
-     */
-    public abstract void cancelPendingRequests(View fragmentRootView);
-
-    /**
-     * Temporarily stops loading photos from the database.
-     */
-    public abstract void pause();
-
-    /**
-     * Resumes loading photos from the database.
-     */
-    public abstract void resume();
-
-    /**
-     * Marks all cached photos for reloading.  We can continue using cache but should
-     * also make sure the photos haven't changed in the background and notify the views
-     * if so.
-     */
-    public abstract void refreshCache();
-
-    /**
-     * Stores the given bitmap directly in the LRU bitmap cache.
-     * @param photoUri The URI of the photo (for future requests).
-     * @param bitmap The bitmap.
-     * @param photoBytes The bytes that were parsed to create the bitmap.
-     */
-    public abstract void cacheBitmap(Uri photoUri, Bitmap bitmap, byte[] photoBytes);
-
-    /**
-     * Initiates a background process that over time will fill up cache with
-     * preload photos.
-     */
-    public abstract void preloadPhotosInBackground();
-
-    // ComponentCallbacks2
-    @Override
-    public void onConfigurationChanged(Configuration newConfig) {
-    }
-
-    // ComponentCallbacks2
-    @Override
-    public void onLowMemory() {
-    }
-
-    // ComponentCallbacks2
-    @Override
-    public void onTrimMemory(int level) {
-    }
-}
-
-class ContactPhotoManagerImpl extends ContactPhotoManager implements Callback {
-    private static final String LOADER_THREAD_NAME = "ContactPhotoLoader";
-
-    private static final int FADE_TRANSITION_DURATION = 200;
-
-    /**
-     * Type of message sent by the UI thread to itself to indicate that some photos
-     * need to be loaded.
-     */
-    private static final int MESSAGE_REQUEST_LOADING = 1;
-
-    /**
-     * Type of message sent by the loader thread to indicate that some photos have
-     * been loaded.
-     */
-    private static final int MESSAGE_PHOTOS_LOADED = 2;
-
-    private static final String[] EMPTY_STRING_ARRAY = new String[0];
-
-    private static final String[] COLUMNS = new String[] { Photo._ID, Photo.PHOTO };
-
-    /**
-     * Dummy object used to indicate that a bitmap for a given key could not be stored in the
-     * cache.
-     */
-    private static final BitmapHolder BITMAP_UNAVAILABLE;
-
-    static {
-        BITMAP_UNAVAILABLE = new BitmapHolder(new byte[0], 0);
-        BITMAP_UNAVAILABLE.bitmapRef = new SoftReference<Bitmap>(null);
-    }
-
-    /**
-     * Maintains the state of a particular photo.
-     */
-    private static class BitmapHolder {
-        final byte[] bytes;
-        final int originalSmallerExtent;
-
-        volatile boolean fresh;
-        Bitmap bitmap;
-        Reference<Bitmap> bitmapRef;
-        int decodedSampleSize;
-
-        public BitmapHolder(byte[] bytes, int originalSmallerExtent) {
-            this.bytes = bytes;
-            this.fresh = true;
-            this.originalSmallerExtent = originalSmallerExtent;
-        }
-    }
-
-    private final Context mContext;
-
-    /**
-     * An LRU cache for bitmap holders. The cache contains bytes for photos just
-     * as they come from the database. Each holder has a soft reference to the
-     * actual bitmap.
-     */
-    private final LruCache<Object, BitmapHolder> mBitmapHolderCache;
-
-    /**
-     * {@code true} if ALL entries in {@link #mBitmapHolderCache} are NOT fresh.
-     */
-    private volatile boolean mBitmapHolderCacheAllUnfresh = true;
-
-    /**
-     * Cache size threshold at which bitmaps will not be preloaded.
-     */
-    private final int mBitmapHolderCacheRedZoneBytes;
-
-    /**
-     * Level 2 LRU cache for bitmaps. This is a smaller cache that holds
-     * the most recently used bitmaps to save time on decoding
-     * them from bytes (the bytes are stored in {@link #mBitmapHolderCache}.
-     */
-    private final LruCache<Object, Bitmap> mBitmapCache;
-
-    /**
-     * A map from ImageView to the corresponding photo ID or uri, encapsulated in a request.
-     * The request may swapped out before the photo loading request is started.
-     */
-    private final ConcurrentHashMap<ImageView, Request> mPendingRequests =
-            new ConcurrentHashMap<ImageView, Request>();
-
-    /**
-     * Handler for messages sent to the UI thread.
-     */
-    private final Handler mMainThreadHandler = new Handler(this);
-
-    /**
-     * Thread responsible for loading photos from the database. Created upon
-     * the first request.
-     */
-    private LoaderThread mLoaderThread;
-
-    /**
-     * A gate to make sure we only send one instance of MESSAGE_PHOTOS_NEEDED at a time.
-     */
-    private boolean mLoadingRequested;
-
-    /**
-     * Flag indicating if the image loading is paused.
-     */
-    private boolean mPaused;
-
-    /** Cache size for {@link #mBitmapHolderCache} for devices with "large" RAM. */
-    private static final int HOLDER_CACHE_SIZE = 2000000;
-
-    /** Cache size for {@link #mBitmapCache} for devices with "large" RAM. */
-    private static final int BITMAP_CACHE_SIZE = 36864 * 48; // 1728K
-
-    /** Height/width of a thumbnail image */
-    private static int mThumbnailSize;
-
-    /** For debug: How many times we had to reload cached photo for a stale entry */
-    private final AtomicInteger mStaleCacheOverwrite = new AtomicInteger();
-
-    /** For debug: How many times we had to reload cached photo for a fresh entry.  Should be 0. */
-    private final AtomicInteger mFreshCacheOverwrite = new AtomicInteger();
-
-    /**
-     * The user agent string to use when loading URI based photos.
-     */
-    private String mUserAgent;
-
-    public ContactPhotoManagerImpl(Context context) {
-        mContext = context;
-
-        final ActivityManager am = ((ActivityManager) context.getSystemService(
-                Context.ACTIVITY_SERVICE));
-
-        final float cacheSizeAdjustment = (am.isLowRamDevice()) ? 0.5f : 1.0f;
-
-        final int bitmapCacheSize = (int) (cacheSizeAdjustment * BITMAP_CACHE_SIZE);
-        mBitmapCache = new LruCache<Object, Bitmap>(bitmapCacheSize) {
-            @Override protected int sizeOf(Object key, Bitmap value) {
-                return value.getByteCount();
-            }
-
-            @Override protected void entryRemoved(
-                    boolean evicted, Object key, Bitmap oldValue, Bitmap newValue) {
-                if (DEBUG) dumpStats();
-            }
-        };
-        final int holderCacheSize = (int) (cacheSizeAdjustment * HOLDER_CACHE_SIZE);
-        mBitmapHolderCache = new LruCache<Object, BitmapHolder>(holderCacheSize) {
-            @Override protected int sizeOf(Object key, BitmapHolder value) {
-                return value.bytes != null ? value.bytes.length : 0;
-            }
-
-            @Override protected void entryRemoved(
-                    boolean evicted, Object key, BitmapHolder oldValue, BitmapHolder newValue) {
-                if (DEBUG) dumpStats();
-            }
-        };
-        mBitmapHolderCacheRedZoneBytes = (int) (holderCacheSize * 0.75);
-        Log.i(TAG, "Cache adj: " + cacheSizeAdjustment);
-        if (DEBUG) {
-            Log.d(TAG, "Cache size: " + btk(mBitmapHolderCache.maxSize())
-                    + " + " + btk(mBitmapCache.maxSize()));
-        }
-
-        mThumbnailSize = context.getResources().getDimensionPixelSize(
-                R.dimen.contact_browser_list_item_photo_size);
-
-        // Get a user agent string to use for URI photo requests.
-        mUserAgent = UserAgentGenerator.getUserAgent(context);
-        if (mUserAgent == null) {
-            mUserAgent = "";
-        }
-    }
-
-    /** Converts bytes to K bytes, rounding up.  Used only for debug log. */
-    private static String btk(int bytes) {
-        return ((bytes + 1023) / 1024) + "K";
-    }
-
-    private static final int safeDiv(int dividend, int divisor) {
-        return (divisor  == 0) ? 0 : (dividend / divisor);
-    }
-
-    /**
-     * Dump cache stats on logcat.
-     */
-    private void dumpStats() {
-        if (!DEBUG) return;
-        {
-            int numHolders = 0;
-            int rawBytes = 0;
-            int bitmapBytes = 0;
-            int numBitmaps = 0;
-            for (BitmapHolder h : mBitmapHolderCache.snapshot().values()) {
-                numHolders++;
-                if (h.bytes != null) {
-                    rawBytes += h.bytes.length;
-                }
-                Bitmap b = h.bitmapRef != null ? h.bitmapRef.get() : null;
-                if (b != null) {
-                    numBitmaps++;
-                    bitmapBytes += b.getByteCount();
-                }
-            }
-            Log.d(TAG, "L1: " + btk(rawBytes) + " + " + btk(bitmapBytes) + " = "
-                    + btk(rawBytes + bitmapBytes) + ", " + numHolders + " holders, "
-                    + numBitmaps + " bitmaps, avg: "
-                    + btk(safeDiv(rawBytes, numHolders))
-                    + "," + btk(safeDiv(bitmapBytes,numBitmaps)));
-            Log.d(TAG, "L1 Stats: " + mBitmapHolderCache.toString()
-                    + ", overwrite: fresh=" + mFreshCacheOverwrite.get()
-                    + " stale=" + mStaleCacheOverwrite.get());
-        }
-
-        {
-            int numBitmaps = 0;
-            int bitmapBytes = 0;
-            for (Bitmap b : mBitmapCache.snapshot().values()) {
-                numBitmaps++;
-                bitmapBytes += b.getByteCount();
-            }
-            Log.d(TAG, "L2: " + btk(bitmapBytes) + ", " + numBitmaps + " bitmaps"
-                    + ", avg: " + btk(safeDiv(bitmapBytes, numBitmaps)));
-            // We don't get from L2 cache, so L2 stats is meaningless.
-        }
-    }
-
-    @Override
-    public void onTrimMemory(int level) {
-        if (DEBUG) Log.d(TAG, "onTrimMemory: " + level);
-        if (level >= ComponentCallbacks2.TRIM_MEMORY_MODERATE) {
-            // Clear the caches.  Note all pending requests will be removed too.
-            clear();
-        }
-    }
-
-    @Override
-    public void preloadPhotosInBackground() {
-        ensureLoaderThread();
-        mLoaderThread.requestPreloading();
-    }
-
-    @Override
-    public void loadThumbnail(ImageView view, long photoId, boolean darkTheme, boolean isCircular,
-            DefaultImageRequest defaultImageRequest, DefaultImageProvider defaultProvider) {
-        if (photoId == 0) {
-            // No photo is needed
-            defaultProvider.applyDefaultImage(view, -1, darkTheme, defaultImageRequest);
-            mPendingRequests.remove(view);
-        } else {
-            if (DEBUG) Log.d(TAG, "loadPhoto request: " + photoId);
-            loadPhotoByIdOrUri(view, Request.createFromThumbnailId(photoId, darkTheme, isCircular,
-                    defaultProvider, defaultImageRequest));
-        }
-    }
-
-    @Override
-    public void loadPhoto(ImageView view, Uri photoUri, int requestedExtent, boolean darkTheme,
-            boolean isCircular, DefaultImageRequest defaultImageRequest,
-            DefaultImageProvider defaultProvider) {
-        if (photoUri == null) {
-            // No photo is needed
-            defaultProvider.applyDefaultImage(view, requestedExtent, darkTheme,
-                    defaultImageRequest);
-            mPendingRequests.remove(view);
-        } else {
-            if (DEBUG) Log.d(TAG, "loadPhoto request: " + photoUri);
-            if (isDefaultImageUri(photoUri)) {
-                createAndApplyDefaultImageForUri(view, photoUri, requestedExtent, darkTheme,
-                        isCircular, defaultProvider);
-            } else {
-                loadPhotoByIdOrUri(view, Request.createFromUri(photoUri, requestedExtent,
-                        darkTheme, isCircular, defaultProvider, defaultImageRequest));
-            }
-        }
-    }
-
-    private void createAndApplyDefaultImageForUri(ImageView view, Uri uri, int requestedExtent,
-            boolean darkTheme, boolean isCircular, DefaultImageProvider defaultProvider) {
-        DefaultImageRequest request = getDefaultImageRequestFromUri(uri);
-        request.isCircular = isCircular;
-        defaultProvider.applyDefaultImage(view, requestedExtent, darkTheme, request);
-    }
-
-    private void loadPhotoByIdOrUri(ImageView view, Request request) {
-        boolean loaded = loadCachedPhoto(view, request, false);
-        if (loaded) {
-            mPendingRequests.remove(view);
-        } else {
-            mPendingRequests.put(view, request);
-            if (!mPaused) {
-                // Send a request to start loading photos
-                requestLoading();
-            }
-        }
-    }
-
-    @Override
-    public void removePhoto(ImageView view) {
-        view.setImageDrawable(null);
-        mPendingRequests.remove(view);
-    }
-
-
-    /**
-     * Cancels pending requests to load photos asynchronously for views inside
-     * {@param fragmentRootView}. If {@param fragmentRootView} is null, cancels all requests.
-     */
-    @Override
-    public void cancelPendingRequests(View fragmentRootView) {
-        if (fragmentRootView == null) {
-            mPendingRequests.clear();
-            return;
-        }
-        final Iterator<Entry<ImageView, Request>> iterator = mPendingRequests.entrySet().iterator();
-        while (iterator.hasNext()) {
-            final ImageView imageView = iterator.next().getKey();
-            // If an ImageView is orphaned (currently scrap) or a child of fragmentRootView, then
-            // we can safely remove its request.
-            if (imageView.getParent() == null || isChildView(fragmentRootView, imageView)) {
-                iterator.remove();
-            }
-        }
-    }
-
-    private static boolean isChildView(View parent, View potentialChild) {
-        return potentialChild.getParent() != null && (potentialChild.getParent() == parent || (
-                potentialChild.getParent() instanceof ViewGroup && isChildView(parent,
-                        (ViewGroup) potentialChild.getParent())));
-    }
-
-    @Override
-    public void refreshCache() {
-        if (mBitmapHolderCacheAllUnfresh) {
-            if (DEBUG) Log.d(TAG, "refreshCache -- no fresh entries.");
-            return;
-        }
-        if (DEBUG) Log.d(TAG, "refreshCache");
-        mBitmapHolderCacheAllUnfresh = true;
-        for (BitmapHolder holder : mBitmapHolderCache.snapshot().values()) {
-            if (holder != BITMAP_UNAVAILABLE) {
-                holder.fresh = false;
-            }
-        }
-    }
-
-    /**
-     * Checks if the photo is present in cache.  If so, sets the photo on the view.
-     *
-     * @return false if the photo needs to be (re)loaded from the provider.
-     */
-    private boolean loadCachedPhoto(ImageView view, Request request, boolean fadeIn) {
-        BitmapHolder holder = mBitmapHolderCache.get(request.getKey());
-        if (holder == null) {
-            // The bitmap has not been loaded ==> show default avatar
-            request.applyDefaultImage(view, request.mIsCircular);
-            return false;
-        }
-
-        if (holder.bytes == null || holder.bytes.length == 0) {
-            request.applyDefaultImage(view, request.mIsCircular);
-            return holder.fresh;
-        }
-
-        Bitmap cachedBitmap = holder.bitmapRef == null ? null : holder.bitmapRef.get();
-        if (cachedBitmap == null) {
-            if (holder.bytes.length < 8 * 1024) {
-                // Small thumbnails are usually quick to inflate. Let's do that on the UI thread
-                inflateBitmap(holder, request.getRequestedExtent());
-                cachedBitmap = holder.bitmap;
-                if (cachedBitmap == null) return false;
-            } else {
-                // This is bigger data. Let's send that back to the Loader so that we can
-                // inflate this in the background
-                request.applyDefaultImage(view, request.mIsCircular);
-                return false;
-            }
-        }
-
-        final Drawable previousDrawable = view.getDrawable();
-        if (fadeIn && previousDrawable != null) {
-            final Drawable[] layers = new Drawable[2];
-            // Prevent cascade of TransitionDrawables.
-            if (previousDrawable instanceof TransitionDrawable) {
-                final TransitionDrawable previousTransitionDrawable =
-                        (TransitionDrawable) previousDrawable;
-                layers[0] = previousTransitionDrawable.getDrawable(
-                        previousTransitionDrawable.getNumberOfLayers() - 1);
-            } else {
-                layers[0] = previousDrawable;
-            }
-            layers[1] = getDrawableForBitmap(mContext.getResources(), cachedBitmap, request);
-            TransitionDrawable drawable = new TransitionDrawable(layers);
-            view.setImageDrawable(drawable);
-            drawable.startTransition(FADE_TRANSITION_DURATION);
-        } else {
-            view.setImageDrawable(
-                    getDrawableForBitmap(mContext.getResources(), cachedBitmap, request));
-        }
-
-        // Put the bitmap in the LRU cache. But only do this for images that are small enough
-        // (we require that at least six of those can be cached at the same time)
-        if (cachedBitmap.getByteCount() < mBitmapCache.maxSize() / 6) {
-            mBitmapCache.put(request.getKey(), cachedBitmap);
-        }
-
-        // Soften the reference
-        holder.bitmap = null;
-
-        return holder.fresh;
-    }
-
-    /**
-     * Given a bitmap, returns a drawable that is configured to display the bitmap based on the
-     * specified request.
-     */
-    private Drawable getDrawableForBitmap(Resources resources, Bitmap bitmap, Request request) {
-        if (request.mIsCircular) {
-            final RoundedBitmapDrawable drawable =
-                    RoundedBitmapDrawableFactory.create(resources, bitmap);
-            drawable.setAntiAlias(true);
-            drawable.setCornerRadius(bitmap.getHeight() / 2);
-            return drawable;
-        } else {
-            return new BitmapDrawable(resources, bitmap);
-        }
-    }
-
-    /**
-     * If necessary, decodes bytes stored in the holder to Bitmap.  As long as the
-     * bitmap is held either by {@link #mBitmapCache} or by a soft reference in
-     * the holder, it will not be necessary to decode the bitmap.
-     */
-    private static void inflateBitmap(BitmapHolder holder, int requestedExtent) {
-        final int sampleSize =
-                BitmapUtil.findOptimalSampleSize(holder.originalSmallerExtent, requestedExtent);
-        byte[] bytes = holder.bytes;
-        if (bytes == null || bytes.length == 0) {
-            return;
-        }
-
-        if (sampleSize == holder.decodedSampleSize) {
-            // Check the soft reference.  If will be retained if the bitmap is also
-            // in the LRU cache, so we don't need to check the LRU cache explicitly.
-            if (holder.bitmapRef != null) {
-                holder.bitmap = holder.bitmapRef.get();
-                if (holder.bitmap != null) {
-                    return;
-                }
-            }
-        }
-
-        try {
-            Bitmap bitmap = BitmapUtil.decodeBitmapFromBytes(bytes, sampleSize);
-
-            // TODO: As a temporary workaround while framework support is being added to
-            // clip non-square bitmaps into a perfect circle, manually crop the bitmap into
-            // into a square if it will be displayed as a thumbnail so that it can be cropped
-            // into a circle.
-            final int height = bitmap.getHeight();
-            final int width = bitmap.getWidth();
-
-            // The smaller dimension of a scaled bitmap can range from anywhere from 0 to just
-            // below twice the length of a thumbnail image due to the way we calculate the optimal
-            // sample size.
-            if (height != width && Math.min(height, width) <= mThumbnailSize * 2) {
-                final int dimension = Math.min(height, width);
-                bitmap = ThumbnailUtils.extractThumbnail(bitmap, dimension, dimension);
-            }
-            // make bitmap mutable and draw size onto it
-            if (DEBUG_SIZES) {
-                Bitmap original = bitmap;
-                bitmap = bitmap.copy(bitmap.getConfig(), true);
-                original.recycle();
-                Canvas canvas = new Canvas(bitmap);
-                Paint paint = new Paint();
-                paint.setTextSize(16);
-                paint.setColor(Color.BLUE);
-                paint.setStyle(Style.FILL);
-                canvas.drawRect(0.0f, 0.0f, 50.0f, 20.0f, paint);
-                paint.setColor(Color.WHITE);
-                paint.setAntiAlias(true);
-                canvas.drawText(bitmap.getWidth() + "/" + sampleSize, 0, 15, paint);
-            }
-
-            holder.decodedSampleSize = sampleSize;
-            holder.bitmap = bitmap;
-            holder.bitmapRef = new SoftReference<Bitmap>(bitmap);
-            if (DEBUG) {
-                Log.d(TAG, "inflateBitmap " + btk(bytes.length) + " -> "
-                        + bitmap.getWidth() + "x" + bitmap.getHeight()
-                        + ", " + btk(bitmap.getByteCount()));
-            }
-        } catch (OutOfMemoryError e) {
-            // Do nothing - the photo will appear to be missing
-        }
-    }
-
-    public void clear() {
-        if (DEBUG) Log.d(TAG, "clear");
-        mPendingRequests.clear();
-        mBitmapHolderCache.evictAll();
-        mBitmapCache.evictAll();
-    }
-
-    @Override
-    public void pause() {
-        mPaused = true;
-    }
-
-    @Override
-    public void resume() {
-        mPaused = false;
-        if (DEBUG) dumpStats();
-        if (!mPendingRequests.isEmpty()) {
-            requestLoading();
-        }
-    }
-
-    /**
-     * Sends a message to this thread itself to start loading images.  If the current
-     * view contains multiple image views, all of those image views will get a chance
-     * to request their respective photos before any of those requests are executed.
-     * This allows us to load images in bulk.
-     */
-    private void requestLoading() {
-        if (!mLoadingRequested) {
-            mLoadingRequested = true;
-            mMainThreadHandler.sendEmptyMessage(MESSAGE_REQUEST_LOADING);
-        }
-    }
-
-    /**
-     * Processes requests on the main thread.
-     */
-    @Override
-    public boolean handleMessage(Message msg) {
-        switch (msg.what) {
-            case MESSAGE_REQUEST_LOADING: {
-                mLoadingRequested = false;
-                if (!mPaused) {
-                    ensureLoaderThread();
-                    mLoaderThread.requestLoading();
-                }
-                return true;
-            }
-
-            case MESSAGE_PHOTOS_LOADED: {
-                if (!mPaused) {
-                    processLoadedImages();
-                }
-                if (DEBUG) dumpStats();
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public void ensureLoaderThread() {
-        if (mLoaderThread == null) {
-            mLoaderThread = new LoaderThread(mContext.getContentResolver());
-            mLoaderThread.start();
-        }
-    }
-
-    /**
-     * Goes over pending loading requests and displays loaded photos.  If some of the
-     * photos still haven't been loaded, sends another request for image loading.
-     */
-    private void processLoadedImages() {
-        final Iterator<Entry<ImageView, Request>> iterator = mPendingRequests.entrySet().iterator();
-        while (iterator.hasNext()) {
-            final Entry<ImageView, Request> entry = iterator.next();
-            // TODO: Temporarily disable contact photo fading in, until issues with
-            // RoundedBitmapDrawables overlapping the default image drawables are resolved.
-            final boolean loaded = loadCachedPhoto(entry.getKey(), entry.getValue(), false);
-            if (loaded) {
-                iterator.remove();
-            }
-        }
-
-        softenCache();
-
-        if (!mPendingRequests.isEmpty()) {
-            requestLoading();
-        }
-    }
-
-    /**
-     * Removes strong references to loaded bitmaps to allow them to be garbage collected
-     * if needed.  Some of the bitmaps will still be retained by {@link #mBitmapCache}.
-     */
-    private void softenCache() {
-        for (BitmapHolder holder : mBitmapHolderCache.snapshot().values()) {
-            holder.bitmap = null;
-        }
-    }
-
-    /**
-     * Stores the supplied bitmap in cache.
-     * bytes should be null to indicate a failure to load the photo. An empty byte[] signifies
-     * a successful load but no photo was available.
-     */
-    private void cacheBitmap(Object key, byte[] bytes, boolean preloading, int requestedExtent) {
-        if (DEBUG) {
-            BitmapHolder prev = mBitmapHolderCache.get(key);
-            if (prev != null && prev.bytes != null) {
-                Log.d(TAG, "Overwriting cache: key=" + key + (prev.fresh ? " FRESH" : " stale"));
-                if (prev.fresh) {
-                    mFreshCacheOverwrite.incrementAndGet();
-                } else {
-                    mStaleCacheOverwrite.incrementAndGet();
-                }
-            }
-            Log.d(TAG, "Caching data: key=" + key + ", " +
-                    (bytes == null ? "<null>" : btk(bytes.length)));
-        }
-        BitmapHolder holder = new BitmapHolder(bytes,
-                bytes == null ? -1 : BitmapUtil.getSmallerExtentFromBytes(bytes));
-
-        // Unless this image is being preloaded, decode it right away while
-        // we are still on the background thread.
-        if (!preloading) {
-            inflateBitmap(holder, requestedExtent);
-        }
-
-        if (bytes != null) {
-            mBitmapHolderCache.put(key, holder);
-            if (mBitmapHolderCache.get(key) != holder) {
-                Log.w(TAG, "Bitmap too big to fit in cache.");
-                mBitmapHolderCache.put(key, BITMAP_UNAVAILABLE);
-            }
-        } else {
-            mBitmapHolderCache.put(key, BITMAP_UNAVAILABLE);
-        }
-
-        mBitmapHolderCacheAllUnfresh = false;
-    }
-
-    @Override
-    public void cacheBitmap(Uri photoUri, Bitmap bitmap, byte[] photoBytes) {
-        final int smallerExtent = Math.min(bitmap.getWidth(), bitmap.getHeight());
-        // We can pretend here that the extent of the photo was the size that we originally
-        // requested
-        Request request = Request.createFromUri(photoUri, smallerExtent, false /* darkTheme */,
-                false /* isCircular */ , DEFAULT_AVATAR);
-        BitmapHolder holder = new BitmapHolder(photoBytes, smallerExtent);
-        holder.bitmapRef = new SoftReference<Bitmap>(bitmap);
-        mBitmapHolderCache.put(request.getKey(), holder);
-        mBitmapHolderCacheAllUnfresh = false;
-        mBitmapCache.put(request.getKey(), bitmap);
-    }
-
-    /**
-     * Populates an array of photo IDs that need to be loaded. Also decodes bitmaps that we have
-     * already loaded
-     */
-    private void obtainPhotoIdsAndUrisToLoad(Set<Long> photoIds,
-            Set<String> photoIdsAsStrings, Set<Request> uris) {
-        photoIds.clear();
-        photoIdsAsStrings.clear();
-        uris.clear();
-
-        boolean jpegsDecoded = false;
-
-        /*
-         * Since the call is made from the loader thread, the map could be
-         * changing during the iteration. That's not really a problem:
-         * ConcurrentHashMap will allow those changes to happen without throwing
-         * exceptions. Since we may miss some requests in the situation of
-         * concurrent change, we will need to check the map again once loading
-         * is complete.
-         */
-        Iterator<Request> iterator = mPendingRequests.values().iterator();
-        while (iterator.hasNext()) {
-            Request request = iterator.next();
-            final BitmapHolder holder = mBitmapHolderCache.get(request.getKey());
-            if (holder == BITMAP_UNAVAILABLE) {
-                continue;
-            }
-            if (holder != null && holder.bytes != null && holder.fresh &&
-                    (holder.bitmapRef == null || holder.bitmapRef.get() == null)) {
-                // This was previously loaded but we don't currently have the inflated Bitmap
-                inflateBitmap(holder, request.getRequestedExtent());
-                jpegsDecoded = true;
-            } else {
-                if (holder == null || !holder.fresh) {
-                    if (request.isUriRequest()) {
-                        uris.add(request);
-                    } else {
-                        photoIds.add(request.getId());
-                        photoIdsAsStrings.add(String.valueOf(request.mId));
-                    }
-                }
-            }
-        }
-
-        if (jpegsDecoded) mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
-    }
-
-    /**
-     * The thread that performs loading of photos from the database.
-     */
-    private class LoaderThread extends HandlerThread implements Callback {
-        private static final int BUFFER_SIZE = 1024*16;
-        private static final int MESSAGE_PRELOAD_PHOTOS = 0;
-        private static final int MESSAGE_LOAD_PHOTOS = 1;
-
-        /**
-         * A pause between preload batches that yields to the UI thread.
-         */
-        private static final int PHOTO_PRELOAD_DELAY = 1000;
-
-        /**
-         * Number of photos to preload per batch.
-         */
-        private static final int PRELOAD_BATCH = 25;
-
-        /**
-         * Maximum number of photos to preload.  If the cache size is 2Mb and
-         * the expected average size of a photo is 4kb, then this number should be 2Mb/4kb = 500.
-         */
-        private static final int MAX_PHOTOS_TO_PRELOAD = 100;
-
-        private final ContentResolver mResolver;
-        private final StringBuilder mStringBuilder = new StringBuilder();
-        private final Set<Long> mPhotoIds = Sets.newHashSet();
-        private final Set<String> mPhotoIdsAsStrings = Sets.newHashSet();
-        private final Set<Request> mPhotoUris = Sets.newHashSet();
-        private final List<Long> mPreloadPhotoIds = Lists.newArrayList();
-
-        private Handler mLoaderThreadHandler;
-        private byte mBuffer[];
-
-        private static final int PRELOAD_STATUS_NOT_STARTED = 0;
-        private static final int PRELOAD_STATUS_IN_PROGRESS = 1;
-        private static final int PRELOAD_STATUS_DONE = 2;
-
-        private int mPreloadStatus = PRELOAD_STATUS_NOT_STARTED;
-
-        public LoaderThread(ContentResolver resolver) {
-            super(LOADER_THREAD_NAME);
-            mResolver = resolver;
-        }
-
-        public void ensureHandler() {
-            if (mLoaderThreadHandler == null) {
-                mLoaderThreadHandler = new Handler(getLooper(), this);
-            }
-        }
-
-        /**
-         * Kicks off preloading of the next batch of photos on the background thread.
-         * Preloading will happen after a delay: we want to yield to the UI thread
-         * as much as possible.
-         * <p>
-         * If preloading is already complete, does nothing.
-         */
-        public void requestPreloading() {
-            if (mPreloadStatus == PRELOAD_STATUS_DONE) {
-                return;
-            }
-
-            ensureHandler();
-            if (mLoaderThreadHandler.hasMessages(MESSAGE_LOAD_PHOTOS)) {
-                return;
-            }
-
-            mLoaderThreadHandler.sendEmptyMessageDelayed(
-                    MESSAGE_PRELOAD_PHOTOS, PHOTO_PRELOAD_DELAY);
-        }
-
-        /**
-         * Sends a message to this thread to load requested photos.  Cancels a preloading
-         * request, if any: we don't want preloading to impede loading of the photos
-         * we need to display now.
-         */
-        public void requestLoading() {
-            ensureHandler();
-            mLoaderThreadHandler.removeMessages(MESSAGE_PRELOAD_PHOTOS);
-            mLoaderThreadHandler.sendEmptyMessage(MESSAGE_LOAD_PHOTOS);
-        }
-
-        /**
-         * Receives the above message, loads photos and then sends a message
-         * to the main thread to process them.
-         */
-        @Override
-        public boolean handleMessage(Message msg) {
-            switch (msg.what) {
-                case MESSAGE_PRELOAD_PHOTOS:
-                    preloadPhotosInBackground();
-                    break;
-                case MESSAGE_LOAD_PHOTOS:
-                    loadPhotosInBackground();
-                    break;
-            }
-            return true;
-        }
-
-        /**
-         * The first time it is called, figures out which photos need to be preloaded.
-         * Each subsequent call preloads the next batch of photos and requests
-         * another cycle of preloading after a delay.  The whole process ends when
-         * we either run out of photos to preload or fill up cache.
-         */
-        private void preloadPhotosInBackground() {
-            if (mPreloadStatus == PRELOAD_STATUS_DONE) {
-                return;
-            }
-
-            if (mPreloadStatus == PRELOAD_STATUS_NOT_STARTED) {
-                queryPhotosForPreload();
-                if (mPreloadPhotoIds.isEmpty()) {
-                    mPreloadStatus = PRELOAD_STATUS_DONE;
-                } else {
-                    mPreloadStatus = PRELOAD_STATUS_IN_PROGRESS;
-                }
-                requestPreloading();
-                return;
-            }
-
-            if (mBitmapHolderCache.size() > mBitmapHolderCacheRedZoneBytes) {
-                mPreloadStatus = PRELOAD_STATUS_DONE;
-                return;
-            }
-
-            mPhotoIds.clear();
-            mPhotoIdsAsStrings.clear();
-
-            int count = 0;
-            int preloadSize = mPreloadPhotoIds.size();
-            while(preloadSize > 0 && mPhotoIds.size() < PRELOAD_BATCH) {
-                preloadSize--;
-                count++;
-                Long photoId = mPreloadPhotoIds.get(preloadSize);
-                mPhotoIds.add(photoId);
-                mPhotoIdsAsStrings.add(photoId.toString());
-                mPreloadPhotoIds.remove(preloadSize);
-            }
-
-            loadThumbnails(true);
-
-            if (preloadSize == 0) {
-                mPreloadStatus = PRELOAD_STATUS_DONE;
-            }
-
-            Log.v(TAG, "Preloaded " + count + " photos.  Cached bytes: "
-                    + mBitmapHolderCache.size());
-
-            requestPreloading();
-        }
-
-        private void queryPhotosForPreload() {
-            Cursor cursor = null;
-            try {
-                Uri uri = Contacts.CONTENT_URI.buildUpon().appendQueryParameter(
-                        ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
-                        .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
-                                String.valueOf(MAX_PHOTOS_TO_PRELOAD))
-                        .build();
-                cursor = mResolver.query(uri, new String[] { Contacts.PHOTO_ID },
-                        Contacts.PHOTO_ID + " NOT NULL AND " + Contacts.PHOTO_ID + "!=0",
-                        null,
-                        Contacts.STARRED + " DESC, " + Contacts.LAST_TIME_CONTACTED + " DESC");
-
-                if (cursor != null) {
-                    while (cursor.moveToNext()) {
-                        // Insert them in reverse order, because we will be taking
-                        // them from the end of the list for loading.
-                        mPreloadPhotoIds.add(0, cursor.getLong(0));
-                    }
-                }
-            } finally {
-                if (cursor != null) {
-                    cursor.close();
-                }
-            }
-        }
-
-        private void loadPhotosInBackground() {
-            if (!PermissionsUtil.hasPermission(mContext,
-                    android.Manifest.permission.READ_CONTACTS)) {
-                return;
-            }
-            obtainPhotoIdsAndUrisToLoad(mPhotoIds, mPhotoIdsAsStrings, mPhotoUris);
-            loadThumbnails(false);
-            loadUriBasedPhotos();
-            requestPreloading();
-        }
-
-        /** Loads thumbnail photos with ids */
-        private void loadThumbnails(boolean preloading) {
-            if (mPhotoIds.isEmpty()) {
-                return;
-            }
-
-            // Remove loaded photos from the preload queue: we don't want
-            // the preloading process to load them again.
-            if (!preloading && mPreloadStatus == PRELOAD_STATUS_IN_PROGRESS) {
-                for (Long id : mPhotoIds) {
-                    mPreloadPhotoIds.remove(id);
-                }
-                if (mPreloadPhotoIds.isEmpty()) {
-                    mPreloadStatus = PRELOAD_STATUS_DONE;
-                }
-            }
-
-            mStringBuilder.setLength(0);
-            mStringBuilder.append(Photo._ID + " IN(");
-            for (int i = 0; i < mPhotoIds.size(); i++) {
-                if (i != 0) {
-                    mStringBuilder.append(',');
-                }
-                mStringBuilder.append('?');
-            }
-            mStringBuilder.append(')');
-
-            Cursor cursor = null;
-            try {
-                if (DEBUG) Log.d(TAG, "Loading " + TextUtils.join(",", mPhotoIdsAsStrings));
-                cursor = mResolver.query(Data.CONTENT_URI,
-                        COLUMNS,
-                        mStringBuilder.toString(),
-                        mPhotoIdsAsStrings.toArray(EMPTY_STRING_ARRAY),
-                        null);
-
-                if (cursor != null) {
-                    while (cursor.moveToNext()) {
-                        Long id = cursor.getLong(0);
-                        byte[] bytes = cursor.getBlob(1);
-                        if (bytes == null) {
-                            bytes = new byte[0];
-                        }
-                        cacheBitmap(id, bytes, preloading, -1);
-                        mPhotoIds.remove(id);
-                    }
-                }
-            } finally {
-                if (cursor != null) {
-                    cursor.close();
-                }
-            }
-
-            // Remaining photos were not found in the contacts database (but might be in profile).
-            for (Long id : mPhotoIds) {
-                if (ContactsContract.isProfileId(id)) {
-                    Cursor profileCursor = null;
-                    try {
-                        profileCursor = mResolver.query(
-                                ContentUris.withAppendedId(Data.CONTENT_URI, id),
-                                COLUMNS, null, null, null);
-                        if (profileCursor != null && profileCursor.moveToFirst()) {
-                            byte[] bytes = profileCursor.getBlob(1);
-                            if (bytes == null) {
-                                bytes = new byte[0];
-                            }
-                            cacheBitmap(profileCursor.getLong(0), bytes, preloading, -1);
-                        } else {
-                            // Couldn't load a photo this way either.
-                            cacheBitmap(id, null, preloading, -1);
-                        }
-                    } finally {
-                        if (profileCursor != null) {
-                            profileCursor.close();
-                        }
-                    }
-                } else {
-                    // Not a profile photo and not found - mark the cache accordingly
-                    cacheBitmap(id, null, preloading, -1);
-                }
-            }
-
-            mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
-        }
-
-        /**
-         * Loads photos referenced with Uris. Those can be remote thumbnails
-         * (from directory searches), display photos etc
-         */
-        private void loadUriBasedPhotos() {
-            for (Request uriRequest : mPhotoUris) {
-                // Keep the original URI and use this to key into the cache.  Failure to do so will
-                // result in an image being continually reloaded into cache if the original URI
-                // has a contact type encodedFragment (eg nearby places business photo URLs).
-                Uri originalUri = uriRequest.getUri();
-
-                // Strip off the "contact type" we added to the URI to ensure it was identifiable as
-                // a business photo -- there is no need to pass this on to the server.
-                Uri uri = ContactPhotoManager.removeContactType(originalUri);
-
-                if (mBuffer == null) {
-                    mBuffer = new byte[BUFFER_SIZE];
-                }
-                try {
-                    if (DEBUG) Log.d(TAG, "Loading " + uri);
-                    final String scheme = uri.getScheme();
-                    InputStream is = null;
-                    if (scheme.equals("http") || scheme.equals("https")) {
-                        TrafficStats.setThreadStatsTag(TrafficStatsTags.CONTACT_PHOTO_DOWNLOAD_TAG);
-                        final HttpURLConnection connection =
-                                (HttpURLConnection) new URL(uri.toString()).openConnection();
-
-                        // Include the user agent if it is specified.
-                        if (!TextUtils.isEmpty(mUserAgent)) {
-                            connection.setRequestProperty("User-Agent", mUserAgent);
-                        }
-                        try {
-                            is = connection.getInputStream();
-                        } catch (IOException e) {
-                            connection.disconnect();
-                            is = null;
-                        }
-                        TrafficStats.clearThreadStatsTag();
-                    } else {
-                        is = mResolver.openInputStream(uri);
-                    }
-                    if (is != null) {
-                        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                        try {
-                            int size;
-                            while ((size = is.read(mBuffer)) != -1) {
-                                baos.write(mBuffer, 0, size);
-                            }
-                        } finally {
-                            is.close();
-                        }
-                        cacheBitmap(originalUri, baos.toByteArray(), false,
-                                uriRequest.getRequestedExtent());
-                        mMainThreadHandler.sendEmptyMessage(MESSAGE_PHOTOS_LOADED);
-                    } else {
-                        Log.v(TAG, "Cannot load photo " + uri);
-                        cacheBitmap(originalUri, null, false, uriRequest.getRequestedExtent());
-                    }
-                } catch (final Exception | OutOfMemoryError ex) {
-                    Log.v(TAG, "Cannot load photo " + uri, ex);
-                    cacheBitmap(originalUri, null, false, uriRequest.getRequestedExtent());
-                }
-            }
-        }
-    }
-
-    /**
-     * A holder for either a Uri or an id and a flag whether this was requested for the dark or
-     * light theme
-     */
-    private static final class Request {
-        private final long mId;
-        private final Uri mUri;
-        private final boolean mDarkTheme;
-        private final int mRequestedExtent;
-        private final DefaultImageProvider mDefaultProvider;
-        private final DefaultImageRequest mDefaultRequest;
-        /**
-         * Whether or not the contact photo is to be displayed as a circle
-         */
-        private final boolean mIsCircular;
-
-        private Request(long id, Uri uri, int requestedExtent, boolean darkTheme,
-                boolean isCircular, DefaultImageProvider defaultProvider,
-                DefaultImageRequest defaultRequest) {
-            mId = id;
-            mUri = uri;
-            mDarkTheme = darkTheme;
-            mIsCircular = isCircular;
-            mRequestedExtent = requestedExtent;
-            mDefaultProvider = defaultProvider;
-            mDefaultRequest = defaultRequest;
-        }
-
-        public static Request createFromThumbnailId(long id, boolean darkTheme, boolean isCircular,
-                DefaultImageProvider defaultProvider, DefaultImageRequest defaultRequest) {
-            return new Request(id, null /* no URI */, -1, darkTheme, isCircular, defaultProvider,
-                    defaultRequest);
-        }
-
-        public static Request createFromUri(Uri uri, int requestedExtent, boolean darkTheme,
-                boolean isCircular, DefaultImageProvider defaultProvider) {
-            return createFromUri(uri, requestedExtent, darkTheme, isCircular, defaultProvider,
-                    /* defaultRequest */ null);
-        }
-
-        public static Request createFromUri(Uri uri, int requestedExtent, boolean darkTheme,
-                boolean isCircular, DefaultImageProvider defaultProvider,
-                DefaultImageRequest defaultRequest) {
-            return new Request(0 /* no ID */, uri, requestedExtent, darkTheme, isCircular,
-                    defaultProvider, defaultRequest);
-        }
-
-        public boolean isUriRequest() {
-            return mUri != null;
-        }
-
-        public Uri getUri() {
-            return mUri;
-        }
-
-        public long getId() {
-            return mId;
-        }
-
-        public int getRequestedExtent() {
-            return mRequestedExtent;
-        }
-
-        @Override
-        public int hashCode() {
-            final int prime = 31;
-            int result = 1;
-            result = prime * result + (int) (mId ^ (mId >>> 32));
-            result = prime * result + mRequestedExtent;
-            result = prime * result + ((mUri == null) ? 0 : mUri.hashCode());
-            return result;
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (this == obj) return true;
-            if (obj == null) return false;
-            if (getClass() != obj.getClass()) return false;
-            final Request that = (Request) obj;
-            if (mId != that.mId) return false;
-            if (mRequestedExtent != that.mRequestedExtent) return false;
-            if (!UriUtils.areEqual(mUri, that.mUri)) return false;
-            // Don't compare equality of mDarkTheme because it is only used in the default contact
-            // photo case. When the contact does have a photo, the contact photo is the same
-            // regardless of mDarkTheme, so we shouldn't need to put the photo request on the queue
-            // twice.
-            return true;
-        }
-
-        public Object getKey() {
-            return mUri == null ? mId : mUri;
-        }
-
-        /**
-         * Applies the default image to the current view. If the request is URI-based, looks for
-         * the contact type encoded fragment to determine if this is a request for a business photo,
-         * in which case we will load the default business photo.
-         *
-         * @param view The current image view to apply the image to.
-         * @param isCircular Whether the image is circular or not.
-         */
-        public void applyDefaultImage(ImageView view, boolean isCircular) {
-            final DefaultImageRequest request;
-
-            if (mDefaultRequest == null) {
-                if (isCircular) {
-                    request = ContactPhotoManager.isBusinessContactUri(mUri)
-                            ? DefaultImageRequest.EMPTY_CIRCULAR_BUSINESS_IMAGE_REQUEST
-                            : DefaultImageRequest.EMPTY_CIRCULAR_DEFAULT_IMAGE_REQUEST;
-                } else {
-                    request = ContactPhotoManager.isBusinessContactUri(mUri)
-                            ? DefaultImageRequest.EMPTY_DEFAULT_BUSINESS_IMAGE_REQUEST
-                            : DefaultImageRequest.EMPTY_DEFAULT_IMAGE_REQUEST;
-                }
-            } else {
-                request = mDefaultRequest;
-            }
-            mDefaultProvider.applyDefaultImage(view, mRequestedExtent, mDarkTheme, request);
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/ContactPresenceIconUtil.java b/src/com/android/contacts/common/ContactPresenceIconUtil.java
deleted file mode 100644
index 2f4c9ee..0000000
--- a/src/com/android/contacts/common/ContactPresenceIconUtil.java
+++ /dev/null
@@ -1,48 +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.common;
-
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.provider.ContactsContract.StatusUpdates;
-
-/**
- * Define the contact present show policy in Contacts
- */
-public class ContactPresenceIconUtil {
-    /**
-     * Get the presence icon resource according the status.
-     *
-     * @return null means don't show the status icon.
-     */
-    public static Drawable getPresenceIcon (Context context, int status) {
-        // We don't show the offline status in Contacts
-        switch(status) {
-            case StatusUpdates.AVAILABLE:
-            case StatusUpdates.IDLE:
-            case StatusUpdates.AWAY:
-            case StatusUpdates.DO_NOT_DISTURB:
-            case StatusUpdates.INVISIBLE:
-                return context.getResources().getDrawable(
-                        StatusUpdates.getPresenceIconResourceId(status));
-            case StatusUpdates.OFFLINE:
-            // The undefined status is treated as OFFLINE in getPresenceIconResourceId();
-            default:
-                return null;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/ContactStatusUtil.java b/src/com/android/contacts/common/ContactStatusUtil.java
deleted file mode 100644
index a7d1925..0000000
--- a/src/com/android/contacts/common/ContactStatusUtil.java
+++ /dev/null
@@ -1,47 +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.common;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.provider.ContactsContract.StatusUpdates;
-
-/**
- * Provides static function to get default contact status message.
- */
-public class ContactStatusUtil {
-
-    private static final String TAG = "ContactStatusUtil";
-
-    public static String getStatusString(Context context, int presence) {
-        Resources resources = context.getResources();
-        switch (presence) {
-            case StatusUpdates.AVAILABLE:
-                return resources.getString(R.string.status_available);
-            case StatusUpdates.IDLE:
-            case StatusUpdates.AWAY:
-                return resources.getString(R.string.status_away);
-            case StatusUpdates.DO_NOT_DISTURB:
-                return resources.getString(R.string.status_busy);
-            case StatusUpdates.OFFLINE:
-            case StatusUpdates.INVISIBLE:
-            default:
-                return null;
-        }
-    }
-
-}
diff --git a/src/com/android/contacts/common/ContactTileLoaderFactory.java b/src/com/android/contacts/common/ContactTileLoaderFactory.java
deleted file mode 100644
index f75950e..0000000
--- a/src/com/android/contacts/common/ContactTileLoaderFactory.java
+++ /dev/null
@@ -1,108 +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.common;
-
-import com.google.common.annotations.VisibleForTesting;
-
-import android.content.Context;
-import android.content.CursorLoader;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.Contacts;
-
-/**
- * Used to create {@link CursorLoader}s to load different groups of
- * {@link com.android.contacts.list.ContactTileView}.
- */
-public final class ContactTileLoaderFactory {
-
-    public final static int CONTACT_ID = 0;
-    public final static int DISPLAY_NAME = 1;
-    public final static int STARRED = 2;
-    public final static int PHOTO_URI = 3;
-    public final static int LOOKUP_KEY = 4;
-    public final static int CONTACT_PRESENCE = 5;
-    public final static int CONTACT_STATUS = 6;
-
-    // Only used for StrequentPhoneOnlyLoader
-    public final static int PHONE_NUMBER = 5;
-    public final static int PHONE_NUMBER_TYPE = 6;
-    public final static int PHONE_NUMBER_LABEL = 7;
-    public final static int IS_DEFAULT_NUMBER = 8;
-    public final static int PINNED = 9;
-    // The _ID field returned for strequent items actually contains data._id instead of
-    // contacts._id because the query is performed on the data table. In order to obtain the
-    // contact id for strequent items, we thus have to use Phone.contact_id instead.
-    public final static int CONTACT_ID_FOR_DATA = 10;
-    public final static int DISPLAY_NAME_ALTERNATIVE = 11;
-
-    private static final String[] COLUMNS = new String[] {
-        Contacts._ID, // ..........................................0
-        Contacts.DISPLAY_NAME, // .................................1
-        Contacts.STARRED, // ......................................2
-        Contacts.PHOTO_URI, // ....................................3
-        Contacts.LOOKUP_KEY, // ...................................4
-        Contacts.CONTACT_PRESENCE, // .............................5
-        Contacts.CONTACT_STATUS, // ...............................6
-    };
-
-    /**
-     * Projection used for the {@link Contacts#CONTENT_STREQUENT_URI}
-     * query when {@link ContactsContract#STREQUENT_PHONE_ONLY} flag
-     * is set to true. The main difference is the lack of presence
-     * and status data and the addition of phone number and label.
-     */
-    @VisibleForTesting
-    public static final String[] COLUMNS_PHONE_ONLY = new String[] {
-        Contacts._ID, // ..........................................0
-        Contacts.DISPLAY_NAME_PRIMARY, // .........................1
-        Contacts.STARRED, // ......................................2
-        Contacts.PHOTO_URI, // ....................................3
-        Contacts.LOOKUP_KEY, // ...................................4
-        Phone.NUMBER, // ..........................................5
-        Phone.TYPE, // ............................................6
-        Phone.LABEL, // ...........................................7
-        Phone.IS_SUPER_PRIMARY, //.................................8
-        Contacts.PINNED, // .......................................9
-        Phone.CONTACT_ID, //.......................................10
-        Contacts.DISPLAY_NAME_ALTERNATIVE, // .....................11
-    };
-
-    private static final String STARRED_ORDER = Contacts.DISPLAY_NAME+" COLLATE NOCASE ASC";
-
-    public static CursorLoader createStrequentLoader(Context context) {
-        return new CursorLoader(context, Contacts.CONTENT_STREQUENT_URI, COLUMNS, null, null,
-                STARRED_ORDER);
-    }
-
-    public static CursorLoader createStrequentPhoneOnlyLoader(Context context) {
-        Uri uri = Contacts.CONTENT_STREQUENT_URI.buildUpon()
-                .appendQueryParameter(ContactsContract.STREQUENT_PHONE_ONLY, "true").build();
-
-        return new CursorLoader(context, uri, COLUMNS_PHONE_ONLY, null, null, null);
-    }
-
-    public static CursorLoader createStarredLoader(Context context) {
-        return new CursorLoader(context, Contacts.CONTENT_URI, COLUMNS, Contacts.STARRED + "=?",
-                new String[]{"1"},  STARRED_ORDER);
-    }
-
-    public static CursorLoader createFrequentLoader(Context context) {
-        return new CursorLoader(context, Contacts.CONTENT_FREQUENT_URI, COLUMNS,
-                 Contacts.STARRED + "=?", new String[]{"0"}, null);
-    }
-}
diff --git a/src/com/android/contacts/common/ContactsUtils.java b/src/com/android/contacts/common/ContactsUtils.java
deleted file mode 100644
index 0f8031c..0000000
--- a/src/com/android/contacts/common/ContactsUtils.java
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common;
-
-import android.content.Context;
-import android.content.Intent;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Build;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.support.annotation.IntDef;
-import android.provider.ContactsContract.DisplayPhoto;
-import android.text.TextUtils;
-import android.util.Pair;
-
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.dataitem.ImDataItem;
-import com.android.contacts.common.compat.ContactsCompat;
-import com.android.contacts.common.compat.DirectoryCompat;
-import com.android.contacts.common.model.AccountTypeManager;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.List;
-
-public class ContactsUtils {
-    private static final String TAG = "ContactsUtils";
-
-    // Telecomm related schemes are in CallUtil
-    public static final String SCHEME_IMTO = "imto";
-    public static final String SCHEME_MAILTO = "mailto";
-    public static final String SCHEME_SMSTO = "smsto";
-
-    private static final int DEFAULT_THUMBNAIL_SIZE = 96;
-
-    private static int sThumbnailSize = -1;
-
-    public static final boolean FLAG_N_FEATURE = Build.VERSION.SDK_INT >= 24;
-
-    // TODO find a proper place for the canonical version of these
-    public interface ProviderNames {
-        String YAHOO = "Yahoo";
-        String GTALK = "GTalk";
-        String MSN = "MSN";
-        String ICQ = "ICQ";
-        String AIM = "AIM";
-        String XMPP = "XMPP";
-        String JABBER = "JABBER";
-        String SKYPE = "SKYPE";
-        String QQ = "QQ";
-    }
-
-    /**
-     * This looks up the provider name defined in
-     * ProviderNames from the predefined IM protocol id.
-     * This is used for interacting with the IM application.
-     *
-     * @param protocol the protocol ID
-     * @return the provider name the IM app uses for the given protocol, or null if no
-     * provider is defined for the given protocol
-     * @hide
-     */
-    public static String lookupProviderNameFromId(int protocol) {
-        switch (protocol) {
-            case Im.PROTOCOL_GOOGLE_TALK:
-                return ProviderNames.GTALK;
-            case Im.PROTOCOL_AIM:
-                return ProviderNames.AIM;
-            case Im.PROTOCOL_MSN:
-                return ProviderNames.MSN;
-            case Im.PROTOCOL_YAHOO:
-                return ProviderNames.YAHOO;
-            case Im.PROTOCOL_ICQ:
-                return ProviderNames.ICQ;
-            case Im.PROTOCOL_JABBER:
-                return ProviderNames.JABBER;
-            case Im.PROTOCOL_SKYPE:
-                return ProviderNames.SKYPE;
-            case Im.PROTOCOL_QQ:
-                return ProviderNames.QQ;
-        }
-        return null;
-    }
-
-
-    public static final long USER_TYPE_CURRENT = 0;
-    public static final long USER_TYPE_WORK = 1;
-
-    /**
-     * UserType indicates the user type of the contact. If the contact is from Work User (Work
-     * Profile in Android Multi-User System), it's {@link #USER_TYPE_WORK}, otherwise,
-     * {@link #USER_TYPE_CURRENT}. Please note that current user can be in work profile, where the
-     * dialer is running inside Work Profile.
-     */
-    @Retention(RetentionPolicy.SOURCE)
-    @IntDef({USER_TYPE_CURRENT, USER_TYPE_WORK})
-    public @interface UserType {}
-
-    /**
-     * Test if the given {@link CharSequence} contains any graphic characters,
-     * first checking {@link TextUtils#isEmpty(CharSequence)} to handle null.
-     */
-    public static boolean isGraphic(CharSequence str) {
-        return !TextUtils.isEmpty(str) && TextUtils.isGraphic(str);
-    }
-
-    /**
-     * Returns true if two objects are considered equal.  Two null references are equal here.
-     */
-    public static boolean areObjectsEqual(Object a, Object b) {
-        return a == b || (a != null && a.equals(b));
-    }
-
-    /**
-     * Returns true if two {@link Intent}s are both null, or have the same action.
-     */
-    public static final boolean areIntentActionEqual(Intent a, Intent b) {
-        if (a == b) {
-            return true;
-        }
-        if (a == null || b == null) {
-            return false;
-        }
-        return TextUtils.equals(a.getAction(), b.getAction());
-    }
-
-    public static boolean areGroupWritableAccountsAvailable(Context context) {
-        final List<AccountWithDataSet> accounts =
-                AccountTypeManager.getInstance(context).getGroupWritableAccounts();
-        return !accounts.isEmpty();
-    }
-
-    /**
-     * Returns the size (width and height) of thumbnail pictures as configured in the provider. This
-     * can safely be called from the UI thread, as the provider can serve this without performing
-     * a database access
-     */
-    public static int getThumbnailSize(Context context) {
-        if (sThumbnailSize == -1) {
-            final Cursor c = context.getContentResolver().query(
-                    DisplayPhoto.CONTENT_MAX_DIMENSIONS_URI,
-                    new String[] { DisplayPhoto.THUMBNAIL_MAX_DIM }, null, null, null);
-            if (c != null) {
-                try {
-                    if (c.moveToFirst()) {
-                        sThumbnailSize = c.getInt(0);
-                    }
-                } finally {
-                    c.close();
-                }
-            }
-        }
-        return sThumbnailSize != -1 ? sThumbnailSize : DEFAULT_THUMBNAIL_SIZE;
-    }
-
-    private static Intent getCustomImIntent(ImDataItem im, int protocol) {
-        String host = im.getCustomProtocol();
-        final String data = im.getData();
-        if (TextUtils.isEmpty(data)) {
-            return null;
-        }
-        if (protocol != Im.PROTOCOL_CUSTOM) {
-            // Try bringing in a well-known host for specific protocols
-            host = ContactsUtils.lookupProviderNameFromId(protocol);
-        }
-        if (TextUtils.isEmpty(host)) {
-            return null;
-        }
-        final String authority = host.toLowerCase();
-        final Uri imUri = new Uri.Builder().scheme(SCHEME_IMTO).authority(
-                authority).appendPath(data).build();
-        final Intent intent = new Intent(Intent.ACTION_SENDTO, imUri);
-        return intent;
-    }
-
-    /**
-     * Returns the proper Intent for an ImDatItem. If available, a secondary intent is stored
-     * in the second Pair slot
-     */
-    public static Pair<Intent, Intent> buildImIntent(Context context, ImDataItem im) {
-        Intent intent = null;
-        Intent secondaryIntent = null;
-        final boolean isEmail = im.isCreatedFromEmail();
-
-        if (!isEmail && !im.isProtocolValid()) {
-            return new Pair<>(null, null);
-        }
-
-        final String data = im.getData();
-        if (TextUtils.isEmpty(data)) {
-            return new Pair<>(null, null);
-        }
-
-        final int protocol = isEmail ? Im.PROTOCOL_GOOGLE_TALK : im.getProtocol();
-
-        if (protocol == Im.PROTOCOL_GOOGLE_TALK) {
-            final int chatCapability = im.getChatCapability();
-            if ((chatCapability & Im.CAPABILITY_HAS_CAMERA) != 0) {
-                intent = new Intent(Intent.ACTION_SENDTO,
-                                Uri.parse("xmpp:" + data + "?message"));
-                secondaryIntent = new Intent(Intent.ACTION_SENDTO,
-                        Uri.parse("xmpp:" + data + "?call"));
-            } else if ((chatCapability & Im.CAPABILITY_HAS_VOICE) != 0) {
-                // Allow Talking and Texting
-                intent =
-                    new Intent(Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?message"));
-                secondaryIntent =
-                    new Intent(Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?call"));
-            } else {
-                intent =
-                    new Intent(Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?message"));
-            }
-        } else {
-            // Build an IM Intent
-            intent = getCustomImIntent(im, protocol);
-        }
-        return new Pair<>(intent, secondaryIntent);
-    }
-
-    /**
-     * Determine UserType from directory id and contact id.
-     *
-     * 3 types of query
-     *
-     * 1. 2 profile query: content://com.android.contacts/phone_lookup_enterprise/1234567890
-     * personal and work contact are mixed into one cursor. no directory id. contact_id indicates if
-     * it's work contact
-     *
-     * 2. work local query:
-     * content://com.android.contacts/phone_lookup_enterprise/1234567890?directory=1000000000
-     * either directory_id or contact_id is enough to identify work contact
-     *
-     * 3. work remote query:
-     * content://com.android.contacts/phone_lookup_enterprise/1234567890?directory=1000000003
-     * contact_id is random. only directory_id is available
-     *
-     * Summary: If directory_id is not null, always use directory_id to identify work contact.
-     * (which is the case here) Otherwise, use contact_id.
-     *
-     * @param directoryId directory id of ContactsProvider query
-     * @param contactId contact id
-     * @return UserType indicates the user type of the contact. A directory id or contact id larger
-     *         than a thredshold indicates that the contact is stored in Work Profile, but not in
-     *         current user. It's a contract by ContactsProvider and check by
-     *         Contacts.isEnterpriseDirectoryId and Contacts.isEnterpriseContactId. Currently, only
-     *         2 kinds of users can be detected from the directoryId and contactId as
-     *         ContactsProvider can only access current and work user's contacts
-     */
-    public static @UserType long determineUserType(Long directoryId, Long contactId) {
-        // First check directory id
-        if (directoryId != null) {
-            return DirectoryCompat.isEnterpriseDirectoryId(directoryId) ? USER_TYPE_WORK
-                    : USER_TYPE_CURRENT;
-        }
-        // Only check contact id if directory id is null
-        if (contactId != null && contactId != 0L
-                && ContactsCompat.isEnterpriseContactId(contactId)) {
-            return USER_TYPE_WORK;
-        } else {
-            return USER_TYPE_CURRENT;
-        }
-
-    }
-}
diff --git a/src/com/android/contacts/common/Experiments.java b/src/com/android/contacts/common/Experiments.java
deleted file mode 100644
index f1fc274..0000000
--- a/src/com/android/contacts/common/Experiments.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.contacts.common;
-
-/**
- * Experiment flag names.
- */
-public final class Experiments {
-
-    /**
-     * Whether to open contact sheet (aka smart profile) instead of our own QuickContact.
-     */
-    public static final String CONTACT_SHEET = "QuickContact__contact_sheet";
-
-    /**
-     * Flags for maximum content update time
-     */
-    public static final String DYNAMIC_MAX_CONTENT_CHANGE_UPDATE_DELAY_MILLIS =
-            "Shortcuts__dynamic_max_content_change_update_delay_millis";
-
-    /**
-     * Flags for minimum content update time
-     */
-    public static final String DYNAMIC_MIN_CONTENT_CHANGE_UPDATE_DELAY_MILLIS =
-            "Shortcuts__dynamic_min_content_change_update_delay_millis";
-
-    /**
-     * Experiment to enable device account detection using CP2 queries
-     */
-    public static final String OEM_CP2_DEVICE_ACCOUNT_DETECTION_ENABLED =
-            "OEM__cp2_device_account_detection_enabled";
-
-    /**
-     * Flags for maximum time to show spinner for a contacts sync.
-     */
-    public static final String PULL_TO_REFRESH_CANCEL_REFRESH_MILLIS =
-            "PullToRefresh__cancel_refresh_millis";
-
-    private Experiments() {
-    }
-}
diff --git a/src/com/android/contacts/common/GeoUtil.java b/src/com/android/contacts/common/GeoUtil.java
deleted file mode 100644
index cd0139b..0000000
--- a/src/com/android/contacts/common/GeoUtil.java
+++ /dev/null
@@ -1,60 +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.common;
-
-import android.app.Application;
-import android.content.Context;
-
-import com.android.contacts.common.location.CountryDetector;
-
-import com.google.i18n.phonenumbers.geocoding.PhoneNumberOfflineGeocoder;
-import com.google.i18n.phonenumbers.NumberParseException;
-import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import com.google.i18n.phonenumbers.Phonenumber;
-
-import java.util.Locale;
-
-/**
- * Static methods related to Geo.
- */
-public class GeoUtil {
-
-    /**
-     * Returns the country code of the country the user is currently in. Before calling this
-     * method, make sure that {@link CountryDetector#initialize(Context)} has already been called
-     * in {@link Application#onCreate()}.
-     * @return The ISO 3166-1 two letters country code of the country the user
-     *         is in.
-     */
-    public static String getCurrentCountryIso(Context context) {
-        // The {@link CountryDetector} should never return null so this is safe to return as-is.
-        return CountryDetector.getInstance(context).getCurrentCountryIso();
-    }
-
-    public static String getGeocodedLocationFor(Context context,  String phoneNumber) {
-        final PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder.getInstance();
-        final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
-        try {
-            final Phonenumber.PhoneNumber structuredPhoneNumber =
-                    phoneNumberUtil.parse(phoneNumber, getCurrentCountryIso(context));
-            final Locale locale = context.getResources().getConfiguration().locale;
-            return geocoder.getDescriptionForNumber(structuredPhoneNumber, locale);
-        } catch (NumberParseException e) {
-            return null;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/MoreContactUtils.java b/src/com/android/contacts/common/MoreContactUtils.java
deleted file mode 100644
index 9b9f800..0000000
--- a/src/com/android/contacts/common/MoreContactUtils.java
+++ /dev/null
@@ -1,243 +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.common;
-
-import com.google.i18n.phonenumbers.NumberParseException;
-import com.google.i18n.phonenumbers.PhoneNumberUtil;
-
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.telephony.PhoneNumberUtils;
-import android.text.TextUtils;
-import android.view.View;
-import android.widget.TextView;
-
-import com.android.contacts.common.model.account.AccountType;
-
-/**
- * Shared static contact utility methods.
- */
-public class MoreContactUtils {
-
-    private static final String WAIT_SYMBOL_AS_STRING = String.valueOf(PhoneNumberUtils.WAIT);
-
-    /**
-     * Returns true if two data with mimetypes which represent values in contact entries are
-     * considered equal for collapsing in the GUI. For caller-id, use
-     * {@link android.telephony.PhoneNumberUtils#compare(android.content.Context, String, String)}
-     * instead
-     */
-    public static boolean shouldCollapse(CharSequence mimetype1, CharSequence data1,
-              CharSequence mimetype2, CharSequence data2) {
-        // different mimetypes? don't collapse
-        if (!TextUtils.equals(mimetype1, mimetype2)) return false;
-
-        // exact same string? good, bail out early
-        if (TextUtils.equals(data1, data2)) return true;
-
-        // so if either is null, these two must be different
-        if (data1 == null || data2 == null) return false;
-
-        // if this is not about phone numbers, we know this is not a match (of course, some
-        // mimetypes could have more sophisticated matching is the future, e.g. addresses)
-        if (!TextUtils.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
-                mimetype1)) {
-            return false;
-        }
-
-        return shouldCollapsePhoneNumbers(data1.toString(), data2.toString());
-    }
-
-    // TODO: Move this to PhoneDataItem.shouldCollapse override
-    private static boolean shouldCollapsePhoneNumbers(String number1, String number2) {
-        // Work around to address b/20724444. We want to distinguish between #555, *555 and 555.
-        // This makes no attempt to distinguish between 555 and 55*5, since 55*5 is an improbable
-        // number. PhoneNumberUtil already distinguishes between 555 and 55#5.
-        if (number1.contains("#") != number2.contains("#")
-                || number1.contains("*") != number2.contains("*")) {
-            return false;
-        }
-
-        // Now do the full phone number thing. split into parts, separated by waiting symbol
-        // and compare them individually
-        final String[] dataParts1 = number1.split(WAIT_SYMBOL_AS_STRING);
-        final String[] dataParts2 = number2.split(WAIT_SYMBOL_AS_STRING);
-        if (dataParts1.length != dataParts2.length) return false;
-        final PhoneNumberUtil util = PhoneNumberUtil.getInstance();
-        for (int i = 0; i < dataParts1.length; i++) {
-            // Match phone numbers represented by keypad letters, in which case prefer the
-            // phone number with letters.
-            final String dataPart1 = PhoneNumberUtils.convertKeypadLettersToDigits(dataParts1[i]);
-            final String dataPart2 = dataParts2[i];
-
-            // substrings equal? shortcut, don't parse
-            if (TextUtils.equals(dataPart1, dataPart2)) continue;
-
-            // do a full parse of the numbers
-            final PhoneNumberUtil.MatchType result = util.isNumberMatch(dataPart1, dataPart2);
-            switch (result) {
-                case NOT_A_NUMBER:
-                    // don't understand the numbers? let's play it safe
-                    return false;
-                case NO_MATCH:
-                    return false;
-                case EXACT_MATCH:
-                    break;
-                case NSN_MATCH:
-                    try {
-                        // For NANP phone numbers, match when one has +1 and the other does not.
-                        // In this case, prefer the +1 version.
-                        if (util.parse(dataPart1, null).getCountryCode() == 1) {
-                            // At this point, the numbers can be either case 1 or 2 below....
-                            //
-                            // case 1)
-                            // +14155551212    <--- country code 1
-                            //  14155551212    <--- 1 is trunk prefix, not country code
-                            //
-                            // and
-                            //
-                            // case 2)
-                            // +14155551212
-                            //   4155551212
-                            //
-                            // From b/7519057, case 2 needs to be equal.  But also that bug, case 3
-                            // below should not be equal.
-                            //
-                            // case 3)
-                            // 14155551212
-                            //  4155551212
-                            //
-                            // So in order to make sure transitive equality is valid, case 1 cannot
-                            // be equal.  Otherwise, transitive equality breaks and the following
-                            // would all be collapsed:
-                            //   4155551212  |
-                            //  14155551212  |---->   +14155551212
-                            // +14155551212  |
-                            //
-                            // With transitive equality, the collapsed values should be:
-                            //   4155551212  |         14155551212
-                            //  14155551212  |---->   +14155551212
-                            // +14155551212  |
-
-                            // Distinguish between case 1 and 2 by checking for trunk prefix '1'
-                            // at the start of number 2.
-                            if (dataPart2.trim().charAt(0) == '1') {
-                                // case 1
-                                return false;
-                            }
-                            break;
-                        }
-                    } catch (NumberParseException e) {
-                        // This is the case where the first number does not have a country code.
-                        // examples:
-                        // (123) 456-7890   &   123-456-7890  (collapse)
-                        // 0049 (8092) 1234   &   +49/80921234  (unit test says do not collapse)
-
-                        // Check the second number.  If it also does not have a country code, then
-                        // we should collapse.  If it has a country code, then it's a different
-                        // number and we should not collapse (this conclusion is based on an
-                        // existing unit test).
-                        try {
-                            util.parse(dataPart2, null);
-                        } catch (NumberParseException e2) {
-                            // Number 2 also does not have a country.  Collapse.
-                            break;
-                        }
-                    }
-                    return false;
-                case SHORT_NSN_MATCH:
-                    return false;
-                default:
-                    throw new IllegalStateException("Unknown result value from phone number " +
-                            "library");
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Returns the {@link android.graphics.Rect} with left, top, right, and bottom coordinates
-     * that are equivalent to the given {@link android.view.View}'s bounds. This is equivalent to
-     * how the target {@link android.graphics.Rect} is calculated in
-     * {@link android.provider.ContactsContract.QuickContact#showQuickContact}.
-     */
-    public static Rect getTargetRectFromView(View view) {
-        final int[] pos = new int[2];
-        view.getLocationOnScreen(pos);
-
-        final Rect rect = new Rect();
-        rect.left = pos[0];
-        rect.top = pos[1];
-        rect.right = pos[0] + view.getWidth();
-        rect.bottom = pos[1] + view.getHeight();
-        return rect;
-    }
-
-    /**
-     * Returns a header view based on the R.layout.list_separator, where the
-     * containing {@link android.widget.TextView} is set using the given textResourceId.
-     */
-    public static TextView createHeaderView(Context context, int textResourceId) {
-        final TextView textView = (TextView) View.inflate(context, R.layout.list_separator, null);
-        textView.setText(context.getString(textResourceId));
-        return textView;
-    }
-
-    /**
-     * Set the top padding on the header view dynamically, based on whether the header is in
-     * the first row or not.
-     */
-    public static void setHeaderViewBottomPadding(Context context, TextView textView,
-            boolean isFirstRow) {
-        final int topPadding;
-        if (isFirstRow) {
-            topPadding = (int) context.getResources().getDimension(
-                    R.dimen.frequently_contacted_title_top_margin_when_first_row);
-        } else {
-            topPadding = (int) context.getResources().getDimension(
-                    R.dimen.frequently_contacted_title_top_margin);
-        }
-        textView.setPaddingRelative(textView.getPaddingStart(), topPadding,
-                textView.getPaddingEnd(), textView.getPaddingBottom());
-    }
-
-
-    /**
-     * Returns the intent to launch for the given invitable account type and contact lookup URI.
-     * This will return null if the account type is not invitable (i.e. there is no
-     * {@link AccountType#getInviteContactActivityClassName()} or
-     * {@link AccountType#syncAdapterPackageName}).
-     */
-    public static Intent getInvitableIntent(AccountType accountType, Uri lookupUri) {
-        String syncAdapterPackageName = accountType.syncAdapterPackageName;
-        String className = accountType.getInviteContactActivityClassName();
-        if (TextUtils.isEmpty(syncAdapterPackageName) || TextUtils.isEmpty(className)) {
-            return null;
-        }
-        Intent intent = new Intent();
-        intent.setClassName(syncAdapterPackageName, className);
-
-        intent.setAction(ContactsContract.Intents.INVITE_CONTACT);
-
-        // Data is the lookup URI.
-        intent.setData(lookupUri);
-        return intent;
-    }
-}
diff --git a/src/com/android/contacts/common/activity/AppCompatTransactionSafeActivity.java b/src/com/android/contacts/common/activity/AppCompatTransactionSafeActivity.java
deleted file mode 100644
index e70a9fd..0000000
--- a/src/com/android/contacts/common/activity/AppCompatTransactionSafeActivity.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.activity;
-
-import android.os.Bundle;
-import android.support.v7.app.AppCompatActivity;
-
-/**
- * A common superclass that keeps track of whether an {@link AppCompatActivity} has saved its state
- * yet or not, copied from {@link com.android.contacts.common.activity.TransactionSafeActivity},
- * which will be deprecated after Kitkat backporting is done.
- */
-public abstract class AppCompatTransactionSafeActivity extends AppCompatActivity {
-
-    private boolean mIsSafeToCommitTransactions;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mIsSafeToCommitTransactions = true;
-    }
-
-    @Override
-    protected void onStart() {
-        super.onStart();
-        mIsSafeToCommitTransactions = true;
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        mIsSafeToCommitTransactions = true;
-    }
-
-    @Override
-    protected void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        mIsSafeToCommitTransactions = false;
-    }
-
-    /**
-     * Returns true if it is safe to commit {@link FragmentTransaction}s at this time, based on
-     * whether {@link FragmentActivity#onSaveInstanceState} has been called or not.
-     *
-     * Make sure that the current activity calls into
-     * {@link super.onSaveInstanceState(Bundle outState)} (if that method is overridden),
-     * so the flag is properly set.
-     */
-    public boolean isSafeToCommitTransactions() {
-        return mIsSafeToCommitTransactions;
-    }
-}
diff --git a/src/com/android/contacts/common/activity/LicenseActivity.java b/src/com/android/contacts/common/activity/LicenseActivity.java
deleted file mode 100644
index 9e86ee8..0000000
--- a/src/com/android/contacts/common/activity/LicenseActivity.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.activity;
-
-import com.android.contacts.common.R;
-
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.AppCompatActivity;
-import android.os.Bundle;
-import android.view.MenuItem;
-import android.webkit.WebView;
-
-/**
- * Displays the licenses for all open source libraries.
- */
-public class LicenseActivity extends AppCompatActivity {
-    private static final String LICENSE_FILE = "file:///android_asset/licenses.html";
-    private WebView mWebView;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.licenses);
-        mWebView = (WebView) findViewById(R.id.webview);
-        mWebView.loadUrl(LICENSE_FILE);
-        final ActionBar actionBar = getSupportActionBar();
-        if (actionBar != null) {
-            actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
-        }
-    }
-
-    @Override
-    protected void onDestroy() {
-        mWebView.destroy();
-        super.onDestroy();
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        if (item.getItemId() == android.R.id.home) {
-            finish();
-            return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-}
diff --git a/src/com/android/contacts/common/activity/RequestDesiredPermissionsActivity.java b/src/com/android/contacts/common/activity/RequestDesiredPermissionsActivity.java
deleted file mode 100644
index 8098fdf..0000000
--- a/src/com/android/contacts/common/activity/RequestDesiredPermissionsActivity.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.activity;
-
-import android.Manifest.permission;
-import android.app.Activity;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Requests permissions that are not absolutely required by the calling Activity;
- * if permissions are denied, the calling Activity is still restarted.
- *
- * Activities that have a set of permissions that must be granted in order for the Activity to
- * function propertly should call
- * {@link RequestPermissionsActivity#startPermissionActivity(Activity, String[], Class)}
- * before calling {@link RequestDesiredPermissionsActivity#startPermissionActivity(Activity)}.
- */
-public class RequestDesiredPermissionsActivity extends RequestPermissionsActivityBase {
-
-    private static String[] sDesiredPermissions;
-
-    @Override
-    protected String[] getPermissions() {
-        return getPermissions(getPackageManager());
-    }
-
-    /**
-     * If any desired permission that Contacts app needs are missing, open an Activity
-     * to prompt user for these permissions. After that calling activity is restarted
-     * and in the second run permission check is skipped.
-     *
-     * This is designed to be called inside {@link android.app.Activity#onCreate}
-     */
-    public static boolean startPermissionActivity(Activity activity) {
-        final Bundle extras = activity.getIntent().getExtras();
-        if (extras != null && extras.getBoolean(EXTRA_STARTED_PERMISSIONS_ACTIVITY, false)) {
-            return false;
-        }
-        return startPermissionActivity(activity,
-                getPermissions(activity.getPackageManager()),
-                RequestDesiredPermissionsActivity.class);
-    }
-
-    private static String[] getPermissions(PackageManager packageManager) {
-        if (sDesiredPermissions == null) {
-            final List<String> permissions = new ArrayList<>();
-            // Calendar group
-            permissions.add(permission.READ_CALENDAR);
-
-            if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
-                // SMS group
-                permissions.add(permission.READ_SMS);
-            }
-            sDesiredPermissions = permissions.toArray(new String[0]);
-        }
-        return sDesiredPermissions;
-    }
-
-    @Override
-    public void onRequestPermissionsResult(
-            int requestCode, String permissions[], int[] grantResults) {
-        mPreviousActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
-        startActivity(mPreviousActivityIntent);
-        overridePendingTransition(0, 0);
-
-        finish();
-        overridePendingTransition(0, 0);
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/contacts/common/activity/RequestImportVCardPermissionsActivity.java b/src/com/android/contacts/common/activity/RequestImportVCardPermissionsActivity.java
deleted file mode 100644
index 5bddc77..0000000
--- a/src/com/android/contacts/common/activity/RequestImportVCardPermissionsActivity.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.activity;
-
-import android.Manifest.permission;
-import android.app.Activity;
-
-/**
- * Activity that requests permissions needed for ImportVCardActivity.
- */
-public class RequestImportVCardPermissionsActivity extends RequestPermissionsActivity {
-
-    private static final String[] REQUIRED_PERMISSIONS = new String[] {
-            // Contacts group
-            permission.GET_ACCOUNTS,
-            permission.READ_CONTACTS,
-            permission.WRITE_CONTACTS,
-            // Storage group
-            permission.READ_EXTERNAL_STORAGE,
-    };
-
-    @Override
-    protected String[] getPermissions() {
-        return REQUIRED_PERMISSIONS;
-    }
-
-    /**
-     * If any permissions the Contacts app needs are missing, open an Activity
-     * to prompt the user for these permissions. Moreover, finish the current activity.
-     *
-     * This is designed to be called inside {@link android.app.Activity#onCreate}
-     *
-     * @param isCallerSelf whether the vcard import was started from the contacts app itself.
-     */
-    public static boolean startPermissionActivity(Activity activity, boolean isCallerSelf) {
-        return startPermissionActivity(activity, REQUIRED_PERMISSIONS, isCallerSelf,
-                RequestImportVCardPermissionsActivity.class);
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/contacts/common/activity/RequestPermissionsActivity.java b/src/com/android/contacts/common/activity/RequestPermissionsActivity.java
deleted file mode 100644
index 7e75223..0000000
--- a/src/com/android/contacts/common/activity/RequestPermissionsActivity.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.activity;
-
-import com.android.contacts.common.R;
-
-import android.Manifest.permission;
-import android.app.Activity;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.support.v4.content.LocalBroadcastManager;
-import android.widget.Toast;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Activity that requests permissions needed for activities exported from Contacts.
- */
-public class RequestPermissionsActivity extends RequestPermissionsActivityBase {
-
-    public static final String BROADCAST_PERMISSIONS_GRANTED = "broadcastPermissionsGranted";
-
-    private static String[] sRequiredPermissions;
-
-    @Override
-    protected String[] getPermissions() {
-        return getPermissions(getPackageManager());
-    }
-
-    public static boolean startPermissionActivity(Activity activity) {
-        return startPermissionActivity(activity,
-                getPermissions(activity.getPackageManager()),
-                RequestPermissionsActivity.class);
-    }
-
-    private static String[] getPermissions(PackageManager packageManager) {
-        if (sRequiredPermissions == null) {
-            final List<String> permissions = new ArrayList<>();
-            // Contacts group
-            permissions.add(permission.GET_ACCOUNTS);
-            permissions.add(permission.READ_CONTACTS);
-            permissions.add(permission.WRITE_CONTACTS);
-
-            if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) {
-                // Phone group
-                // These are only used in a few places such as QuickContactActivity and
-                // ImportExportDialogFragment.  We work around missing this permission when
-                // telephony is not available on the device (i.e. on tablets).
-                permissions.add(permission.CALL_PHONE);
-                permissions.add(permission.READ_CALL_LOG);
-                permissions.add(permission.READ_PHONE_STATE);
-            }
-            sRequiredPermissions = permissions.toArray(new String[0]);
-        }
-        return sRequiredPermissions;
-    }
-
-    @Override
-    public void onRequestPermissionsResult(
-            int requestCode, String permissions[], int[] grantResults) {
-        if (permissions != null && permissions.length > 0
-                && isAllGranted(permissions, grantResults)) {
-            mPreviousActivityIntent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
-            if (mIsCallerSelf) {
-                startActivityForResult(mPreviousActivityIntent, 0);
-            } else {
-                startActivity(mPreviousActivityIntent);
-            }
-            finish();
-            overridePendingTransition(0, 0);
-
-            LocalBroadcastManager.getInstance(this).sendBroadcast(
-                    new Intent(BROADCAST_PERMISSIONS_GRANTED));
-        } else {
-            Toast.makeText(this, R.string.missing_required_permission, Toast.LENGTH_SHORT).show();
-            finish();
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/activity/RequestPermissionsActivityBase.java b/src/com/android/contacts/common/activity/RequestPermissionsActivityBase.java
deleted file mode 100644
index ef591a5..0000000
--- a/src/com/android/contacts/common/activity/RequestPermissionsActivityBase.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.activity;
-
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.util.PermissionsUtil;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.os.Bundle;
-import android.os.Trace;
-import android.support.v4.app.ActivityCompat;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-
-/**
- * Activity that asks the user for all {@link #getPermissions} if any are missing.
- *
- * NOTE: As a result of b/22095159, this can behave oddly in the case where the final permission
- * you are requesting causes an application restart.
- */
-public abstract class RequestPermissionsActivityBase extends Activity
-        implements ActivityCompat.OnRequestPermissionsResultCallback {
-
-    public static final String PREVIOUS_ACTIVITY_INTENT = "previous_intent";
-
-    /** Whether the permissions activity was already started. */
-    protected static final String EXTRA_STARTED_PERMISSIONS_ACTIVITY =
-            "started_permissions_activity";
-
-    protected static final String EXTRA_IS_CALLER_SELF = "is_caller_self";
-
-    private static final int PERMISSIONS_REQUEST_ALL_PERMISSIONS = 1;
-
-    /**
-     * @return list of permissions that are needed in order for {@link #PREVIOUS_ACTIVITY_INTENT}
-     * to operate. You only need to return a single permission per permission group you care about.
-     */
-    protected abstract String[] getPermissions();
-
-    protected Intent mPreviousActivityIntent;
-
-    /** If true then start the target activity "for result" after permissions are granted. */
-    protected boolean mIsCallerSelf;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mPreviousActivityIntent = (Intent) getIntent().getExtras().get(PREVIOUS_ACTIVITY_INTENT);
-        mIsCallerSelf = getIntent().getBooleanExtra(EXTRA_IS_CALLER_SELF, false);
-
-        // Only start a requestPermissions() flow when first starting this activity the first time.
-        // The process is likely to be restarted during the permission flow (necessary to enable
-        // permissions) so this is important to track.
-        if (savedInstanceState == null) {
-            requestPermissions();
-        }
-    }
-
-    /**
-     * If any permissions the Contacts app needs are missing, open an Activity
-     * to prompt the user for these permissions. Moreover, finish the current activity.
-     *
-     * This is designed to be called inside {@link android.app.Activity#onCreate}
-     */
-    protected static boolean startPermissionActivity(Activity activity,
-            String[] requiredPermissions, Class<?> newActivityClass) {
-        return startPermissionActivity(activity, requiredPermissions, /* isCallerSelf */ false,
-                newActivityClass);
-    }
-
-    protected static boolean startPermissionActivity(Activity activity,
-                String[] requiredPermissions, boolean isCallerSelf, Class<?> newActivityClass) {
-        if (!hasPermissions(activity, requiredPermissions)) {
-            final Intent intent = new Intent(activity,  newActivityClass);
-            activity.getIntent().putExtra(EXTRA_STARTED_PERMISSIONS_ACTIVITY, true);
-            intent.putExtra(PREVIOUS_ACTIVITY_INTENT, activity.getIntent());
-            intent.putExtra(EXTRA_IS_CALLER_SELF, isCallerSelf);
-            activity.startActivity(intent);
-            activity.finish();
-            return true;
-        }
-
-        // Account type initialization must be delayed until the Contacts permission group
-        // has been granted (since GET_ACCOUNTS) falls under that groups.  Previously it
-        // was initialized in ContactApplication which would cause problems as
-        // AccountManager.getAccounts would return an empty array. See b/22690336
-        AccountTypeManager.getInstance(activity);
-
-        return false;
-    }
-
-    protected boolean isAllGranted(String permissions[], int[] grantResult) {
-        for (int i = 0; i < permissions.length; i++) {
-            if (grantResult[i] != PackageManager.PERMISSION_GRANTED
-                    && isPermissionRequired(permissions[i])) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    private boolean isPermissionRequired(String p) {
-        return Arrays.asList(getPermissions()).contains(p);
-    }
-
-    private void requestPermissions() {
-        Trace.beginSection("requestPermissions");
-        try {
-            // Construct a list of missing permissions
-            final ArrayList<String> unsatisfiedPermissions = new ArrayList<>();
-            for (String permission : getPermissions()) {
-                if (!PermissionsUtil.hasPermission(this, permission)) {
-                    unsatisfiedPermissions.add(permission);
-                }
-            }
-            if (unsatisfiedPermissions.size() == 0) {
-                throw new RuntimeException("Request permission activity was called even"
-                        + " though all permissions are satisfied.");
-            }
-            ActivityCompat.requestPermissions(
-                    this,
-                    unsatisfiedPermissions.toArray(new String[unsatisfiedPermissions.size()]),
-                    PERMISSIONS_REQUEST_ALL_PERMISSIONS);
-        } finally {
-            Trace.endSection();
-        }
-    }
-
-    protected static boolean hasPermissions(Context context, String[] permissions) {
-        Trace.beginSection("hasPermission");
-        try {
-            for (String permission : permissions) {
-                if (!PermissionsUtil.hasPermission(context, permission)) {
-                    return false;
-                }
-            }
-            return true;
-        } finally {
-            Trace.endSection();
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/activity/TransactionSafeActivity.java b/src/com/android/contacts/common/activity/TransactionSafeActivity.java
deleted file mode 100644
index 6c2e4fe..0000000
--- a/src/com/android/contacts/common/activity/TransactionSafeActivity.java
+++ /dev/null
@@ -1,65 +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.common.activity;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-/**
- * A common superclass that keeps track of whether an {@link Activity} has saved its state yet or
- * not.
- */
-public abstract class TransactionSafeActivity extends Activity {
-
-    private boolean mIsSafeToCommitTransactions;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mIsSafeToCommitTransactions = true;
-    }
-
-    @Override
-    protected void onStart() {
-        super.onStart();
-        mIsSafeToCommitTransactions = true;
-    }
-
-    @Override
-    protected void onResume() {
-        super.onResume();
-        mIsSafeToCommitTransactions = true;
-    }
-
-    @Override
-    protected void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        mIsSafeToCommitTransactions = false;
-    }
-
-    /**
-     * Returns true if it is safe to commit {@link FragmentTransaction}s at this time, based on
-     * whether {@link Activity#onSaveInstanceState} has been called or not.
-     *
-     * Make sure that the current activity calls into
-     * {@link super.onSaveInstanceState(Bundle outState)} (if that method is overridden),
-     * so the flag is properly set.
-     */
-    public boolean isSafeToCommitTransactions() {
-        return mIsSafeToCommitTransactions;
-    }
-}
diff --git a/src/com/android/contacts/common/compat/CallSdkCompat.java b/src/com/android/contacts/common/compat/CallSdkCompat.java
deleted file mode 100644
index fd06d85..0000000
--- a/src/com/android/contacts/common/compat/CallSdkCompat.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.telecom.Call;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-public class CallSdkCompat {
-    public static class Details {
-        // TODO: This property is hidden in the N release; replace with actual when the API is
-        // made public.
-        public static final int PROPERTY_IS_EXTERNAL_CALL = 0x00000040;
-        public static final int PROPERTY_ENTERPRISE_CALL = Call.Details.PROPERTY_ENTERPRISE_CALL;
-        // TODO: This capability is hidden in the N release; replace with actual when the API is
-        // made public.
-        public static final int CAPABILITY_CAN_PULL_CALL = 0x00800000;
-        public static final int CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO =
-                Call.Details.CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO;
-    }
-
-    /**
-     * TODO: This API is hidden in the N release; replace the implementation with a call to the
-     * actual once it is made public.
-     */
-    public static void pullExternalCall(Call call) {
-        if (!CompatUtils.isNCompatible()) {
-            return;
-        }
-        Class<?> callClass = Call.class;
-        try {
-            Method pullExternalCallMethod = callClass.getDeclaredMethod("pullExternalCall");
-            pullExternalCallMethod.invoke(call);
-        } catch (NoSuchMethodException e) {
-            // Ignore requests to pull call if there is a problem.
-        } catch (InvocationTargetException e) {
-            // Ignore requests to pull call if there is a problem.
-        } catch (IllegalAccessException e) {
-            // Ignore requests to pull call if there is a problem.
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/compat/CallableCompat.java b/src/com/android/contacts/common/compat/CallableCompat.java
deleted file mode 100644
index d25d4be..0000000
--- a/src/com/android/contacts/common/compat/CallableCompat.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.net.Uri;
-import android.provider.ContactsContract.CommonDataKinds.Callable;
-
-import com.android.contacts.common.ContactsUtils;
-
-public class CallableCompat {
-
-    // TODO: Use N APIs
-    private static final Uri ENTERPRISE_CONTENT_FILTER_URI =
-            Uri.withAppendedPath(Callable.CONTENT_URI, "filter_enterprise");
-
-    public static Uri getContentFilterUri() {
-        if (ContactsUtils.FLAG_N_FEATURE) {
-            return ENTERPRISE_CONTENT_FILTER_URI;
-        }
-        return Callable.CONTENT_FILTER_URI;
-    }
-}
diff --git a/src/com/android/contacts/common/compat/CompatUtils.java b/src/com/android/contacts/common/compat/CompatUtils.java
deleted file mode 100644
index a394093..0000000
--- a/src/com/android/contacts/common/compat/CompatUtils.java
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.compat;
-
-import android.os.Build;
-import android.os.Build.VERSION;
-import android.support.annotation.Nullable;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.android.contacts.common.model.CPOWrapper;
-
-import java.lang.reflect.InvocationTargetException;
-
-public final class CompatUtils {
-
-    private static final String TAG = CompatUtils.class.getSimpleName();
-
-    /**
-     * These 4 variables are copied from ContentProviderOperation for compatibility.
-     */
-    public final static int TYPE_INSERT = 1;
-
-    public final static int TYPE_UPDATE = 2;
-
-    public final static int TYPE_DELETE = 3;
-
-    public final static int TYPE_ASSERT = 4;
-
-    /**
-     * Returns whether the operation in CPOWrapper is of TYPE_INSERT;
-     */
-    public static boolean isInsertCompat(CPOWrapper cpoWrapper) {
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            return cpoWrapper.getOperation().isInsert();
-        }
-        return (cpoWrapper.getType() == TYPE_INSERT);
-    }
-
-    /**
-     * Returns whether the operation in CPOWrapper is of TYPE_UPDATE;
-     */
-    public static boolean isUpdateCompat(CPOWrapper cpoWrapper) {
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            return cpoWrapper.getOperation().isUpdate();
-        }
-        return (cpoWrapper.getType() == TYPE_UPDATE);
-    }
-
-    /**
-     * Returns whether the operation in CPOWrapper is of TYPE_DELETE;
-     */
-    public static boolean isDeleteCompat(CPOWrapper cpoWrapper) {
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            return cpoWrapper.getOperation().isDelete();
-        }
-        return (cpoWrapper.getType() == TYPE_DELETE);
-    }
-    /**
-     * Returns whether the operation in CPOWrapper is of TYPE_ASSERT;
-     */
-    public static boolean isAssertQueryCompat(CPOWrapper cpoWrapper) {
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            return cpoWrapper.getOperation().isAssertQuery();
-        }
-        return (cpoWrapper.getType() == TYPE_ASSERT);
-    }
-
-    /**
-     * PrioritizedMimeType is added in API level 23.
-     */
-    public static boolean hasPrioritizedMimeType() {
-        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M)
-                >= Build.VERSION_CODES.M;
-    }
-
-    /**
-     * Determines if this version is compatible with multi-SIM and the phone account APIs. Can also
-     * force the version to be lower through SdkVersionOverride.
-     *
-     * @return {@code true} if multi-SIM capability is available, {@code false} otherwise.
-     */
-    public static boolean isMSIMCompatible() {
-        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
-                >= Build.VERSION_CODES.LOLLIPOP_MR1;
-    }
-
-    /**
-     * Determines if this version is compatible with video calling. Can also force the version to be
-     * lower through SdkVersionOverride.
-     *
-     * @return {@code true} if video calling is allowed, {@code false} otherwise.
-     */
-    public static boolean isVideoCompatible() {
-        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
-                >= Build.VERSION_CODES.M;
-    }
-
-    /**
-     * Determines if this version is capable of using presence checking for video calling. Support
-     * for video call presence indication is added in SDK 24.
-     *
-     * @return {@code true} if video presence checking is allowed, {@code false} otherwise.
-     */
-    public static boolean isVideoPresenceCompatible() {
-        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M)
-                > Build.VERSION_CODES.M;
-    }
-
-    /**
-     * Determines if this version is compatible with call subject. Can also force the version to be
-     * lower through SdkVersionOverride.
-     *
-     * @return {@code true} if call subject is a feature on this device, {@code false} otherwise.
-     */
-    public static boolean isCallSubjectCompatible() {
-        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
-                >= Build.VERSION_CODES.M;
-    }
-
-    /**
-     * Determines if this version is compatible with a default dialer. Can also force the version to
-     * be lower through {@link SdkVersionOverride}.
-     *
-     * @return {@code true} if default dialer is a feature on this device, {@code false} otherwise.
-     */
-    public static boolean isDefaultDialerCompatible() {
-        return isMarshmallowCompatible();
-    }
-
-    /**
-     * Determines if this version is compatible with Lollipop Mr1-specific APIs. Can also force the
-     * version to be lower through SdkVersionOverride.
-     *
-     * @return {@code true} if runtime sdk is compatible with Lollipop MR1, {@code false} otherwise.
-     */
-    public static boolean isLollipopMr1Compatible() {
-        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP_MR1)
-                >= Build.VERSION_CODES.LOLLIPOP_MR1;
-    }
-
-    /**
-     * Determines if this version is compatible with Marshmallow-specific APIs. Can also force the
-     * version to be lower through SdkVersionOverride.
-     *
-     * @return {@code true} if runtime sdk is compatible with Marshmallow, {@code false} otherwise.
-     */
-    public static boolean isMarshmallowCompatible() {
-        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
-                >= Build.VERSION_CODES.M;
-    }
-
-    /**
-     * Determines if this version is compatible with N-specific APIs.
-     *
-     * @return {@code true} if runtime sdk is compatible with N and the app is built with N, {@code
-     * false} otherwise.
-     */
-    public static boolean isNCompatible() {
-        return VERSION.SDK_INT >= 24;
-    }
-
-
-    public static boolean isNougatMr1Compatible() {
-        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.N_MR1)
-                >= Build.VERSION_CODES.N_MR1;
-    }
-
-    public static boolean isLauncherShortcutCompatible() {
-        return isNougatMr1Compatible();
-    }
-
-    /**
-     * Determines if the given class is available. Can be used to check if system apis exist at
-     * runtime.
-     *
-     * @param className the name of the class to look for.
-     * @return {@code true} if the given class is available, {@code false} otherwise or if className
-     * is empty.
-     */
-    public static boolean isClassAvailable(@Nullable String className) {
-        if (TextUtils.isEmpty(className)) {
-            return false;
-        }
-        try {
-            Class.forName(className);
-            return true;
-        } catch (ClassNotFoundException e) {
-            return false;
-        } catch (Throwable t) {
-            Log.e(TAG, "Unexpected exception when checking if class:" + className + " exists at "
-                    + "runtime", t);
-            return false;
-        }
-    }
-
-    /**
-     * Determines if the given class's method is available to call. Can be used to check if system
-     * apis exist at runtime.
-     *
-     * @param className the name of the class to look for
-     * @param methodName the name of the method to look for
-     * @param parameterTypes the needed parameter types for the method to look for
-     * @return {@code true} if the given class is available, {@code false} otherwise or if className
-     * or methodName are empty.
-     */
-    public static boolean isMethodAvailable(@Nullable String className, @Nullable String methodName,
-            Class<?>... parameterTypes) {
-        if (TextUtils.isEmpty(className) || TextUtils.isEmpty(methodName)) {
-            return false;
-        }
-
-        try {
-            Class.forName(className).getMethod(methodName, parameterTypes);
-            return true;
-        } catch (ClassNotFoundException | NoSuchMethodException e) {
-            Log.v(TAG, "Could not find method: " + className + "#" + methodName);
-            return false;
-        } catch (Throwable t) {
-            Log.e(TAG, "Unexpected exception when checking if method: " + className + "#"
-                    + methodName + " exists at runtime", t);
-            return false;
-        }
-    }
-
-    /**
-     * Invokes a given class's method using reflection. Can be used to call system apis that exist
-     * at runtime but not in the SDK.
-     *
-     * @param instance The instance of the class to invoke the method on.
-     * @param methodName The name of the method to invoke.
-     * @param parameterTypes The needed parameter types for the method.
-     * @param parameters The parameter values to pass into the method.
-     * @return The result of the invocation or {@code null} if instance or methodName are empty, or
-     * if the reflection fails.
-     */
-    @Nullable
-    public static Object invokeMethod(@Nullable Object instance, @Nullable String methodName,
-            Class<?>[] parameterTypes, Object[] parameters) {
-        if (instance == null || TextUtils.isEmpty(methodName)) {
-            return null;
-        }
-
-        String className = instance.getClass().getName();
-        try {
-            return Class.forName(className).getMethod(methodName, parameterTypes)
-                    .invoke(instance, parameters);
-        } catch (ClassNotFoundException | NoSuchMethodException | IllegalArgumentException
-                | IllegalAccessException | InvocationTargetException e) {
-            Log.v(TAG, "Could not invoke method: " + className + "#" + methodName);
-            return null;
-        } catch (Throwable t) {
-            Log.e(TAG, "Unexpected exception when invoking method: " + className
-                    + "#" + methodName + " at runtime", t);
-            return null;
-        }
-    }
-
-    /**
-     * Determines if this version is compatible with Lollipop-specific APIs. Can also force the
-     * version to be lower through SdkVersionOverride.
-     *
-     * @return {@code true} if call subject is a feature on this device, {@code false} otherwise.
-     */
-    public static boolean isLollipopCompatible() {
-        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
-                >= Build.VERSION_CODES.LOLLIPOP;
-    }
-}
diff --git a/src/com/android/contacts/common/compat/ContactsCompat.java b/src/com/android/contacts/common/compat/ContactsCompat.java
deleted file mode 100644
index 5a5e46a..0000000
--- a/src/com/android/contacts/common/compat/ContactsCompat.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Contacts;
-
-import com.android.contacts.common.ContactsUtils;
-
-/**
- * Compatibility class for {@link ContactsContract.Contacts}
- */
-public class ContactsCompat {
-    /**
-     * Not instantiable.
-     */
-    private ContactsCompat() {
-    }
-
-    // TODO: Use N APIs
-    private static final Uri ENTERPRISE_CONTENT_FILTER_URI =
-            Uri.withAppendedPath(Contacts.CONTENT_URI, "filter_enterprise");
-
-    // Copied from ContactsContract.Contacts#ENTERPRISE_CONTACT_ID_BASE, which is hidden.
-    private static final long ENTERPRISE_CONTACT_ID_BASE = 1000000000;
-
-    public static Uri getContentUri() {
-        if (ContactsUtils.FLAG_N_FEATURE) {
-            return ENTERPRISE_CONTENT_FILTER_URI;
-        }
-        return Contacts.CONTENT_FILTER_URI;
-    }
-
-    /**
-     * Return {@code true} if a contact ID is from the contacts provider on the enterprise profile.
-     */
-    public static boolean isEnterpriseContactId(long contactId) {
-        if (CompatUtils.isLollipopCompatible()) {
-            return Contacts.isEnterpriseContactId(contactId);
-        } else {
-            // copied from ContactsContract.Contacts.isEnterpriseContactId
-            return (contactId >= ENTERPRISE_CONTACT_ID_BASE) &&
-                    (contactId < ContactsContract.Profile.MIN_ID);
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/compat/DirectoryCompat.java b/src/com/android/contacts/common/compat/DirectoryCompat.java
deleted file mode 100644
index 682e14c..0000000
--- a/src/com/android/contacts/common/compat/DirectoryCompat.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Directory;
-
-import com.android.contacts.common.ContactsUtils;
-
-public class DirectoryCompat {
-
-    public static Uri getContentUri() {
-        if (ContactsUtils.FLAG_N_FEATURE) {
-            return DirectorySdkCompat.ENTERPRISE_CONTENT_URI;
-        }
-        return Directory.CONTENT_URI;
-    }
-
-    public static boolean isInvisibleDirectory(long directoryId) {
-        if (ContactsUtils.FLAG_N_FEATURE) {
-            return (directoryId == Directory.LOCAL_INVISIBLE
-                    || directoryId == DirectorySdkCompat.ENTERPRISE_LOCAL_INVISIBLE);
-        }
-        return directoryId == Directory.LOCAL_INVISIBLE;
-    }
-
-    public static boolean isRemoteDirectoryId(long directoryId) {
-        if (ContactsUtils.FLAG_N_FEATURE) {
-            return DirectorySdkCompat.isRemoteDirectoryId(directoryId);
-        }
-        return !(directoryId == Directory.DEFAULT || directoryId == Directory.LOCAL_INVISIBLE);
-    }
-
-    public static boolean isEnterpriseDirectoryId(long directoryId) {
-        return ContactsUtils.FLAG_N_FEATURE
-                ? DirectorySdkCompat.isEnterpriseDirectoryId(directoryId)
-                : false;
-    }
-}
diff --git a/src/com/android/contacts/common/compat/DirectorySdkCompat.java b/src/com/android/contacts/common/compat/DirectorySdkCompat.java
deleted file mode 100644
index b919466..0000000
--- a/src/com/android/contacts/common/compat/DirectorySdkCompat.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.net.Uri;
-import android.provider.ContactsContract.Directory;
-
-public class DirectorySdkCompat {
-
-    private static final String TAG = "DirectorySdkCompat";
-
-    public static final Uri ENTERPRISE_CONTENT_URI = Directory.ENTERPRISE_CONTENT_URI;
-    public static final long ENTERPRISE_LOCAL_DEFAULT = Directory.ENTERPRISE_DEFAULT;
-    public static final long ENTERPRISE_LOCAL_INVISIBLE = Directory.ENTERPRISE_LOCAL_INVISIBLE;
-
-    public static boolean isRemoteDirectoryId(long directoryId) {
-        return CompatUtils.isNCompatible() ? Directory.isRemoteDirectoryId(directoryId) : false;
-    }
-
-    public static boolean isEnterpriseDirectoryId(long directoryId) {
-        return CompatUtils.isNCompatible() ? Directory.isEnterpriseDirectoryId(directoryId) : false;
-    }
-}
diff --git a/src/com/android/contacts/common/compat/EventCompat.java b/src/com/android/contacts/common/compat/EventCompat.java
deleted file mode 100644
index f37aeff..0000000
--- a/src/com/android/contacts/common/compat/EventCompat.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.content.res.Resources;
-import android.provider.ContactsContract.CommonDataKinds.BaseTypes;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.text.TextUtils;
-
-/**
- * Compatibility class for {@link Event}
- */
-public class EventCompat {
-    /**
-     * Not instantiable.
-     */
-    private EventCompat() {
-    }
-
-    /**
-     * Return a {@link CharSequence} that best describes the given type, possibly substituting
-     * the given label value for TYPE_CUSTOM.
-     */
-    public static CharSequence getTypeLabel(Resources res, int type, CharSequence label) {
-        if (CompatUtils.isLollipopCompatible()) {
-            return Event.getTypeLabel(res, type, label);
-        } else {
-            return getTypeLabelInternal(res, type, label);
-        }
-    }
-
-    /**
-     * The method was added in API level 21, and below is the implementation copied from
-     * {@link Event#getTypeLabel(Resources, int, CharSequence)}
-     */
-    private static CharSequence getTypeLabelInternal(Resources res, int type, CharSequence label) {
-        if (type == BaseTypes.TYPE_CUSTOM && !TextUtils.isEmpty(label)) {
-            return label;
-        } else {
-            return res.getText(Event.getTypeResource(type));
-        }
-    }
-
-}
diff --git a/src/com/android/contacts/common/compat/MultiWindowCompat.java b/src/com/android/contacts/common/compat/MultiWindowCompat.java
deleted file mode 100644
index 6641279..0000000
--- a/src/com/android/contacts/common/compat/MultiWindowCompat.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.app.Activity;
-
-public class MultiWindowCompat {
-    /**
-     * Returns true if the activity is currently in multi-window mode.
-     */
-    public static boolean isInMultiWindowMode(Activity activity) {
-        return CompatUtils.isNCompatible() ? activity.isInMultiWindowMode() : false;
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/contacts/common/compat/PhoneAccountCompat.java b/src/com/android/contacts/common/compat/PhoneAccountCompat.java
deleted file mode 100644
index 00f4211..0000000
--- a/src/com/android/contacts/common/compat/PhoneAccountCompat.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.contacts.common.compat;
-
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.Icon;
-import android.support.annotation.Nullable;
-import android.telecom.PhoneAccount;
-import android.util.Log;
-
-/**
- * Compatiblity class for {@link android.telecom.PhoneAccount}
- */
-public class PhoneAccountCompat {
-
-    private static final String TAG = PhoneAccountCompat.class.getSimpleName();
-
-    /**
-     * Gets the {@link Icon} associated with the given {@link PhoneAccount}
-     *
-     * @param phoneAccount the PhoneAccount from which to retrieve the Icon
-     * @return the Icon, or null
-     */
-    @Nullable
-    public static Icon getIcon(@Nullable PhoneAccount phoneAccount) {
-        if (phoneAccount == null) {
-            return null;
-        }
-
-        if (CompatUtils.isMarshmallowCompatible()) {
-            return phoneAccount.getIcon();
-        }
-
-        return null;
-    }
-
-    /**
-     * Builds and returns an icon {@code Drawable} to represent this {@code PhoneAccount} in a user
-     * interface.
-     *
-     * @param phoneAccount the PhoneAccount from which to build the icon.
-     * @param context A {@code Context} to use for loading Drawables.
-     *
-     * @return An icon for this PhoneAccount, or null
-     */
-    @Nullable
-    public static Drawable createIconDrawable(@Nullable PhoneAccount phoneAccount,
-            @Nullable Context context) {
-        if (phoneAccount == null || context == null) {
-            return null;
-        }
-
-        if (CompatUtils.isMarshmallowCompatible()) {
-            return createIconDrawableMarshmallow(phoneAccount, context);
-        }
-
-        if (CompatUtils.isLollipopMr1Compatible()) {
-            return createIconDrawableLollipopMr1(phoneAccount, context);
-        }
-        return null;
-    }
-
-    @Nullable
-    private static Drawable createIconDrawableMarshmallow(PhoneAccount phoneAccount,
-            Context context) {
-        Icon accountIcon = getIcon(phoneAccount);
-        if (accountIcon == null) {
-            return null;
-        }
-        return accountIcon.loadDrawable(context);
-    }
-
-    @Nullable
-    private static Drawable createIconDrawableLollipopMr1(PhoneAccount phoneAccount,
-            Context context) {
-        try {
-            return (Drawable) PhoneAccount.class.getMethod("createIconDrawable", Context.class)
-                    .invoke(phoneAccount, context);
-        } catch (ReflectiveOperationException e) {
-            return null;
-        } catch (Throwable t) {
-            Log.e(TAG, "Unexpected exception when attempting to call "
-                    + "android.telecom.PhoneAccount#createIconDrawable", t);
-            return null;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/compat/PhoneAccountSdkCompat.java b/src/com/android/contacts/common/compat/PhoneAccountSdkCompat.java
deleted file mode 100644
index 5cbf617..0000000
--- a/src/com/android/contacts/common/compat/PhoneAccountSdkCompat.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.os.Bundle;
-import android.telecom.PhoneAccount;
-
-public class PhoneAccountSdkCompat {
-
-    private static final String TAG = "PhoneAccountSdkCompat";
-
-    public static final String EXTRA_CALL_SUBJECT_MAX_LENGTH =
-            PhoneAccount.EXTRA_CALL_SUBJECT_MAX_LENGTH;
-    public static final String EXTRA_CALL_SUBJECT_CHARACTER_ENCODING =
-            PhoneAccount.EXTRA_CALL_SUBJECT_CHARACTER_ENCODING;
-
-    public static final int CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE =
-            PhoneAccount.CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE;
-
-    public static Bundle getExtras(PhoneAccount account) {
-        return CompatUtils.isNCompatible() ? account.getExtras() : null;
-    }
-}
diff --git a/src/com/android/contacts/common/compat/PhoneCompat.java b/src/com/android/contacts/common/compat/PhoneCompat.java
deleted file mode 100644
index 5277761..0000000
--- a/src/com/android/contacts/common/compat/PhoneCompat.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.net.Uri;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-
-import com.android.contacts.common.ContactsUtils;
-
-public class PhoneCompat {
-
-    // TODO: Use N APIs
-    private static final Uri ENTERPRISE_CONTENT_FILTER_URI =
-            Uri.withAppendedPath(Phone.CONTENT_URI, "filter_enterprise");
-
-    public static Uri getContentFilterUri() {
-        if (ContactsUtils.FLAG_N_FEATURE) {
-            return ENTERPRISE_CONTENT_FILTER_URI;
-        }
-        return Phone.CONTENT_FILTER_URI;
-    }
-}
diff --git a/src/com/android/contacts/common/compat/PhoneLookupSdkCompat.java b/src/com/android/contacts/common/compat/PhoneLookupSdkCompat.java
deleted file mode 100644
index 0c0a898..0000000
--- a/src/com/android/contacts/common/compat/PhoneLookupSdkCompat.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.provider.ContactsContract;
-
-public class PhoneLookupSdkCompat {
-    public static final String CONTACT_ID = ContactsContract.PhoneLookup.CONTACT_ID;
-}
diff --git a/src/com/android/contacts/common/compat/PhoneNumberFormattingTextWatcherCompat.java b/src/com/android/contacts/common/compat/PhoneNumberFormattingTextWatcherCompat.java
deleted file mode 100644
index 42b604e..0000000
--- a/src/com/android/contacts/common/compat/PhoneNumberFormattingTextWatcherCompat.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.compat;
-
-import android.telephony.PhoneNumberFormattingTextWatcher;
-
-public class PhoneNumberFormattingTextWatcherCompat {
-    public static PhoneNumberFormattingTextWatcher newInstance(String countryCode) {
-        if (CompatUtils.isLollipopCompatible()) {
-            return new PhoneNumberFormattingTextWatcher(countryCode);
-        }
-        return new PhoneNumberFormattingTextWatcher();
-    }
-}
diff --git a/src/com/android/contacts/common/compat/PhoneNumberUtilsCompat.java b/src/com/android/contacts/common/compat/PhoneNumberUtilsCompat.java
deleted file mode 100644
index 9a8fa41..0000000
--- a/src/com/android/contacts/common/compat/PhoneNumberUtilsCompat.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import com.google.i18n.phonenumbers.NumberParseException;
-import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
-
-import android.telephony.PhoneNumberUtils;
-import android.text.Spannable;
-import android.text.TextUtils;
-import android.text.style.TtsSpan;
-
-/**
- * This class contains static utility methods extracted from PhoneNumberUtils, and the
- * methods were added in API level 23. In this way, we could enable the corresponding functionality
- * for pre-M devices. We need maintain this class and keep it synced with PhoneNumberUtils.
- * Another thing to keep in mind is that we use com.google.i18n rather than com.android.i18n in
- * here, so we need make sure the application behavior is preserved.
- */
-public class PhoneNumberUtilsCompat {
-    /**
-     * Not instantiable.
-     */
-    private PhoneNumberUtilsCompat() {}
-
-    public static String normalizeNumber(String phoneNumber) {
-        if (CompatUtils.isLollipopCompatible()) {
-            return PhoneNumberUtils.normalizeNumber(phoneNumber);
-        } else {
-            return normalizeNumberInternal(phoneNumber);
-        }
-    }
-
-    /**
-     * Implementation copied from {@link PhoneNumberUtils#normalizeNumber}
-     */
-    private static String normalizeNumberInternal(String phoneNumber) {
-        if (TextUtils.isEmpty(phoneNumber)) {
-            return "";
-        }
-        StringBuilder sb = new StringBuilder();
-        int len = phoneNumber.length();
-        for (int i = 0; i < len; i++) {
-            char c = phoneNumber.charAt(i);
-            // Character.digit() supports ASCII and Unicode digits (fullwidth, Arabic-Indic, etc.)
-            int digit = Character.digit(c, 10);
-            if (digit != -1) {
-                sb.append(digit);
-            } else if (sb.length() == 0 && c == '+') {
-                sb.append(c);
-            } else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
-                return normalizeNumber(PhoneNumberUtils.convertKeypadLettersToDigits(phoneNumber));
-            }
-        }
-        return sb.toString();
-    }
-
-    public static String formatNumber(
-            String phoneNumber, String phoneNumberE164, String defaultCountryIso) {
-        if (CompatUtils.isLollipopCompatible()) {
-            return PhoneNumberUtils.formatNumber(phoneNumber, phoneNumberE164, defaultCountryIso);
-        } else {
-            // This method was deprecated in API level 21, so it's only used on pre-L SDKs.
-            return PhoneNumberUtils.formatNumber(phoneNumber);
-        }
-    }
-
-    public static CharSequence createTtsSpannable(CharSequence phoneNumber) {
-        if (CompatUtils.isMarshmallowCompatible()) {
-            return PhoneNumberUtils.createTtsSpannable(phoneNumber);
-        } else {
-            return createTtsSpannableInternal(phoneNumber);
-        }
-    }
-
-    public static TtsSpan createTtsSpan(String phoneNumber) {
-        if (CompatUtils.isMarshmallowCompatible()) {
-            return PhoneNumberUtils.createTtsSpan(phoneNumber);
-        } else if (CompatUtils.isLollipopCompatible()) {
-            return createTtsSpanLollipop(phoneNumber);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Copied from {@link PhoneNumberUtils#createTtsSpannable}
-     */
-    private static CharSequence createTtsSpannableInternal(CharSequence phoneNumber) {
-        if (phoneNumber == null) {
-            return null;
-        }
-        Spannable spannable = Spannable.Factory.getInstance().newSpannable(phoneNumber);
-        addTtsSpanInternal(spannable, 0, spannable.length());
-        return spannable;
-    }
-
-    /**
-     * Compat method for addTtsSpan, see {@link PhoneNumberUtils#addTtsSpan}
-     */
-    public static void addTtsSpan(Spannable s, int start, int endExclusive) {
-        if (CompatUtils.isMarshmallowCompatible()) {
-            PhoneNumberUtils.addTtsSpan(s, start, endExclusive);
-        } else {
-            addTtsSpanInternal(s, start, endExclusive);
-        }
-    }
-
-    /**
-     * Copied from {@link PhoneNumberUtils#addTtsSpan}
-     */
-    private static void addTtsSpanInternal(Spannable s, int start, int endExclusive) {
-        s.setSpan(createTtsSpan(s.subSequence(start, endExclusive).toString()),
-                start,
-                endExclusive,
-                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-    }
-
-    /**
-     * Copied from {@link PhoneNumberUtils#createTtsSpan}
-     */
-    private static TtsSpan createTtsSpanLollipop(String phoneNumberString) {
-        if (phoneNumberString == null) {
-            return null;
-        }
-
-        // Parse the phone number
-        final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
-        PhoneNumber phoneNumber = null;
-        try {
-            // Don't supply a defaultRegion so this fails for non-international numbers because
-            // we don't want to TalkBalk to read a country code (e.g. +1) if it is not already
-            // present
-            phoneNumber = phoneNumberUtil.parse(phoneNumberString, /* defaultRegion */ null);
-        } catch (NumberParseException ignored) {
-        }
-
-        // Build a telephone tts span
-        final TtsSpan.TelephoneBuilder builder = new TtsSpan.TelephoneBuilder();
-        if (phoneNumber == null) {
-            // Strip separators otherwise TalkBack will be silent
-            // (this behavior was observed with TalkBalk 4.0.2 from their alpha channel)
-            builder.setNumberParts(splitAtNonNumerics(phoneNumberString));
-        } else {
-            if (phoneNumber.hasCountryCode()) {
-                builder.setCountryCode(Integer.toString(phoneNumber.getCountryCode()));
-            }
-            builder.setNumberParts(Long.toString(phoneNumber.getNationalNumber()));
-        }
-        return builder.build();
-    }
-
-
-
-    /**
-     * Split a phone number using spaces, ignoring anything that is not a digit
-     * @param number A {@code CharSequence} before splitting, e.g., "+20(123)-456#"
-     * @return A {@code String} after splitting, e.g., "20 123 456".
-     */
-    private static String splitAtNonNumerics(CharSequence number) {
-        StringBuilder sb = new StringBuilder(number.length());
-        for (int i = 0; i < number.length(); i++) {
-            sb.append(PhoneNumberUtils.isISODigit(number.charAt(i))
-                    ? number.charAt(i)
-                    : " ");
-        }
-        // It is very important to remove extra spaces. At time of writing, any leading or trailing
-        // spaces, or any sequence of more than one space, will confuse TalkBack and cause the TTS
-        // span to be non-functional!
-        return sb.toString().replaceAll(" +", " ").trim();
-    }
-
-}
diff --git a/src/com/android/contacts/common/compat/ProviderStatusCompat.java b/src/com/android/contacts/common/compat/ProviderStatusCompat.java
deleted file mode 100644
index 84338de..0000000
--- a/src/com/android/contacts/common/compat/ProviderStatusCompat.java
+++ /dev/null
@@ -1,70 +0,0 @@
-
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.os.Build;
-import android.provider.ContactsContract.ProviderStatus;
-
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.SdkVersionOverride;
-
-/**
- * This class contains constants from the pre-M version of ContactsContract.ProviderStatus class
- * and also the mappings between pre-M constants and M constants for compatibility purpose,
- * because ProviderStatus class constant names and values changed and the class became visible in
- * API level 23.
- */
-public class ProviderStatusCompat {
-    /**
-     * Not instantiable.
-     */
-    private ProviderStatusCompat() {
-    }
-
-    public static final boolean USE_CURRENT_VERSION = CompatUtils.isMarshmallowCompatible();
-
-    public static final int STATUS_EMPTY = USE_CURRENT_VERSION ?
-            ProviderStatus.STATUS_EMPTY : ProviderStatusCompat.STATUS_NO_ACCOUNTS_NO_CONTACTS;
-
-    public static final int STATUS_BUSY = USE_CURRENT_VERSION ?
-            ProviderStatus.STATUS_BUSY : ProviderStatusCompat.STATUS_UPGRADING;
-
-    /**
-     * Default status of the provider, using the actual constant to guard against errors
-     */
-    public static final int STATUS_NORMAL = ProviderStatus.STATUS_NORMAL;
-
-    /**
-     * The following three constants are from pre-M.
-     *
-     * The status used when the provider is in the process of upgrading.  Contacts
-     * are temporarily unaccessible.
-     */
-    private static final int STATUS_UPGRADING = 1;
-
-    /**
-     * The status used during a locale change.
-     */
-    public static final int STATUS_CHANGING_LOCALE = 3;
-
-    /**
-     * The status that indicates that there are no accounts and no contacts
-     * on the device.
-     */
-    private static final int STATUS_NO_ACCOUNTS_NO_CONTACTS = 4;
-}
diff --git a/src/com/android/contacts/common/compat/SdkVersionOverride.java b/src/com/android/contacts/common/compat/SdkVersionOverride.java
deleted file mode 100644
index ebde623..0000000
--- a/src/com/android/contacts/common/compat/SdkVersionOverride.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.contacts.common.compat;
-
-import android.os.Build.VERSION;
-
-/**
- * Class used to override the current sdk version to test specific branches of compatibility
- * logic. When such branching occurs, use {@link #getSdkVersion(int)} rather than explicitly
- * calling {@link VERSION#SDK_INT}. This allows the sdk version to be forced to a specific value.
- */
-public class SdkVersionOverride {
-
-    /**
-     * Flag used to determine if override sdk versions are returned.
-     */
-    private static final boolean ALLOW_OVERRIDE_VERSION = false;
-
-    private SdkVersionOverride() {}
-
-    /**
-     * Gets the sdk version
-     *
-     * @param overrideVersion the version to attempt using
-     * @return overrideVersion if the {@link #ALLOW_OVERRIDE_VERSION} flag is set to {@code true},
-     * otherwise the current version
-     */
-    public static int getSdkVersion(int overrideVersion) {
-        return ALLOW_OVERRIDE_VERSION ? overrideVersion : VERSION.SDK_INT;
-    }
-}
diff --git a/src/com/android/contacts/common/compat/TelecomManagerUtil.java b/src/com/android/contacts/common/compat/TelecomManagerUtil.java
deleted file mode 100644
index 30c541c..0000000
--- a/src/com/android/contacts/common/compat/TelecomManagerUtil.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.contacts.common.compat;
-
-import android.content.Intent;
-import android.telecom.TelecomManager;
-
-/**
- * Utility class for TelecomManager
- */
-public class TelecomManagerUtil {
-    /**
-     * Creates {@link Intent} to launch the activity to manage blocked numbers.
-     */
-    public static Intent createManageBlockedNumbersIntent(TelecomManager tm) {
-        return CompatUtils.isNCompatible() ? tm.createManageBlockedNumbersIntent() : null;
-    }
-}
diff --git a/src/com/android/contacts/common/compat/TelephonyManagerCompat.java b/src/com/android/contacts/common/compat/TelephonyManagerCompat.java
deleted file mode 100644
index ec7907f..0000000
--- a/src/com/android/contacts/common/compat/TelephonyManagerCompat.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.net.Uri;
-import android.support.annotation.Nullable;
-import android.telecom.PhoneAccountHandle;
-import android.telephony.TelephonyManager;
-
-import com.android.contacts.common.ContactsUtils;
-
-public class TelephonyManagerCompat {
-    public static final String TELEPHONY_MANAGER_CLASS = "android.telephony.TelephonyManager";
-
-    /**
-     * @param telephonyManager The telephony manager instance to use for method calls.
-     * @return true if the current device is "voice capable".
-     * <p>
-     * "Voice capable" means that this device supports circuit-switched
-     * (i.e. voice) phone calls over the telephony network, and is allowed
-     * to display the in-call UI while a cellular voice call is active.
-     * This will be false on "data only" devices which can't make voice
-     * calls and don't support any in-call UI.
-     * <p>
-     * Note: the meaning of this flag is subtly different from the
-     * PackageManager.FEATURE_TELEPHONY system feature, which is available
-     * on any device with a telephony radio, even if the device is
-     * data-only.
-     */
-    public static boolean isVoiceCapable(@Nullable TelephonyManager telephonyManager) {
-        if (telephonyManager == null) {
-            return false;
-        }
-        if (CompatUtils.isLollipopMr1Compatible()
-                || CompatUtils.isMethodAvailable(TELEPHONY_MANAGER_CLASS, "isVoiceCapable")) {
-            // isVoiceCapable was unhidden in L-MR1
-            return telephonyManager.isVoiceCapable();
-        }
-        final int phoneType = telephonyManager.getPhoneType();
-        return phoneType == TelephonyManager.PHONE_TYPE_CDMA ||
-                phoneType == TelephonyManager.PHONE_TYPE_GSM;
-    }
-
-    /**
-     * Returns the number of phones available.
-     * Returns 1 for Single standby mode (Single SIM functionality)
-     * Returns 2 for Dual standby mode.(Dual SIM functionality)
-     *
-     * Returns 1 if the method or telephonyManager is not available.
-     *
-     * @param telephonyManager The telephony manager instance to use for method calls.
-     */
-    public static int getPhoneCount(@Nullable TelephonyManager telephonyManager) {
-        if (telephonyManager == null) {
-            return 1;
-        }
-        if (CompatUtils.isMarshmallowCompatible() || CompatUtils
-                .isMethodAvailable(TELEPHONY_MANAGER_CLASS, "getPhoneCount")) {
-            return telephonyManager.getPhoneCount();
-        }
-        return 1;
-    }
-
-    /**
-     * Returns the unique device ID of a subscription, for example, the IMEI for
-     * GSM and the MEID for CDMA phones. Return null if device ID is not available.
-     *
-     * <p>Requires Permission:
-     *   {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
-     *
-     * @param telephonyManager The telephony manager instance to use for method calls.
-     * @param slotId of which deviceID is returned
-     */
-    public static String getDeviceId(@Nullable TelephonyManager telephonyManager, int slotId) {
-        if (telephonyManager == null) {
-            return null;
-        }
-        if (CompatUtils.isMarshmallowCompatible()
-                || CompatUtils.isMethodAvailable(TELEPHONY_MANAGER_CLASS,
-                        "getDeviceId", Integer.class)) {
-            return telephonyManager.getDeviceId(slotId);
-        }
-        return null;
-    }
-
-    /**
-     * Whether the phone supports TTY mode.
-     *
-     * @param telephonyManager The telephony manager instance to use for method calls.
-     * @return {@code true} if the device supports TTY mode, and {@code false} otherwise.
-     */
-
-    public static boolean isTtyModeSupported(@Nullable TelephonyManager telephonyManager) {
-        if (telephonyManager == null) {
-            return false;
-        }
-        if (CompatUtils.isMarshmallowCompatible()
-                || CompatUtils.isMethodAvailable(TELEPHONY_MANAGER_CLASS, "isTtyModeSupported")) {
-            return telephonyManager.isTtyModeSupported();
-        }
-        return false;
-    }
-
-    /**
-     * Whether the phone supports hearing aid compatibility.
-     *
-     * @param telephonyManager The telephony manager instance to use for method calls.
-     * @return {@code true} if the device supports hearing aid compatibility, and {@code false}
-     * otherwise.
-     */
-    public static boolean isHearingAidCompatibilitySupported(
-            @Nullable TelephonyManager telephonyManager) {
-        if (telephonyManager == null) {
-            return false;
-        }
-        if (CompatUtils.isMarshmallowCompatible()
-                || CompatUtils.isMethodAvailable(TELEPHONY_MANAGER_CLASS,
-                        "isHearingAidCompatibilitySupported")) {
-            return telephonyManager.isHearingAidCompatibilitySupported();
-        }
-        return false;
-    }
-
-    /**
-     * Returns the URI for the per-account voicemail ringtone set in Phone settings.
-     *
-     * @param telephonyManager The telephony manager instance to use for method calls.
-     * @param accountHandle The handle for the {@link android.telecom.PhoneAccount} for which to
-     * retrieve the voicemail ringtone.
-     * @return The URI for the ringtone to play when receiving a voicemail from a specific
-     * PhoneAccount.
-     */
-    @Nullable
-    public static Uri getVoicemailRingtoneUri(TelephonyManager telephonyManager,
-            PhoneAccountHandle accountHandle) {
-        if (!CompatUtils.isNCompatible()) {
-            return null;
-        }
-        return TelephonyManagerSdkCompat
-                .getVoicemailRingtoneUri(telephonyManager, accountHandle);
-    }
-
-    /**
-     * Returns whether vibration is set for voicemail notification in Phone settings.
-     *
-     * @param telephonyManager The telephony manager instance to use for method calls.
-     * @param accountHandle The handle for the {@link android.telecom.PhoneAccount} for which to
-     * retrieve the voicemail vibration setting.
-     * @return {@code true} if the vibration is set for this PhoneAccount, {@code false} otherwise.
-     */
-    public static boolean isVoicemailVibrationEnabled(TelephonyManager telephonyManager,
-            PhoneAccountHandle accountHandle) {
-        if (!CompatUtils.isNCompatible()) {
-            return true;
-        }
-        return TelephonyManagerSdkCompat
-                .isVoicemailVibrationEnabled(telephonyManager, accountHandle);
-    }
-}
diff --git a/src/com/android/contacts/common/compat/TelephonyManagerSdkCompat.java b/src/com/android/contacts/common/compat/TelephonyManagerSdkCompat.java
deleted file mode 100644
index acabfdf..0000000
--- a/src/com/android/contacts/common/compat/TelephonyManagerSdkCompat.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.contacts.common.compat;
-
-import android.net.Uri;
-import android.telecom.PhoneAccountHandle;
-import android.telephony.TelephonyManager;
-
-/**
- * On N and above, this will look up voicemail notification settings from Telephony.
- */
-public class TelephonyManagerSdkCompat {
-    public static Uri getVoicemailRingtoneUri(TelephonyManager telephonyManager,
-            PhoneAccountHandle accountHandle) {
-        return CompatUtils.isNCompatible()
-                ? telephonyManager.getVoicemailRingtoneUri(accountHandle) : null;
-    }
-
-    public static boolean isVoicemailVibrationEnabled(TelephonyManager telephonyManager,
-            PhoneAccountHandle accountHandle) {
-        return CompatUtils.isNCompatible()
-                ? telephonyManager.isVoicemailVibrationEnabled(accountHandle) : false;
-    }
-}
diff --git a/src/com/android/contacts/common/compat/TelephonyThreadsCompat.java b/src/com/android/contacts/common/compat/TelephonyThreadsCompat.java
deleted file mode 100644
index d9642c7..0000000
--- a/src/com/android/contacts/common/compat/TelephonyThreadsCompat.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.compat;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Build;
-import android.provider.BaseColumns;
-import android.provider.Telephony;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.Patterns;
-
-import java.util.HashSet;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * This class contains static utility methods and variables extracted from Telephony and
- * SqliteWrapper, and the methods were made visible in API level 23. In this way, we could
- * enable the corresponding functionality for pre-M devices. We need maintain this class and keep
- * it synced with Telephony and SqliteWrapper.
- */
-public class TelephonyThreadsCompat {
-    /**
-     * Not instantiable.
-     */
-    private TelephonyThreadsCompat() {}
-
-    private static final String TAG = "TelephonyThreadsCompat";
-
-    public static long getOrCreateThreadId(Context context, String recipient) {
-        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
-            return Telephony.Threads.getOrCreateThreadId(context, recipient);
-        } else {
-            return getOrCreateThreadIdInternal(context, recipient);
-        }
-    }
-
-    // Below is code copied from Telephony and SqliteWrapper
-    /**
-     * Private {@code content://} style URL for this table. Used by
-     * {@link #getOrCreateThreadId(Context, Set)}.
-     */
-    private static final Uri THREAD_ID_CONTENT_URI = Uri.parse("content://mms-sms/threadID");
-
-    private static final String[] ID_PROJECTION = { BaseColumns._ID };
-
-    /**
-     * Regex pattern for names and email addresses.
-     * <ul>
-     *     <li><em>mailbox</em> = {@code name-addr}</li>
-     *     <li><em>name-addr</em> = {@code [display-name] angle-addr}</li>
-     *     <li><em>angle-addr</em> = {@code [CFWS] "<" addr-spec ">" [CFWS]}</li>
-     * </ul>
-     */
-    private static final Pattern NAME_ADDR_EMAIL_PATTERN =
-            Pattern.compile("\\s*(\"[^\"]*\"|[^<>\"]+)\\s*<([^<>]+)>\\s*");
-
-    /**
-     * Copied from {@link Telephony.Threads#getOrCreateThreadId(Context, String)}
-     */
-    private static long getOrCreateThreadIdInternal(Context context, String recipient) {
-        Set<String> recipients = new HashSet<String>();
-
-        recipients.add(recipient);
-        return getOrCreateThreadIdInternal(context, recipients);
-    }
-
-    /**
-     * Given the recipients list and subject of an unsaved message,
-     * return its thread ID.  If the message starts a new thread,
-     * allocate a new thread ID.  Otherwise, use the appropriate
-     * existing thread ID.
-     *
-     * <p>Find the thread ID of the same set of recipients (in any order,
-     * without any additions). If one is found, return it. Otherwise,
-     * return a unique thread ID.</p>
-     */
-    private static long getOrCreateThreadIdInternal(Context context, Set<String> recipients) {
-        Uri.Builder uriBuilder = THREAD_ID_CONTENT_URI.buildUpon();
-
-        for (String recipient : recipients) {
-            if (isEmailAddress(recipient)) {
-                recipient = extractAddrSpec(recipient);
-            }
-
-            uriBuilder.appendQueryParameter("recipient", recipient);
-        }
-
-        Uri uri = uriBuilder.build();
-
-        Cursor cursor = query(
-                context.getContentResolver(), uri, ID_PROJECTION, null, null, null);
-        if (cursor != null) {
-            try {
-                if (cursor.moveToFirst()) {
-                    return cursor.getLong(0);
-                } else {
-                    Log.e(TAG, "getOrCreateThreadId returned no rows!");
-                }
-            } finally {
-                cursor.close();
-            }
-        }
-
-        Log.e(TAG, "getOrCreateThreadId failed with uri " + uri.toString());
-        throw new IllegalArgumentException("Unable to find or allocate a thread ID.");
-    }
-
-    /**
-     * Copied from {@link SqliteWrapper#query}
-     */
-    private static Cursor query(ContentResolver resolver, Uri uri, String[] projection,
-            String selection, String[] selectionArgs, String sortOrder) {
-        try {
-            return resolver.query(uri, projection, selection, selectionArgs, sortOrder);
-        } catch (Exception e) {
-            Log.e(TAG, "Catch an exception when query: ", e);
-            return null;
-        }
-    }
-
-    /**
-     * Is the specified address an email address?
-     *
-     * @param address the input address to test
-     * @return true if address is an email address; false otherwise.
-     */
-    private static boolean isEmailAddress(String address) {
-        if (TextUtils.isEmpty(address)) {
-            return false;
-        }
-
-        String s = extractAddrSpec(address);
-        Matcher match = Patterns.EMAIL_ADDRESS.matcher(s);
-        return match.matches();
-    }
-
-    /**
-     * Helper method to extract email address from address string.
-     */
-    private static String extractAddrSpec(String address) {
-        Matcher match = NAME_ADDR_EMAIL_PATTERN.matcher(address);
-
-        if (match.matches()) {
-            return match.group(2);
-        }
-        return address;
-    }
-}
diff --git a/src/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java b/src/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java
deleted file mode 100644
index 652be19..0000000
--- a/src/com/android/contacts/common/compat/telecom/TelecomManagerCompat.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.compat.telecom;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.support.annotation.Nullable;
-import android.telecom.TelecomManager;
-
-import com.android.contacts.common.compat.CompatUtils;
-
-/**
- * Compatibility class for {@link android.telecom.TelecomManager}.
- */
-public class TelecomManagerCompat {
-    /**
-     * Places a new outgoing call to the provided address using the system telecom service with
-     * the specified intent.
-     *
-     * @param activity {@link Activity} used to start another activity for the given intent
-     * @param telecomManager the {@link TelecomManager} used to place a call, if possible
-     * @param intent the intent for the call
-     */
-    public static void placeCall(@Nullable Activity activity,
-            @Nullable TelecomManager telecomManager, @Nullable Intent intent) {
-        if (activity == null || telecomManager == null || intent == null) {
-            return;
-        }
-        if (CompatUtils.isMarshmallowCompatible()) {
-            telecomManager.placeCall(intent.getData(), intent.getExtras());
-            return;
-        }
-        activity.startActivityForResult(intent, 0);
-    }
-}
diff --git a/src/com/android/contacts/common/database/ContactUpdateUtils.java b/src/com/android/contacts/common/database/ContactUpdateUtils.java
deleted file mode 100644
index 1bd08aa..0000000
--- a/src/com/android/contacts/common/database/ContactUpdateUtils.java
+++ /dev/null
@@ -1,47 +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.common.database;
-
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Context;
-import android.provider.ContactsContract;
-import android.util.Log;
-
-/**
- * Static methods to update contact information.
- */
-public class ContactUpdateUtils {
-
-    private static final String TAG = ContactUpdateUtils.class.getSimpleName();
-
-    public static void setSuperPrimary(Context context, long dataId) {
-        if (dataId == -1) {
-            Log.e(TAG, "Invalid arguments for setSuperPrimary request");
-            return;
-        }
-
-        // Update the primary values in the data record.
-        ContentValues values = new ContentValues(2);
-        values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
-        values.put(ContactsContract.Data.IS_PRIMARY, 1);
-
-        context.getContentResolver().update(
-                ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, dataId),
-                values, null, null);
-    }
-}
diff --git a/src/com/android/contacts/common/database/EmptyCursor.java b/src/com/android/contacts/common/database/EmptyCursor.java
deleted file mode 100644
index ad00eff..0000000
--- a/src/com/android/contacts/common/database/EmptyCursor.java
+++ /dev/null
@@ -1,84 +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.common.database;
-
-import android.database.AbstractCursor;
-import android.database.CursorIndexOutOfBoundsException;
-
-/**
- * A cursor that is empty.
- * <p>
- * If you want an empty cursor, this class is better than a MatrixCursor because it has less
- * overhead.
- */
-final public class EmptyCursor extends AbstractCursor {
-
-    private String[] mColumns;
-
-    public EmptyCursor(String[] columns) {
-        this.mColumns = columns;
-    }
-
-    @Override
-    public int getCount() {
-        return 0;
-    }
-
-    @Override
-    public String[] getColumnNames() {
-        return mColumns;
-    }
-
-    @Override
-    public String getString(int column) {
-        throw cursorException();
-    }
-
-    @Override
-    public short getShort(int column) {
-        throw cursorException();
-    }
-
-    @Override
-    public int getInt(int column) {
-        throw cursorException();
-    }
-
-    @Override
-    public long getLong(int column) {
-        throw cursorException();
-    }
-
-    @Override
-    public float getFloat(int column) {
-        throw cursorException();
-    }
-
-    @Override
-    public double getDouble(int column) {
-        throw cursorException();
-    }
-
-    @Override
-    public boolean isNull(int column) {
-        throw cursorException();
-    }
-
-    private CursorIndexOutOfBoundsException cursorException() {
-        return new CursorIndexOutOfBoundsException("Operation not permitted on an empty cursor.");
-    }
-}
diff --git a/src/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java b/src/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java
deleted file mode 100644
index aefc0fd..0000000
--- a/src/com/android/contacts/common/database/NoNullCursorAsyncQueryHandler.java
+++ /dev/null
@@ -1,69 +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.common.database;
-
-import android.content.AsyncQueryHandler;
-import android.content.ContentResolver;
-import android.database.Cursor;
-import android.net.Uri;
-
-/**
- * An {@AsyncQueryHandler} that will never return a null cursor.
- * <p>
- * Instead, will return a {@link Cursor} with 0 records.
- */
-public abstract class NoNullCursorAsyncQueryHandler extends AsyncQueryHandler {
-
-    public NoNullCursorAsyncQueryHandler(ContentResolver cr) {
-        super(cr);
-    }
-
-    @Override
-    public void startQuery(int token, Object cookie, Uri uri, String[] projection, String selection,
-            String[] selectionArgs, String orderBy) {
-        final CookieWithProjection projectionCookie = new CookieWithProjection(cookie, projection);
-        super.startQuery(token, projectionCookie, uri, projection, selection, selectionArgs,
-                orderBy);
-    }
-
-    @Override
-    protected final void onQueryComplete(int token, Object cookie, Cursor cursor) {
-        CookieWithProjection projectionCookie = (CookieWithProjection) cookie;
-
-        super.onQueryComplete(token, projectionCookie.originalCookie, cursor);
-
-        if (cursor == null) {
-            cursor = new EmptyCursor(projectionCookie.projection);
-        }
-        onNotNullableQueryComplete(token, projectionCookie.originalCookie, cursor);
-    }
-
-    protected abstract void onNotNullableQueryComplete(int token, Object cookie, Cursor cursor);
-
-    /**
-     * Class to add projection to an existing cookie.
-     */
-    private static class CookieWithProjection {
-        public final Object originalCookie;
-        public final String[] projection;
-
-        public CookieWithProjection(Object cookie, String[] projection) {
-            this.originalCookie = cookie;
-            this.projection = projection;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/database/SimContactDao.java b/src/com/android/contacts/common/database/SimContactDao.java
deleted file mode 100644
index b5b6626..0000000
--- a/src/com/android/contacts/common/database/SimContactDao.java
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.database;
-
-import android.annotation.TargetApi;
-import android.content.ContentProviderOperation;
-import android.content.ContentProviderResult;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.OperationApplicationException;
-import android.content.pm.PackageManager;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Build;
-import android.os.RemoteException;
-import android.provider.BaseColumns;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.RawContacts;
-import android.support.annotation.VisibleForTesting;
-import android.support.v4.util.ArrayMap;
-import android.support.v4.util.ArraySet;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.SparseArray;
-
-import com.android.contacts.R;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.model.SimCard;
-import com.android.contacts.common.model.SimContact;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.PermissionsUtil;
-import com.android.contacts.util.SharedPreferenceUtil;
-import com.google.common.base.Joiner;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Provides data access methods for loading contacts from a SIM card and and migrating these
- * SIM contacts to a CP2 account.
- */
-public class SimContactDao {
-    private static final String TAG = "SimContactDao";
-
-    // Maximum number of SIM contacts to import in a single ContentResolver.applyBatch call.
-    // This is necessary to avoid TransactionTooLargeException when there are a large number of
-    // contacts. This has been tested on Nexus 6 NME70B and is probably be conservative enough
-    // to work on any phone.
-    private static final int IMPORT_MAX_BATCH_SIZE = 300;
-
-    // How many SIM contacts to consider in a single query. This prevents hitting the SQLite
-    // query parameter limit.
-    static final int QUERY_MAX_BATCH_SIZE = 100;
-
-    // Set to true for manual testing on an emulator or phone without a SIM card
-    // DO NOT SUBMIT if set to true
-    private static final boolean USE_FAKE_INSTANCE = false;
-
-    @VisibleForTesting
-    public static final Uri ICC_CONTENT_URI = Uri.parse("content://icc/adn");
-
-    public static String _ID = BaseColumns._ID;
-    public static String NAME = "name";
-    public static String NUMBER = "number";
-    public static String EMAILS = "emails";
-
-    private final Context mContext;
-    private final ContentResolver mResolver;
-    private final TelephonyManager mTelephonyManager;
-
-    private SimContactDao(Context context) {
-        mContext = context;
-        mResolver = context.getContentResolver();
-        mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-    }
-
-
-    public Context getContext() {
-        return mContext;
-    }
-
-    public boolean canReadSimContacts() {
-        // Require SIM_STATE_READY because the TelephonyManager methods related to SIM require
-        // this state
-        return hasTelephony() && hasPermissions() &&
-                mTelephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY;
-    }
-
-    public List<SimCard> getSimCards() {
-        if (!canReadSimContacts()) {
-            return Collections.emptyList();
-        }
-        final List<SimCard> sims = CompatUtils.isMSIMCompatible() ?
-                getSimCardsFromSubscriptions() :
-                Collections.singletonList(SimCard.create(mTelephonyManager,
-                        mContext.getString(R.string.single_sim_display_label)));
-        return SharedPreferenceUtil.restoreSimStates(mContext, sims);
-    }
-
-    public List<SimCard> getSimCardsWithContacts() {
-        final List<SimCard> result = new ArrayList<>();
-        for (SimCard sim : getSimCards()) {
-            result.add(sim.withContacts(loadContactsForSim(sim)));
-        }
-        return result;
-    }
-
-    public ArrayList<SimContact> loadContactsForSim(SimCard sim) {
-        if (sim.hasValidSubscriptionId()) {
-            return loadSimContacts(sim.getSubscriptionId());
-        }
-        return loadSimContacts();
-    }
-
-    public ArrayList<SimContact> loadSimContacts(int subscriptionId) {
-        return loadFrom(ICC_CONTENT_URI.buildUpon()
-                .appendPath("subId")
-                .appendPath(String.valueOf(subscriptionId))
-                .build());
-    }
-
-    public ArrayList<SimContact> loadSimContacts() {
-        return loadFrom(ICC_CONTENT_URI);
-    }
-
-    public ContentProviderResult[] importContacts(List<SimContact> contacts,
-            AccountWithDataSet targetAccount)
-            throws RemoteException, OperationApplicationException {
-        if (contacts.size() < IMPORT_MAX_BATCH_SIZE) {
-            return importBatch(contacts, targetAccount);
-        }
-        final List<ContentProviderResult> results = new ArrayList<>();
-        for (int i = 0; i < contacts.size(); i += IMPORT_MAX_BATCH_SIZE) {
-            results.addAll(Arrays.asList(importBatch(
-                    contacts.subList(i, Math.min(contacts.size(), i + IMPORT_MAX_BATCH_SIZE)),
-                    targetAccount)));
-        }
-        return results.toArray(new ContentProviderResult[results.size()]);
-    }
-
-    public void persistSimState(SimCard sim) {
-        SharedPreferenceUtil.persistSimStates(mContext, Collections.singletonList(sim));
-    }
-
-    public void persistSimStates(List<SimCard> simCards) {
-        SharedPreferenceUtil.persistSimStates(mContext, simCards);
-    }
-
-    public SimCard getFirstSimCard() {
-        return getSimBySubscriptionId(SimCard.NO_SUBSCRIPTION_ID);
-    }
-
-    public SimCard getSimBySubscriptionId(int subscriptionId) {
-        final List<SimCard> sims = SharedPreferenceUtil.restoreSimStates(mContext, getSimCards());
-        if (subscriptionId == SimCard.NO_SUBSCRIPTION_ID && !sims.isEmpty()) {
-            return sims.get(0);
-        }
-        for (SimCard sim : getSimCards()) {
-            if (sim.getSubscriptionId() == subscriptionId) {
-                return sim;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Finds SIM contacts that exist in CP2 and associates the account of the CP2 contact with
-     * the SIM contact
-     */
-    public Map<AccountWithDataSet, Set<SimContact>> findAccountsOfExistingSimContacts(
-            List<SimContact> contacts) {
-        final Map<AccountWithDataSet, Set<SimContact>> result = new ArrayMap<>();
-        for (int i = 0; i < contacts.size(); i += QUERY_MAX_BATCH_SIZE) {
-            findAccountsOfExistingSimContacts(
-                    contacts.subList(i, Math.min(contacts.size(), i + QUERY_MAX_BATCH_SIZE)),
-                    result);
-        }
-        return result;
-    }
-
-    private void findAccountsOfExistingSimContacts(List<SimContact> contacts,
-            Map<AccountWithDataSet, Set<SimContact>> result) {
-        final Map<Long, List<SimContact>> rawContactToSimContact = new HashMap<>();
-        Collections.sort(contacts, SimContact.compareByPhoneThenName());
-
-        final Cursor dataCursor = queryRawContactsForSimContacts(contacts);
-
-        try {
-            while (dataCursor.moveToNext()) {
-                final String number = DataQuery.getPhoneNumber(dataCursor);
-                final String name = DataQuery.getDisplayName(dataCursor);
-
-                final int index = SimContact.findByPhoneAndName(contacts, number, name);
-                if (index < 0) {
-                    continue;
-                }
-                final SimContact contact = contacts.get(index);
-                final long id = DataQuery.getRawContactId(dataCursor);
-                if (!rawContactToSimContact.containsKey(id)) {
-                    rawContactToSimContact.put(id, new ArrayList<SimContact>());
-                }
-                rawContactToSimContact.get(id).add(contact);
-            }
-        } finally {
-            dataCursor.close();
-        }
-
-        final Cursor accountsCursor = queryAccountsOfRawContacts(rawContactToSimContact.keySet());
-        try {
-            while (accountsCursor.moveToNext()) {
-                final AccountWithDataSet account = AccountQuery.getAccount(accountsCursor);
-                final long id = AccountQuery.getId(accountsCursor);
-                if (!result.containsKey(account)) {
-                    result.put(account, new ArraySet<SimContact>());
-                }
-                for (SimContact contact : rawContactToSimContact.get(id)) {
-                    result.get(account).add(contact);
-                }
-            }
-        } finally {
-            accountsCursor.close();
-        }
-    }
-
-    private ContentProviderResult[] importBatch(List<SimContact> contacts,
-            AccountWithDataSet targetAccount)
-            throws RemoteException, OperationApplicationException {
-        final ArrayList<ContentProviderOperation> ops =
-                createImportOperations(contacts, targetAccount);
-        return mResolver.applyBatch(ContactsContract.AUTHORITY, ops);
-    }
-
-    @TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
-    private List<SimCard> getSimCardsFromSubscriptions() {
-        final SubscriptionManager subscriptionManager = (SubscriptionManager)
-                mContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
-        final List<SubscriptionInfo> subscriptions = subscriptionManager
-                .getActiveSubscriptionInfoList();
-        final ArrayList<SimCard> result = new ArrayList<>();
-        for (SubscriptionInfo subscriptionInfo : subscriptions) {
-            result.add(SimCard.create(subscriptionInfo));
-        }
-        return result;
-    }
-
-    private List<SimContact> getContactsForSim(SimCard sim) {
-        final List<SimContact> contacts = sim.getContacts();
-        return contacts != null ? contacts : loadContactsForSim(sim);
-    }
-
-    // See b/32831092
-    // Sometimes the SIM contacts provider seems to get stuck if read from multiple threads
-    // concurrently. So we just have a global lock around it to prevent potential issues.
-    private static final Object SIM_READ_LOCK = new Object();
-    private ArrayList<SimContact> loadFrom(Uri uri) {
-        synchronized (SIM_READ_LOCK) {
-            final Cursor cursor = mResolver.query(uri, null, null, null, null);
-
-            try {
-                return loadFromCursor(cursor);
-            } finally {
-                cursor.close();
-            }
-        }
-    }
-
-    private ArrayList<SimContact> loadFromCursor(Cursor cursor) {
-        final int colId = cursor.getColumnIndex(_ID);
-        final int colName = cursor.getColumnIndex(NAME);
-        final int colNumber = cursor.getColumnIndex(NUMBER);
-        final int colEmails = cursor.getColumnIndex(EMAILS);
-
-        final ArrayList<SimContact> result = new ArrayList<>();
-
-        while (cursor.moveToNext()) {
-            final long id = cursor.getLong(colId);
-            final String name = cursor.getString(colName);
-            final String number = cursor.getString(colNumber);
-            final String emails = cursor.getString(colEmails);
-
-            final SimContact contact = new SimContact(id, name, number, parseEmails(emails));
-            result.add(contact);
-        }
-        return result;
-    }
-
-    private Cursor queryRawContactsForSimContacts(List<SimContact> contacts) {
-        final StringBuilder selectionBuilder = new StringBuilder();
-
-        int phoneCount = 0;
-        int nameCount = 0;
-        for (SimContact contact : contacts) {
-            if (contact.hasPhone()) {
-                phoneCount++;
-            } else if (contact.hasName()) {
-                nameCount++;
-            }
-        }
-        List<String> selectionArgs = new ArrayList<>(phoneCount + 1);
-
-        selectionBuilder.append('(');
-        selectionBuilder.append(Data.MIMETYPE).append("=? AND ");
-        selectionArgs.add(Phone.CONTENT_ITEM_TYPE);
-
-        selectionBuilder.append(Phone.NUMBER).append(" IN (")
-                .append(Joiner.on(',').join(Collections.nCopies(phoneCount, '?')))
-                .append(')');
-        for (SimContact contact : contacts) {
-            if (contact.hasPhone()) {
-                selectionArgs.add(contact.getPhone());
-            }
-        }
-        selectionBuilder.append(')');
-
-        if (nameCount > 0) {
-            selectionBuilder.append(" OR (");
-
-            selectionBuilder.append(Data.MIMETYPE).append("=? AND ");
-            selectionArgs.add(StructuredName.CONTENT_ITEM_TYPE);
-
-            selectionBuilder.append(Data.DISPLAY_NAME).append(" IN (")
-                    .append(Joiner.on(',').join(Collections.nCopies(nameCount, '?')))
-                    .append(')');
-            for (SimContact contact : contacts) {
-                if (!contact.hasPhone() && contact.hasName()) {
-                    selectionArgs.add(contact.getName());
-                }
-            }
-            selectionBuilder.append(')');
-        }
-
-        return mResolver.query(Data.CONTENT_URI.buildUpon()
-                        .appendQueryParameter(Data.VISIBLE_CONTACTS_ONLY, "true")
-                        .build(),
-                DataQuery.PROJECTION,
-                selectionBuilder.toString(),
-                selectionArgs.toArray(new String[selectionArgs.size()]),
-                null);
-    }
-
-    private Cursor queryAccountsOfRawContacts(Set<Long> ids) {
-        final StringBuilder selectionBuilder = new StringBuilder();
-
-        final String[] args = new String[ids.size()];
-
-        selectionBuilder.append(RawContacts._ID).append(" IN (")
-                .append(Joiner.on(',').join(Collections.nCopies(args.length, '?')))
-                .append(")");
-        int i = 0;
-        for (long id : ids) {
-            args[i++] = String.valueOf(id);
-        }
-        return mResolver.query(RawContacts.CONTENT_URI,
-                AccountQuery.PROJECTION,
-                selectionBuilder.toString(),
-                args,
-                null);
-    }
-
-    private ArrayList<ContentProviderOperation> createImportOperations(List<SimContact> contacts,
-            AccountWithDataSet targetAccount) {
-        final ArrayList<ContentProviderOperation> ops = new ArrayList<>();
-        for (SimContact contact : contacts) {
-            contact.appendCreateContactOperations(ops, targetAccount);
-        }
-        return ops;
-    }
-
-    private String[] parseEmails(String emails) {
-        return emails != null ? emails.split(",") : null;
-    }
-
-    private boolean hasTelephony() {
-        return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
-    }
-
-    private boolean hasPermissions() {
-        return PermissionsUtil.hasContactsPermissions(mContext) &&
-                PermissionsUtil.hasPhonePermissions(mContext);
-    }
-
-    public static SimContactDao create(Context context) {
-        if (USE_FAKE_INSTANCE) {
-            return new DebugImpl(context)
-                    .addSimCard(new SimCard("fake-sim-id1", 1, "Fake Carrier",
-                            "Card 1", "15095550101", "us").withContacts(
-                            new SimContact(1, "Sim One", "15095550111", null),
-                            new SimContact(2, "Sim Two", "15095550112", null),
-                            new SimContact(3, "Sim Three", "15095550113", null),
-                            new SimContact(4, "Sim Four", "15095550114", null),
-                            new SimContact(5, "411 & more", "411", null)
-                    ))
-                    .addSimCard(new SimCard("fake-sim-id2", 2, "Carrier Two",
-                            "Card 2", "15095550102", "us").withContacts(
-                            new SimContact(1, "John Sim", "15095550121", null),
-                            new SimContact(2, "Bob Sim", "15095550122", null),
-                            new SimContact(3, "Mary Sim", "15095550123", null),
-                            new SimContact(4, "Alice Sim", "15095550124", null),
-                            new SimContact(5, "Sim Duplicate", "15095550121", null)
-                    ));
-        }
-        return new SimContactDao(context);
-    }
-
-    // TODO remove this class and the USE_FAKE_INSTANCE flag once this code is not under
-    // active development or anytime after 3/1/2017
-    public static class DebugImpl extends SimContactDao {
-
-        private List<SimCard> mSimCards = new ArrayList<>();
-        private SparseArray<SimCard> mCardsBySubscription = new SparseArray<>();
-
-        public DebugImpl(Context context) {
-            super(context);
-        }
-
-        public DebugImpl addSimCard(SimCard sim) {
-            mSimCards.add(sim);
-            mCardsBySubscription.put(sim.getSubscriptionId(), sim);
-            return this;
-        }
-
-        @Override
-        public List<SimCard> getSimCards() {
-            return SharedPreferenceUtil.restoreSimStates(getContext(), mSimCards);
-        }
-
-        @Override
-        public ArrayList<SimContact> loadSimContacts() {
-            return new ArrayList<>(mSimCards.get(0).getContacts());
-        }
-
-        @Override
-        public ArrayList<SimContact> loadSimContacts(int subscriptionId) {
-            return new ArrayList<>(mCardsBySubscription.get(subscriptionId).getContacts());
-        }
-
-        @Override
-        public boolean canReadSimContacts() {
-            return true;
-        }
-    }
-
-    // Query used for detecting existing contacts that may match a SimContact.
-    private static final class DataQuery {
-
-        public static final String[] PROJECTION = new String[] {
-                Data.RAW_CONTACT_ID, Phone.NUMBER, Data.DISPLAY_NAME, Data.MIMETYPE
-        };
-
-        public static final int RAW_CONTACT_ID = 0;
-        public static final int PHONE_NUMBER = 1;
-        public static final int DISPLAY_NAME = 2;
-        public static final int MIMETYPE = 3;
-
-        public static long getRawContactId(Cursor cursor) {
-            return cursor.getLong(RAW_CONTACT_ID);
-        }
-
-        public static String getPhoneNumber(Cursor cursor) {
-            return isPhoneNumber(cursor) ? cursor.getString(PHONE_NUMBER) : null;
-        }
-
-        public static String getDisplayName(Cursor cursor) {
-            return cursor.getString(DISPLAY_NAME);
-        }
-
-        public static boolean isPhoneNumber(Cursor cursor) {
-            return Phone.CONTENT_ITEM_TYPE.equals(cursor.getString(MIMETYPE));
-        }
-    }
-
-    private static final class AccountQuery {
-        public static final String[] PROJECTION = new String[] {
-                RawContacts._ID, RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE,
-                RawContacts.DATA_SET
-        };
-
-        public static long getId(Cursor cursor) {
-            return cursor.getLong(0);
-        }
-
-        public static AccountWithDataSet getAccount(Cursor cursor) {
-            return new AccountWithDataSet(cursor.getString(1), cursor.getString(2),
-                    cursor.getString(3));
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/dialog/CallSubjectDialog.java b/src/com/android/contacts/common/dialog/CallSubjectDialog.java
deleted file mode 100644
index a17c4fc..0000000
--- a/src/com/android/contacts/common/dialog/CallSubjectDialog.java
+++ /dev/null
@@ -1,623 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.contacts.common.dialog;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.net.Uri;
-import android.os.Bundle;
-import android.preference.PreferenceManager;
-import android.telecom.PhoneAccount;
-import android.telecom.PhoneAccountHandle;
-import android.telecom.TelecomManager;
-import android.text.Editable;
-import android.text.InputFilter;
-import android.text.TextUtils;
-import android.text.TextWatcher;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.AdapterView;
-import android.widget.ArrayAdapter;
-import android.widget.EditText;
-import android.widget.ListView;
-import android.widget.QuickContactBadge;
-import android.widget.TextView;
-
-import com.android.contacts.common.CallUtil;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.R;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.PhoneAccountSdkCompat;
-import com.android.contacts.common.compat.telecom.TelecomManagerCompat;
-import com.android.contacts.common.util.UriUtils;
-import com.android.phone.common.animation.AnimUtils;
-
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Implements a dialog which prompts for a call subject for an outgoing call.  The dialog includes
- * a pop up list of historical call subjects.
- */
-public class CallSubjectDialog extends Activity {
-    private static final String TAG = "CallSubjectDialog";
-    private static final int CALL_SUBJECT_LIMIT = 16;
-    private static final int CALL_SUBJECT_HISTORY_SIZE = 5;
-
-    private static final int REQUEST_SUBJECT = 1001;
-
-    public static final String PREF_KEY_SUBJECT_HISTORY_COUNT = "subject_history_count";
-    public static final String PREF_KEY_SUBJECT_HISTORY_ITEM = "subject_history_item";
-
-    /**
-     * Activity intent argument bundle keys:
-     */
-    public static final String ARG_PHOTO_ID = "PHOTO_ID";
-    public static final String ARG_PHOTO_URI = "PHOTO_URI";
-    public static final String ARG_CONTACT_URI = "CONTACT_URI";
-    public static final String ARG_NAME_OR_NUMBER = "NAME_OR_NUMBER";
-    public static final String ARG_IS_BUSINESS = "IS_BUSINESS";
-    public static final String ARG_NUMBER = "NUMBER";
-    public static final String ARG_DISPLAY_NUMBER = "DISPLAY_NUMBER";
-    public static final String ARG_NUMBER_LABEL = "NUMBER_LABEL";
-    public static final String ARG_PHONE_ACCOUNT_HANDLE = "PHONE_ACCOUNT_HANDLE";
-
-    private int mAnimationDuration;
-    private Charset mMessageEncoding;
-    private View mBackgroundView;
-    private View mDialogView;
-    private QuickContactBadge mContactPhoto;
-    private TextView mNameView;
-    private TextView mNumberView;
-    private EditText mCallSubjectView;
-    private TextView mCharacterLimitView;
-    private View mHistoryButton;
-    private View mSendAndCallButton;
-    private ListView mSubjectList;
-
-    private int mLimit = CALL_SUBJECT_LIMIT;
-    private int mPhotoSize;
-    private SharedPreferences mPrefs;
-    private List<String> mSubjectHistory;
-
-    private long mPhotoID;
-    private Uri mPhotoUri;
-    private Uri mContactUri;
-    private String mNameOrNumber;
-    private boolean mIsBusiness;
-    private String mNumber;
-    private String mDisplayNumber;
-    private String mNumberLabel;
-    private PhoneAccountHandle mPhoneAccountHandle;
-
-    /**
-     * Handles changes to the text in the subject box.  Ensures the character limit is updated.
-     */
-    private final TextWatcher mTextWatcher = new TextWatcher() {
-        @Override
-        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-            // no-op
-        }
-
-        @Override
-        public void onTextChanged(CharSequence s, int start, int before, int count) {
-            updateCharacterLimit();
-        }
-
-        @Override
-        public void afterTextChanged(Editable s) {
-            // no-op
-        }
-    };
-
-    /**
-     * Click listener which handles user clicks outside of the dialog.
-     */
-    private View.OnClickListener mBackgroundListener = new View.OnClickListener() {
-        @Override
-        public void onClick(View v) {
-            finish();
-        }
-    };
-
-    /**
-     * Handles displaying the list of past call subjects.
-     */
-    private final View.OnClickListener mHistoryOnClickListener = new View.OnClickListener() {
-        @Override
-        public void onClick(View v) {
-            hideSoftKeyboard(CallSubjectDialog.this, mCallSubjectView);
-            showCallHistory(mSubjectList.getVisibility() == View.GONE);
-        }
-    };
-
-    /**
-     * Handles starting a call with a call subject specified.
-     */
-    private final View.OnClickListener mSendAndCallOnClickListener = new View.OnClickListener() {
-        @Override
-        public void onClick(View v) {
-            String subject = mCallSubjectView.getText().toString();
-            Intent intent = CallUtil.getCallWithSubjectIntent(mNumber, mPhoneAccountHandle,
-                    subject);
-
-            TelecomManagerCompat.placeCall(
-                    CallSubjectDialog.this,
-                    (TelecomManager) getSystemService(Context.TELECOM_SERVICE),
-                    intent);
-
-            mSubjectHistory.add(subject);
-            saveSubjectHistory(mSubjectHistory);
-            finish();
-        }
-    };
-
-    /**
-     * Handles auto-hiding the call history when user clicks in the call subject field to give it
-     * focus.
-     */
-    private final View.OnClickListener mCallSubjectClickListener = new View.OnClickListener() {
-        @Override
-        public void onClick(View v) {
-            if (mSubjectList.getVisibility() == View.VISIBLE) {
-                showCallHistory(false);
-            }
-        }
-    };
-
-    /**
-     * Item click listener which handles user clicks on the items in the list view.  Dismisses
-     * the activity, returning the subject to the caller and closing the activity with the
-     * {@link Activity#RESULT_OK} result code.
-     */
-    private AdapterView.OnItemClickListener mItemClickListener =
-            new AdapterView.OnItemClickListener() {
-                @Override
-                public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
-                    mCallSubjectView.setText(mSubjectHistory.get(position));
-                    showCallHistory(false);
-                }
-            };
-
-    /**
-     * Show the call subject dialog given a phone number to dial (e.g. from the dialpad).
-     *
-     * @param activity The activity.
-     * @param number The number to dial.
-     */
-    public static void start(Activity activity, String number) {
-        start(activity,
-                -1 /* photoId */,
-                null /* photoUri */,
-                null /* contactUri */,
-                number /* nameOrNumber */,
-                false /* isBusiness */,
-                number /* number */,
-                null /* displayNumber */,
-                null /* numberLabel */,
-                null /* phoneAccountHandle */);
-    }
-
-    /**
-     * Creates a call subject dialog.
-     *
-     * @param activity The current activity.
-     * @param photoId The photo ID (used to populate contact photo).
-     * @param photoUri The photo Uri (used to populate contact photo).
-     * @param contactUri The Contact URI (used so quick contact can be invoked from contact photo).
-     * @param nameOrNumber The name or number of the callee.
-     * @param isBusiness {@code true} if a business is being called (used for contact photo).
-     * @param number The raw number to dial.
-     * @param displayNumber The number to dial, formatted for display.
-     * @param numberLabel The label for the number (if from a contact).
-     * @param phoneAccountHandle The phone account handle.
-     */
-    public static void start(Activity activity, long photoId, Uri photoUri, Uri contactUri,
-            String nameOrNumber, boolean isBusiness, String number, String displayNumber,
-            String numberLabel, PhoneAccountHandle phoneAccountHandle) {
-        Bundle arguments = new Bundle();
-        arguments.putLong(ARG_PHOTO_ID, photoId);
-        arguments.putParcelable(ARG_PHOTO_URI, photoUri);
-        arguments.putParcelable(ARG_CONTACT_URI, contactUri);
-        arguments.putString(ARG_NAME_OR_NUMBER, nameOrNumber);
-        arguments.putBoolean(ARG_IS_BUSINESS, isBusiness);
-        arguments.putString(ARG_NUMBER, number);
-        arguments.putString(ARG_DISPLAY_NUMBER, displayNumber);
-        arguments.putString(ARG_NUMBER_LABEL, numberLabel);
-        arguments.putParcelable(ARG_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
-        start(activity, arguments);
-    }
-
-    /**
-     * Shows the call subject dialog given a Bundle containing all the arguments required to
-     * display the dialog (e.g. from Quick Contacts).
-     *
-     * @param activity The activity.
-     * @param arguments The arguments bundle.
-     */
-    public static void start(Activity activity, Bundle arguments) {
-        Intent intent = new Intent(activity, CallSubjectDialog.class);
-        intent.putExtras(arguments);
-        activity.startActivity(intent);
-    }
-
-    /**
-     * Creates the dialog, inflating the layout and populating it with the name and phone number.
-     *
-     * @param savedInstanceState The last saved instance state of the Fragment,
-     * or null if this is a freshly created Fragment.
-     *
-     * @return Dialog instance.
-     */
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mAnimationDuration = getResources().getInteger(R.integer.call_subject_animation_duration);
-        mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
-        mPhotoSize = getResources().getDimensionPixelSize(
-                R.dimen.call_subject_dialog_contact_photo_size);
-        readArguments();
-        loadConfiguration();
-        mSubjectHistory = loadSubjectHistory(mPrefs);
-
-        setContentView(R.layout.dialog_call_subject);
-        getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,
-                ViewGroup.LayoutParams.MATCH_PARENT);
-        mBackgroundView = findViewById(R.id.call_subject_dialog);
-        mBackgroundView.setOnClickListener(mBackgroundListener);
-        mDialogView = findViewById(R.id.dialog_view);
-        mContactPhoto = (QuickContactBadge) findViewById(R.id.contact_photo);
-        mNameView = (TextView) findViewById(R.id.name);
-        mNumberView = (TextView) findViewById(R.id.number);
-        mCallSubjectView = (EditText) findViewById(R.id.call_subject);
-        mCallSubjectView.addTextChangedListener(mTextWatcher);
-        mCallSubjectView.setOnClickListener(mCallSubjectClickListener);
-        InputFilter[] filters = new InputFilter[1];
-        filters[0] = new InputFilter.LengthFilter(mLimit);
-        mCallSubjectView.setFilters(filters);
-        mCharacterLimitView = (TextView) findViewById(R.id.character_limit);
-        mHistoryButton = findViewById(R.id.history_button);
-        mHistoryButton.setOnClickListener(mHistoryOnClickListener);
-        mHistoryButton.setVisibility(mSubjectHistory.isEmpty() ? View.GONE : View.VISIBLE);
-        mSendAndCallButton = findViewById(R.id.send_and_call_button);
-        mSendAndCallButton.setOnClickListener(mSendAndCallOnClickListener);
-        mSubjectList = (ListView) findViewById(R.id.subject_list);
-        mSubjectList.setOnItemClickListener(mItemClickListener);
-        mSubjectList.setVisibility(View.GONE);
-
-        updateContactInfo();
-        updateCharacterLimit();
-    }
-
-    /**
-     * Populates the contact info fields based on the current contact information.
-     */
-    private void updateContactInfo() {
-        if (mContactUri != null) {
-            setPhoto(mPhotoID, mPhotoUri, mContactUri, mNameOrNumber, mIsBusiness);
-        } else {
-            mContactPhoto.setVisibility(View.GONE);
-        }
-        mNameView.setText(mNameOrNumber);
-        if (!TextUtils.isEmpty(mNumberLabel) && !TextUtils.isEmpty(mDisplayNumber)) {
-            mNumberView.setVisibility(View.VISIBLE);
-            mNumberView.setText(getString(R.string.call_subject_type_and_number,
-                    mNumberLabel, mDisplayNumber));
-        } else {
-            mNumberView.setVisibility(View.GONE);
-            mNumberView.setText(null);
-        }
-    }
-
-    /**
-     * Reads arguments from the fragment arguments and populates the necessary instance variables.
-     */
-    private void readArguments() {
-        Bundle arguments = getIntent().getExtras();
-        if (arguments == null) {
-            Log.e(TAG, "Arguments cannot be null.");
-            return;
-        }
-        mPhotoID = arguments.getLong(ARG_PHOTO_ID);
-        mPhotoUri = arguments.getParcelable(ARG_PHOTO_URI);
-        mContactUri = arguments.getParcelable(ARG_CONTACT_URI);
-        mNameOrNumber = arguments.getString(ARG_NAME_OR_NUMBER);
-        mIsBusiness = arguments.getBoolean(ARG_IS_BUSINESS);
-        mNumber = arguments.getString(ARG_NUMBER);
-        mDisplayNumber = arguments.getString(ARG_DISPLAY_NUMBER);
-        mNumberLabel = arguments.getString(ARG_NUMBER_LABEL);
-        mPhoneAccountHandle = arguments.getParcelable(ARG_PHONE_ACCOUNT_HANDLE);
-    }
-
-    /**
-     * Updates the character limit display, coloring the text RED when the limit is reached or
-     * exceeded.
-     */
-    private void updateCharacterLimit() {
-        String subjectText = mCallSubjectView.getText().toString();
-        final int length;
-
-        // If a message encoding is specified, use that to count bytes in the message.
-        if (mMessageEncoding != null) {
-            length = subjectText.getBytes(mMessageEncoding).length;
-        } else {
-            // No message encoding specified, so just count characters entered.
-            length = subjectText.length();
-        }
-
-        mCharacterLimitView.setText(
-                getString(R.string.call_subject_limit, length, mLimit));
-        if (length >= mLimit) {
-            mCharacterLimitView.setTextColor(getResources().getColor(
-                    R.color.call_subject_limit_exceeded));
-        } else {
-            mCharacterLimitView.setTextColor(getResources().getColor(
-                    R.color.dialtacts_secondary_text_color));
-        }
-    }
-
-    /**
-     * Sets the photo on the quick contact photo.
-     *
-     * @param photoId
-     * @param photoUri
-     * @param contactUri
-     * @param displayName
-     * @param isBusiness
-     */
-    private void setPhoto(long photoId, Uri photoUri, Uri contactUri, String displayName,
-            boolean isBusiness) {
-        mContactPhoto.assignContactUri(contactUri);
-        if (CompatUtils.isLollipopCompatible()) {
-            mContactPhoto.setOverlay(null);
-        }
-
-        int contactType;
-        if (isBusiness) {
-            contactType = ContactPhotoManager.TYPE_BUSINESS;
-        } else {
-            contactType = ContactPhotoManager.TYPE_DEFAULT;
-        }
-
-        String lookupKey = null;
-        if (contactUri != null) {
-            lookupKey = UriUtils.getLookupKeyFromUri(contactUri);
-        }
-
-        ContactPhotoManager.DefaultImageRequest
-                request = new ContactPhotoManager.DefaultImageRequest(
-                displayName, lookupKey, contactType, true /* isCircular */);
-
-        if (photoId == 0 && photoUri != null) {
-            ContactPhotoManager.getInstance(this).loadPhoto(mContactPhoto, photoUri,
-                    mPhotoSize, false /* darkTheme */, true /* isCircular */, request);
-        } else {
-            ContactPhotoManager.getInstance(this).loadThumbnail(mContactPhoto, photoId,
-                    false /* darkTheme */, true /* isCircular */, request);
-        }
-    }
-
-    /**
-     * Loads the subject history from shared preferences.
-     *
-     * @param prefs Shared preferences.
-     * @return List of subject history strings.
-     */
-    public static List<String> loadSubjectHistory(SharedPreferences prefs) {
-        int historySize = prefs.getInt(PREF_KEY_SUBJECT_HISTORY_COUNT, 0);
-        List<String> subjects = new ArrayList(historySize);
-
-        for (int ix = 0 ; ix < historySize; ix++) {
-            String historyItem = prefs.getString(PREF_KEY_SUBJECT_HISTORY_ITEM + ix, null);
-            if (!TextUtils.isEmpty(historyItem)) {
-                subjects.add(historyItem);
-            }
-        }
-
-        return subjects;
-    }
-
-    /**
-     * Saves the subject history list to shared prefs, removing older items so that there are only
-     * {@link #CALL_SUBJECT_HISTORY_SIZE} items at most.
-     *
-     * @param history The history.
-     */
-    private void saveSubjectHistory(List<String> history) {
-        // Remove oldest subject(s).
-        while (history.size() > CALL_SUBJECT_HISTORY_SIZE) {
-            history.remove(0);
-        }
-
-        SharedPreferences.Editor editor = mPrefs.edit();
-        int historyCount = 0;
-        for (String subject : history) {
-            if (!TextUtils.isEmpty(subject)) {
-                editor.putString(PREF_KEY_SUBJECT_HISTORY_ITEM + historyCount,
-                        subject);
-                historyCount++;
-            }
-        }
-        editor.putInt(PREF_KEY_SUBJECT_HISTORY_COUNT, historyCount);
-        editor.apply();
-    }
-
-    /**
-     * Hide software keyboard for the given {@link View}.
-     */
-    public void hideSoftKeyboard(Context context, View view) {
-        InputMethodManager imm = (InputMethodManager) context.getSystemService(
-                Context.INPUT_METHOD_SERVICE);
-        if (imm != null) {
-            imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
-        }
-    }
-
-    /**
-     * Hides or shows the call history list.
-     *
-     * @param show {@code true} if the call history should be shown, {@code false} otherwise.
-     */
-    private void showCallHistory(final boolean show) {
-        // Bail early if the visibility has not changed.
-        if ((show && mSubjectList.getVisibility() == View.VISIBLE) ||
-                (!show && mSubjectList.getVisibility() == View.GONE)) {
-            return;
-        }
-
-        final int dialogStartingBottom = mDialogView.getBottom();
-        if (show) {
-            // Showing the subject list; bind the list of history items to the list and show it.
-            ArrayAdapter<String> adapter = new ArrayAdapter<String>(CallSubjectDialog.this,
-                    R.layout.call_subject_history_list_item, mSubjectHistory);
-            mSubjectList.setAdapter(adapter);
-            mSubjectList.setVisibility(View.VISIBLE);
-        } else {
-            // Hiding the subject list.
-            mSubjectList.setVisibility(View.GONE);
-        }
-
-        // Use a ViewTreeObserver so that we can animate between the pre-layout and post-layout
-        // states.
-        final ViewTreeObserver observer = mBackgroundView.getViewTreeObserver();
-        observer.addOnPreDrawListener(
-                new ViewTreeObserver.OnPreDrawListener() {
-                    @Override
-                    public boolean onPreDraw() {
-                        // We don't want to continue getting called.
-                        if (observer.isAlive()) {
-                            observer.removeOnPreDrawListener(this);
-                        }
-
-                        // Determine the amount the dialog has shifted due to the relayout.
-                        int shiftAmount = dialogStartingBottom - mDialogView.getBottom();
-
-                        // If the dialog needs to be shifted, do that now.
-                        if (shiftAmount != 0) {
-                            // Start animation in translated state and animate to translationY 0.
-                            mDialogView.setTranslationY(shiftAmount);
-                            mDialogView.animate()
-                                    .translationY(0)
-                                    .setInterpolator(AnimUtils.EASE_OUT_EASE_IN)
-                                    .setDuration(mAnimationDuration)
-                                    .start();
-                        }
-
-                        if (show) {
-                            // Show the subhect list.
-                            mSubjectList.setTranslationY(mSubjectList.getHeight());
-
-                            mSubjectList.animate()
-                                    .translationY(0)
-                                    .setInterpolator(AnimUtils.EASE_OUT_EASE_IN)
-                                    .setDuration(mAnimationDuration)
-                                    .setListener(new AnimatorListenerAdapter() {
-                                        @Override
-                                        public void onAnimationEnd(Animator animation) {
-                                            super.onAnimationEnd(animation);
-                                        }
-
-                                        @Override
-                                        public void onAnimationStart(Animator animation) {
-                                            super.onAnimationStart(animation);
-                                            mSubjectList.setVisibility(View.VISIBLE);
-                                        }
-                                    })
-                                    .start();
-                        } else {
-                            // Hide the subject list.
-                            mSubjectList.setTranslationY(0);
-
-                            mSubjectList.animate()
-                                    .translationY(mSubjectList.getHeight())
-                                    .setInterpolator(AnimUtils.EASE_OUT_EASE_IN)
-                                    .setDuration(mAnimationDuration)
-                                    .setListener(new AnimatorListenerAdapter() {
-                                        @Override
-                                        public void onAnimationEnd(Animator animation) {
-                                            super.onAnimationEnd(animation);
-                                            mSubjectList.setVisibility(View.GONE);
-                                        }
-
-                                        @Override
-                                        public void onAnimationStart(Animator animation) {
-                                            super.onAnimationStart(animation);
-                                        }
-                                    })
-                                    .start();
-                        }
-                        return true;
-                    }
-                }
-        );
-    }
-
-    /**
-     * Loads the message encoding and maximum message length from the phone account extras for the
-     * current phone account.
-     */
-    private void loadConfiguration() {
-        // Only attempt to load configuration from the phone account extras if the SDK is N or
-        // later.  If we've got a prior SDK the default encoding and message length will suffice.
-        int sdk = android.os.Build.VERSION.SDK_INT;
-        if(sdk <= android.os.Build.VERSION_CODES.M) {
-            return;
-        }
-
-        if (mPhoneAccountHandle == null) {
-            return;
-        }
-
-        TelecomManager telecomManager =
-                (TelecomManager) getSystemService(Context.TELECOM_SERVICE);
-        final PhoneAccount account = telecomManager.getPhoneAccount(mPhoneAccountHandle);
-
-        Bundle phoneAccountExtras = PhoneAccountSdkCompat.getExtras(account);
-        if (phoneAccountExtras == null) {
-            return;
-        }
-
-        // Get limit, if provided; otherwise default to existing value.
-        mLimit = phoneAccountExtras
-                .getInt(PhoneAccountSdkCompat.EXTRA_CALL_SUBJECT_MAX_LENGTH, mLimit);
-
-        // Get charset; default to none (e.g. count characters 1:1).
-        String charsetName = phoneAccountExtras.getString(
-                PhoneAccountSdkCompat.EXTRA_CALL_SUBJECT_CHARACTER_ENCODING);
-
-        if (!TextUtils.isEmpty(charsetName)) {
-            try {
-                mMessageEncoding = Charset.forName(charsetName);
-            } catch (java.nio.charset.UnsupportedCharsetException uce) {
-                // Character set was invalid; log warning and fallback to none.
-                Log.w(TAG, "Invalid charset: " + charsetName);
-                mMessageEncoding = null;
-            }
-        } else {
-            // No character set specified, so count characters 1:1.
-            mMessageEncoding = null;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/dialog/ClearFrequentsDialog.java b/src/com/android/contacts/common/dialog/ClearFrequentsDialog.java
deleted file mode 100644
index 2fab3e1..0000000
--- a/src/com/android/contacts/common/dialog/ClearFrequentsDialog.java
+++ /dev/null
@@ -1,81 +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.common.dialog;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.provider.ContactsContract;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.util.PermissionsUtil;
-
-/**
- * Dialog that clears the frequently contacted list after confirming with the user.
- */
-public class ClearFrequentsDialog extends DialogFragment {
-    /** Preferred way to show this dialog */
-    public static void show(FragmentManager fragmentManager) {
-        ClearFrequentsDialog dialog = new ClearFrequentsDialog();
-        dialog.show(fragmentManager, "clearFrequents");
-    }
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        final Context context = getActivity().getApplicationContext();
-        final ContentResolver resolver = getActivity().getContentResolver();
-        final OnClickListener okListener = new OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                if (!PermissionsUtil.hasContactsPermissions(context)) {
-                    return;
-                }
-                final IndeterminateProgressDialog progressDialog = IndeterminateProgressDialog.show(
-                        getFragmentManager(), getString(R.string.clearFrequentsProgress_title),
-                        null, 500);
-                final AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
-                    @Override
-                    protected Void doInBackground(Void... params) {
-                        resolver.delete(ContactsContract.DataUsageFeedback.DELETE_USAGE_URI,
-                                null, null);
-                        return null;
-                    }
-
-                    @Override
-                    protected void onPostExecute(Void result) {
-                        progressDialog.dismiss();
-                    }
-                };
-                task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
-            }
-        };
-        return new AlertDialog.Builder(getActivity())
-            .setTitle(R.string.clearFrequentsConfirmation_title)
-            .setMessage(R.string.clearFrequentsConfirmation)
-            .setNegativeButton(android.R.string.cancel, null)
-            .setPositiveButton(android.R.string.ok, okListener)
-            .setCancelable(true)
-            .create();
-    }
-}
diff --git a/src/com/android/contacts/common/dialog/IndeterminateProgressDialog.java b/src/com/android/contacts/common/dialog/IndeterminateProgressDialog.java
deleted file mode 100644
index 2fe059f..0000000
--- a/src/com/android/contacts/common/dialog/IndeterminateProgressDialog.java
+++ /dev/null
@@ -1,208 +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.common.dialog;
-
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.app.ProgressDialog;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.os.Handler;
-
-/**
- * Indeterminate progress dialog wrapped up in a DialogFragment to work even when the device
- * orientation is changed. Currently, only supports adding a title and/or message to the progress
- * dialog.  There is an additional parameter of the minimum amount of time to display the progress
- * dialog even after a call to dismiss the dialog {@link #dismiss()} or
- * {@link #dismissAllowingStateLoss()}.
- * <p>
- * To create and show the progress dialog, use
- * {@link #show(FragmentManager, CharSequence, CharSequence, long)} and retain the reference to the
- * IndeterminateProgressDialog instance.
- * <p>
- * To dismiss the dialog, use {@link #dismiss()} or {@link #dismissAllowingStateLoss()} on the
- * instance.  The instance returned by
- * {@link #show(FragmentManager, CharSequence, CharSequence, long)} is guaranteed to be valid
- * after a device orientation change because the {@link #setRetainInstance(boolean)} is called
- * internally with true.
- */
-public class IndeterminateProgressDialog extends DialogFragment {
-    private static final String TAG = IndeterminateProgressDialog.class.getSimpleName();
-
-    private CharSequence mTitle;
-    private CharSequence mMessage;
-    private long mMinDisplayTime;
-    private long mShowTime = 0;
-    private boolean mActivityReady = false;
-    private Dialog mOldDialog;
-    private final Handler mHandler = new Handler();
-    private boolean mCalledSuperDismiss = false;
-    private boolean mAllowStateLoss;
-    private final Runnable mDismisser = new Runnable() {
-        @Override
-        public void run() {
-            superDismiss();
-        }
-    };
-
-    /**
-     * Creates and shows an indeterminate progress dialog.  Once the progress dialog is shown, it
-     * will be shown for at least the minDisplayTime (in milliseconds), so that the progress dialog
-     * does not flash in and out to quickly.
-     */
-    public static IndeterminateProgressDialog show(FragmentManager fragmentManager,
-            CharSequence title, CharSequence message, long minDisplayTime) {
-        IndeterminateProgressDialog dialogFragment = new IndeterminateProgressDialog();
-        dialogFragment.mTitle = title;
-        dialogFragment.mMessage = message;
-        dialogFragment.mMinDisplayTime = minDisplayTime;
-        dialogFragment.show(fragmentManager, TAG);
-        dialogFragment.mShowTime = System.currentTimeMillis();
-        dialogFragment.setCancelable(false);
-
-        return dialogFragment;
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setRetainInstance(true);
-    }
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        // Create the progress dialog and set its properties
-        final ProgressDialog dialog = new ProgressDialog(getActivity());
-        dialog.setIndeterminate(true);
-        dialog.setIndeterminateDrawable(null);
-        dialog.setTitle(mTitle);
-        dialog.setMessage(mMessage);
-
-        return dialog;
-    }
-
-    @Override
-    public void onStart() {
-        super.onStart();
-        mActivityReady = true;
-
-        // Check if superDismiss() had been called before.  This can happen if in a long
-        // running operation, the user hits the home button and closes this fragment's activity.
-        // Upon returning, we want to dismiss this progress dialog fragment.
-        if (mCalledSuperDismiss) {
-            superDismiss();
-        }
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-        mActivityReady = false;
-    }
-
-    /**
-     * There is a race condition that is not handled properly by the DialogFragment class.
-     * If we don't check that this onDismiss callback isn't for the old progress dialog from before
-     * the device orientation change, then this will cause the newly created dialog after the
-     * orientation change to be dismissed immediately.
-     */
-    @Override
-    public void onDismiss(DialogInterface dialog) {
-        if (mOldDialog != null && mOldDialog == dialog) {
-            // This is the callback from the old progress dialog that was already dismissed before
-            // the device orientation change, so just ignore it.
-            return;
-        }
-        super.onDismiss(dialog);
-    }
-
-    /**
-     * Save the old dialog that is about to get destroyed in case this is due to a change
-     * in device orientation.  This will allow us to intercept the callback to
-     * {@link #onDismiss(DialogInterface)} in case the callback happens after a new progress dialog
-     * instance was created.
-     */
-    @Override
-    public void onDestroyView() {
-        mOldDialog = getDialog();
-        super.onDestroyView();
-    }
-
-    /**
-     * This tells the progress dialog to dismiss itself after guaranteeing to be shown for the
-     * specified time in {@link #show(FragmentManager, CharSequence, CharSequence, long)}.
-     */
-    @Override
-    public void dismiss() {
-        mAllowStateLoss = false;
-        dismissWhenReady();
-    }
-
-    /**
-     * This tells the progress dialog to dismiss itself (with state loss) after guaranteeing to be
-     * shown for the specified time in
-     * {@link #show(FragmentManager, CharSequence, CharSequence, long)}.
-     */
-    @Override
-    public void dismissAllowingStateLoss() {
-        mAllowStateLoss = true;
-        dismissWhenReady();
-    }
-
-    /**
-     * Tells the progress dialog to dismiss itself after guaranteeing that the dialog had been
-     * showing for at least the minimum display time as set in
-     * {@link #show(FragmentManager, CharSequence, CharSequence, long)}.
-     */
-    private void dismissWhenReady() {
-        // Compute how long the dialog has been showing
-        final long shownTime = System.currentTimeMillis() - mShowTime;
-        if (shownTime >= mMinDisplayTime) {
-            // dismiss immediately
-            mHandler.post(mDismisser);
-        } else {
-            // Need to wait some more, so compute the amount of time to sleep.
-            final long sleepTime = mMinDisplayTime - shownTime;
-            mHandler.postDelayed(mDismisser, sleepTime);
-        }
-    }
-
-    /**
-     * Actually dismiss the dialog fragment.
-     */
-    private void superDismiss() {
-        mCalledSuperDismiss = true;
-        if (mActivityReady) {
-            // The fragment is either in onStart or past it, but has not gotten to onStop yet.
-            // It is safe to dismiss this dialog fragment.
-            if (mAllowStateLoss) {
-                super.dismissAllowingStateLoss();
-            } else {
-                super.dismiss();
-            }
-        }
-        // If mActivityReady is false, then this dialog fragment has already passed the onStop
-        // state. This can happen if the user hit the 'home' button before this dialog fragment was
-        // dismissed or if there is a configuration change.
-        // In the event that this dialog fragment is re-attached and reaches onStart (e.g.,
-        // because the user returns to this fragment's activity or the device configuration change
-        // has re-attached this dialog fragment), because the mCalledSuperDismiss flag was set to
-        // true, this dialog fragment will be dismissed within onStart.  So, there's nothing else
-        // that needs to be done.
-    }
-}
diff --git a/src/com/android/contacts/common/extensions/ExtendedPhoneDirectoriesManager.java b/src/com/android/contacts/common/extensions/ExtendedPhoneDirectoriesManager.java
deleted file mode 100644
index eb25934..0000000
--- a/src/com/android/contacts/common/extensions/ExtendedPhoneDirectoriesManager.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2013 Google Inc. All Rights Reserved.
-
-package com.android.contacts.common.extensions;
-
-import android.content.Context;
-
-import com.android.contacts.common.list.DirectoryPartition;
-
-import java.util.List;
-
-/**
- * An interface for adding extended phone directories to
- * {@link com.android.contacts.common.list.PhoneNumberListAdapter}.
- * An app that wishes to add custom phone directories should implement this class and advertise it
- * in assets/contacts_extensions.properties. {@link ExtensionsFactory} will load the implementation
- * and the extended directories will be added by
- * {@link com.android.contacts.common.list.PhoneNumberListAdapter}.
- */
-public interface ExtendedPhoneDirectoriesManager {
-
-    /**
-     * Return a list of extended directories to add. May return null if no directories are to be
-     * added.
-     */
-    List<DirectoryPartition> getExtendedDirectories(Context context);
-}
diff --git a/src/com/android/contacts/common/extensions/ExtensionsFactory.java b/src/com/android/contacts/common/extensions/ExtensionsFactory.java
deleted file mode 100644
index d52429e..0000000
--- a/src/com/android/contacts/common/extensions/ExtensionsFactory.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.extensions;
-
-import android.content.Context;
-import android.util.Log;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-
-/*
- * A framework for adding extensions to Dialer. This class reads a property file from
- * assets/contacts_extensions.properties and loads extension classes that an app has defined. If
- * an extension class was not defined, null is returned.
- */
-public class ExtensionsFactory {
-
-    private static String TAG = "ExtensionsFactory";
-
-    // Config filename for mappings of various class names to their custom
-    // implementations.
-    private static final String EXTENSIONS_PROPERTIES = "contacts_extensions.properties";
-
-    private static final String EXTENDED_PHONE_DIRECTORIES_KEY = "extendedPhoneDirectories";
-
-    private static Properties sProperties = null;
-    private static ExtendedPhoneDirectoriesManager mExtendedPhoneDirectoriesManager = null;
-
-    public static void init(Context context) {
-        if (sProperties != null) {
-            return;
-        }
-        try {
-            final InputStream fileStream = context.getAssets().open(EXTENSIONS_PROPERTIES);
-            sProperties = new Properties();
-            sProperties.load(fileStream);
-            fileStream.close();
-
-            final String className = sProperties.getProperty(EXTENDED_PHONE_DIRECTORIES_KEY);
-            if (className != null) {
-                mExtendedPhoneDirectoriesManager = createInstance(className);
-            } else {
-                Log.d(TAG, EXTENDED_PHONE_DIRECTORIES_KEY + " not found in properties file.");
-            }
-
-        } catch (FileNotFoundException e) {
-            // No custom extensions. Ignore.
-            Log.d(TAG, "No custom extensions.");
-        } catch (IOException e) {
-            Log.d(TAG, e.toString());
-        }
-    }
-
-    private static <T> T createInstance(String className) {
-        try {
-            Class<?> c = Class.forName(className);
-            //noinspection unchecked
-            return (T) c.newInstance();
-        } catch (ClassNotFoundException e) {
-            Log.e(TAG, className + ": unable to create instance.", e);
-        } catch (IllegalAccessException e) {
-            Log.e(TAG, className + ": unable to create instance.", e);
-        } catch (InstantiationException e) {
-            Log.e(TAG, className + ": unable to create instance.", e);
-        }
-        return null;
-    }
-
-    public static ExtendedPhoneDirectoriesManager getExtendedPhoneDirectoriesManager() {
-        return mExtendedPhoneDirectoriesManager;
-    }
-}
diff --git a/src/com/android/contacts/common/format/FormatUtils.java b/src/com/android/contacts/common/format/FormatUtils.java
deleted file mode 100644
index 376ff13..0000000
--- a/src/com/android/contacts/common/format/FormatUtils.java
+++ /dev/null
@@ -1,184 +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.common.format;
-
-import android.database.CharArrayBuffer;
-import android.graphics.Typeface;
-import android.text.SpannableString;
-import android.text.style.StyleSpan;
-
-import com.google.common.annotations.VisibleForTesting;
-
-import java.util.Arrays;
-
-/**
- * Assorted utility methods related to text formatting in Contacts.
- */
-public class FormatUtils {
-
-    /**
-     * Finds the earliest point in buffer1 at which the first part of buffer2 matches.  For example,
-     * overlapPoint("abcd", "cdef") == 2.
-     */
-    public static int overlapPoint(CharArrayBuffer buffer1, CharArrayBuffer buffer2) {
-        if (buffer1 == null || buffer2 == null) {
-            return -1;
-        }
-        return overlapPoint(Arrays.copyOfRange(buffer1.data, 0, buffer1.sizeCopied),
-                Arrays.copyOfRange(buffer2.data, 0, buffer2.sizeCopied));
-    }
-
-    /**
-     * Finds the earliest point in string1 at which the first part of string2 matches.  For example,
-     * overlapPoint("abcd", "cdef") == 2.
-     */
-    @VisibleForTesting
-    public static int overlapPoint(String string1, String string2) {
-        if (string1 == null || string2 == null) {
-            return -1;
-        }
-        return overlapPoint(string1.toCharArray(), string2.toCharArray());
-    }
-
-    /**
-     * Finds the earliest point in array1 at which the first part of array2 matches.  For example,
-     * overlapPoint("abcd", "cdef") == 2.
-     */
-    public static int overlapPoint(char[] array1, char[] array2) {
-        if (array1 == null || array2 == null) {
-            return -1;
-        }
-        int count1 = array1.length;
-        int count2 = array2.length;
-
-        // Ignore matching tails of the two arrays.
-        while (count1 > 0 && count2 > 0 && array1[count1 - 1] == array2[count2 - 1]) {
-            count1--;
-            count2--;
-        }
-
-        int size = count2;
-        for (int i = 0; i < count1; i++) {
-            if (i + size > count1) {
-                size = count1 - i;
-            }
-            int j;
-            for (j = 0; j < size; j++) {
-                if (array1[i+j] != array2[j]) {
-                    break;
-                }
-            }
-            if (j == size) {
-                return i;
-            }
-        }
-
-        return -1;
-    }
-
-    /**
-     * Applies the given style to a range of the input CharSequence.
-     * @param style The style to apply (see the style constants in {@link Typeface}).
-     * @param input The CharSequence to style.
-     * @param start Starting index of the range to style (will be clamped to be a minimum of 0).
-     * @param end Ending index of the range to style (will be clamped to a maximum of the input
-     *     length).
-     * @param flags Bitmask for configuring behavior of the span.  See {@link android.text.Spanned}.
-     * @return The styled CharSequence.
-     */
-    public static CharSequence applyStyleToSpan(int style, CharSequence input, int start, int end,
-            int flags) {
-        // Enforce bounds of the char sequence.
-        start = Math.max(0, start);
-        end = Math.min(input.length(), end);
-        SpannableString text = new SpannableString(input);
-        text.setSpan(new StyleSpan(style), start, end, flags);
-        return text;
-    }
-
-    @VisibleForTesting
-    public static void copyToCharArrayBuffer(String text, CharArrayBuffer buffer) {
-        if (text != null) {
-            char[] data = buffer.data;
-            if (data == null || data.length < text.length()) {
-                buffer.data = text.toCharArray();
-            } else {
-                text.getChars(0, text.length(), data, 0);
-            }
-            buffer.sizeCopied = text.length();
-        } else {
-            buffer.sizeCopied = 0;
-        }
-    }
-
-    /** Returns a String that represents the content of the given {@link CharArrayBuffer}. */
-    @VisibleForTesting
-    public static String charArrayBufferToString(CharArrayBuffer buffer) {
-        return new String(buffer.data, 0, buffer.sizeCopied);
-    }
-
-    /**
-     * Finds the index of the first word that starts with the given prefix.
-     * <p>
-     * If not found, returns -1.
-     *
-     * @param text the text in which to search for the prefix
-     * @param prefix the text to find, in upper case letters
-     */
-    public static int indexOfWordPrefix(CharSequence text, String prefix) {
-        if (prefix == null || text == null) {
-            return -1;
-        }
-
-        int textLength = text.length();
-        int prefixLength = prefix.length();
-
-        if (prefixLength == 0 || textLength < prefixLength) {
-            return -1;
-        }
-
-        int i = 0;
-        while (i < textLength) {
-            // Skip non-word characters
-            while (i < textLength && !Character.isLetterOrDigit(text.charAt(i))) {
-                i++;
-            }
-
-            if (i + prefixLength > textLength) {
-                return -1;
-            }
-
-            // Compare the prefixes
-            int j;
-            for (j = 0; j < prefixLength; j++) {
-                if (Character.toUpperCase(text.charAt(i + j)) != prefix.charAt(j)) {
-                    break;
-                }
-            }
-            if (j == prefixLength) {
-                return i;
-            }
-
-            // Skip this word
-            while (i < textLength && Character.isLetterOrDigit(text.charAt(i))) {
-                i++;
-            }
-        }
-
-        return -1;
-    }
-
-}
diff --git a/src/com/android/contacts/common/format/TextHighlighter.java b/src/com/android/contacts/common/format/TextHighlighter.java
deleted file mode 100644
index 496dcda..0000000
--- a/src/com/android/contacts/common/format/TextHighlighter.java
+++ /dev/null
@@ -1,98 +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.common.format;
-
-import android.graphics.Typeface;
-import android.text.SpannableString;
-import android.text.style.CharacterStyle;
-import android.text.style.ForegroundColorSpan;
-import android.text.style.StyleSpan;
-import android.widget.TextView;
-
-import com.google.common.base.Preconditions;
-
-/**
- * Highlights the text in a text field.
- */
-public class TextHighlighter {
-    private final String TAG = TextHighlighter.class.getSimpleName();
-    private final static boolean DEBUG = false;
-
-    private int mTextStyle;
-
-    private CharacterStyle mTextStyleSpan;
-
-    public TextHighlighter(int textStyle) {
-        mTextStyle = textStyle;
-        mTextStyleSpan = getStyleSpan();
-    }
-
-    /**
-     * Sets the text on the given text view, highlighting the word that matches the given prefix.
-     *
-     * @param view the view on which to set the text
-     * @param text the string to use as the text
-     * @param prefix the prefix to look for
-     */
-    public void setPrefixText(TextView view, String text, String prefix) {
-        view.setText(applyPrefixHighlight(text, prefix));
-    }
-
-    private CharacterStyle getStyleSpan() {
-        return new StyleSpan(mTextStyle);
-    }
-
-    /**
-     * Applies highlight span to the text.
-     * @param text Text sequence to be highlighted.
-     * @param start Start position of the highlight sequence.
-     * @param end End position of the highlight sequence.
-     */
-    public void applyMaskingHighlight(SpannableString text, int start, int end) {
-        /** Sets text color of the masked locations to be highlighted. */
-        text.setSpan(getStyleSpan(), start, end, 0);
-    }
-
-    /**
-     * Returns a CharSequence which highlights the given prefix if found in the given text.
-     *
-     * @param text the text to which to apply the highlight
-     * @param prefix the prefix to look for
-     */
-    public CharSequence applyPrefixHighlight(CharSequence text, String prefix) {
-        if (prefix == null) {
-            return text;
-        }
-
-        // Skip non-word characters at the beginning of prefix.
-        int prefixStart = 0;
-        while (prefixStart < prefix.length() &&
-                !Character.isLetterOrDigit(prefix.charAt(prefixStart))) {
-            prefixStart++;
-        }
-        final String trimmedPrefix = prefix.substring(prefixStart);
-
-        int index = FormatUtils.indexOfWordPrefix(text, trimmedPrefix);
-        if (index != -1) {
-            final SpannableString result = new SpannableString(text);
-            result.setSpan(mTextStyleSpan, index, index + trimmedPrefix.length(), 0 /* flags */);
-            return result;
-        } else {
-            return text;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/interactions/ExportDialogFragment.java b/src/com/android/contacts/common/interactions/ExportDialogFragment.java
deleted file mode 100644
index 3925833..0000000
--- a/src/com/android/contacts/common/interactions/ExportDialogFragment.java
+++ /dev/null
@@ -1,234 +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.common.interactions;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract.Contacts;
-import android.telephony.SubscriptionManager;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.TextView;
-import android.widget.Toast;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.vcard.ExportVCardActivity;
-import com.android.contacts.common.vcard.ShareVCardActivity;
-import com.android.contacts.common.vcard.VCardCommonArguments;
-
-/**
- * An dialog invoked to import/export contacts.
- */
-public class ExportDialogFragment extends DialogFragment {
-    public static final String TAG = "ExportDialogFragment";
-
-    public static final int EXPORT_MODE_FAVORITES = 0;
-    public static final int EXPORT_MODE_ALL_CONTACTS = 1;
-    public static final int EXPORT_MODE_DEFAULT = -1;
-
-    private static int mExportMode = EXPORT_MODE_DEFAULT;
-
-    private final String[] LOOKUP_PROJECTION = new String[] {
-            Contacts.LOOKUP_KEY
-    };
-
-    private SubscriptionManager mSubscriptionManager;
-
-    /** Preferred way to show this dialog */
-    public static void show(FragmentManager fragmentManager, Class callingActivity,
-            int exportMode) {
-        final ExportDialogFragment fragment = new ExportDialogFragment();
-        Bundle args = new Bundle();
-        args.putString(VCardCommonArguments.ARG_CALLING_ACTIVITY, callingActivity.getName());
-        fragment.setArguments(args);
-        fragment.show(fragmentManager, TAG);
-        mExportMode = exportMode;
-    }
-
-    @Override
-    public Context getContext() {
-        return getActivity();
-    }
-
-    @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-    }
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        // Wrap our context to inflate list items using the correct theme
-        final Resources res = getActivity().getResources();
-        final LayoutInflater dialogInflater = (LayoutInflater)getActivity()
-                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        final String callingActivity = getArguments().getString(
-                VCardCommonArguments.ARG_CALLING_ACTIVITY);
-
-        // Adapter that shows a list of string resources
-        final ArrayAdapter<AdapterEntry> adapter = new ArrayAdapter<AdapterEntry>(getActivity(),
-                R.layout.select_dialog_item) {
-            @Override
-            public View getView(int position, View convertView, ViewGroup parent) {
-                final View result = convertView != null ? convertView :
-                        dialogInflater.inflate(R.layout.select_dialog_item, parent, false);
-
-                final TextView text = (TextView) result.findViewById(R.id.primary_text);
-                final View secondaryText = result.findViewById(R.id.secondary_text);
-                secondaryText.setVisibility(View.GONE);
-
-                text.setText(getItem(position).mLabel);
-                return result;
-            }
-        };
-
-        if (res.getBoolean(R.bool.config_allow_export)) {
-                adapter.add(new AdapterEntry(getString(R.string.export_to_vcf_file),
-                        R.string.export_to_vcf_file));
-        }
-        if (res.getBoolean(R.bool.config_allow_share_contacts)) {
-            if (mExportMode == EXPORT_MODE_FAVORITES) {
-                // share favorite and frequently contacted contacts from Favorites tab
-                adapter.add(new AdapterEntry(getString(R.string.share_favorite_contacts),
-                        R.string.share_contacts));
-            } else {
-                // share "all" contacts (in groups selected in "Customize") from All tab for now
-                // TODO: change the string to share_visible_contacts if implemented
-                adapter.add(new AdapterEntry(getString(R.string.share_contacts),
-                        R.string.share_contacts));
-            }
-        }
-
-        final DialogInterface.OnClickListener clickListener =
-                new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                boolean dismissDialog;
-                final int resId = adapter.getItem(which).mChoiceResourceId;
-                if (resId == R.string.export_to_vcf_file) {
-                    dismissDialog = true;
-                    final Intent exportIntent = new Intent(
-                            getActivity(), ExportVCardActivity.class);
-                    exportIntent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY,
-                            callingActivity);
-                    getActivity().startActivity(exportIntent);
-                } else if (resId == R.string.share_contacts) {
-                    dismissDialog = true;
-                    if (mExportMode == EXPORT_MODE_FAVORITES) {
-                        doShareFavoriteContacts();
-                    } else { // EXPORT_MODE_ALL_CONTACTS
-                        final Intent exportIntent = new Intent(
-                                getActivity(), ShareVCardActivity.class);
-                        exportIntent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY,
-                                callingActivity);
-                        getActivity().startActivity(exportIntent);
-                    }
-                } else {
-                    dismissDialog = true;
-                    Log.e(TAG, "Unexpected resource: "
-                            + getActivity().getResources().getResourceEntryName(resId));
-                }
-                if (dismissDialog) {
-                    dialog.dismiss();
-                }
-            }
-        };
-        final TextView title = (TextView) View.inflate(getActivity(), R.layout.dialog_title, null);
-        title.setText(R.string.dialog_export);
-        return new AlertDialog.Builder(getActivity())
-                .setCustomTitle(title)
-                .setSingleChoiceItems(adapter, -1, clickListener)
-                .create();
-    }
-
-    private void doShareFavoriteContacts() {
-        try{
-            final Cursor cursor = getActivity().getContentResolver().query(
-                    Contacts.CONTENT_STREQUENT_URI, LOOKUP_PROJECTION, null, null,
-                    Contacts.DISPLAY_NAME + " COLLATE NOCASE ASC");
-            if (cursor != null) {
-                try {
-                    if (!cursor.moveToFirst()) {
-                        Toast.makeText(getActivity(), R.string.no_contact_to_share,
-                                Toast.LENGTH_SHORT).show();
-                        return;
-                    }
-
-                    // Build multi-vcard Uri for sharing
-                    final StringBuilder uriListBuilder = new StringBuilder();
-                    int index = 0;
-                    do {
-                        if (index != 0)
-                            uriListBuilder.append(':');
-                        uriListBuilder.append(cursor.getString(0));
-                        index++;
-                    } while (cursor.moveToNext());
-                    final Uri uri = Uri.withAppendedPath(
-                            Contacts.CONTENT_MULTI_VCARD_URI,
-                            Uri.encode(uriListBuilder.toString()));
-
-                    final Intent intent = new Intent(Intent.ACTION_SEND);
-                    intent.setType(Contacts.CONTENT_VCARD_TYPE);
-                    intent.putExtra(Intent.EXTRA_STREAM, uri);
-                    ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
-                } finally {
-                    cursor.close();
-                }
-            }
-        } catch (Exception e) {
-            Log.e(TAG, "Sharing contacts failed", e);
-            getActivity().runOnUiThread(new Runnable() {
-                @Override
-                public void run() {
-                    Toast.makeText(getContext(), R.string.share_contacts_failure,
-                            Toast.LENGTH_SHORT).show();
-                }
-            });
-        }
-    }
-
-    private static class AdapterEntry {
-        public final CharSequence mLabel;
-        public final int mChoiceResourceId;
-        public final int mSubscriptionId;
-
-        public AdapterEntry(CharSequence label, int resId, int subId) {
-            mLabel = label;
-            mChoiceResourceId = resId;
-            mSubscriptionId = subId;
-        }
-
-        public AdapterEntry(String label, int resId) {
-            // Store a nonsense value for mSubscriptionId. If this constructor is used,
-            // the mSubscriptionId value should not be read later.
-            this(label, resId, /* subId = */ -1);
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/interactions/ImportDialogFragment.java b/src/com/android/contacts/common/interactions/ImportDialogFragment.java
deleted file mode 100644
index 1b2c98d..0000000
--- a/src/com/android/contacts/common/interactions/ImportDialogFragment.java
+++ /dev/null
@@ -1,292 +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.common.interactions;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.FragmentManager;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.TextView;
-
-import com.android.contacts.SimImportFragment;
-import com.android.contacts.activities.SimImportActivity;
-import com.android.contacts.common.R;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.database.SimContactDao;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.SimCard;
-import com.android.contacts.common.model.SimContact;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.AccountSelectionUtil;
-import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
-import com.android.contacts.editor.SelectAccountDialogFragment;
-
-import java.util.List;
-
-/**
- * An dialog invoked to import/export contacts.
- */
-public class ImportDialogFragment extends DialogFragment {
-    public static final String TAG = "ImportDialogFragment";
-
-    public static final String KEY_RES_ID = "resourceId";
-    public static final String KEY_SUBSCRIPTION_ID = "subscriptionId";
-
-    public static final String EXTRA_SIM_ONLY = "extraSimOnly";
-
-    public static final String EXTRA_SIM_CONTACT_COUNT_PREFIX = "simContactCount_";
-
-    private boolean mSimOnly = false;
-    private SimContactDao mSimDao;
-
-    /** Preferred way to show this dialog */
-    public static void show(FragmentManager fragmentManager) {
-        final ImportDialogFragment fragment = new ImportDialogFragment();
-        fragment.show(fragmentManager, TAG);
-    }
-
-    public static void show(FragmentManager fragmentManager, List<SimCard> sims,
-            boolean includeVcf) {
-        final ImportDialogFragment fragment = new ImportDialogFragment();
-        final Bundle args = new Bundle();
-        args.putBoolean(EXTRA_SIM_ONLY, !includeVcf);
-        for (SimCard sim : sims) {
-            final List<SimContact> contacts = sim.getContacts();
-            if (contacts == null) {
-                continue;
-            }
-            args.putInt(EXTRA_SIM_CONTACT_COUNT_PREFIX + sim.getSimId(), contacts.size());
-        }
-
-        fragment.setArguments(args);
-        fragment.show(fragmentManager, TAG);
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        setStyle(STYLE_NORMAL, R.style.ContactsAlertDialogTheme);
-
-        final Bundle args = getArguments();
-        mSimOnly = args != null && args.getBoolean(EXTRA_SIM_ONLY, false);
-        mSimDao = SimContactDao.create(getContext());
-    }
-
-    @Override
-    public Context getContext() {
-        return getActivity();
-    }
-
-    @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-    }
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        final LayoutInflater dialogInflater = (LayoutInflater)
-                getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
-        // Adapter that shows a list of string resources
-        final ArrayAdapter<AdapterEntry> adapter = new ArrayAdapter<AdapterEntry>(getActivity(),
-                R.layout.select_dialog_item) {
-
-            @Override
-            public View getView(int position, View convertView, ViewGroup parent) {
-                final View result = convertView != null ? convertView :
-                        dialogInflater.inflate(R.layout.select_dialog_item, parent, false);
-                final TextView primaryText = (TextView) result.findViewById(R.id.primary_text);
-                final TextView secondaryText = (TextView) result.findViewById(R.id.secondary_text);
-                final AdapterEntry entry = getItem(position);
-                secondaryText.setVisibility(View.GONE);
-                if (entry.mChoiceResourceId == R.string.import_from_sim) {
-                    final CharSequence secondary = getSimSecondaryText(entry.mSim);
-                    if (TextUtils.isEmpty(secondary)) {
-                        secondaryText.setVisibility(View.GONE);
-                    } else {
-                        secondaryText.setText(secondary);
-                        secondaryText.setVisibility(View.VISIBLE);
-                    }
-                }
-                primaryText.setText(entry.mLabel);
-                return result;
-            }
-
-            CharSequence getSimSecondaryText(SimCard sim) {
-                int count = getSimContactCount(sim);
-
-                CharSequence phone = sim.getFormattedPhone();
-                if (phone == null) {
-                    phone = sim.getPhone();
-                }
-                if (phone != null) {
-                    phone = PhoneNumberUtilsCompat.createTtsSpannable(phone);
-                }
-
-                if (count != -1 && phone != null) {
-                    // We use a template instead of format string so that the TTS span is preserved
-                    final CharSequence template = getResources()
-                            .getQuantityString(R.plurals.import_from_sim_secondary_template, count);
-                    return TextUtils.expandTemplate(template, String.valueOf(count), phone);
-                } else if (phone != null) {
-                    return phone;
-                } else if (count != -1) {
-                    // count != -1
-                    return getResources()
-                            .getQuantityString(
-                                    R.plurals.import_from_sim_secondary_contact_count_fmt, count,
-                                    count);
-                } else {
-                    return null;
-                }
-            }
-        };
-
-        addItems(adapter);
-
-        final DialogInterface.OnClickListener clickListener =
-                new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                final int resId = adapter.getItem(which).mChoiceResourceId;
-                if (resId == R.string.import_from_sim) {
-                    handleSimImportRequest(adapter.getItem(which).mSim);
-                } else if (resId == R.string.import_from_vcf_file) {
-                    handleImportRequest(resId, SimCard.NO_SUBSCRIPTION_ID);
-                } else {
-                    Log.e(TAG, "Unexpected resource: "
-                            + getActivity().getResources().getResourceEntryName(resId));
-                }
-                dialog.dismiss();
-            }
-        };
-
-        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), getTheme())
-                .setTitle(R.string.dialog_import)
-                .setNegativeButton(android.R.string.cancel, null);
-        if (adapter.isEmpty()) {
-            // Handle edge case; e.g. SIM card was removed.
-            builder.setMessage(R.string.nothing_to_import_message);
-        } else {
-            builder.setSingleChoiceItems(adapter, -1, clickListener);
-        }
-
-        return builder.create();
-    }
-
-    private int getSimContactCount(SimCard sim) {
-        if (sim.getContacts() != null) {
-            return sim.getContacts().size();
-        }
-        final Bundle args = getArguments();
-        if (args == null) {
-            return -1;
-        }
-        return args.getInt(EXTRA_SIM_CONTACT_COUNT_PREFIX + sim.getSimId(), -1);
-    }
-
-    private void addItems(ArrayAdapter<AdapterEntry> adapter) {
-        final Resources res = getActivity().getResources();
-        if (res.getBoolean(R.bool.config_allow_import_from_vcf_file) && !mSimOnly) {
-            adapter.add(new AdapterEntry(getString(R.string.import_from_vcf_file),
-                    R.string.import_from_vcf_file));
-        }
-        final List<SimCard> sims = mSimDao.getSimCards();
-
-        if (sims.size() == 1) {
-            adapter.add(new AdapterEntry(getString(R.string.import_from_sim),
-                    R.string.import_from_sim, sims.get(0)));
-            return;
-        }
-        for (int i = 0; i < sims.size(); i++) {
-            final SimCard sim = sims.get(i);
-            adapter.add(new AdapterEntry(getSimDescription(sim, i), R.string.import_from_sim, sim));
-        }
-    }
-
-    private void handleSimImportRequest(SimCard sim) {
-        startActivity(new Intent(getActivity(), SimImportActivity.class)
-                .putExtra(SimImportActivity.EXTRA_SUBSCRIPTION_ID, sim.getSubscriptionId()));
-    }
-
-    /**
-     * Handle "import from SD".
-     */
-    private void handleImportRequest(int resId, int subscriptionId) {
-        // There are three possibilities:
-        // - more than one accounts -> ask the user
-        // - just one account -> use the account without asking the user
-        // - no account -> use phone-local storage without asking the user
-        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(getActivity());
-        final List<AccountWithDataSet> accountList = accountTypes.getAccounts(true);
-        final int size = accountList.size();
-        if (size > 1) {
-            // Send over to the account selector
-            final Bundle args = new Bundle();
-            args.putInt(KEY_RES_ID, resId);
-            args.putInt(KEY_SUBSCRIPTION_ID, subscriptionId);
-            SelectAccountDialogFragment.show(
-                    getFragmentManager(), R.string.dialog_new_contact_account,
-                    AccountListFilter.ACCOUNTS_CONTACT_WRITABLE, args);
-        } else {
-            AccountSelectionUtil.doImport(getActivity(), resId,
-                    (size == 1 ? accountList.get(0) : null),
-                    (CompatUtils.isMSIMCompatible() ? subscriptionId : -1));
-        }
-    }
-
-    private CharSequence getSimDescription(SimCard sim, int index) {
-        final CharSequence name = sim.getDisplayName();
-        if (name != null) {
-            return getString(R.string.import_from_sim_summary_fmt, name);
-        } else {
-            return getString(R.string.import_from_sim_summary_fmt, String.valueOf(index));
-        }
-    }
-
-    private static class AdapterEntry {
-        public final CharSequence mLabel;
-        public final int mChoiceResourceId;
-        public final SimCard mSim;
-
-        public AdapterEntry(CharSequence label, int resId, SimCard sim) {
-            mLabel = label;
-            mChoiceResourceId = resId;
-            mSim = sim;
-        }
-
-        public AdapterEntry(String label, int resId) {
-            // Store a nonsense value for mSubscriptionId. If this constructor is used,
-            // the mSubscriptionId value should not be read later.
-            this(label, resId, /* sim= */ null);
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/interactions/TouchPointManager.java b/src/com/android/contacts/common/interactions/TouchPointManager.java
deleted file mode 100644
index 4c38e22..0000000
--- a/src/com/android/contacts/common/interactions/TouchPointManager.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.android.contacts.common.interactions;
-
-import android.graphics.Point;
-
-/**
- * Singleton class to keep track of where the user last touched the screen.
- *
- * Used to pass on to the InCallUI for animation.
- */
-public class TouchPointManager {
-    public static final String TOUCH_POINT = "touchPoint";
-
-    private static TouchPointManager sInstance = new TouchPointManager();
-
-    private Point mPoint = new Point();
-
-    /**
-     * Private constructor.  Instance should only be acquired through getInstance().
-     */
-    private TouchPointManager() {
-    }
-
-    public static TouchPointManager getInstance() {
-        return sInstance;
-    }
-
-    public Point getPoint() {
-        return mPoint;
-    }
-
-    public void setPoint(int x, int y) {
-        mPoint.set(x, y);
-    }
-
-    /**
-     * When a point is initialized, its value is (0,0). Since it is highly unlikely a user will
-     * touch at that exact point, if the point in TouchPointManager is (0,0), it is safe to assume
-     * that the TouchPointManager has not yet collected a touch.
-     *
-     * @return True if there is a valid point saved. Define a valid point as any point that is
-     * not (0,0).
-     */
-    public boolean hasValidPoint() {
-        return mPoint.x != 0 || mPoint.y != 0;
-    }
-}
diff --git a/src/com/android/contacts/common/lettertiles/LetterTileDrawable.java b/src/com/android/contacts/common/lettertiles/LetterTileDrawable.java
deleted file mode 100644
index d1f1811..0000000
--- a/src/com/android/contacts/common/lettertiles/LetterTileDrawable.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.lettertiles;
-
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.ColorFilter;
-import android.graphics.Paint;
-import android.graphics.Paint.Align;
-import android.graphics.Rect;
-import android.graphics.Typeface;
-import android.graphics.drawable.Drawable;
-import android.text.TextUtils;
-
-import com.android.contacts.common.R;
-
-import junit.framework.Assert;
-
-/**
- * A drawable that encapsulates all the functionality needed to display a letter tile to
- * represent a contact image.
- */
-public class LetterTileDrawable extends Drawable {
-
-    private final String TAG = LetterTileDrawable.class.getSimpleName();
-
-    private final Paint mPaint;
-
-    /** Letter tile */
-    private static TypedArray sColors;
-    private static int sDefaultColor;
-    private static int sTileFontColor;
-    private static float sLetterToTileRatio;
-    private static Bitmap DEFAULT_PERSON_AVATAR;
-    private static Bitmap DEFAULT_BUSINESS_AVATAR;
-    private static Bitmap DEFAULT_VOICEMAIL_AVATAR;
-
-    /** Reusable components to avoid new allocations */
-    private static final Paint sPaint = new Paint();
-    private static final Rect sRect = new Rect();
-    private static final char[] sFirstChar = new char[1];
-
-    /** Contact type constants */
-    public static final int TYPE_PERSON = 1;
-    public static final int TYPE_BUSINESS = 2;
-    public static final int TYPE_VOICEMAIL = 3;
-    public static final int TYPE_DEFAULT = TYPE_PERSON;
-
-    /** 54% opacity */
-    private static final int ALPHA = 138;
-
-    private int mContactType = TYPE_DEFAULT;
-    private float mScale = 1.0f;
-    private float mOffset = 0.0f;
-    private boolean mIsCircle = false;
-
-    private int mColor;
-    private Character mLetter = null;
-
-    public LetterTileDrawable(final Resources res) {
-        if (sColors == null) {
-            sColors = res.obtainTypedArray(R.array.letter_tile_colors);
-            sDefaultColor = res.getColor(R.color.letter_tile_default_color);
-            sTileFontColor = res.getColor(R.color.letter_tile_font_color);
-            sLetterToTileRatio = res.getFraction(R.dimen.letter_to_tile_ratio, 1, 1);
-            DEFAULT_PERSON_AVATAR = BitmapFactory.decodeResource(res,
-                    R.drawable.ic_person_avatar);
-            DEFAULT_BUSINESS_AVATAR = BitmapFactory.decodeResource(res,
-                    R.drawable.ic_business_white_120dp);
-            DEFAULT_VOICEMAIL_AVATAR = BitmapFactory.decodeResource(res,
-                    R.drawable.ic_voicemail_avatar);
-            sPaint.setTypeface(Typeface.create(
-                    res.getString(R.string.letter_tile_letter_font_family), Typeface.NORMAL));
-            sPaint.setTextAlign(Align.CENTER);
-            sPaint.setAntiAlias(true);
-        }
-        mPaint = new Paint();
-        mPaint.setFilterBitmap(true);
-        mPaint.setDither(true);
-        mColor = sDefaultColor;
-    }
-
-    @Override
-    public void draw(final Canvas canvas) {
-        final Rect bounds = getBounds();
-        if (!isVisible() || bounds.isEmpty()) {
-            return;
-        }
-        // Draw letter tile.
-        drawLetterTile(canvas);
-    }
-
-    /**
-     * Draw the bitmap onto the canvas at the current bounds taking into account the current scale.
-     */
-    private void drawBitmap(final Bitmap bitmap, final int width, final int height,
-            final Canvas canvas) {
-        // The bitmap should be drawn in the middle of the canvas without changing its width to
-        // height ratio.
-        final Rect destRect = copyBounds();
-
-        // Crop the destination bounds into a square, scaled and offset as appropriate
-        final int halfLength = (int) (mScale * Math.min(destRect.width(), destRect.height()) / 2);
-
-        destRect.set(destRect.centerX() - halfLength,
-                (int) (destRect.centerY() - halfLength + mOffset * destRect.height()),
-                destRect.centerX() + halfLength,
-                (int) (destRect.centerY() + halfLength + mOffset * destRect.height()));
-
-        // Source rectangle remains the entire bounds of the source bitmap.
-        sRect.set(0, 0, width, height);
-
-        sPaint.setTextAlign(Align.CENTER);
-        sPaint.setAntiAlias(true);
-        sPaint.setAlpha(ALPHA);
-
-        canvas.drawBitmap(bitmap, sRect, destRect, sPaint);
-    }
-
-    private void drawLetterTile(final Canvas canvas) {
-        // Draw background color.
-        sPaint.setColor(mColor);
-
-        sPaint.setAlpha(mPaint.getAlpha());
-        final Rect bounds = getBounds();
-        final int minDimension = Math.min(bounds.width(), bounds.height());
-
-        if (mIsCircle) {
-            canvas.drawCircle(bounds.centerX(), bounds.centerY(), minDimension / 2, sPaint);
-        } else {
-            canvas.drawRect(bounds, sPaint);
-        }
-
-        // Draw letter/digit only if the first character is an english letter or there's a override
-
-        if (mLetter != null) {
-            // Draw letter or digit.
-            sFirstChar[0] = mLetter;
-
-            // Scale text by canvas bounds and user selected scaling factor
-            sPaint.setTextSize(mScale * sLetterToTileRatio * minDimension);
-            sPaint.getTextBounds(sFirstChar, 0, 1, sRect);
-            sPaint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL));
-            sPaint.setColor(sTileFontColor);
-            sPaint.setAlpha(ALPHA);
-
-            // Draw the letter in the canvas, vertically shifted up or down by the user-defined
-            // offset
-            canvas.drawText(sFirstChar, 0, 1, bounds.centerX(),
-                    bounds.centerY() + mOffset * bounds.height() - sRect.exactCenterY(),
-                    sPaint);
-        } else {
-            // Draw the default image if there is no letter/digit to be drawn
-            final Bitmap bitmap = getBitmapForContactType(mContactType);
-            drawBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(),
-                    canvas);
-        }
-    }
-
-    public int getColor() {
-        return mColor;
-    }
-
-    /**
-     * Returns a deterministic color based on the provided contact identifier string.
-     */
-    private int pickColor(final String identifier) {
-        if (TextUtils.isEmpty(identifier) || mContactType == TYPE_VOICEMAIL) {
-            return sDefaultColor;
-        }
-        // String.hashCode() implementation is not supposed to change across java versions, so
-        // this should guarantee the same email address always maps to the same color.
-        // The email should already have been normalized by the ContactRequest.
-        final int color = Math.abs(identifier.hashCode()) % sColors.length();
-        return sColors.getColor(color, sDefaultColor);
-    }
-
-    private static Bitmap getBitmapForContactType(int contactType) {
-        switch (contactType) {
-            case TYPE_PERSON:
-                return DEFAULT_PERSON_AVATAR;
-            case TYPE_BUSINESS:
-                return DEFAULT_BUSINESS_AVATAR;
-            case TYPE_VOICEMAIL:
-                return DEFAULT_VOICEMAIL_AVATAR;
-            default:
-                return DEFAULT_PERSON_AVATAR;
-        }
-    }
-
-    private static boolean isEnglishLetter(final char c) {
-        return ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z');
-    }
-
-    @Override
-    public void setAlpha(final int alpha) {
-        mPaint.setAlpha(alpha);
-    }
-
-    @Override
-    public void setColorFilter(final ColorFilter cf) {
-        mPaint.setColorFilter(cf);
-    }
-
-    @Override
-    public int getOpacity() {
-        return android.graphics.PixelFormat.OPAQUE;
-    }
-
-    /**
-     * Scale the drawn letter tile to a ratio of its default size
-     *
-     * @param scale The ratio the letter tile should be scaled to as a percentage of its default
-     * size, from a scale of 0 to 2.0f. The default is 1.0f.
-     */
-    public LetterTileDrawable setScale(float scale) {
-        mScale = scale;
-        return this;
-    }
-
-    /**
-     * Assigns the vertical offset of the position of the letter tile to the ContactDrawable
-     *
-     * @param offset The provided offset must be within the range of -0.5f to 0.5f.
-     * If set to -0.5f, the letter will be shifted upwards by 0.5 times the height of the canvas
-     * it is being drawn on, which means it will be drawn with the center of the letter starting
-     * at the top edge of the canvas.
-     * If set to 0.5f, the letter will be shifted downwards by 0.5 times the height of the canvas
-     * it is being drawn on, which means it will be drawn with the center of the letter starting
-     * at the bottom edge of the canvas.
-     * The default is 0.0f.
-     */
-    public LetterTileDrawable setOffset(float offset) {
-        Assert.assertTrue(offset >= -0.5f && offset <= 0.5f);
-        mOffset = offset;
-        return this;
-    }
-
-    public LetterTileDrawable setLetter(Character letter){
-        mLetter = letter;
-        return this;
-    }
-
-    public LetterTileDrawable setColor(int color){
-        mColor = color;
-        return this;
-    }
-
-    public LetterTileDrawable setLetterAndColorFromContactDetails(final String displayName,
-            final String identifier) {
-        if (displayName != null && displayName.length() > 0
-                && isEnglishLetter(displayName.charAt(0))) {
-            mLetter = Character.toUpperCase(displayName.charAt(0));
-        }else{
-            mLetter = null;
-        }
-        mColor = pickColor(identifier);
-        return this;
-    }
-
-    public LetterTileDrawable setContactType(int contactType) {
-        mContactType = contactType;
-        return this;
-    }
-
-    public LetterTileDrawable setIsCircular(boolean isCircle) {
-        mIsCircle = isCircle;
-        return this;
-    }
-}
diff --git a/src/com/android/contacts/common/list/AccountFilterActivity.java b/src/com/android/contacts/common/list/AccountFilterActivity.java
deleted file mode 100644
index 3908d18..0000000
--- a/src/com/android/contacts/common/list/AccountFilterActivity.java
+++ /dev/null
@@ -1,199 +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.common.list;
-
-import android.app.ActionBar;
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.ListView;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.AccountTypeManager;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Shows a list of all available accounts, letting the user select under which account to view
- * contacts.
- */
-public class AccountFilterActivity extends Activity implements AdapterView.OnItemClickListener {
-
-    private static final int SUBACTIVITY_CUSTOMIZE_FILTER = 0;
-
-    public static final String EXTRA_CONTACT_LIST_FILTER = "contactListFilter";
-
-    private ListView mListView;
-
-    // The default contact list type, it should be either FILTER_TYPE_ALL_ACCOUNTS or
-    // FILTER_TYPE_CUSTOM, since those are the only two options we give the user.
-    private int mCurrentFilterType;
-
-    private ContactListFilterView mCustomFilterView; // the "Customize" filter
-
-    private boolean mIsCustomFilterViewSelected;
-
-    @Override
-    protected void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        setContentView(R.layout.contact_list_filter);
-
-        mListView = (ListView) findViewById(android.R.id.list);
-        mListView.setOnItemClickListener(this);
-
-        ActionBar actionBar = getActionBar();
-        if (actionBar != null) {
-            actionBar.setDisplayHomeAsUpEnabled(true);
-        }
-
-        mCurrentFilterType = ContactListFilterController.getInstance(this).isCustomFilterPersisted()
-                ? ContactListFilter.FILTER_TYPE_CUSTOM
-                : ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
-
-        // We don't need to use AccountFilterUtil.FilterLoader since we only want to show
-        // the "All contacts" and "Customize" options.
-        final List<ContactListFilter> filters = new ArrayList<>();
-        filters.add(ContactListFilter.createFilterWithType(
-                ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS));
-        filters.add(ContactListFilter.createFilterWithType(
-                ContactListFilter.FILTER_TYPE_CUSTOM));
-        mListView.setAdapter(new FilterListAdapter(this, filters, mCurrentFilterType));
-    }
-
-    @Override
-    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-        final ContactListFilterView listFilterView = (ContactListFilterView) view;
-        final ContactListFilter filter = (ContactListFilter) view.getTag();
-        if (filter == null) return; // Just in case
-        if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
-            mCustomFilterView = listFilterView;
-            mIsCustomFilterViewSelected = listFilterView.isChecked();
-            final Intent intent = new Intent(this, CustomContactListFilterActivity.class)
-                    .putExtra(CustomContactListFilterActivity.EXTRA_CURRENT_LIST_FILTER_TYPE,
-                            mCurrentFilterType);
-            listFilterView.setActivated(true);
-            // Switching activity has the highest priority. So when we open another activity, the
-            // announcement that indicates an account is checked will be interrupted. This is the
-            // way to overcome -- View.announceForAccessibility(CharSequence text);
-            listFilterView.announceForAccessibility(listFilterView.generateContentDescription());
-            startActivityForResult(intent, SUBACTIVITY_CUSTOMIZE_FILTER);
-        } else {
-            listFilterView.setActivated(true);
-            listFilterView.announceForAccessibility(listFilterView.generateContentDescription());
-            final Intent intent = new Intent();
-            intent.putExtra(EXTRA_CONTACT_LIST_FILTER, filter);
-            setResult(Activity.RESULT_OK, intent);
-            finish();
-        }
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (resultCode == Activity.RESULT_CANCELED && mCustomFilterView != null &&
-                !mIsCustomFilterViewSelected) {
-            mCustomFilterView.setActivated(false);
-            return;
-        }
-
-        if (resultCode != Activity.RESULT_OK) {
-            return;
-        }
-
-        switch (requestCode) {
-            case SUBACTIVITY_CUSTOMIZE_FILTER: {
-                final Intent intent = new Intent();
-                ContactListFilter filter = ContactListFilter.createFilterWithType(
-                        ContactListFilter.FILTER_TYPE_CUSTOM);
-                intent.putExtra(EXTRA_CONTACT_LIST_FILTER, filter);
-                setResult(Activity.RESULT_OK, intent);
-                finish();
-                break;
-            }
-        }
-    }
-
-    private static class FilterListAdapter extends BaseAdapter {
-        private final List<ContactListFilter> mFilters;
-        private final LayoutInflater mLayoutInflater;
-        private final AccountTypeManager mAccountTypes;
-        private final int mCurrentFilter;
-
-        public FilterListAdapter(
-                Context context, List<ContactListFilter> filters, int current) {
-            mLayoutInflater = (LayoutInflater) context.getSystemService
-                    (Context.LAYOUT_INFLATER_SERVICE);
-            mFilters = filters;
-            mCurrentFilter = current;
-            mAccountTypes = AccountTypeManager.getInstance(context);
-        }
-
-        @Override
-        public int getCount() {
-            return mFilters.size();
-        }
-
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
-
-        @Override
-        public ContactListFilter getItem(int position) {
-            return mFilters.get(position);
-        }
-
-        public View getView(int position, View convertView, ViewGroup parent) {
-            final ContactListFilterView view;
-            if (convertView != null) {
-                view = (ContactListFilterView) convertView;
-            } else {
-                view = (ContactListFilterView) mLayoutInflater.inflate(
-                        R.layout.contact_list_filter_item, parent, false);
-            }
-            view.setSingleAccount(mFilters.size() == 1);
-            final ContactListFilter filter = mFilters.get(position);
-            view.setContactListFilter(filter);
-            view.bindView(mAccountTypes);
-            view.setTag(filter);
-            view.setActivated(filter.filterType == mCurrentFilter);
-            return view;
-        }
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                // We have two logical "up" Activities: People and Phone.
-                // Instead of having one static "up" direction, behave like back as an
-                // exceptional case.
-                onBackPressed();
-                return true;
-            default:
-                break;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-}
diff --git a/src/com/android/contacts/common/list/AutoScrollListView.java b/src/com/android/contacts/common/list/AutoScrollListView.java
deleted file mode 100644
index d0070b5..0000000
--- a/src/com/android/contacts/common/list/AutoScrollListView.java
+++ /dev/null
@@ -1,129 +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.common.list;
-
-import android.content.Context;
-import android.os.Build;
-import android.util.AttributeSet;
-import android.widget.ListView;
-
-/**
- * A ListView that can be asked to scroll (smoothly or otherwise) to a specific
- * position.  This class takes advantage of similar functionality that exists
- * in {@link ListView} and enhances it.
- */
-public class AutoScrollListView extends ListView {
-
-    /**
-     * Position the element at about 1/3 of the list height
-     */
-    private static final float PREFERRED_SELECTION_OFFSET_FROM_TOP = 0.33f;
-
-    private int mRequestedScrollPosition = -1;
-    private boolean mSmoothScrollRequested;
-
-    public AutoScrollListView(Context context) {
-        super(context);
-    }
-
-    public AutoScrollListView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public AutoScrollListView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-    }
-
-    /**
-     * Brings the specified position to view by optionally performing a jump-scroll maneuver:
-     * first it jumps to some position near the one requested and then does a smooth
-     * scroll to the requested position.  This creates an impression of full smooth
-     * scrolling without actually traversing the entire list.  If smooth scrolling is
-     * not requested, instantly positions the requested item at a preferred offset.
-     */
-    public void requestPositionToScreen(int position, boolean smoothScroll) {
-        mRequestedScrollPosition = position;
-        mSmoothScrollRequested = smoothScroll;
-        requestLayout();
-    }
-
-    @Override
-    protected void layoutChildren() {
-        super.layoutChildren();
-        if (mRequestedScrollPosition == -1) {
-            return;
-        }
-
-        final int position = mRequestedScrollPosition;
-        mRequestedScrollPosition = -1;
-
-        int firstPosition = getFirstVisiblePosition() + 1;
-        int lastPosition = getLastVisiblePosition();
-        if (position >= firstPosition && position <= lastPosition) {
-            return; // Already on screen
-        }
-
-        final int offset = (int) (getHeight() * PREFERRED_SELECTION_OFFSET_FROM_TOP);
-        if (!mSmoothScrollRequested) {
-            setSelectionFromTop(position, offset);
-
-            // Since we have changed the scrolling position, we need to redo child layout
-            // Calling "requestLayout" in the middle of a layout pass has no effect,
-            // so we call layoutChildren explicitly
-            super.layoutChildren();
-
-        } else {
-            // We will first position the list a couple of screens before or after
-            // the new selection and then scroll smoothly to it.
-            int twoScreens = (lastPosition - firstPosition) * 2;
-            int preliminaryPosition;
-            if (position < firstPosition) {
-                preliminaryPosition = position + twoScreens;
-                if (preliminaryPosition >= getCount()) {
-                    preliminaryPosition = getCount() - 1;
-                }
-                if (preliminaryPosition < firstPosition) {
-                    setSelection(preliminaryPosition);
-                    super.layoutChildren();
-                }
-            } else {
-                preliminaryPosition = position - twoScreens;
-                if (preliminaryPosition < 0) {
-                    preliminaryPosition = 0;
-                }
-                if (preliminaryPosition > lastPosition) {
-                    setSelection(preliminaryPosition);
-                    super.layoutChildren();
-                }
-            }
-
-
-            smoothScrollToPositionFromTop(position, offset);
-        }
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int l, int t, int r, int b) {
-        super.onLayout(changed, l, t, r, b);
-
-        // Workaround for b/31160338.
-        if (android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.N
-            || android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.N_MR1) {
-            layoutChildren();
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactEntry.java b/src/com/android/contacts/common/list/ContactEntry.java
deleted file mode 100644
index a29a8d8..0000000
--- a/src/com/android/contacts/common/list/ContactEntry.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.list;
-
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.provider.ContactsContract.PinnedPositions;
-import android.text.TextUtils;
-
-import com.android.contacts.common.preference.ContactsPreferences;
-
-/**
- * Class to hold contact information
- */
-public class ContactEntry {
-
-    private static final int UNSET_DISPLAY_ORDER_PREFERENCE = -1;
-
-    /**
-     * Primary name for a Contact
-     */
-    public String namePrimary;
-    /**
-     * Alternative name for a Contact, e.g. last name first
-     */
-    public String nameAlternative;
-    /**
-     * The user's preference on name display order, last name first or first time first.
-     * {@see ContactsPreferences}
-     */
-    public int nameDisplayOrder = UNSET_DISPLAY_ORDER_PREFERENCE;
-
-    public String status;
-    public String phoneLabel;
-    public String phoneNumber;
-    public Uri photoUri;
-    public Uri lookupUri;
-    public String lookupKey;
-    public Drawable presenceIcon;
-    public long id;
-    public int pinned = PinnedPositions.UNPINNED;
-    public boolean isFavorite = false;
-    public boolean isDefaultNumber = false;
-
-    public static final ContactEntry BLANK_ENTRY = new ContactEntry();
-
-    public String getPreferredDisplayName() {
-        if (nameDisplayOrder == UNSET_DISPLAY_ORDER_PREFERENCE
-                || nameDisplayOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY
-                || TextUtils.isEmpty(nameAlternative)) {
-            return namePrimary;
-        }
-        return nameAlternative;
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/contacts/common/list/ContactEntryListAdapter.java b/src/com/android/contacts/common/list/ContactEntryListAdapter.java
deleted file mode 100644
index 0d20d6e..0000000
--- a/src/com/android/contacts/common/list/ContactEntryListAdapter.java
+++ /dev/null
@@ -1,786 +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.common.list;
-
-import android.content.Context;
-import android.content.CursorLoader;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Directory;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.QuickContactBadge;
-import android.widget.SectionIndexer;
-import android.widget.TextView;
-
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.R;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.DirectoryCompat;
-import com.android.contacts.common.util.SearchUtil;
-
-import java.util.HashSet;
-
-/**
- * Common base class for various contact-related lists, e.g. contact list, phone number list
- * etc.
- */
-public abstract class ContactEntryListAdapter extends IndexerListAdapter {
-
-    private static final String TAG = "ContactEntryListAdapter";
-
-    /**
-     * Indicates whether the {@link Directory#LOCAL_INVISIBLE} directory should
-     * be included in the search.
-     */
-    public static final boolean LOCAL_INVISIBLE_DIRECTORY_ENABLED = false;
-
-    private int mDisplayOrder;
-    private int mSortOrder;
-
-    private boolean mDisplayPhotos;
-    private boolean mCircularPhotos = true;
-    private boolean mQuickContactEnabled;
-    private boolean mAdjustSelectionBoundsEnabled;
-
-    /**
-     * indicates if contact queries include favorites
-     */
-    private boolean mIncludeFavorites;
-
-    private int mNumberOfFavorites;
-
-    /**
-     * The root view of the fragment that this adapter is associated with.
-     */
-    private View mFragmentRootView;
-
-    private ContactPhotoManager mPhotoLoader;
-
-    private String mQueryString;
-    private String mUpperCaseQueryString;
-    private boolean mSearchMode;
-    private int mDirectorySearchMode;
-    private int mDirectoryResultLimit = Integer.MAX_VALUE;
-
-    private boolean mEmptyListEnabled = true;
-
-    private boolean mSelectionVisible;
-
-    private ContactListFilter mFilter;
-    private boolean mDarkTheme = false;
-
-    /** Resource used to provide header-text for default filter. */
-    private CharSequence mDefaultFilterHeaderText;
-
-    public ContactEntryListAdapter(Context context) {
-        super(context);
-        setDefaultFilterHeaderText(R.string.local_search_label);
-        addPartitions();
-    }
-
-    /**
-     * @param fragmentRootView Root view of the fragment. This is used to restrict the scope of
-     * image loading requests that get cancelled on cursor changes.
-     */
-    protected void setFragmentRootView(View fragmentRootView) {
-        mFragmentRootView = fragmentRootView;
-    }
-
-    protected void setDefaultFilterHeaderText(int resourceId) {
-        mDefaultFilterHeaderText = getContext().getResources().getText(resourceId);
-    }
-
-    @Override
-    protected ContactListItemView newView(
-            Context context, int partition, Cursor cursor, int position, ViewGroup parent) {
-        final ContactListItemView view = new ContactListItemView(context, null);
-        view.setIsSectionHeaderEnabled(isSectionHeaderDisplayEnabled());
-        view.setAdjustSelectionBoundsEnabled(isAdjustSelectionBoundsEnabled());
-        return view;
-    }
-
-    @Override
-    protected void bindView(View itemView, int partition, Cursor cursor, int position) {
-        final ContactListItemView view = (ContactListItemView) itemView;
-        view.setIsSectionHeaderEnabled(isSectionHeaderDisplayEnabled());
-        bindWorkProfileIcon(view, partition);
-    }
-
-    @Override
-    protected View createPinnedSectionHeaderView(Context context, ViewGroup parent) {
-        return new ContactListPinnedHeaderView(context, null, parent);
-    }
-
-    @Override
-    protected void setPinnedSectionTitle(View pinnedHeaderView, String title) {
-        ((ContactListPinnedHeaderView) pinnedHeaderView).setSectionHeaderTitle(title);
-    }
-
-    protected void addPartitions() {
-        addPartition(createDefaultDirectoryPartition());
-    }
-
-    protected DirectoryPartition createDefaultDirectoryPartition() {
-        DirectoryPartition partition = new DirectoryPartition(true, true);
-        partition.setDirectoryId(Directory.DEFAULT);
-        partition.setDirectoryType(getContext().getString(R.string.contactsList));
-        partition.setPriorityDirectory(true);
-        partition.setPhotoSupported(true);
-        partition.setLabel(mDefaultFilterHeaderText.toString());
-        return partition;
-    }
-
-    /**
-     * Remove all directories after the default directory. This is typically used when contacts
-     * list screens are asked to exit the search mode and thus need to remove all remote directory
-     * results for the search.
-     *
-     * This code assumes that the default directory and directories before that should not be
-     * deleted (e.g. Join screen has "suggested contacts" directory before the default director,
-     * and we should not remove the directory).
-     */
-    public void removeDirectoriesAfterDefault() {
-        final int partitionCount = getPartitionCount();
-        for (int i = partitionCount - 1; i >= 0; i--) {
-            final Partition partition = getPartition(i);
-            if ((partition instanceof DirectoryPartition)
-                    && ((DirectoryPartition) partition).getDirectoryId() == Directory.DEFAULT) {
-                break;
-            } else {
-                removePartition(i);
-            }
-        }
-    }
-
-    protected int getPartitionByDirectoryId(long id) {
-        int count = getPartitionCount();
-        for (int i = 0; i < count; i++) {
-            Partition partition = getPartition(i);
-            if (partition instanceof DirectoryPartition) {
-                if (((DirectoryPartition)partition).getDirectoryId() == id) {
-                    return i;
-                }
-            }
-        }
-        return -1;
-    }
-
-    protected DirectoryPartition getDirectoryById(long id) {
-        int count = getPartitionCount();
-        for (int i = 0; i < count; i++) {
-            Partition partition = getPartition(i);
-            if (partition instanceof DirectoryPartition) {
-                final DirectoryPartition directoryPartition = (DirectoryPartition) partition;
-                if (directoryPartition.getDirectoryId() == id) {
-                    return directoryPartition;
-                }
-            }
-        }
-        return null;
-    }
-
-    public abstract String getContactDisplayName(int position);
-    public abstract void configureLoader(CursorLoader loader, long directoryId);
-
-    /**
-     * Marks all partitions as "loading"
-     */
-    public void onDataReload() {
-        boolean notify = false;
-        int count = getPartitionCount();
-        for (int i = 0; i < count; i++) {
-            Partition partition = getPartition(i);
-            if (partition instanceof DirectoryPartition) {
-                DirectoryPartition directoryPartition = (DirectoryPartition)partition;
-                if (!directoryPartition.isLoading()) {
-                    notify = true;
-                }
-                directoryPartition.setStatus(DirectoryPartition.STATUS_NOT_LOADED);
-            }
-        }
-        if (notify) {
-            notifyDataSetChanged();
-        }
-    }
-
-    @Override
-    public void clearPartitions() {
-        int count = getPartitionCount();
-        for (int i = 0; i < count; i++) {
-            Partition partition = getPartition(i);
-            if (partition instanceof DirectoryPartition) {
-                DirectoryPartition directoryPartition = (DirectoryPartition)partition;
-                directoryPartition.setStatus(DirectoryPartition.STATUS_NOT_LOADED);
-            }
-        }
-        super.clearPartitions();
-    }
-
-    public boolean isSearchMode() {
-        return mSearchMode;
-    }
-
-    public void setSearchMode(boolean flag) {
-        mSearchMode = flag;
-    }
-
-    public String getQueryString() {
-        return mQueryString;
-    }
-
-    public void setQueryString(String queryString) {
-        mQueryString = queryString;
-        if (TextUtils.isEmpty(queryString)) {
-            mUpperCaseQueryString = null;
-        } else {
-            mUpperCaseQueryString = SearchUtil
-                    .cleanStartAndEndOfSearchQuery(queryString.toUpperCase()) ;
-        }
-    }
-
-    public String getUpperCaseQueryString() {
-        return mUpperCaseQueryString;
-    }
-
-    public int getDirectorySearchMode() {
-        return mDirectorySearchMode;
-    }
-
-    public void setDirectorySearchMode(int mode) {
-        mDirectorySearchMode = mode;
-    }
-
-    public int getDirectoryResultLimit() {
-        return mDirectoryResultLimit;
-    }
-
-    public int getDirectoryResultLimit(DirectoryPartition directoryPartition) {
-        final int limit = directoryPartition.getResultLimit();
-        return limit == DirectoryPartition.RESULT_LIMIT_DEFAULT ? mDirectoryResultLimit : limit;
-    }
-
-    public void setDirectoryResultLimit(int limit) {
-        this.mDirectoryResultLimit = limit;
-    }
-
-    public int getContactNameDisplayOrder() {
-        return mDisplayOrder;
-    }
-
-    public void setContactNameDisplayOrder(int displayOrder) {
-        mDisplayOrder = displayOrder;
-    }
-
-    public int getSortOrder() {
-        return mSortOrder;
-    }
-
-    public void setSortOrder(int sortOrder) {
-        mSortOrder = sortOrder;
-    }
-
-    public void setPhotoLoader(ContactPhotoManager photoLoader) {
-        mPhotoLoader = photoLoader;
-    }
-
-    protected ContactPhotoManager getPhotoLoader() {
-        return mPhotoLoader;
-    }
-
-    public boolean getDisplayPhotos() {
-        return mDisplayPhotos;
-    }
-
-    public void setDisplayPhotos(boolean displayPhotos) {
-        mDisplayPhotos = displayPhotos;
-    }
-
-    public boolean getCircularPhotos() {
-        return mCircularPhotos;
-    }
-
-    public void setCircularPhotos(boolean circularPhotos) {
-        mCircularPhotos = circularPhotos;
-    }
-
-    public boolean isEmptyListEnabled() {
-        return mEmptyListEnabled;
-    }
-
-    public void setEmptyListEnabled(boolean flag) {
-        mEmptyListEnabled = flag;
-    }
-
-    public boolean isSelectionVisible() {
-        return mSelectionVisible;
-    }
-
-    public void setSelectionVisible(boolean flag) {
-        this.mSelectionVisible = flag;
-    }
-
-    public boolean isQuickContactEnabled() {
-        return mQuickContactEnabled;
-    }
-
-    public void setQuickContactEnabled(boolean quickContactEnabled) {
-        mQuickContactEnabled = quickContactEnabled;
-    }
-
-    public boolean isAdjustSelectionBoundsEnabled() {
-        return mAdjustSelectionBoundsEnabled;
-    }
-
-    public void setAdjustSelectionBoundsEnabled(boolean enabled) {
-        mAdjustSelectionBoundsEnabled = enabled;
-    }
-
-    public boolean shouldIncludeFavorites() {
-        return mIncludeFavorites;
-    }
-
-    public void setIncludeFavorites(boolean includeFavorites) {
-        mIncludeFavorites = includeFavorites;
-    }
-
-    public void setFavoritesSectionHeader(int numberOfFavorites) {
-        if (mIncludeFavorites) {
-            mNumberOfFavorites = numberOfFavorites;
-            setSectionHeader(numberOfFavorites);
-        }
-    }
-
-    public int getNumberOfFavorites() {
-        return mNumberOfFavorites;
-    }
-
-    private void setSectionHeader(int numberOfItems) {
-        SectionIndexer indexer = getIndexer();
-        if (indexer != null) {
-            ((ContactsSectionIndexer) indexer).setFavoritesHeader(numberOfItems);
-        }
-    }
-
-    public void setDarkTheme(boolean value) {
-        mDarkTheme = value;
-    }
-
-    /**
-     * Updates partitions according to the directory meta-data contained in the supplied
-     * cursor.
-     */
-    public void changeDirectories(Cursor cursor) {
-        if (cursor.getCount() == 0) {
-            // Directory table must have at least local directory, without which this adapter will
-            // enter very weird state.
-            Log.e(TAG, "Directory search loader returned an empty cursor, which implies we have " +
-                    "no directory entries.", new RuntimeException());
-            return;
-        }
-        HashSet<Long> directoryIds = new HashSet<Long>();
-
-        int idColumnIndex = cursor.getColumnIndex(Directory._ID);
-        int directoryTypeColumnIndex = cursor.getColumnIndex(DirectoryListLoader.DIRECTORY_TYPE);
-        int displayNameColumnIndex = cursor.getColumnIndex(Directory.DISPLAY_NAME);
-        int photoSupportColumnIndex = cursor.getColumnIndex(Directory.PHOTO_SUPPORT);
-
-        // TODO preserve the order of partition to match those of the cursor
-        // Phase I: add new directories
-        cursor.moveToPosition(-1);
-        while (cursor.moveToNext()) {
-            long id = cursor.getLong(idColumnIndex);
-            directoryIds.add(id);
-            if (getPartitionByDirectoryId(id) == -1) {
-                DirectoryPartition partition = new DirectoryPartition(false, true);
-                partition.setDirectoryId(id);
-                if (DirectoryCompat.isRemoteDirectoryId(id)) {
-                    if (DirectoryCompat.isEnterpriseDirectoryId(id)) {
-                        partition.setLabel(mContext.getString(R.string.directory_search_label_work));
-                    } else {
-                        partition.setLabel(mContext.getString(R.string.directory_search_label));
-                    }
-                } else {
-                    if (DirectoryCompat.isEnterpriseDirectoryId(id)) {
-                        partition.setLabel(mContext.getString(R.string.list_filter_phones_work));
-                    } else {
-                        partition.setLabel(mDefaultFilterHeaderText.toString());
-                    }
-                }
-                partition.setDirectoryType(cursor.getString(directoryTypeColumnIndex));
-                partition.setDisplayName(cursor.getString(displayNameColumnIndex));
-                int photoSupport = cursor.getInt(photoSupportColumnIndex);
-                partition.setPhotoSupported(photoSupport == Directory.PHOTO_SUPPORT_THUMBNAIL_ONLY
-                        || photoSupport == Directory.PHOTO_SUPPORT_FULL);
-                addPartition(partition);
-            }
-        }
-
-        // Phase II: remove deleted directories
-        int count = getPartitionCount();
-        for (int i = count; --i >= 0; ) {
-            Partition partition = getPartition(i);
-            if (partition instanceof DirectoryPartition) {
-                long id = ((DirectoryPartition)partition).getDirectoryId();
-                if (!directoryIds.contains(id)) {
-                    removePartition(i);
-                }
-            }
-        }
-
-        invalidate();
-        notifyDataSetChanged();
-    }
-
-    @Override
-    public void changeCursor(int partitionIndex, Cursor cursor) {
-        if (partitionIndex >= getPartitionCount()) {
-            // There is no partition for this data
-            return;
-        }
-
-        Partition partition = getPartition(partitionIndex);
-        if (partition instanceof DirectoryPartition) {
-            ((DirectoryPartition)partition).setStatus(DirectoryPartition.STATUS_LOADED);
-        }
-
-        if (mDisplayPhotos && mPhotoLoader != null && isPhotoSupported(partitionIndex)) {
-            mPhotoLoader.refreshCache();
-        }
-
-        super.changeCursor(partitionIndex, cursor);
-
-        if (isSectionHeaderDisplayEnabled() && partitionIndex == getIndexedPartition()) {
-            updateIndexer(cursor);
-        }
-
-        // When the cursor changes, cancel any pending asynchronous photo loads.
-        mPhotoLoader.cancelPendingRequests(mFragmentRootView);
-    }
-
-    public void changeCursor(Cursor cursor) {
-        changeCursor(0, cursor);
-    }
-
-    /**
-     * Updates the indexer, which is used to produce section headers.
-     */
-    private void updateIndexer(Cursor cursor) {
-        if (cursor == null || cursor.isClosed()) {
-            setIndexer(null);
-            return;
-        }
-
-        Bundle bundle = cursor.getExtras();
-        if (bundle.containsKey(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES) &&
-                bundle.containsKey(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS)) {
-            String sections[] =
-                    bundle.getStringArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES);
-            int counts[] = bundle.getIntArray(
-                    Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS);
-
-            if (getExtraStartingSection()) {
-                // Insert an additional unnamed section at the top of the list.
-                String allSections[] = new String[sections.length + 1];
-                int allCounts[] = new int[counts.length + 1];
-                for (int i = 0; i < sections.length; i++) {
-                    allSections[i + 1] = sections[i];
-                    allCounts[i + 1] = counts[i];
-                }
-                allCounts[0] = 1;
-                allSections[0] = "";
-                setIndexer(new ContactsSectionIndexer(allSections, allCounts));
-            } else {
-                setIndexer(new ContactsSectionIndexer(sections, counts));
-            }
-        } else {
-            setIndexer(null);
-        }
-    }
-
-    protected boolean getExtraStartingSection() {
-        return false;
-    }
-
-    @Override
-    public int getViewTypeCount() {
-        // We need a separate view type for each item type, plus another one for
-        // each type with header, plus one for "other".
-        return getItemViewTypeCount() * 2 + 1;
-    }
-
-    @Override
-    public int getItemViewType(int partitionIndex, int position) {
-        int type = super.getItemViewType(partitionIndex, position);
-        if (isSectionHeaderDisplayEnabled() && partitionIndex == getIndexedPartition()) {
-            Placement placement = getItemPlacementInSection(position);
-            return placement.firstInSection ? type : getItemViewTypeCount() + type;
-        } else {
-            return type;
-        }
-    }
-
-    @Override
-    public boolean isEmpty() {
-        // TODO
-//        if (contactsListActivity.mProviderStatus != ProviderStatus.STATUS_NORMAL) {
-//            return true;
-//        }
-
-        if (!mEmptyListEnabled) {
-            return false;
-        } else if (isSearchMode()) {
-            return TextUtils.isEmpty(getQueryString());
-        } else {
-            return super.isEmpty();
-        }
-    }
-
-    public boolean isLoading() {
-        int count = getPartitionCount();
-        for (int i = 0; i < count; i++) {
-            Partition partition = getPartition(i);
-            if (partition instanceof DirectoryPartition
-                    && ((DirectoryPartition) partition).isLoading()) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public boolean areAllPartitionsEmpty() {
-        int count = getPartitionCount();
-        for (int i = 0; i < count; i++) {
-            if (!isPartitionEmpty(i)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Changes visibility parameters for the default directory partition.
-     */
-    public void configureDefaultPartition(boolean showIfEmpty, boolean hasHeader) {
-        int defaultPartitionIndex = -1;
-        int count = getPartitionCount();
-        for (int i = 0; i < count; i++) {
-            Partition partition = getPartition(i);
-            if (partition instanceof DirectoryPartition &&
-                    ((DirectoryPartition)partition).getDirectoryId() == Directory.DEFAULT) {
-                defaultPartitionIndex = i;
-                break;
-            }
-        }
-        if (defaultPartitionIndex != -1) {
-            setShowIfEmpty(defaultPartitionIndex, showIfEmpty);
-            setHasHeader(defaultPartitionIndex, hasHeader);
-        }
-    }
-
-    @Override
-    protected View newHeaderView(Context context, int partition, Cursor cursor,
-            ViewGroup parent) {
-        LayoutInflater inflater = LayoutInflater.from(context);
-        View view = inflater.inflate(R.layout.directory_header, parent, false);
-        if (!getPinnedPartitionHeadersEnabled()) {
-            // If the headers are unpinned, there is no need for their background
-            // color to be non-transparent. Setting this transparent reduces maintenance for
-            // non-pinned headers. We don't need to bother synchronizing the activity's
-            // background color with the header background color.
-            view.setBackground(null);
-        }
-        return view;
-    }
-
-    protected void bindWorkProfileIcon(final ContactListItemView view, int partitionId) {
-        final Partition partition = getPartition(partitionId);
-        if (partition instanceof DirectoryPartition) {
-            final DirectoryPartition directoryPartition = (DirectoryPartition) partition;
-            final long directoryId = directoryPartition.getDirectoryId();
-            final long userType = ContactsUtils.determineUserType(directoryId, null);
-            view.setWorkProfileIconEnabled(userType == ContactsUtils.USER_TYPE_WORK);
-        }
-    }
-
-    @Override
-    protected void bindHeaderView(View view, int partitionIndex, Cursor cursor) {
-        Partition partition = getPartition(partitionIndex);
-        if (!(partition instanceof DirectoryPartition)) {
-            return;
-        }
-
-        DirectoryPartition directoryPartition = (DirectoryPartition)partition;
-        long directoryId = directoryPartition.getDirectoryId();
-        TextView labelTextView = (TextView)view.findViewById(R.id.label);
-        TextView displayNameTextView = (TextView)view.findViewById(R.id.display_name);
-        labelTextView.setText(directoryPartition.getLabel());
-        if (!DirectoryCompat.isRemoteDirectoryId(directoryId)) {
-            displayNameTextView.setText(null);
-        } else {
-            String directoryName = directoryPartition.getDisplayName();
-            String displayName = !TextUtils.isEmpty(directoryName)
-                    ? directoryName
-                    : directoryPartition.getDirectoryType();
-            displayNameTextView.setText(displayName);
-        }
-
-        final Resources res = getContext().getResources();
-        final int headerPaddingTop = partitionIndex == 1 && getPartition(0).isEmpty()?
-                0 : res.getDimensionPixelOffset(R.dimen.directory_header_extra_top_padding);
-        // There should be no extra padding at the top of the first directory header
-        view.setPaddingRelative(view.getPaddingStart(), headerPaddingTop, view.getPaddingEnd(),
-                view.getPaddingBottom());
-    }
-
-    // Default implementation simply returns number of rows in the cursor.
-    // Broken out into its own routine so can be overridden by child classes
-    // for eg number of unique contacts for a phone list.
-    protected int getResultCount(Cursor cursor) {
-        return cursor == null ? 0 : cursor.getCount();
-    }
-
-    // TODO: fix PluralRules to handle zero correctly and use Resources.getQuantityText directly
-    public String getQuantityText(int count, int zeroResourceId, int pluralResourceId) {
-        if (count == 0) {
-            return getContext().getString(zeroResourceId);
-        } else {
-            String format = getContext().getResources()
-                    .getQuantityText(pluralResourceId, count).toString();
-            return String.format(format, count);
-        }
-    }
-
-    public boolean isPhotoSupported(int partitionIndex) {
-        Partition partition = getPartition(partitionIndex);
-        if (partition instanceof DirectoryPartition) {
-            return ((DirectoryPartition) partition).isPhotoSupported();
-        }
-        return true;
-    }
-
-    /**
-     * Returns the currently selected filter.
-     */
-    public ContactListFilter getFilter() {
-        return mFilter;
-    }
-
-    public void setFilter(ContactListFilter filter) {
-        mFilter = filter;
-    }
-
-    // TODO: move sharable logic (bindXX() methods) to here with extra arguments
-
-    /**
-     * Loads the photo for the quick contact view and assigns the contact uri.
-     * @param photoIdColumn Index of the photo id column
-     * @param photoUriColumn Index of the photo uri column. Optional: Can be -1
-     * @param contactIdColumn Index of the contact id column
-     * @param lookUpKeyColumn Index of the lookup key column
-     * @param displayNameColumn Index of the display name column
-     */
-    protected void bindQuickContact(final ContactListItemView view, int partitionIndex,
-            Cursor cursor, int photoIdColumn, int photoUriColumn, int contactIdColumn,
-            int lookUpKeyColumn, int displayNameColumn) {
-        long photoId = 0;
-        if (!cursor.isNull(photoIdColumn)) {
-            photoId = cursor.getLong(photoIdColumn);
-        }
-
-        QuickContactBadge quickContact = view.getQuickContact();
-        quickContact.assignContactUri(
-                getContactUri(partitionIndex, cursor, contactIdColumn, lookUpKeyColumn));
-        if (CompatUtils.hasPrioritizedMimeType()) {
-            // The Contacts app never uses the QuickContactBadge. Therefore, it is safe to assume
-            // that only Dialer will use this QuickContact badge. This means prioritizing the phone
-            // mimetype here is reasonable.
-            quickContact.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE);
-        }
-
-        if (photoId != 0 || photoUriColumn == -1) {
-            getPhotoLoader().loadThumbnail(quickContact, photoId, mDarkTheme, mCircularPhotos,
-                    null);
-        } else {
-            final String photoUriString = cursor.getString(photoUriColumn);
-            final Uri photoUri = photoUriString == null ? null : Uri.parse(photoUriString);
-            DefaultImageRequest request = null;
-            if (photoUri == null) {
-                request = getDefaultImageRequestFromCursor(cursor, displayNameColumn,
-                        lookUpKeyColumn);
-            }
-            getPhotoLoader().loadPhoto(quickContact, photoUri, -1, mDarkTheme, mCircularPhotos,
-                    request);
-        }
-
-    }
-
-    @Override
-    public boolean hasStableIds() {
-        // Whenever bindViewId() is called, the values passed into setId() are stable or
-        // stable-ish. For example, when one contact is modified we don't expect a second
-        // contact's Contact._ID values to change.
-        return true;
-    }
-
-    protected void bindViewId(final ContactListItemView view, Cursor cursor, int idColumn) {
-        // Set a semi-stable id, so that talkback won't get confused when the list gets
-        // refreshed. There is little harm in inserting the same ID twice.
-        long contactId = cursor.getLong(idColumn);
-        view.setId((int) (contactId % Integer.MAX_VALUE));
-
-    }
-
-    protected Uri getContactUri(int partitionIndex, Cursor cursor,
-            int contactIdColumn, int lookUpKeyColumn) {
-        long contactId = cursor.getLong(contactIdColumn);
-        String lookupKey = cursor.getString(lookUpKeyColumn);
-        long directoryId = ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
-        Uri uri = Contacts.getLookupUri(contactId, lookupKey);
-        if (uri != null && directoryId != Directory.DEFAULT) {
-            uri = uri.buildUpon().appendQueryParameter(
-                    ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build();
-        }
-        return uri;
-    }
-
-    /**
-     * Retrieves the lookup key and display name from a cursor, and returns a
-     * {@link DefaultImageRequest} containing these contact details
-     *
-     * @param cursor Contacts cursor positioned at the current row to retrieve contact details for
-     * @param displayNameColumn Column index of the display name
-     * @param lookupKeyColumn Column index of the lookup key
-     * @return {@link DefaultImageRequest} with the displayName and identifier fields set to the
-     * display name and lookup key of the contact.
-     */
-    public DefaultImageRequest getDefaultImageRequestFromCursor(Cursor cursor,
-            int displayNameColumn, int lookupKeyColumn) {
-        final String displayName = cursor.getString(displayNameColumn);
-        final String lookupKey = cursor.getString(lookupKeyColumn);
-        return new DefaultImageRequest(displayName, lookupKey, mCircularPhotos);
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactEntryListFragment.java b/src/com/android/contacts/common/list/ContactEntryListFragment.java
deleted file mode 100644
index 387b303..0000000
--- a/src/com/android/contacts/common/list/ContactEntryListFragment.java
+++ /dev/null
@@ -1,987 +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.common.list;
-
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.LoaderManager;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.Context;
-import android.content.CursorLoader;
-import android.content.Intent;
-import android.content.Loader;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.os.Parcelable;
-import android.provider.ContactsContract.Directory;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.View.OnFocusChangeListener;
-import android.view.View.OnTouchListener;
-import android.view.ViewGroup;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.AbsListView;
-import android.widget.AbsListView.OnScrollListener;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.AdapterView.OnItemLongClickListener;
-import android.widget.ListView;
-
-import com.android.common.widget.CompositeCursorAdapter.Partition;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.logging.ListEvent.ActionType;
-import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.preference.ContactsPreferences;
-
-import java.util.Locale;
-
-/**
- * Common base class for various contact-related list fragments.
- */
-public abstract class ContactEntryListFragment<T extends ContactEntryListAdapter>
-        extends Fragment
-        implements OnItemClickListener, OnScrollListener, OnFocusChangeListener, OnTouchListener,
-                OnItemLongClickListener, LoaderCallbacks<Cursor> {
-    private static final String TAG = "ContactEntryListFragment";
-
-    // TODO: Make this protected. This should not be used from the PeopleActivity but
-    // instead use the new startActivityWithResultFromFragment API
-    public static final int ACTIVITY_REQUEST_CODE_PICKER = 1;
-
-    private static final String KEY_LIST_STATE = "liststate";
-    private static final String KEY_SECTION_HEADER_DISPLAY_ENABLED = "sectionHeaderDisplayEnabled";
-    private static final String KEY_PHOTO_LOADER_ENABLED = "photoLoaderEnabled";
-    private static final String KEY_QUICK_CONTACT_ENABLED = "quickContactEnabled";
-    private static final String KEY_ADJUST_SELECTION_BOUNDS_ENABLED =
-            "adjustSelectionBoundsEnabled";
-    private static final String KEY_SEARCH_MODE = "searchMode";
-    private static final String KEY_DISPLAY_DIRECTORY_HEADER = "displayDirectoryHeader";
-    private static final String KEY_VISIBLE_SCROLLBAR_ENABLED = "visibleScrollbarEnabled";
-    private static final String KEY_SCROLLBAR_POSITION = "scrollbarPosition";
-    private static final String KEY_QUERY_STRING = "queryString";
-    private static final String KEY_DIRECTORY_SEARCH_MODE = "directorySearchMode";
-    private static final String KEY_SELECTION_VISIBLE = "selectionVisible";
-    private static final String KEY_REQUEST = "request";
-    private static final String KEY_DARK_THEME = "darkTheme";
-    private static final String KEY_LEGACY_COMPATIBILITY = "legacyCompatibility";
-    private static final String KEY_DIRECTORY_RESULT_LIMIT = "directoryResultLimit";
-    private static final String KEY_LOGS_LIST_EVENTS = "logsListEvents";
-    private static final String KEY_DATA_LOADED = "dataLoaded";
-
-    private static final String DIRECTORY_ID_ARG_KEY = "directoryId";
-
-    private static final int DIRECTORY_LOADER_ID = -1;
-
-    private static final int DIRECTORY_SEARCH_DELAY_MILLIS = 300;
-    private static final int DIRECTORY_SEARCH_MESSAGE = 1;
-
-    private static final int DEFAULT_DIRECTORY_RESULT_LIMIT = 20;
-
-    private boolean mSectionHeaderDisplayEnabled;
-    private boolean mPhotoLoaderEnabled;
-    private boolean mQuickContactEnabled = true;
-    private boolean mAdjustSelectionBoundsEnabled = true;
-    private boolean mIncludeFavorites;
-    private boolean mSearchMode;
-    private boolean mDisplayDirectoryHeader = true;
-    private boolean mVisibleScrollbarEnabled;
-    private boolean mShowEmptyListForEmptyQuery;
-    private int mVerticalScrollbarPosition = getDefaultVerticalScrollbarPosition();
-    private String mQueryString;
-    private int mDirectorySearchMode = DirectoryListLoader.SEARCH_MODE_NONE;
-    private boolean mSelectionVisible;
-    private boolean mLegacyCompatibility;
-    // Whether we should log list LOAD events. It may be modified when list filter is changed.
-    private boolean mLogListEvents = true;
-    // Whether data has been loaded ever. It will stay true once it's set to true in the lifecycle.
-    // We use this flag to log LOAD events when the activity/fragment is initialized.
-    private boolean mDataLoaded;
-
-    private boolean mEnabled = true;
-
-    private T mAdapter;
-    protected View mView;
-    private ListView mListView;
-
-    /**
-     * Used to save the scrolling state of the list when the fragment is not recreated.
-     */
-    private int mListViewTopIndex;
-    private int mListViewTopOffset;
-
-    /**
-     * Used for keeping track of the scroll state of the list.
-     */
-    private Parcelable mListState;
-
-    /**
-     * The type of the contacts list.
-     */
-    private int mListType;
-
-    private int mDisplayOrder;
-    private int mSortOrder;
-    private int mDirectoryResultLimit = DEFAULT_DIRECTORY_RESULT_LIMIT;
-
-    private ContactPhotoManager mPhotoManager;
-    private ContactsPreferences mContactsPrefs;
-
-    private boolean mForceLoad;
-
-    private boolean mDarkTheme;
-
-    private static final int STATUS_NOT_LOADED = 0;
-    private static final int STATUS_LOADING = 1;
-    private static final int STATUS_LOADED = 2;
-
-    private int mDirectoryListStatus = STATUS_NOT_LOADED;
-
-    /**
-     * Indicates whether we are doing the initial complete load of data (false) or
-     * a refresh caused by a change notification (true)
-     */
-    private boolean mLoadPriorityDirectoriesOnly;
-
-    private Context mContext;
-
-    private LoaderManager mLoaderManager;
-
-    private Handler mDelayedDirectorySearchHandler = new Handler() {
-        @Override
-        public void handleMessage(Message msg) {
-            if (msg.what == DIRECTORY_SEARCH_MESSAGE) {
-                loadDirectoryPartition(msg.arg1, (DirectoryPartition) msg.obj);
-            }
-        }
-    };
-    private int defaultVerticalScrollbarPosition;
-
-    protected abstract View inflateView(LayoutInflater inflater, ViewGroup container);
-    protected abstract T createListAdapter();
-
-    /**
-     * @param position Please note that the position is already adjusted for
-     *            header views, so "0" means the first list item below header
-     *            views.
-     */
-    protected abstract void onItemClick(int position, long id);
-
-    /**
-     * @param position Please note that the position is already adjusted for
-     *            header views, so "0" means the first list item below header
-     *            views.
-     */
-    protected boolean onItemLongClick(int position, long id) {
-        return false;
-    }
-
-    @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-        setContext(activity);
-        setLoaderManager(super.getLoaderManager());
-    }
-
-    /**
-     * Sets a context for the fragment in the unit test environment.
-     */
-    public void setContext(Context context) {
-        mContext = context;
-        configurePhotoLoader();
-    }
-
-    public Context getContext() {
-        return mContext;
-    }
-
-    public void setEnabled(boolean enabled) {
-        if (mEnabled != enabled) {
-            mEnabled = enabled;
-            if (mAdapter != null) {
-                if (mEnabled) {
-                    reloadData();
-                } else {
-                    mAdapter.clearPartitions();
-                }
-            }
-        }
-    }
-
-    /**
-     * Overrides a loader manager for use in unit tests.
-     */
-    public void setLoaderManager(LoaderManager loaderManager) {
-        mLoaderManager = loaderManager;
-    }
-
-    @Override
-    public LoaderManager getLoaderManager() {
-        return mLoaderManager;
-    }
-
-    public T getAdapter() {
-        return mAdapter;
-    }
-
-    @Override
-    public View getView() {
-        return mView;
-    }
-
-    public ListView getListView() {
-        return mListView;
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putBoolean(KEY_SECTION_HEADER_DISPLAY_ENABLED, mSectionHeaderDisplayEnabled);
-        outState.putBoolean(KEY_PHOTO_LOADER_ENABLED, mPhotoLoaderEnabled);
-        outState.putBoolean(KEY_QUICK_CONTACT_ENABLED, mQuickContactEnabled);
-        outState.putBoolean(KEY_ADJUST_SELECTION_BOUNDS_ENABLED, mAdjustSelectionBoundsEnabled);
-        outState.putBoolean(KEY_SEARCH_MODE, mSearchMode);
-        outState.putBoolean(KEY_DISPLAY_DIRECTORY_HEADER, mDisplayDirectoryHeader);
-        outState.putBoolean(KEY_VISIBLE_SCROLLBAR_ENABLED, mVisibleScrollbarEnabled);
-        outState.putInt(KEY_SCROLLBAR_POSITION, mVerticalScrollbarPosition);
-        outState.putInt(KEY_DIRECTORY_SEARCH_MODE, mDirectorySearchMode);
-        outState.putBoolean(KEY_SELECTION_VISIBLE, mSelectionVisible);
-        outState.putBoolean(KEY_LEGACY_COMPATIBILITY, mLegacyCompatibility);
-        outState.putString(KEY_QUERY_STRING, mQueryString);
-        outState.putInt(KEY_DIRECTORY_RESULT_LIMIT, mDirectoryResultLimit);
-        outState.putBoolean(KEY_DARK_THEME, mDarkTheme);
-        outState.putBoolean(KEY_LOGS_LIST_EVENTS, mLogListEvents);
-        outState.putBoolean(KEY_DATA_LOADED, mDataLoaded);
-
-        if (mListView != null) {
-            outState.putParcelable(KEY_LIST_STATE, mListView.onSaveInstanceState());
-        }
-    }
-
-    @Override
-    public void onCreate(Bundle savedState) {
-        super.onCreate(savedState);
-        restoreSavedState(savedState);
-        mAdapter = createListAdapter();
-        mContactsPrefs = new ContactsPreferences(mContext);
-    }
-
-    public void restoreSavedState(Bundle savedState) {
-        if (savedState == null) {
-            return;
-        }
-
-        mSectionHeaderDisplayEnabled = savedState.getBoolean(KEY_SECTION_HEADER_DISPLAY_ENABLED);
-        mPhotoLoaderEnabled = savedState.getBoolean(KEY_PHOTO_LOADER_ENABLED);
-        mQuickContactEnabled = savedState.getBoolean(KEY_QUICK_CONTACT_ENABLED);
-        mAdjustSelectionBoundsEnabled = savedState.getBoolean(KEY_ADJUST_SELECTION_BOUNDS_ENABLED);
-        mSearchMode = savedState.getBoolean(KEY_SEARCH_MODE);
-        mDisplayDirectoryHeader = savedState.getBoolean(KEY_DISPLAY_DIRECTORY_HEADER);
-        mVisibleScrollbarEnabled = savedState.getBoolean(KEY_VISIBLE_SCROLLBAR_ENABLED);
-        mVerticalScrollbarPosition = savedState.getInt(KEY_SCROLLBAR_POSITION);
-        mDirectorySearchMode = savedState.getInt(KEY_DIRECTORY_SEARCH_MODE);
-        mSelectionVisible = savedState.getBoolean(KEY_SELECTION_VISIBLE);
-        mLegacyCompatibility = savedState.getBoolean(KEY_LEGACY_COMPATIBILITY);
-        mQueryString = savedState.getString(KEY_QUERY_STRING);
-        mDirectoryResultLimit = savedState.getInt(KEY_DIRECTORY_RESULT_LIMIT);
-        mDarkTheme = savedState.getBoolean(KEY_DARK_THEME);
-
-        // Retrieve list state. This will be applied in onLoadFinished
-        mListState = savedState.getParcelable(KEY_LIST_STATE);
-    }
-
-    @Override
-    public void onStart() {
-        super.onStart();
-
-        mContactsPrefs.registerChangeListener(mPreferencesChangeListener);
-
-        mForceLoad = loadPreferences();
-
-        mDirectoryListStatus = STATUS_NOT_LOADED;
-        mLoadPriorityDirectoriesOnly = true;
-
-        startLoading();
-    }
-
-    protected void startLoading() {
-        if (mAdapter == null) {
-            // The method was called before the fragment was started
-            return;
-        }
-
-        configureAdapter();
-        int partitionCount = mAdapter.getPartitionCount();
-        for (int i = 0; i < partitionCount; i++) {
-            Partition partition = mAdapter.getPartition(i);
-            if (partition instanceof DirectoryPartition) {
-                DirectoryPartition directoryPartition = (DirectoryPartition)partition;
-                if (directoryPartition.getStatus() == DirectoryPartition.STATUS_NOT_LOADED) {
-                    if (directoryPartition.isPriorityDirectory() || !mLoadPriorityDirectoriesOnly) {
-                        startLoadingDirectoryPartition(i);
-                    }
-                }
-            } else {
-                getLoaderManager().initLoader(i, null, this);
-            }
-        }
-
-        // Next time this method is called, we should start loading non-priority directories
-        mLoadPriorityDirectoriesOnly = false;
-    }
-
-    @Override
-    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
-        if (id == DIRECTORY_LOADER_ID) {
-            DirectoryListLoader loader = new DirectoryListLoader(mContext);
-            loader.setDirectorySearchMode(mAdapter.getDirectorySearchMode());
-            loader.setLocalInvisibleDirectoryEnabled(
-                    ContactEntryListAdapter.LOCAL_INVISIBLE_DIRECTORY_ENABLED);
-            return loader;
-        } else {
-            CursorLoader loader = createCursorLoader(mContext);
-            long directoryId = args != null && args.containsKey(DIRECTORY_ID_ARG_KEY)
-                    ? args.getLong(DIRECTORY_ID_ARG_KEY)
-                    : Directory.DEFAULT;
-            mAdapter.configureLoader(loader, directoryId);
-            return loader;
-        }
-    }
-
-    public CursorLoader createCursorLoader(Context context) {
-        return new CursorLoader(context, null, null, null, null, null) {
-            @Override
-            protected Cursor onLoadInBackground() {
-                try {
-                    return super.onLoadInBackground();
-                } catch (RuntimeException e) {
-                    // We don't even know what the projection should be, so no point trying to
-                    // return an empty MatrixCursor with the correct projection here.
-                    Log.w(TAG, "RuntimeException while trying to query ContactsProvider.");
-                    return null;
-                }
-            }
-        };
-    }
-
-    private void startLoadingDirectoryPartition(int partitionIndex) {
-        DirectoryPartition partition = (DirectoryPartition)mAdapter.getPartition(partitionIndex);
-        partition.setStatus(DirectoryPartition.STATUS_LOADING);
-        long directoryId = partition.getDirectoryId();
-        if (mForceLoad) {
-            if (directoryId == Directory.DEFAULT) {
-                loadDirectoryPartition(partitionIndex, partition);
-            } else {
-                loadDirectoryPartitionDelayed(partitionIndex, partition);
-            }
-        } else {
-            Bundle args = new Bundle();
-            args.putLong(DIRECTORY_ID_ARG_KEY, directoryId);
-            getLoaderManager().initLoader(partitionIndex, args, this);
-        }
-    }
-
-    /**
-     * Queues up a delayed request to search the specified directory. Since
-     * directory search will likely introduce a lot of network traffic, we want
-     * to wait for a pause in the user's typing before sending a directory request.
-     */
-    private void loadDirectoryPartitionDelayed(int partitionIndex, DirectoryPartition partition) {
-        mDelayedDirectorySearchHandler.removeMessages(DIRECTORY_SEARCH_MESSAGE, partition);
-        Message msg = mDelayedDirectorySearchHandler.obtainMessage(
-                DIRECTORY_SEARCH_MESSAGE, partitionIndex, 0, partition);
-        mDelayedDirectorySearchHandler.sendMessageDelayed(msg, DIRECTORY_SEARCH_DELAY_MILLIS);
-    }
-
-    /**
-     * Loads the directory partition.
-     */
-    protected void loadDirectoryPartition(int partitionIndex, DirectoryPartition partition) {
-        Bundle args = new Bundle();
-        args.putLong(DIRECTORY_ID_ARG_KEY, partition.getDirectoryId());
-        getLoaderManager().restartLoader(partitionIndex, args, this);
-    }
-
-    /**
-     * Cancels all queued directory loading requests.
-     */
-    private void removePendingDirectorySearchRequests() {
-        mDelayedDirectorySearchHandler.removeMessages(DIRECTORY_SEARCH_MESSAGE);
-    }
-
-    @Override
-    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
-        if (!mEnabled) {
-            return;
-        }
-
-        getListView().setVisibility(View.VISIBLE);
-        getView().setVisibility(View.VISIBLE);
-
-        int loaderId = loader.getId();
-        if (loaderId == DIRECTORY_LOADER_ID) {
-            mDirectoryListStatus = STATUS_LOADED;
-            mAdapter.changeDirectories(data);
-            startLoading();
-        } else {
-            onPartitionLoaded(loaderId, data);
-            if (isSearchMode()) {
-                int directorySearchMode = getDirectorySearchMode();
-                if (directorySearchMode != DirectoryListLoader.SEARCH_MODE_NONE) {
-                    if (mDirectoryListStatus == STATUS_NOT_LOADED) {
-                        mDirectoryListStatus = STATUS_LOADING;
-                        getLoaderManager().initLoader(DIRECTORY_LOADER_ID, null, this);
-                    } else {
-                        startLoading();
-                    }
-                }
-            } else {
-                maybeLogListEvent();
-                mDirectoryListStatus = STATUS_NOT_LOADED;
-                getLoaderManager().destroyLoader(DIRECTORY_LOADER_ID);
-            }
-        }
-    }
-
-    protected void maybeLogListEvent() {
-        if (!mDataLoaded || mLogListEvents) {
-            Logger.logListEvent(ActionType.LOAD, getListType(), getAdapter().getCount(),
-                        /* clickedIndex */ -1, /* numSelected */ 0);
-            mLogListEvents = false;
-            mDataLoaded = true;
-        }
-    }
-
-    public void onLoaderReset(Loader<Cursor> loader) {
-    }
-
-    protected void onPartitionLoaded(int partitionIndex, Cursor data) {
-        if (partitionIndex >= mAdapter.getPartitionCount()) {
-            // When we get unsolicited data, ignore it.  This could happen
-            // when we are switching from search mode to the default mode.
-            return;
-        }
-
-        mAdapter.changeCursor(partitionIndex, data);
-        setListHeader();
-
-        if (!isLoading()) {
-            completeRestoreInstanceState();
-        }
-    }
-
-    public boolean isLoading() {
-        if (mAdapter != null && mAdapter.isLoading()) {
-            return true;
-        }
-
-        if (isLoadingDirectoryList()) {
-            return true;
-        }
-
-        return false;
-    }
-
-    public boolean isLoadingDirectoryList() {
-        return isSearchMode() && getDirectorySearchMode() != DirectoryListLoader.SEARCH_MODE_NONE
-                && (mDirectoryListStatus == STATUS_NOT_LOADED
-                        || mDirectoryListStatus == STATUS_LOADING);
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-        mContactsPrefs.unregisterChangeListener();
-        mAdapter.clearPartitions();
-    }
-
-    protected void reloadData() {
-        removePendingDirectorySearchRequests();
-        mAdapter.onDataReload();
-        mLoadPriorityDirectoriesOnly = true;
-        mForceLoad = true;
-        startLoading();
-    }
-
-    /**
-     * Shows a view at the top of the list.
-     */
-    protected void setListHeader() {}
-
-    /**
-     * Provides logic that dismisses this fragment. The default implementation
-     * does nothing.
-     */
-    protected void finish() {
-    }
-
-    public void setSectionHeaderDisplayEnabled(boolean flag) {
-        if (mSectionHeaderDisplayEnabled != flag) {
-            mSectionHeaderDisplayEnabled = flag;
-            if (mAdapter != null) {
-                mAdapter.setSectionHeaderDisplayEnabled(flag);
-            }
-            configureVerticalScrollbar();
-        }
-    }
-
-    public boolean isSectionHeaderDisplayEnabled() {
-        return mSectionHeaderDisplayEnabled;
-    }
-
-    public void setVisibleScrollbarEnabled(boolean flag) {
-        if (mVisibleScrollbarEnabled != flag) {
-            mVisibleScrollbarEnabled = flag;
-            configureVerticalScrollbar();
-        }
-    }
-
-    public boolean isVisibleScrollbarEnabled() {
-        return mVisibleScrollbarEnabled;
-    }
-
-    public void setVerticalScrollbarPosition(int position) {
-        if (mVerticalScrollbarPosition != position) {
-            mVerticalScrollbarPosition = position;
-            configureVerticalScrollbar();
-        }
-    }
-
-    private void configureVerticalScrollbar() {
-        boolean hasScrollbar = isVisibleScrollbarEnabled() && isSectionHeaderDisplayEnabled();
-
-        if (mListView != null) {
-            mListView.setFastScrollEnabled(hasScrollbar);
-            mListView.setVerticalScrollbarPosition(mVerticalScrollbarPosition);
-            mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
-        }
-    }
-
-    public void setPhotoLoaderEnabled(boolean flag) {
-        mPhotoLoaderEnabled = flag;
-        configurePhotoLoader();
-    }
-
-    public boolean isPhotoLoaderEnabled() {
-        return mPhotoLoaderEnabled;
-    }
-
-    /**
-     * Returns true if the list is supposed to visually highlight the selected item.
-     */
-    public boolean isSelectionVisible() {
-        return mSelectionVisible;
-    }
-
-    public void setSelectionVisible(boolean flag) {
-        this.mSelectionVisible = flag;
-    }
-
-    public void setQuickContactEnabled(boolean flag) {
-        this.mQuickContactEnabled = flag;
-    }
-
-    public void setAdjustSelectionBoundsEnabled(boolean flag) {
-        mAdjustSelectionBoundsEnabled = flag;
-    }
-
-    public void setIncludeFavorites(boolean flag) {
-        mIncludeFavorites = flag;
-        if (mAdapter != null) {
-            mAdapter.setIncludeFavorites(flag);
-        }
-    }
-
-    public void setDisplayDirectoryHeader(boolean flag) {
-        mDisplayDirectoryHeader = flag;
-    }
-
-    /**
-     * Enter/exit search mode. This is method is tightly related to the current query, and should
-     * only be called by {@link #setQueryString}.
-     *
-     * Also note this method doesn't call {@link #reloadData()}; {@link #setQueryString} does it.
-     */
-    protected void setSearchMode(boolean flag) {
-        if (mSearchMode != flag) {
-            mSearchMode = flag;
-            setSectionHeaderDisplayEnabled(!mSearchMode);
-
-            if (!flag) {
-                mDirectoryListStatus = STATUS_NOT_LOADED;
-                getLoaderManager().destroyLoader(DIRECTORY_LOADER_ID);
-            }
-
-            if (mAdapter != null) {
-                mAdapter.setSearchMode(flag);
-
-                mAdapter.clearPartitions();
-                if (!flag) {
-                    // If we are switching from search to regular display, remove all directory
-                    // partitions after default one, assuming they are remote directories which
-                    // should be cleaned up on exiting the search mode.
-                    mAdapter.removeDirectoriesAfterDefault();
-                }
-                mAdapter.configureDefaultPartition(false, shouldDisplayDirectoryHeader());
-            }
-
-            if (mListView != null) {
-                mListView.setFastScrollEnabled(!flag);
-            }
-        }
-    }
-
-    /**
-     * When not in search mode, directory header should always be hidden.
-     * When in search mode, directory header should be displayed when mDisplayDirectoryHeader is
-     * set to true. (mDisplayDirectoryHeader default value is true)
-     */
-    private boolean shouldDisplayDirectoryHeader() {
-        if (!mSearchMode) {
-            return false;
-        }
-        return mDisplayDirectoryHeader;
-    }
-
-    public final boolean isSearchMode() {
-        return mSearchMode;
-    }
-
-    public final String getQueryString() {
-        return mQueryString;
-    }
-
-    // TODO: the paramter delaySelection is not in use, and let's remove it.
-    public void setQueryString(String queryString, boolean delaySelection) {
-        if (!TextUtils.equals(mQueryString, queryString)) {
-            if (mShowEmptyListForEmptyQuery && mAdapter != null && mListView != null) {
-                if (TextUtils.isEmpty(mQueryString)) {
-                    // Restore the adapter if the query used to be empty.
-                    mListView.setAdapter(mAdapter);
-                } else if (TextUtils.isEmpty(queryString)) {
-                    // Instantly clear the list view if the new query is empty.
-                    mListView.setAdapter(null);
-                }
-            }
-
-            mQueryString = queryString;
-            setSearchMode(!TextUtils.isEmpty(mQueryString) || mShowEmptyListForEmptyQuery);
-
-            if (mAdapter != null) {
-                mAdapter.setQueryString(queryString);
-                reloadData();
-            }
-        }
-    }
-
-    public void setShowEmptyListForNullQuery(boolean show) {
-        mShowEmptyListForEmptyQuery = show;
-    }
-
-    public int getDirectoryLoaderId() {
-        return DIRECTORY_LOADER_ID;
-    }
-
-    public int getDirectorySearchMode() {
-        return mDirectorySearchMode;
-    }
-
-    public void setDirectorySearchMode(int mode) {
-        mDirectorySearchMode = mode;
-    }
-
-    public boolean isLegacyCompatibilityMode() {
-        return mLegacyCompatibility;
-    }
-
-    public void setLegacyCompatibilityMode(boolean flag) {
-        mLegacyCompatibility = flag;
-    }
-
-    protected int getContactNameDisplayOrder() {
-        return mDisplayOrder;
-    }
-
-    protected void setContactNameDisplayOrder(int displayOrder) {
-        mDisplayOrder = displayOrder;
-        if (mAdapter != null) {
-            mAdapter.setContactNameDisplayOrder(displayOrder);
-        }
-    }
-
-    public int getSortOrder() {
-        return mSortOrder;
-    }
-
-    public void setSortOrder(int sortOrder) {
-        mSortOrder = sortOrder;
-        if (mAdapter != null) {
-            mAdapter.setSortOrder(sortOrder);
-        }
-    }
-
-    public void setDirectoryResultLimit(int limit) {
-        mDirectoryResultLimit = limit;
-    }
-
-    protected boolean loadPreferences() {
-        boolean changed = false;
-        if (getContactNameDisplayOrder() != mContactsPrefs.getDisplayOrder()) {
-            setContactNameDisplayOrder(mContactsPrefs.getDisplayOrder());
-            changed = true;
-        }
-
-        if (getSortOrder() != mContactsPrefs.getSortOrder()) {
-            setSortOrder(mContactsPrefs.getSortOrder());
-            changed = true;
-        }
-
-        return changed;
-    }
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        onCreateView(inflater, container);
-
-        boolean searchMode = isSearchMode();
-        mAdapter.setSearchMode(searchMode);
-        mAdapter.configureDefaultPartition(false, shouldDisplayDirectoryHeader());
-        mAdapter.setPhotoLoader(mPhotoManager);
-        mListView.setAdapter(mAdapter);
-
-        if (!isSearchMode()) {
-            mListView.setFocusableInTouchMode(true);
-            mListView.requestFocus();
-        }
-
-        if (savedInstanceState != null) {
-            mLogListEvents = savedInstanceState.getBoolean(KEY_LOGS_LIST_EVENTS, true);
-            mDataLoaded = savedInstanceState.getBoolean(KEY_DATA_LOADED, false);
-        }
-
-        return mView;
-    }
-
-    protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
-        mView = inflateView(inflater, container);
-
-        mListView = (ListView)mView.findViewById(android.R.id.list);
-        if (mListView == null) {
-            throw new RuntimeException(
-                    "Your content must have a ListView whose id attribute is " +
-                    "'android.R.id.list'");
-        }
-
-        View emptyView = mView.findViewById(android.R.id.empty);
-        if (emptyView != null) {
-            mListView.setEmptyView(emptyView);
-        }
-
-        mListView.setOnItemClickListener(this);
-        mListView.setOnItemLongClickListener(this);
-        mListView.setOnFocusChangeListener(this);
-        mListView.setOnTouchListener(this);
-        mListView.setFastScrollEnabled(!isSearchMode());
-
-        // Tell list view to not show dividers. We'll do it ourself so that we can *not* show
-        // them when an A-Z headers is visible.
-        mListView.setDividerHeight(0);
-
-        // We manually save/restore the listview state
-        mListView.setSaveEnabled(false);
-
-        configureVerticalScrollbar();
-        configurePhotoLoader();
-
-        getAdapter().setFragmentRootView(getView());
-    }
-
-    protected void configurePhotoLoader() {
-        if (isPhotoLoaderEnabled() && mContext != null) {
-            if (mPhotoManager == null) {
-                mPhotoManager = ContactPhotoManager.getInstance(mContext);
-            }
-            if (mListView != null) {
-                mListView.setOnScrollListener(this);
-            }
-            if (mAdapter != null) {
-                mAdapter.setPhotoLoader(mPhotoManager);
-            }
-        }
-    }
-
-    protected void configureAdapter() {
-        if (mAdapter == null) {
-            return;
-        }
-
-        mAdapter.setQuickContactEnabled(mQuickContactEnabled);
-        mAdapter.setAdjustSelectionBoundsEnabled(mAdjustSelectionBoundsEnabled);
-        mAdapter.setIncludeFavorites(mIncludeFavorites);
-        mAdapter.setQueryString(mQueryString);
-        mAdapter.setDirectorySearchMode(mDirectorySearchMode);
-        mAdapter.setPinnedPartitionHeadersEnabled(false);
-        mAdapter.setContactNameDisplayOrder(mDisplayOrder);
-        mAdapter.setSortOrder(mSortOrder);
-        mAdapter.setSectionHeaderDisplayEnabled(mSectionHeaderDisplayEnabled);
-        mAdapter.setSelectionVisible(mSelectionVisible);
-        mAdapter.setDirectoryResultLimit(mDirectoryResultLimit);
-        mAdapter.setDarkTheme(mDarkTheme);
-    }
-
-    @Override
-    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
-            int totalItemCount) {
-    }
-
-    @Override
-    public void onScrollStateChanged(AbsListView view, int scrollState) {
-        if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {
-            mPhotoManager.pause();
-        } else if (isPhotoLoaderEnabled()) {
-            mPhotoManager.resume();
-        }
-    }
-
-    @Override
-    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
-        hideSoftKeyboard();
-
-        int adjPosition = position - mListView.getHeaderViewsCount();
-        if (adjPosition >= 0) {
-            onItemClick(adjPosition, id);
-        }
-    }
-
-    @Override
-    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
-        int adjPosition = position - mListView.getHeaderViewsCount();
-
-        if (adjPosition >= 0) {
-            return onItemLongClick(adjPosition, id);
-        }
-        return false;
-    }
-
-    private void hideSoftKeyboard() {
-        // Hide soft keyboard, if visible
-        InputMethodManager inputMethodManager = (InputMethodManager)
-                mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
-        inputMethodManager.hideSoftInputFromWindow(mListView.getWindowToken(), 0);
-    }
-
-    /**
-     * Dismisses the soft keyboard when the list takes focus.
-     */
-    @Override
-    public void onFocusChange(View view, boolean hasFocus) {
-        if (view == mListView && hasFocus) {
-            hideSoftKeyboard();
-        }
-    }
-
-    /**
-     * Dismisses the soft keyboard when the list is touched.
-     */
-    @Override
-    public boolean onTouch(View view, MotionEvent event) {
-        if (view == mListView) {
-            hideSoftKeyboard();
-        }
-        return false;
-    }
-
-    @Override
-    public void onPause() {
-        // Save the scrolling state of the list view
-        mListViewTopIndex = mListView.getFirstVisiblePosition();
-        View v = mListView.getChildAt(0);
-        mListViewTopOffset = (v == null) ? 0 : (v.getTop() - mListView.getPaddingTop());
-
-        super.onPause();
-        removePendingDirectorySearchRequests();
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        // Restore the selection of the list view. See b/19982820.
-        // This has to be done manually because if the list view has its emptyView set,
-        // the scrolling state will be reset when clearPartitions() is called on the adapter.
-        mListView.setSelectionFromTop(mListViewTopIndex, mListViewTopOffset);
-    }
-
-    /**
-     * Restore the list state after the adapter is populated.
-     */
-    protected void completeRestoreInstanceState() {
-        if (mListState != null) {
-            mListView.onRestoreInstanceState(mListState);
-            mListState = null;
-        }
-    }
-
-    public void setDarkTheme(boolean value) {
-        mDarkTheme = value;
-        if (mAdapter != null) mAdapter.setDarkTheme(value);
-    }
-
-    /**
-     * Processes a result returned by the contact picker.
-     */
-    public void onPickerResult(Intent data) {
-        throw new UnsupportedOperationException("Picker result handler is not implemented.");
-    }
-
-    private ContactsPreferences.ChangeListener mPreferencesChangeListener =
-            new ContactsPreferences.ChangeListener() {
-        @Override
-        public void onChange() {
-            loadPreferences();
-            reloadData();
-        }
-    };
-
-    private int getDefaultVerticalScrollbarPosition() {
-        final Locale locale = Locale.getDefault();
-        final int layoutDirection = TextUtils.getLayoutDirectionFromLocale(locale);
-        switch (layoutDirection) {
-            case View.LAYOUT_DIRECTION_RTL:
-                return View.SCROLLBAR_POSITION_LEFT;
-            case View.LAYOUT_DIRECTION_LTR:
-            default:
-                return View.SCROLLBAR_POSITION_RIGHT;
-        }
-    }
-
-    public void setListType(int listType) {
-        mListType = listType;
-    }
-
-    public int getListType() {
-        return mListType;
-    }
-
-    public void setLogListEvents(boolean logListEvents) {
-        mLogListEvents = logListEvents;
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactListAdapter.java b/src/com/android/contacts/common/list/ContactListAdapter.java
deleted file mode 100644
index 6294f47..0000000
--- a/src/com/android/contacts/common/list/ContactListAdapter.java
+++ /dev/null
@@ -1,444 +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.common.list;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Directory;
-import android.provider.ContactsContract.SearchSnippets;
-import android.text.TextUtils;
-import android.view.ViewGroup;
-import android.widget.ListView;
-
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.R;
-import com.android.contacts.common.compat.ContactsCompat;
-import com.android.contacts.common.preference.ContactsPreferences;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * A cursor adapter for the {@link ContactsContract.Contacts#CONTENT_TYPE} content type.
- */
-public abstract class ContactListAdapter extends MultiSelectEntryContactListAdapter {
-
-    public static class ContactQuery {
-        public static final String[] CONTACT_PROJECTION_PRIMARY = new String[] {
-            Contacts._ID,                           // 0
-            Contacts.DISPLAY_NAME_PRIMARY,          // 1
-            Contacts.CONTACT_PRESENCE,              // 2
-            Contacts.CONTACT_STATUS,                // 3
-            Contacts.PHOTO_ID,                      // 4
-            Contacts.PHOTO_THUMBNAIL_URI,           // 5
-            Contacts.LOOKUP_KEY,                    // 6
-            Contacts.PHONETIC_NAME,                 // 7
-            Contacts.STARRED,                       // 9
-        };
-
-        private static final String[] CONTACT_PROJECTION_ALTERNATIVE = new String[] {
-            Contacts._ID,                           // 0
-            Contacts.DISPLAY_NAME_ALTERNATIVE,      // 1
-            Contacts.CONTACT_PRESENCE,              // 2
-            Contacts.CONTACT_STATUS,                // 3
-            Contacts.PHOTO_ID,                      // 4
-            Contacts.PHOTO_THUMBNAIL_URI,           // 5
-            Contacts.LOOKUP_KEY,                    // 6
-            Contacts.PHONETIC_NAME,                 // 7
-            Contacts.STARRED,                       // 8
-        };
-
-        private static final String[] FILTER_PROJECTION_PRIMARY = new String[] {
-            Contacts._ID,                           // 0
-            Contacts.DISPLAY_NAME_PRIMARY,          // 1
-            Contacts.CONTACT_PRESENCE,              // 2
-            Contacts.CONTACT_STATUS,                // 3
-            Contacts.PHOTO_ID,                      // 4
-            Contacts.PHOTO_THUMBNAIL_URI,           // 5
-            Contacts.LOOKUP_KEY,                    // 6
-            Contacts.PHONETIC_NAME,                 // 7
-            Contacts.STARRED,                       // 8
-            SearchSnippets.SNIPPET,                 // 9
-        };
-
-        private static final String[] FILTER_PROJECTION_ALTERNATIVE = new String[] {
-            Contacts._ID,                           // 0
-            Contacts.DISPLAY_NAME_ALTERNATIVE,      // 1
-            Contacts.CONTACT_PRESENCE,              // 2
-            Contacts.CONTACT_STATUS,                // 3
-            Contacts.PHOTO_ID,                      // 4
-            Contacts.PHOTO_THUMBNAIL_URI,           // 5
-            Contacts.LOOKUP_KEY,                    // 6
-            Contacts.PHONETIC_NAME,                 // 7
-            Contacts.STARRED,                       // 8
-            SearchSnippets.SNIPPET,                 // 9
-        };
-
-        public static final int CONTACT_ID               = 0;
-        public static final int CONTACT_DISPLAY_NAME     = 1;
-        public static final int CONTACT_PRESENCE_STATUS  = 2;
-        public static final int CONTACT_CONTACT_STATUS   = 3;
-        public static final int CONTACT_PHOTO_ID         = 4;
-        public static final int CONTACT_PHOTO_URI        = 5;
-        public static final int CONTACT_LOOKUP_KEY       = 6;
-        public static final int CONTACT_PHONETIC_NAME    = 7;
-        public static final int CONTACT_STARRED          = 8;
-        public static final int CONTACT_SNIPPET          = 9;
-    }
-
-    private CharSequence mUnknownNameText;
-
-    private long mSelectedContactDirectoryId;
-    private String mSelectedContactLookupKey;
-    private long mSelectedContactId;
-    private ContactListItemView.PhotoPosition mPhotoPosition;
-
-    public ContactListAdapter(Context context) {
-        super(context, ContactQuery.CONTACT_ID);
-
-        mUnknownNameText = context.getText(R.string.missing_name);
-    }
-
-    public void setPhotoPosition(ContactListItemView.PhotoPosition photoPosition) {
-        mPhotoPosition = photoPosition;
-    }
-
-    public ContactListItemView.PhotoPosition getPhotoPosition() {
-        return mPhotoPosition;
-    }
-
-    public CharSequence getUnknownNameText() {
-        return mUnknownNameText;
-    }
-
-    public long getSelectedContactDirectoryId() {
-        return mSelectedContactDirectoryId;
-    }
-
-    public String getSelectedContactLookupKey() {
-        return mSelectedContactLookupKey;
-    }
-
-    public long getSelectedContactId() {
-        return mSelectedContactId;
-    }
-
-    public void setSelectedContact(long selectedDirectoryId, String lookupKey, long contactId) {
-        mSelectedContactDirectoryId = selectedDirectoryId;
-        mSelectedContactLookupKey = lookupKey;
-        mSelectedContactId = contactId;
-    }
-
-    protected static Uri buildSectionIndexerUri(Uri uri) {
-        return uri.buildUpon()
-                .appendQueryParameter(Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true").build();
-    }
-
-    @Override
-    public String getContactDisplayName(int position) {
-        return ((Cursor) getItem(position)).getString(ContactQuery.CONTACT_DISPLAY_NAME);
-    }
-
-    /**
-     * Builds the {@link Contacts#CONTENT_LOOKUP_URI} for the given
-     * {@link ListView} position.
-     */
-    public Uri getContactUri(int position) {
-        int partitionIndex = getPartitionForPosition(position);
-        Cursor item = (Cursor)getItem(position);
-        return item != null ? getContactUri(partitionIndex, item) : null;
-    }
-
-    public Uri getContactUri(int partitionIndex, Cursor cursor) {
-        long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
-        String lookupKey = cursor.getString(ContactQuery.CONTACT_LOOKUP_KEY);
-        Uri uri = Contacts.getLookupUri(contactId, lookupKey);
-        long directoryId = ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
-        if (uri != null && directoryId != Directory.DEFAULT) {
-            uri = uri.buildUpon().appendQueryParameter(
-                    ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build();
-        }
-        return uri;
-    }
-
-    /**
-     * Returns the {@link Contacts#_ID} for the given {@link ListView} position.
-     */
-    public long getContactId(int position) {
-        final Cursor cursor = (Cursor) getItem(position);
-        return cursor == null ? -1 : cursor.getLong(ContactQuery.CONTACT_ID);
-    }
-
-    public boolean isEnterpriseContact(int position) {
-        final Cursor cursor = (Cursor) getItem(position);
-        if (cursor != null) {
-            final long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
-            return ContactsCompat.isEnterpriseContactId(contactId);
-        }
-        return false;
-    }
-
-    /**
-     * Returns true if the specified contact is selected in the list. For a
-     * contact to be shown as selected, we need both the directory and and the
-     * lookup key to be the same. We are paying no attention to the contactId,
-     * because it is volatile, especially in the case of directories.
-     */
-    public boolean isSelectedContact(int partitionIndex, Cursor cursor) {
-        long directoryId = ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
-        if (getSelectedContactDirectoryId() != directoryId) {
-            return false;
-        }
-        String lookupKey = getSelectedContactLookupKey();
-        if (lookupKey != null && TextUtils.equals(lookupKey,
-                cursor.getString(ContactQuery.CONTACT_LOOKUP_KEY))) {
-            return true;
-        }
-
-        return directoryId != Directory.DEFAULT && directoryId != Directory.LOCAL_INVISIBLE
-                && getSelectedContactId() == cursor.getLong(ContactQuery.CONTACT_ID);
-    }
-
-    @Override
-    protected ContactListItemView newView(
-            Context context, int partition, Cursor cursor, int position, ViewGroup parent) {
-        ContactListItemView view = super.newView(context, partition, cursor, position, parent);
-        view.setUnknownNameText(mUnknownNameText);
-        view.setQuickContactEnabled(isQuickContactEnabled());
-        view.setAdjustSelectionBoundsEnabled(isAdjustSelectionBoundsEnabled());
-        view.setActivatedStateSupported(isSelectionVisible());
-        if (mPhotoPosition != null) {
-            view.setPhotoPosition(mPhotoPosition);
-        }
-        return view;
-    }
-
-    protected void bindSectionHeaderAndDivider(ContactListItemView view, int position,
-            Cursor cursor) {
-        view.setIsSectionHeaderEnabled(isSectionHeaderDisplayEnabled());
-        if (isSectionHeaderDisplayEnabled()) {
-            Placement placement = getItemPlacementInSection(position);
-            view.setSectionHeader(placement.sectionHeader);
-        } else {
-            view.setSectionHeader(null);
-        }
-    }
-
-    protected void bindPhoto(final ContactListItemView view, int partitionIndex, Cursor cursor) {
-        if (!isPhotoSupported(partitionIndex)) {
-            view.removePhotoView();
-            return;
-        }
-
-        // Set the photo, if available
-        long photoId = 0;
-        if (!cursor.isNull(ContactQuery.CONTACT_PHOTO_ID)) {
-            photoId = cursor.getLong(ContactQuery.CONTACT_PHOTO_ID);
-        }
-
-        if (photoId != 0) {
-            getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, false,
-                    getCircularPhotos(), null);
-        } else {
-            final String photoUriString = cursor.getString(ContactQuery.CONTACT_PHOTO_URI);
-            final Uri photoUri = photoUriString == null ? null : Uri.parse(photoUriString);
-            DefaultImageRequest request = null;
-            if (photoUri == null) {
-                request = getDefaultImageRequestFromCursor(cursor,
-                        ContactQuery.CONTACT_DISPLAY_NAME,
-                        ContactQuery.CONTACT_LOOKUP_KEY);
-            }
-            getPhotoLoader().loadDirectoryPhoto(view.getPhotoView(), photoUri, false,
-                    getCircularPhotos(), request);
-        }
-    }
-
-    protected void bindNameAndViewId(final ContactListItemView view, Cursor cursor) {
-        view.showDisplayName(
-                cursor, ContactQuery.CONTACT_DISPLAY_NAME, getContactNameDisplayOrder());
-        // Note: we don't show phonetic any more (See issue 5265330)
-
-        bindViewId(view, cursor, ContactQuery.CONTACT_ID);
-    }
-
-    protected void bindPresenceAndStatusMessage(final ContactListItemView view, Cursor cursor) {
-        view.showPresenceAndStatusMessage(cursor, ContactQuery.CONTACT_PRESENCE_STATUS,
-                ContactQuery.CONTACT_CONTACT_STATUS);
-    }
-
-    protected void bindSearchSnippet(final ContactListItemView view, Cursor cursor) {
-        view.showSnippet(cursor, ContactQuery.CONTACT_SNIPPET);
-    }
-
-    public int getSelectedContactPosition() {
-        if (mSelectedContactLookupKey == null && mSelectedContactId == 0) {
-            return -1;
-        }
-
-        Cursor cursor = null;
-        int partitionIndex = -1;
-        int partitionCount = getPartitionCount();
-        for (int i = 0; i < partitionCount; i++) {
-            DirectoryPartition partition = (DirectoryPartition) getPartition(i);
-            if (partition.getDirectoryId() == mSelectedContactDirectoryId) {
-                partitionIndex = i;
-                break;
-            }
-        }
-        if (partitionIndex == -1) {
-            return -1;
-        }
-
-        cursor = getCursor(partitionIndex);
-        if (cursor == null) {
-            return -1;
-        }
-
-        cursor.moveToPosition(-1);      // Reset cursor
-        int offset = -1;
-        while (cursor.moveToNext()) {
-            if (mSelectedContactLookupKey != null) {
-                String lookupKey = cursor.getString(ContactQuery.CONTACT_LOOKUP_KEY);
-                if (mSelectedContactLookupKey.equals(lookupKey)) {
-                    offset = cursor.getPosition();
-                    break;
-                }
-            }
-            if (mSelectedContactId != 0 && (mSelectedContactDirectoryId == Directory.DEFAULT
-                    || mSelectedContactDirectoryId == Directory.LOCAL_INVISIBLE)) {
-                long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
-                if (contactId == mSelectedContactId) {
-                    offset = cursor.getPosition();
-                    break;
-                }
-            }
-        }
-        if (offset == -1) {
-            return -1;
-        }
-
-        int position = getPositionForPartition(partitionIndex) + offset;
-        if (hasHeader(partitionIndex)) {
-            position++;
-        }
-        return position;
-    }
-
-    public boolean hasValidSelection() {
-        return getSelectedContactPosition() != -1;
-    }
-
-    public Uri getFirstContactUri() {
-        int partitionCount = getPartitionCount();
-        for (int i = 0; i < partitionCount; i++) {
-            DirectoryPartition partition = (DirectoryPartition) getPartition(i);
-            if (partition.isLoading()) {
-                continue;
-            }
-
-            Cursor cursor = getCursor(i);
-            if (cursor == null) {
-                continue;
-            }
-
-            if (!cursor.moveToFirst()) {
-                continue;
-            }
-
-            return getContactUri(i, cursor);
-        }
-
-        return null;
-    }
-
-    @Override
-    public void changeCursor(int partitionIndex, Cursor cursor) {
-        super.changeCursor(partitionIndex, cursor);
-
-        if (cursor == null || !cursor.moveToFirst()) {
-            return;
-        }
-
-        if (shouldIncludeFavorites()) {
-            if (cursor.getInt(ContactQuery.CONTACT_STARRED) == 1) {
-                final Set<Integer> favorites = new HashSet<>();
-                favorites.add(cursor.getInt(ContactQuery.CONTACT_ID));
-                while (cursor != null && cursor.moveToNext()) {
-                    if (cursor.getInt(ContactQuery.CONTACT_STARRED) != 1
-                            || favorites.contains(cursor.getInt(ContactQuery.CONTACT_ID))) {
-                        break;
-                    }
-                    favorites.add(cursor.getInt(ContactQuery.CONTACT_ID));
-                }
-                setFavoritesSectionHeader(favorites.size());
-            }
-        }
-    }
-
-    /**
-     * @return Projection useful for children.
-     */
-    protected final String[] getProjection(boolean forSearch) {
-        final int sortOrder = getContactNameDisplayOrder();
-        if (forSearch) {
-            if (sortOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
-                return ContactQuery.FILTER_PROJECTION_PRIMARY;
-            } else {
-                return ContactQuery.FILTER_PROJECTION_ALTERNATIVE;
-            }
-        } else {
-            if (sortOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
-                return ContactQuery.CONTACT_PROJECTION_PRIMARY;
-            } else {
-                return ContactQuery.CONTACT_PROJECTION_ALTERNATIVE;
-            }
-        }
-    }
-
-    /**
-     * @return Projection from Data that is useful for children.
-     */
-    protected final String[] getDataProjectionForContacts(boolean forSearch) {
-        final int sortOrder = getContactNameDisplayOrder();
-        if (forSearch) {
-            if (sortOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
-                return replaceFirstString(ContactQuery.FILTER_PROJECTION_PRIMARY);
-            } else {
-                return replaceFirstString(ContactQuery.FILTER_PROJECTION_ALTERNATIVE);
-            }
-        } else {
-            if (sortOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
-                return replaceFirstString(ContactQuery.CONTACT_PROJECTION_PRIMARY);
-            } else {
-                return replaceFirstString(ContactQuery.CONTACT_PROJECTION_ALTERNATIVE);
-            }
-        }
-    }
-
-    /**
-     * @param sourceProjection
-     * @return Replace the first String of sourceProjection with Data.CONTACT_ID.
-     */
-    private String[] replaceFirstString(String[] sourceProjection) {
-        String[] result = sourceProjection.clone();
-        result[0] = Data.CONTACT_ID;
-        return result;
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactListFilter.java b/src/com/android/contacts/common/list/ContactListFilter.java
deleted file mode 100644
index 5b7472d..0000000
--- a/src/com/android/contacts/common/list/ContactListFilter.java
+++ /dev/null
@@ -1,453 +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.common.list;
-
-import android.accounts.Account;
-import android.content.SharedPreferences;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.ContactsContract.RawContacts;
-import android.text.TextUtils;
-
-import com.android.contacts.common.logging.ListEvent;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.account.GoogleAccountType;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Contact list filter parameters.
- */
-public final class ContactListFilter implements Comparable<ContactListFilter>, Parcelable {
-
-    public static final int FILTER_TYPE_DEFAULT = -1;
-    public static final int FILTER_TYPE_ALL_ACCOUNTS = -2;
-    public static final int FILTER_TYPE_CUSTOM = -3;
-    public static final int FILTER_TYPE_STARRED = -4;
-    public static final int FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY = -5;
-    public static final int FILTER_TYPE_SINGLE_CONTACT = -6;
-    public static final int FILTER_TYPE_GROUP_MEMBERS = -7;
-    public static final int FILTER_TYPE_DEVICE_CONTACTS = -8;
-
-    public static final int FILTER_TYPE_ACCOUNT = 0;
-
-    /**
-     * Obsolete filter which had been used in Honeycomb. This may be stored in
-     * {@link SharedPreferences}, but should be replaced with ALL filter when it is found.
-     *
-     * TODO: "group" filter and relevant variables are all obsolete. Remove them.
-     */
-    private static final int FILTER_TYPE_GROUP = 1;
-
-    private static final String KEY_FILTER_TYPE = "filter.type";
-    private static final String KEY_ACCOUNT_NAME = "filter.accountName";
-    private static final String KEY_ACCOUNT_TYPE = "filter.accountType";
-    private static final String KEY_DATA_SET = "filter.dataSet";
-
-    public final int filterType;
-    public final String accountType;
-    public final String accountName;
-    public final String dataSet;
-    public final Drawable icon;
-    private String mId;
-
-    public ContactListFilter(int filterType, String accountType, String accountName, String dataSet,
-            Drawable icon) {
-        this.filterType = filterType;
-        this.accountType = accountType;
-        this.accountName = accountName;
-        this.dataSet = dataSet;
-        this.icon = icon;
-    }
-
-    public static ContactListFilter createFilterWithType(int filterType) {
-        return new ContactListFilter(filterType, null, null, null, null);
-    }
-
-    public static ContactListFilter createAccountFilter(String accountType, String accountName,
-            String dataSet, Drawable icon) {
-        return new ContactListFilter(ContactListFilter.FILTER_TYPE_ACCOUNT, accountType,
-                accountName, dataSet, icon);
-    }
-
-    public static ContactListFilter createGroupMembersFilter(String accountType, String accountName,
-            String dataSet) {
-        return new ContactListFilter(ContactListFilter.FILTER_TYPE_GROUP_MEMBERS, accountType,
-                accountName, dataSet, /* icon */ null);
-    }
-
-    public static ContactListFilter createDeviceContactsFilter(Drawable icon) {
-        return new ContactListFilter(ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS,
-                /* accountType= */ null, /* accountName= */ null, /* dataSet= */ null, icon);
-    }
-
-    public static ContactListFilter createDeviceContactsFilter(Drawable icon,
-            AccountWithDataSet account) {
-        return new ContactListFilter(ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS,
-                account.type, account.name, account.dataSet, icon);
-    }
-
-    /**
-     * Whether the given {@link ContactListFilter} has a filter type that should be displayed as
-     * the default contacts list view.
-     */
-    public boolean isContactsFilterType() {
-        return filterType == ContactListFilter.FILTER_TYPE_DEFAULT
-                || filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
-                || filterType == ContactListFilter.FILTER_TYPE_CUSTOM;
-    }
-
-    /** Returns the {@link ListEvent.ListType} for the type of this filter. */
-    public int toListType() {
-        switch (filterType) {
-            case FILTER_TYPE_DEFAULT:
-                // Fall through
-            case FILTER_TYPE_ALL_ACCOUNTS:
-                return ListEvent.ListType.ALL_CONTACTS;
-            case FILTER_TYPE_CUSTOM:
-                return ListEvent.ListType.CUSTOM;
-            case FILTER_TYPE_STARRED:
-                return ListEvent.ListType.STARRED;
-            case FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
-                return ListEvent.ListType.PHONE_NUMBERS;
-            case FILTER_TYPE_SINGLE_CONTACT:
-                return ListEvent.ListType.SINGLE_CONTACT;
-            case FILTER_TYPE_ACCOUNT:
-                return ListEvent.ListType.ACCOUNT;
-            case FILTER_TYPE_GROUP_MEMBERS:
-                return ListEvent.ListType.GROUP;
-            case FILTER_TYPE_DEVICE_CONTACTS:
-                return ListEvent.ListType.DEVICE;
-        }
-        return ListEvent.ListType.UNKNOWN_LIST;
-    }
-
-
-    /**
-     * Returns true if this filter is based on data and may become invalid over time.
-     */
-    public boolean isValidationRequired() {
-        return filterType == FILTER_TYPE_ACCOUNT;
-    }
-
-    @Override
-    public String toString() {
-        switch (filterType) {
-            case FILTER_TYPE_DEFAULT:
-                return "default";
-            case FILTER_TYPE_ALL_ACCOUNTS:
-                return "all_accounts";
-            case FILTER_TYPE_CUSTOM:
-                return "custom";
-            case FILTER_TYPE_STARRED:
-                return "starred";
-            case FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
-                return "with_phones";
-            case FILTER_TYPE_SINGLE_CONTACT:
-                return "single";
-            case FILTER_TYPE_ACCOUNT:
-                return "account: " + accountType + (dataSet != null ? "/" + dataSet : "")
-                        + " " + accountName;
-            case FILTER_TYPE_GROUP_MEMBERS:
-                return "group_members";
-            case FILTER_TYPE_DEVICE_CONTACTS:
-                return "device_contacts";
-        }
-        return super.toString();
-    }
-
-    @Override
-    public int compareTo(ContactListFilter another) {
-        int res = accountName.compareTo(another.accountName);
-        if (res != 0) {
-            return res;
-        }
-
-        res = accountType.compareTo(another.accountType);
-        if (res != 0) {
-            return res;
-        }
-
-        return filterType - another.filterType;
-    }
-
-    @Override
-    public int hashCode() {
-        int code = filterType;
-        if (accountType != null) {
-            code = code * 31 + accountType.hashCode();
-        }
-        if (accountName != null) {
-            code = code * 31 + accountName.hashCode();
-        }
-        if (dataSet != null) {
-            code = code * 31 + dataSet.hashCode();
-        }
-        return code;
-    }
-
-    @Override
-    public boolean equals(Object other) {
-        if (this == other) {
-            return true;
-        }
-
-        if (!(other instanceof ContactListFilter)) {
-            return false;
-        }
-
-        ContactListFilter otherFilter = (ContactListFilter) other;
-        if (filterType != otherFilter.filterType
-                || !TextUtils.equals(accountName, otherFilter.accountName)
-                || !TextUtils.equals(accountType, otherFilter.accountType)
-                || !TextUtils.equals(dataSet, otherFilter.dataSet)) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Store the given {@link ContactListFilter} to preferences. If the requested filter is
-     * of type {@link #FILTER_TYPE_SINGLE_CONTACT} then do not save it to preferences because
-     * it is a temporary state.
-     */
-    public static void storeToPreferences(SharedPreferences prefs, ContactListFilter filter) {
-        if (filter != null && filter.filterType == FILTER_TYPE_SINGLE_CONTACT) {
-            return;
-        }
-        prefs.edit()
-            .putInt(KEY_FILTER_TYPE, filter == null ? FILTER_TYPE_DEFAULT : filter.filterType)
-            .putString(KEY_ACCOUNT_NAME, filter == null ? null : filter.accountName)
-            .putString(KEY_ACCOUNT_TYPE, filter == null ? null : filter.accountType)
-            .putString(KEY_DATA_SET, filter == null ? null : filter.dataSet)
-            .apply();
-    }
-
-    /**
-     * Try to obtain ContactListFilter object saved in SharedPreference.
-     * If there's no info there, return ALL filter instead.
-     */
-    public static ContactListFilter restoreDefaultPreferences(SharedPreferences prefs) {
-        ContactListFilter filter = restoreFromPreferences(prefs);
-        if (filter == null) {
-            filter = ContactListFilter.createFilterWithType(FILTER_TYPE_ALL_ACCOUNTS);
-        }
-        // "Group" filter is obsolete and thus is not exposed anymore. The "single contact mode"
-        // should also not be stored in preferences anymore since it is a temporary state.
-        if (filter.filterType == FILTER_TYPE_GROUP ||
-                filter.filterType == FILTER_TYPE_SINGLE_CONTACT) {
-            filter = ContactListFilter.createFilterWithType(FILTER_TYPE_ALL_ACCOUNTS);
-        }
-        return filter;
-    }
-
-    private static ContactListFilter restoreFromPreferences(SharedPreferences prefs) {
-        int filterType = prefs.getInt(KEY_FILTER_TYPE, FILTER_TYPE_DEFAULT);
-        if (filterType == FILTER_TYPE_DEFAULT) {
-            return null;
-        }
-
-        String accountName = prefs.getString(KEY_ACCOUNT_NAME, null);
-        String accountType = prefs.getString(KEY_ACCOUNT_TYPE, null);
-        String dataSet = prefs.getString(KEY_DATA_SET, null);
-        return new ContactListFilter(filterType, accountType, accountName, dataSet, null);
-    }
-
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeInt(filterType);
-        dest.writeString(accountName);
-        dest.writeString(accountType);
-        dest.writeString(dataSet);
-    }
-
-    public static final Parcelable.Creator<ContactListFilter> CREATOR =
-            new Parcelable.Creator<ContactListFilter>() {
-        @Override
-        public ContactListFilter createFromParcel(Parcel source) {
-            int filterType = source.readInt();
-            String accountName = source.readString();
-            String accountType = source.readString();
-            String dataSet = source.readString();
-            return new ContactListFilter(filterType, accountType, accountName, dataSet, null);
-        }
-
-        @Override
-        public ContactListFilter[] newArray(int size) {
-            return new ContactListFilter[size];
-        }
-    };
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    /**
-     * Returns a string that can be used as a stable persistent identifier for this filter.
-     */
-    public String getId() {
-        if (mId == null) {
-            StringBuilder sb = new StringBuilder();
-            sb.append(filterType);
-            if (accountType != null) {
-                sb.append('-').append(accountType);
-            }
-            if (dataSet != null) {
-                sb.append('/').append(dataSet);
-            }
-            if (accountName != null) {
-                sb.append('-').append(accountName.replace('-', '_'));
-            }
-            mId = sb.toString();
-        }
-        return mId;
-    }
-
-    /**
-     * Adds the account query parameters to the given {@code uriBuilder}.
-     *
-     * @throws IllegalStateException if the filter type is not {@link #FILTER_TYPE_ACCOUNT} or
-     * {@link #FILTER_TYPE_GROUP_MEMBERS}.
-     */
-    public Uri.Builder addAccountQueryParameterToUrl(Uri.Builder uriBuilder) {
-        if (filterType != FILTER_TYPE_ACCOUNT
-                && filterType != FILTER_TYPE_GROUP_MEMBERS) {
-            throw new IllegalStateException(
-                    "filterType must be FILTER_TYPE_ACCOUNT or FILER_TYPE_GROUP_MEMBERS");
-        }
-        // null account names are not valid, see ContactsProvider2#appendAccountFromParameter
-        if (accountName != null) {
-            uriBuilder.appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName);
-            uriBuilder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType);
-        }
-        if (dataSet != null) {
-            uriBuilder.appendQueryParameter(RawContacts.DATA_SET, dataSet);
-        }
-        return uriBuilder;
-    }
-
-    public AccountWithDataSet toAccountWithDataSet() {
-        if (filterType == FILTER_TYPE_ACCOUNT || filterType == FILTER_TYPE_DEVICE_CONTACTS) {
-            return new AccountWithDataSet(accountName, accountType, dataSet);
-        } else {
-            throw new IllegalStateException("Cannot create Account from filter type " +
-                    filterTypeToString(filterType));
-        }
-    }
-
-    public String toDebugString() {
-        final StringBuilder builder = new StringBuilder();
-        builder.append("[filter type: " + filterType + " (" + filterTypeToString(filterType) + ")");
-        if (filterType == FILTER_TYPE_ACCOUNT) {
-            builder.append(", accountType: " + accountType)
-                    .append(", accountName: " + accountName)
-                    .append(", dataSet: " + dataSet);
-        }
-        builder.append(", icon: " + icon + "]");
-        return builder.toString();
-    }
-
-    public static final String filterTypeToString(int filterType) {
-        switch (filterType) {
-            case FILTER_TYPE_DEFAULT:
-                return "FILTER_TYPE_DEFAULT";
-            case FILTER_TYPE_ALL_ACCOUNTS:
-                return "FILTER_TYPE_ALL_ACCOUNTS";
-            case FILTER_TYPE_CUSTOM:
-                return "FILTER_TYPE_CUSTOM";
-            case FILTER_TYPE_STARRED:
-                return "FILTER_TYPE_STARRED";
-            case FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
-                return "FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY";
-            case FILTER_TYPE_SINGLE_CONTACT:
-                return "FILTER_TYPE_SINGLE_CONTACT";
-            case FILTER_TYPE_ACCOUNT:
-                return "FILTER_TYPE_ACCOUNT";
-            case FILTER_TYPE_GROUP_MEMBERS:
-                return "FILTER_TYPE_GROUP_MEMBERS";
-            case FILTER_TYPE_DEVICE_CONTACTS:
-                return "FILTER_TYPE_DEVICE_CONTACTS";
-            default:
-                return "(unknown)";
-        }
-    }
-
-    /**
-     * Returns true if this ContactListFilter contains at least one Google account.
-     * (see {@link #isGoogleAccountType)
-     */
-    public boolean isSyncable(List<AccountWithDataSet> accounts) {
-        if (isGoogleAccountType() && filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
-            return true;
-        }
-        // Since we don't know which group is selected until the actual contacts loading, we
-        // consider a custom filter syncable as long as there is a Google account on the device,
-        // and don't check if there is any group that belongs to a Google account is selected.
-        if (filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
-                || filterType == ContactListFilter.FILTER_TYPE_CUSTOM
-                || filterType == ContactListFilter.FILTER_TYPE_DEFAULT) {
-            if (accounts != null && accounts.size() > 0) {
-                // If we're showing all contacts and there is any Google account on the device then
-                // we're syncable.
-                for (AccountWithDataSet account : accounts) {
-                    if (GoogleAccountType.ACCOUNT_TYPE.equals(account.type)
-                            && account.dataSet == null) {
-                        return true;
-                    }
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns the Google accounts (see {@link #isGoogleAccountType) for this ContactListFilter.
-     */
-    public List<Account> getSyncableAccounts(List<AccountWithDataSet> accounts) {
-        final List<Account> syncableAccounts = new ArrayList<>();
-
-        if (isGoogleAccountType() && filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
-            syncableAccounts.add(new Account(accountName, accountType));
-        } else if (filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
-                || filterType == ContactListFilter.FILTER_TYPE_CUSTOM
-                || filterType == ContactListFilter.FILTER_TYPE_DEFAULT) {
-            if (accounts != null && accounts.size() > 0) {
-                for (AccountWithDataSet account : accounts) {
-                    if (GoogleAccountType.ACCOUNT_TYPE.equals(account.type)
-                            && account.dataSet == null) {
-                        syncableAccounts.add(new Account(account.name, account.type));
-                    }
-                }
-            }
-        }
-        return syncableAccounts;
-    }
-
-    /**
-     * Returns true if this ContactListFilter is Google account type. (i.e. where
-     * accountType = "com.google" and dataSet = null)
-     */
-    public boolean isGoogleAccountType() {
-        return GoogleAccountType.ACCOUNT_TYPE.equals(accountType) && dataSet == null;
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactListFilterController.java b/src/com/android/contacts/common/list/ContactListFilterController.java
deleted file mode 100644
index 4d3d6ad..0000000
--- a/src/com/android/contacts/common/list/ContactListFilterController.java
+++ /dev/null
@@ -1,199 +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.common.list;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.preference.PreferenceManager;
-
-import com.android.contacts.common.logging.ListEvent;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Manages {@link ContactListFilter}. All methods must be called from UI thread.
- */
-public abstract class ContactListFilterController {
-
-    // singleton to cache the filter controller
-    private static ContactListFilterControllerImpl sFilterController = null;
-
-    public interface ContactListFilterListener {
-        void onContactListFilterChanged();
-    }
-
-    public static ContactListFilterController getInstance(Context context) {
-        // We may need to synchronize this in the future if background task will call this.
-        if (sFilterController == null) {
-            sFilterController = new ContactListFilterControllerImpl(context);
-        }
-        return sFilterController;
-    }
-
-    public abstract void addListener(ContactListFilterListener listener);
-
-    public abstract void removeListener(ContactListFilterListener listener);
-
-    /**
-     * Return the currently-active filter.
-     */
-    public abstract ContactListFilter getFilter();
-
-    public abstract int getFilterListType();
-
-    /** Whether the persisted filter is a custom filter. */
-    public abstract boolean isCustomFilterPersisted();
-
-    /** Returns the persisted filter. */
-    public abstract ContactListFilter getPersistedFilter();
-
-    /**
-     * @param filter the filter
-     * @param persistent True when the given filter should be saved soon. False when the filter
-     * should not be saved. The latter case may happen when some Intent requires a certain type of
-     * UI (e.g. single contact) temporarily.
-     */
-    public abstract void setContactListFilter(ContactListFilter filter, boolean persistent);
-
-    public abstract void selectCustomFilter();
-
-    /**
-     * Checks if the current filter is valid and reset the filter if not. It may happen when
-     * an account is removed while the filter points to the account with
-     * {@link ContactListFilter#FILTER_TYPE_ACCOUNT} type, for example. It may also happen if
-     * the current filter is {@link ContactListFilter#FILTER_TYPE_SINGLE_CONTACT}, in
-     * which case, we should switch to the last saved filter in {@link SharedPreferences}.
-     */
-    public abstract void checkFilterValidity(boolean notifyListeners);
-}
-
-/**
- * Stores the {@link ContactListFilter} selected by the user and saves it to
- * {@link SharedPreferences} if necessary.
- */
-class ContactListFilterControllerImpl extends ContactListFilterController {
-    private final Context mContext;
-    private final List<ContactListFilterListener> mListeners =
-            new ArrayList<ContactListFilterListener>();
-    private ContactListFilter mFilter;
-
-    public ContactListFilterControllerImpl(Context context) {
-        mContext = context.getApplicationContext();
-        mFilter = ContactListFilter.restoreDefaultPreferences(getSharedPreferences());
-        checkFilterValidity(true /* notify listeners */);
-    }
-
-    @Override
-    public void addListener(ContactListFilterListener listener) {
-        mListeners.add(listener);
-    }
-
-    @Override
-    public void removeListener(ContactListFilterListener listener) {
-        mListeners.remove(listener);
-    }
-
-    @Override
-    public ContactListFilter getFilter() {
-        return mFilter;
-    }
-
-    @Override
-    public int getFilterListType() {
-        return mFilter == null ? ListEvent.ListType.UNKNOWN_LIST : mFilter.toListType();
-    }
-
-    @Override
-    public boolean isCustomFilterPersisted() {
-        final ContactListFilter filter = getPersistedFilter();
-        return filter != null && filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM;
-    }
-
-    @Override
-    public ContactListFilter getPersistedFilter() {
-        return ContactListFilter.restoreDefaultPreferences(getSharedPreferences());
-    }
-
-    private SharedPreferences getSharedPreferences() {
-        return PreferenceManager.getDefaultSharedPreferences(mContext);
-    }
-
-    @Override
-    public void setContactListFilter(ContactListFilter filter, boolean persistent) {
-        setContactListFilter(filter, persistent, /* notifyListeners */ true);
-    }
-
-    private void setContactListFilter(ContactListFilter filter, boolean persistent,
-            boolean notifyListeners) {
-        if (!filter.equals(mFilter)) {
-            mFilter = filter;
-            if (persistent) {
-                ContactListFilter.storeToPreferences(getSharedPreferences(), mFilter);
-            }
-            if (notifyListeners && !mListeners.isEmpty()) {
-                notifyContactListFilterChanged();
-            }
-        }
-    }
-
-    @Override
-    public void selectCustomFilter() {
-        setContactListFilter(ContactListFilter.createFilterWithType(
-                ContactListFilter.FILTER_TYPE_CUSTOM), /* persistent */ true);
-    }
-
-    private void notifyContactListFilterChanged() {
-        for (ContactListFilterListener listener : mListeners) {
-            listener.onContactListFilterChanged();
-        }
-    }
-
-    @Override
-    public void checkFilterValidity(boolean notifyListeners) {
-        if (mFilter == null) {
-            return;
-        }
-
-        switch (mFilter.filterType) {
-            case ContactListFilter.FILTER_TYPE_SINGLE_CONTACT:
-                setContactListFilter(
-                        ContactListFilter.restoreDefaultPreferences(getSharedPreferences()),
-                        false, notifyListeners);
-                break;
-            case ContactListFilter.FILTER_TYPE_ACCOUNT:
-                if (!filterAccountExists()) {
-                    // The current account filter points to invalid account. Use "all" filter
-                    // instead.
-                    setContactListFilter(ContactListFilter.createFilterWithType(
-                            ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS), true, notifyListeners);
-                }
-                break;
-        }
-    }
-
-    /**
-     * @return true if the Account for the current filter exists.
-     */
-    private boolean filterAccountExists() {
-        final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(mContext);
-        final AccountWithDataSet filterAccount = new AccountWithDataSet(
-                mFilter.accountName, mFilter.accountType, mFilter.dataSet);
-        return accountTypeManager.contains(filterAccount, /* contactWritableOnly */ false);
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactListFilterView.java b/src/com/android/contacts/common/list/ContactListFilterView.java
deleted file mode 100644
index 76e43aa..0000000
--- a/src/com/android/contacts/common/list/ContactListFilterView.java
+++ /dev/null
@@ -1,164 +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.common.list;
-
-import android.content.Context;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.View;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.RadioButton;
-import android.widget.TextView;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
-
-/**
- * Contact list filter parameters.
- */
-public class ContactListFilterView extends LinearLayout {
-
-    private static final String TAG = ContactListFilterView.class.getSimpleName();
-
-    private ImageView mIcon;
-    private TextView mAccountType;
-    private TextView mAccountUserName;
-    private RadioButton mRadioButton;
-    private ContactListFilter mFilter;
-    private boolean mSingleAccount;
-
-    public ContactListFilterView(Context context) {
-        super(context);
-    }
-
-    public ContactListFilterView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    public void setContactListFilter(ContactListFilter filter) {
-        mFilter = filter;
-    }
-
-    public ContactListFilter getContactListFilter() {
-        return mFilter;
-    }
-
-    public void setSingleAccount(boolean flag) {
-        this.mSingleAccount = flag;
-    }
-
-    @Override
-    public void setActivated(boolean activated) {
-        super.setActivated(activated);
-        if (mRadioButton != null) {
-            mRadioButton.setChecked(activated);
-        } else {
-            // We're guarding against null-pointer exceptions,
-            // but otherwise this code is not expected to work
-            // properly if the button hasn't been initialized.
-            Log.wtf(TAG, "radio-button cannot be activated because it is null");
-        }
-        setContentDescription(generateContentDescription());
-    }
-
-    public boolean isChecked() {
-        return mRadioButton.isChecked();
-    }
-
-    public void bindView(AccountTypeManager accountTypes) {
-        if (mAccountType == null) {
-            mIcon = (ImageView) findViewById(R.id.icon);
-            mAccountType = (TextView) findViewById(R.id.accountType);
-            mAccountUserName = (TextView) findViewById(R.id.accountUserName);
-            mRadioButton = (RadioButton) findViewById(R.id.radioButton);
-            mRadioButton.setChecked(isActivated());
-        }
-
-        if (mFilter == null) {
-            mAccountType.setText(R.string.contactsList);
-            return;
-        }
-
-        mAccountUserName.setVisibility(View.GONE);
-        switch (mFilter.filterType) {
-            case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS: {
-                bindView(0, R.string.list_filter_all_accounts);
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_STARRED: {
-                bindView(R.drawable.ic_menu_star_holo_light, R.string.list_filter_all_starred);
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_CUSTOM: {
-                bindView(0, R.string.list_filter_customize);
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY: {
-                bindView(0, R.string.list_filter_phones);
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_SINGLE_CONTACT: {
-                bindView(0, R.string.list_filter_single);
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_ACCOUNT: {
-                mAccountUserName.setVisibility(View.VISIBLE);
-                mIcon.setVisibility(View.VISIBLE);
-                if (mFilter.icon != null) {
-                    mIcon.setImageDrawable(mFilter.icon);
-                } else {
-                    mIcon.setImageResource(R.drawable.unknown_source);
-                }
-                final AccountType accountType =
-                        accountTypes.getAccountType(mFilter.accountType, mFilter.dataSet);
-                mAccountUserName.setText(mFilter.accountName);
-                mAccountType.setText(accountType.getDisplayLabel(getContext()));
-                break;
-            }
-        }
-        setContentDescription(generateContentDescription());
-    }
-
-    private void bindView(int iconResource, int textResource) {
-        if (iconResource != 0) {
-            mIcon.setVisibility(View.VISIBLE);
-            mIcon.setImageResource(iconResource);
-        } else {
-            mIcon.setVisibility(View.GONE);
-        }
-
-        mAccountType.setText(textResource);
-    }
-
-    String generateContentDescription() {
-        final StringBuilder sb = new StringBuilder();
-        if (!TextUtils.isEmpty(mAccountType.getText())) {
-            sb.append(mAccountType.getText());
-        }
-        if (!TextUtils.isEmpty(mAccountUserName.getText())) {
-            if (sb.length() > 0) {
-                sb.append(" ");
-            }
-            sb.append(mAccountUserName.getText());
-        }
-        return getContext().getString(isActivated() ? R.string.account_filter_view_checked :
-                R.string.account_filter_view_not_checked, sb.toString());
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactListItemView.java b/src/com/android/contacts/common/list/ContactListItemView.java
deleted file mode 100644
index d20c6e8..0000000
--- a/src/com/android/contacts/common/list/ContactListItemView.java
+++ /dev/null
@@ -1,1895 +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.common.list;
-
-import android.content.Context;
-import android.content.res.ColorStateList;
-import android.content.res.TypedArray;
-import android.database.CharArrayBuffer;
-import android.database.Cursor;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Rect;
-import android.graphics.Typeface;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.SearchSnippets;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.content.res.ResourcesCompat;
-import android.support.v4.graphics.drawable.DrawableCompat;
-import android.support.v7.widget.AppCompatCheckBox;
-import android.support.v7.widget.AppCompatImageButton;
-import android.text.Spannable;
-import android.text.SpannableString;
-import android.text.TextUtils;
-import android.text.TextUtils.TruncateAt;
-import android.util.AttributeSet;
-import android.util.TypedValue;
-import android.view.Gravity;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AbsListView.SelectionBoundsAdjuster;
-import android.widget.ImageView;
-import android.widget.ImageView.ScaleType;
-import android.widget.QuickContactBadge;
-import android.widget.TextView;
-
-import com.android.contacts.common.ContactPresenceIconUtil;
-import com.android.contacts.common.ContactStatusUtil;
-import com.android.contacts.common.R;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.format.TextHighlighter;
-import com.android.contacts.common.util.ContactDisplayUtils;
-import com.android.contacts.common.util.SearchUtil;
-import com.android.contacts.common.util.ViewUtil;
-
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * A custom view for an item in the contact list.
- * The view contains the contact's photo, a set of text views (for name, status, etc...) and
- * icons for presence and call.
- * The view uses no XML file for layout and all the measurements and layouts are done
- * in the onMeasure and onLayout methods.
- *
- * The layout puts the contact's photo on the right side of the view, the call icon (if present)
- * to the left of the photo, the text lines are aligned to the left and the presence icon (if
- * present) is set to the left of the status line.
- *
- * The layout also supports a header (used as a header of a group of contacts) that is above the
- * contact's data and a divider between contact view.
- */
-
-public class ContactListItemView extends ViewGroup
-        implements SelectionBoundsAdjuster {
-
-    private static final String TAG = "ContactListItemView";
-
-    // Style values for layout and appearance
-    // The initialized values are defaults if none is provided through xml.
-    private int mPreferredHeight = 0;
-    private int mGapBetweenImageAndText = 0;
-    private int mGapBetweenIndexerAndImage = 0;
-    private int mGapBetweenLabelAndData = 0;
-    private int mPresenceIconMargin = 4;
-    private int mPresenceIconSize = 16;
-    private int mTextIndent = 0;
-    private int mTextOffsetTop;
-    private int mAvatarOffsetTop;
-    private int mNameTextViewTextSize;
-    private int mHeaderWidth;
-    private Drawable mActivatedBackgroundDrawable;
-    private int mVideoCallIconSize = 32;
-    private int mVideoCallIconMargin = 16;
-    private int mGapFromScrollBar = 20;
-
-    // Set in onLayout. Represent left and right position of the View on the screen.
-    private int mLeftOffset;
-    private int mRightOffset;
-
-    /**
-     * Used with {@link #mLabelView}, specifying the width ratio between label and data.
-     */
-    private int mLabelViewWidthWeight = 3;
-    /**
-     * Used with {@link #mDataView}, specifying the width ratio between label and data.
-     */
-    private int mDataViewWidthWeight = 5;
-
-    protected static class HighlightSequence {
-        private final int start;
-        private final int end;
-
-        HighlightSequence(int start, int end) {
-            this.start = start;
-            this.end = end;
-        }
-    }
-
-    private ArrayList<HighlightSequence> mNameHighlightSequence;
-    private ArrayList<HighlightSequence> mNumberHighlightSequence;
-
-    // Highlighting prefix for names.
-    private String mHighlightedPrefix;
-
-    /**
-     * Used to notify listeners when a video call icon is clicked.
-     */
-    private PhoneNumberListAdapter.Listener mPhoneNumberListAdapterListener;
-
-    /**
-     * Indicates whether to show the "video call" icon, used to initiate a video call.
-     */
-    private boolean mShowVideoCallIcon = false;
-
-    /**
-     * Indicates whether the view should leave room for the "video call" icon.
-     */
-    private boolean mSupportVideoCallIcon = false;
-
-    /**
-     * Where to put contact photo. This affects the other Views' layout or look-and-feel.
-     *
-     * TODO: replace enum with int constants
-     */
-    public enum PhotoPosition {
-        LEFT,
-        RIGHT
-    }
-
-    static public final PhotoPosition getDefaultPhotoPosition(boolean opposite) {
-        final Locale locale = Locale.getDefault();
-        final int layoutDirection = TextUtils.getLayoutDirectionFromLocale(locale);
-        switch (layoutDirection) {
-            case View.LAYOUT_DIRECTION_RTL:
-                return (opposite ? PhotoPosition.LEFT : PhotoPosition.RIGHT);
-            case View.LAYOUT_DIRECTION_LTR:
-            default:
-                return (opposite ? PhotoPosition.RIGHT : PhotoPosition.LEFT);
-        }
-    }
-
-    private PhotoPosition mPhotoPosition = getDefaultPhotoPosition(false /* normal/non opposite */);
-
-    // Header layout data
-    private View mHeaderView;
-    private boolean mIsSectionHeaderEnabled;
-
-    // The views inside the contact view
-    private boolean mQuickContactEnabled = true;
-    private QuickContactBadge mQuickContact;
-    private ImageView mPhotoView;
-    private TextView mNameTextView;
-    private TextView mPhoneticNameTextView;
-    private TextView mLabelView;
-    private TextView mDataView;
-    private TextView mSnippetView;
-    private TextView mStatusView;
-    private ImageView mPresenceIcon;
-    private AppCompatCheckBox mCheckBox;
-    private AppCompatImageButton mDeleteImageButton;
-    private ImageView mVideoCallIcon;
-    private ImageView mWorkProfileIcon;
-
-    private ColorStateList mSecondaryTextColor;
-
-    private int mDefaultPhotoViewSize = 0;
-    /**
-     * Can be effective even when {@link #mPhotoView} is null, as we want to have horizontal padding
-     * to align other data in this View.
-     */
-    private int mPhotoViewWidth;
-    /**
-     * Can be effective even when {@link #mPhotoView} is null, as we want to have vertical padding.
-     */
-    private int mPhotoViewHeight;
-
-    /**
-     * Only effective when {@link #mPhotoView} is null.
-     * When true all the Views on the right side of the photo should have horizontal padding on
-     * those left assuming there is a photo.
-     */
-    private boolean mKeepHorizontalPaddingForPhotoView;
-    /**
-     * Only effective when {@link #mPhotoView} is null.
-     */
-    private boolean mKeepVerticalPaddingForPhotoView;
-
-    /**
-     * True when {@link #mPhotoViewWidth} and {@link #mPhotoViewHeight} are ready for being used.
-     * False indicates those values should be updated before being used in position calculation.
-     */
-    private boolean mPhotoViewWidthAndHeightAreReady = false;
-
-    private int mNameTextViewHeight;
-    private int mNameTextViewTextColor = Color.BLACK;
-    private int mPhoneticNameTextViewHeight;
-    private int mLabelViewHeight;
-    private int mDataViewHeight;
-    private int mSnippetTextViewHeight;
-    private int mStatusTextViewHeight;
-    private int mCheckBoxHeight;
-    private int mCheckBoxWidth;
-    private int mDeleteImageButtonHeight;
-    private int mDeleteImageButtonWidth;
-
-    // Holds Math.max(mLabelTextViewHeight, mDataViewHeight), assuming Label and Data share the
-    // same row.
-    private int mLabelAndDataViewMaxHeight;
-
-    // TODO: some TextView fields are using CharArrayBuffer while some are not. Determine which is
-    // more efficient for each case or in general, and simplify the whole implementation.
-    // Note: if we're sure MARQUEE will be used every time, there's no reason to use
-    // CharArrayBuffer, since MARQUEE requires Span and thus we need to copy characters inside the
-    // buffer to Spannable once, while CharArrayBuffer is for directly applying char array to
-    // TextView without any modification.
-    private final CharArrayBuffer mDataBuffer = new CharArrayBuffer(128);
-    private final CharArrayBuffer mPhoneticNameBuffer = new CharArrayBuffer(128);
-
-    private boolean mActivatedStateSupported;
-    private boolean mAdjustSelectionBoundsEnabled = true;
-
-    private Rect mBoundsWithoutHeader = new Rect();
-
-    /** A helper used to highlight a prefix in a text field. */
-    private final TextHighlighter mTextHighlighter;
-    private CharSequence mUnknownNameText;
-    private int mPosition;
-
-    public ContactListItemView(Context context) {
-        super(context);
-
-        mTextHighlighter = new TextHighlighter(Typeface.BOLD);
-        mNameHighlightSequence = new ArrayList<HighlightSequence>();
-        mNumberHighlightSequence = new ArrayList<HighlightSequence>();
-    }
-
-    public ContactListItemView(Context context, AttributeSet attrs, boolean supportVideoCallIcon) {
-        this(context, attrs);
-
-        mSupportVideoCallIcon = supportVideoCallIcon;
-    }
-
-    public ContactListItemView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-
-        TypedArray a;
-
-        if (R.styleable.ContactListItemView != null) {
-            // Read all style values
-            a = getContext().obtainStyledAttributes(attrs, R.styleable.ContactListItemView);
-            mPreferredHeight = a.getDimensionPixelSize(
-                    R.styleable.ContactListItemView_list_item_height, mPreferredHeight);
-            mActivatedBackgroundDrawable = a.getDrawable(
-                    R.styleable.ContactListItemView_activated_background);
-
-            mGapBetweenImageAndText = a.getDimensionPixelOffset(
-                    R.styleable.ContactListItemView_list_item_gap_between_image_and_text,
-                    mGapBetweenImageAndText);
-            mGapBetweenIndexerAndImage = a.getDimensionPixelOffset(
-                    R.styleable.ContactListItemView_list_item_gap_between_indexer_and_image,
-                    mGapBetweenIndexerAndImage);
-            mGapBetweenLabelAndData = a.getDimensionPixelOffset(
-                    R.styleable.ContactListItemView_list_item_gap_between_label_and_data,
-                    mGapBetweenLabelAndData);
-            mPresenceIconMargin = a.getDimensionPixelOffset(
-                    R.styleable.ContactListItemView_list_item_presence_icon_margin,
-                    mPresenceIconMargin);
-            mPresenceIconSize = a.getDimensionPixelOffset(
-                    R.styleable.ContactListItemView_list_item_presence_icon_size,
-                    mPresenceIconSize);
-            mDefaultPhotoViewSize = a.getDimensionPixelOffset(
-                    R.styleable.ContactListItemView_list_item_photo_size, mDefaultPhotoViewSize);
-            mTextIndent = a.getDimensionPixelOffset(
-                    R.styleable.ContactListItemView_list_item_text_indent, mTextIndent);
-            mTextOffsetTop = a.getDimensionPixelOffset(
-                    R.styleable.ContactListItemView_list_item_text_offset_top, mTextOffsetTop);
-            mAvatarOffsetTop = a.getDimensionPixelOffset(
-                    R.styleable.ContactListItemView_list_item_avatar_offset_top, mAvatarOffsetTop);
-            mDataViewWidthWeight = a.getInteger(
-                    R.styleable.ContactListItemView_list_item_data_width_weight,
-                    mDataViewWidthWeight);
-            mLabelViewWidthWeight = a.getInteger(
-                    R.styleable.ContactListItemView_list_item_label_width_weight,
-                    mLabelViewWidthWeight);
-            mNameTextViewTextColor = a.getColor(
-                    R.styleable.ContactListItemView_list_item_name_text_color,
-                    mNameTextViewTextColor);
-            mNameTextViewTextSize = (int) a.getDimension(
-                    R.styleable.ContactListItemView_list_item_name_text_size,
-                    (int) getResources().getDimension(R.dimen.contact_browser_list_item_text_size));
-            mVideoCallIconSize = a.getDimensionPixelOffset(
-                    R.styleable.ContactListItemView_list_item_video_call_icon_size,
-                    mVideoCallIconSize);
-            mVideoCallIconMargin = a.getDimensionPixelOffset(
-                    R.styleable.ContactListItemView_list_item_video_call_icon_margin,
-                    mVideoCallIconMargin);
-
-
-            setPaddingRelative(
-                    a.getDimensionPixelOffset(
-                            R.styleable.ContactListItemView_list_item_padding_left, 0),
-                    a.getDimensionPixelOffset(
-                            R.styleable.ContactListItemView_list_item_padding_top, 0),
-                    a.getDimensionPixelOffset(
-                            R.styleable.ContactListItemView_list_item_padding_right, 0),
-                    a.getDimensionPixelOffset(
-                            R.styleable.ContactListItemView_list_item_padding_bottom, 0));
-
-            a.recycle();
-        }
-
-        mTextHighlighter = new TextHighlighter(Typeface.BOLD);
-
-        if (R.styleable.Theme != null) {
-            a = getContext().obtainStyledAttributes(R.styleable.Theme);
-            mSecondaryTextColor = a.getColorStateList(R.styleable.Theme_android_textColorSecondary);
-            a.recycle();
-        }
-
-        mHeaderWidth =
-                getResources().getDimensionPixelSize(R.dimen.contact_list_section_header_width);
-
-        if (mActivatedBackgroundDrawable != null) {
-            mActivatedBackgroundDrawable.setCallback(this);
-        }
-
-        mNameHighlightSequence = new ArrayList<HighlightSequence>();
-        mNumberHighlightSequence = new ArrayList<HighlightSequence>();
-
-        setLayoutDirection(View.LAYOUT_DIRECTION_LOCALE);
-    }
-
-    public void setUnknownNameText(CharSequence unknownNameText) {
-        mUnknownNameText = unknownNameText;
-    }
-
-    public void setQuickContactEnabled(boolean flag) {
-        mQuickContactEnabled = flag;
-    }
-
-    /**
-     * Sets whether the video calling icon is shown.  For the video calling icon to be shown,
-     * {@link #mSupportVideoCallIcon} must be {@code true}.
-     *
-     * @param showVideoCallIcon {@code true} if the video calling icon is shown, {@code false}
-     *      otherwise.
-     * @param listener Listener to notify when the video calling icon is clicked.
-     * @param position The position in the adapater of the video calling icon.
-     */
-    public void setShowVideoCallIcon(boolean showVideoCallIcon,
-            PhoneNumberListAdapter.Listener listener, int position) {
-        mShowVideoCallIcon = showVideoCallIcon;
-        mPhoneNumberListAdapterListener = listener;
-        mPosition = position;
-
-        if (mShowVideoCallIcon) {
-            if (mVideoCallIcon == null) {
-                mVideoCallIcon = new ImageView(getContext());
-                addView(mVideoCallIcon);
-            }
-            mVideoCallIcon.setContentDescription(getContext().getString(
-                    R.string.description_search_video_call));
-            mVideoCallIcon.setImageResource(R.drawable.ic_search_video_call);
-            mVideoCallIcon.setScaleType(ScaleType.CENTER);
-            mVideoCallIcon.setVisibility(View.VISIBLE);
-            mVideoCallIcon.setOnClickListener(new OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    // Inform the adapter that the video calling icon was clicked.
-                    if (mPhoneNumberListAdapterListener != null) {
-                        mPhoneNumberListAdapterListener.onVideoCallIconClicked(mPosition);
-                    }
-                }
-            });
-        } else {
-            if (mVideoCallIcon != null) {
-                mVideoCallIcon.setVisibility(View.GONE);
-            }
-        }
-    }
-
-    /**
-     * Sets whether the view supports a video calling icon.  This is independent of whether the view
-     * is actually showing an icon.  Support for the video calling icon ensures that the layout
-     * leaves space for the video icon, should it be shown.
-     *
-     * @param supportVideoCallIcon {@code true} if the video call icon is supported, {@code false}
-     *      otherwise.
-     */
-    public void setSupportVideoCallIcon(boolean supportVideoCallIcon) {
-        mSupportVideoCallIcon = supportVideoCallIcon;
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        // We will match parent's width and wrap content vertically, but make sure
-        // height is no less than listPreferredItemHeight.
-        final int specWidth = resolveSize(0, widthMeasureSpec);
-        final int preferredHeight = mPreferredHeight;
-
-        mNameTextViewHeight = 0;
-        mPhoneticNameTextViewHeight = 0;
-        mLabelViewHeight = 0;
-        mDataViewHeight = 0;
-        mLabelAndDataViewMaxHeight = 0;
-        mSnippetTextViewHeight = 0;
-        mStatusTextViewHeight = 0;
-        mCheckBoxWidth = 0;
-        mCheckBoxHeight = 0;
-        mDeleteImageButtonWidth = 0;
-        mDeleteImageButtonHeight = 0;
-
-        ensurePhotoViewSize();
-
-        // Width each TextView is able to use.
-        int effectiveWidth;
-        // All the other Views will honor the photo, so available width for them may be shrunk.
-        if (mPhotoViewWidth > 0 || mKeepHorizontalPaddingForPhotoView) {
-            effectiveWidth = specWidth - getPaddingLeft() - getPaddingRight()
-                    - (mPhotoViewWidth + mGapBetweenImageAndText + mGapBetweenIndexerAndImage);
-        } else {
-            effectiveWidth = specWidth - getPaddingLeft() - getPaddingRight();
-        }
-
-        if (mIsSectionHeaderEnabled) {
-            effectiveWidth -= mHeaderWidth;
-        }
-
-        if (mSupportVideoCallIcon) {
-            effectiveWidth -= (mVideoCallIconSize + mVideoCallIconMargin);
-        }
-
-        // Go over all visible text views and measure actual width of each of them.
-        // Also calculate their heights to get the total height for this entire view.
-
-        if (isVisible(mCheckBox)) {
-            mCheckBox.measure(
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
-            mCheckBoxWidth = mCheckBox.getMeasuredWidth();
-            mCheckBoxHeight = mCheckBox.getMeasuredHeight();
-            effectiveWidth -= mCheckBoxWidth + mGapBetweenImageAndText;
-        }
-
-        if (isVisible(mDeleteImageButton)) {
-            mDeleteImageButton.measure(
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
-            mDeleteImageButtonWidth = mDeleteImageButton.getMeasuredWidth();
-            mDeleteImageButtonHeight = mDeleteImageButton.getMeasuredHeight();
-            effectiveWidth -= mDeleteImageButtonWidth + mGapBetweenImageAndText;
-        }
-
-        if (isVisible(mNameTextView)) {
-            // Calculate width for name text - this parallels similar measurement in onLayout.
-            int nameTextWidth = effectiveWidth;
-            if (mPhotoPosition != PhotoPosition.LEFT) {
-                nameTextWidth -= mTextIndent;
-            }
-            mNameTextView.measure(
-                    MeasureSpec.makeMeasureSpec(nameTextWidth, MeasureSpec.EXACTLY),
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
-            mNameTextViewHeight = mNameTextView.getMeasuredHeight();
-        }
-
-        if (isVisible(mPhoneticNameTextView)) {
-            mPhoneticNameTextView.measure(
-                    MeasureSpec.makeMeasureSpec(effectiveWidth, MeasureSpec.EXACTLY),
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
-            mPhoneticNameTextViewHeight = mPhoneticNameTextView.getMeasuredHeight();
-        }
-
-        // If both data (phone number/email address) and label (type like "MOBILE") are quite long,
-        // we should ellipsize both using appropriate ratio.
-        final int dataWidth;
-        final int labelWidth;
-        if (isVisible(mDataView)) {
-            if (isVisible(mLabelView)) {
-                final int totalWidth = effectiveWidth - mGapBetweenLabelAndData;
-                dataWidth = ((totalWidth * mDataViewWidthWeight)
-                        / (mDataViewWidthWeight + mLabelViewWidthWeight));
-                labelWidth = ((totalWidth * mLabelViewWidthWeight) /
-                        (mDataViewWidthWeight + mLabelViewWidthWeight));
-            } else {
-                dataWidth = effectiveWidth;
-                labelWidth = 0;
-            }
-        } else {
-            dataWidth = 0;
-            if (isVisible(mLabelView)) {
-                labelWidth = effectiveWidth;
-            } else {
-                labelWidth = 0;
-            }
-        }
-
-        if (isVisible(mDataView)) {
-            mDataView.measure(MeasureSpec.makeMeasureSpec(dataWidth, MeasureSpec.EXACTLY),
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
-            mDataViewHeight = mDataView.getMeasuredHeight();
-        }
-
-        if (isVisible(mLabelView)) {
-            mLabelView.measure(MeasureSpec.makeMeasureSpec(labelWidth, MeasureSpec.AT_MOST),
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
-            mLabelViewHeight = mLabelView.getMeasuredHeight();
-        }
-        mLabelAndDataViewMaxHeight = Math.max(mLabelViewHeight, mDataViewHeight);
-
-        if (isVisible(mSnippetView)) {
-            mSnippetView.measure(
-                    MeasureSpec.makeMeasureSpec(effectiveWidth, MeasureSpec.EXACTLY),
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
-            mSnippetTextViewHeight = mSnippetView.getMeasuredHeight();
-        }
-
-        // Status view height is the biggest of the text view and the presence icon
-        if (isVisible(mPresenceIcon)) {
-            mPresenceIcon.measure(
-                    MeasureSpec.makeMeasureSpec(mPresenceIconSize, MeasureSpec.EXACTLY),
-                    MeasureSpec.makeMeasureSpec(mPresenceIconSize, MeasureSpec.EXACTLY));
-            mStatusTextViewHeight = mPresenceIcon.getMeasuredHeight();
-        }
-
-        if (mSupportVideoCallIcon && isVisible(mVideoCallIcon)) {
-            mVideoCallIcon.measure(
-                    MeasureSpec.makeMeasureSpec(mVideoCallIconSize, MeasureSpec.EXACTLY),
-                    MeasureSpec.makeMeasureSpec(mVideoCallIconSize, MeasureSpec.EXACTLY));
-        }
-
-        if (isVisible(mWorkProfileIcon)) {
-            mWorkProfileIcon.measure(
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
-            mNameTextViewHeight =
-                    Math.max(mNameTextViewHeight, mWorkProfileIcon.getMeasuredHeight());
-        }
-
-        if (isVisible(mStatusView)) {
-            // Presence and status are in a same row, so status will be affected by icon size.
-            final int statusWidth;
-            if (isVisible(mPresenceIcon)) {
-                statusWidth = (effectiveWidth - mPresenceIcon.getMeasuredWidth()
-                        - mPresenceIconMargin);
-            } else {
-                statusWidth = effectiveWidth;
-            }
-            mStatusView.measure(MeasureSpec.makeMeasureSpec(statusWidth, MeasureSpec.EXACTLY),
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
-            mStatusTextViewHeight =
-                    Math.max(mStatusTextViewHeight, mStatusView.getMeasuredHeight());
-        }
-
-        // Calculate height including padding.
-        int height = (mNameTextViewHeight + mPhoneticNameTextViewHeight +
-                mLabelAndDataViewMaxHeight +
-                mSnippetTextViewHeight + mStatusTextViewHeight);
-
-        // Make sure the height is at least as high as the photo
-        height = Math.max(height, mPhotoViewHeight + getPaddingBottom() + getPaddingTop());
-
-        // Make sure height is at least the preferred height
-        height = Math.max(height, preferredHeight);
-
-        // Measure the header if it is visible.
-        if (mHeaderView != null && mHeaderView.getVisibility() == VISIBLE) {
-            mHeaderView.measure(
-                    MeasureSpec.makeMeasureSpec(mHeaderWidth, MeasureSpec.EXACTLY),
-                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
-        }
-
-        setMeasuredDimension(specWidth, height);
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        final int height = bottom - top;
-        final int width = right - left;
-
-        // Determine the vertical bounds by laying out the header first.
-        int topBound = 0;
-        int bottomBound = height;
-        int leftBound = getPaddingLeft();
-        int rightBound = width - getPaddingRight();
-
-        final boolean isLayoutRtl = ViewUtil.isViewLayoutRtl(this);
-
-        // Put the section header on the left side of the contact view.
-        if (mIsSectionHeaderEnabled) {
-            if (mHeaderView != null) {
-                int headerHeight = mHeaderView.getMeasuredHeight();
-                int headerTopBound = (bottomBound + topBound - headerHeight) / 2 + mTextOffsetTop;
-
-                mHeaderView.layout(
-                        isLayoutRtl ? rightBound - mHeaderWidth : leftBound,
-                        headerTopBound,
-                        isLayoutRtl ? rightBound : leftBound + mHeaderWidth,
-                        headerTopBound + headerHeight);
-            }
-            if (isLayoutRtl) {
-                rightBound -= mHeaderWidth;
-            } else {
-                leftBound += mHeaderWidth;
-            }
-        }
-
-        mBoundsWithoutHeader.set(left + leftBound, topBound, left + rightBound, bottomBound);
-        mLeftOffset = left + leftBound;
-        mRightOffset = left + rightBound;
-        if (isLayoutRtl) {
-            rightBound -= mGapBetweenIndexerAndImage;
-        } else {
-            leftBound += mGapBetweenIndexerAndImage;
-        }
-
-        if (mActivatedStateSupported && isActivated()) {
-            mActivatedBackgroundDrawable.setBounds(mBoundsWithoutHeader);
-        }
-
-        if (isVisible(mCheckBox)) {
-            final int photoTop = topBound + (bottomBound - topBound - mCheckBoxHeight) / 2;
-            if (mPhotoPosition == PhotoPosition.LEFT) {
-                mCheckBox.layout(rightBound - mGapFromScrollBar - mCheckBoxWidth,
-                        photoTop,
-                        rightBound - mGapFromScrollBar,
-                        photoTop + mCheckBoxHeight);
-            } else {
-                mCheckBox.layout(leftBound + mGapFromScrollBar,
-                        photoTop,
-                        leftBound + mGapFromScrollBar + mCheckBoxWidth,
-                        photoTop + mCheckBoxHeight);
-            }
-        }
-
-        if (isVisible(mDeleteImageButton)) {
-            final int photoTop = topBound + (bottomBound - topBound - mDeleteImageButtonHeight) / 2;
-            final int mDeleteImageButtonSize = mDeleteImageButtonHeight > mDeleteImageButtonWidth
-                    ? mDeleteImageButtonHeight : mDeleteImageButtonWidth;
-            if (mPhotoPosition == PhotoPosition.LEFT) {
-                mDeleteImageButton.layout(rightBound - mDeleteImageButtonSize,
-                        photoTop,
-                        rightBound,
-                        photoTop + mDeleteImageButtonSize);
-                rightBound -= mDeleteImageButtonSize;
-            } else {
-                mDeleteImageButton.layout(leftBound,
-                        photoTop,
-                        leftBound + mDeleteImageButtonSize,
-                        photoTop + mDeleteImageButtonSize);
-                leftBound += mDeleteImageButtonSize;
-            }
-        }
-
-        final View photoView = mQuickContact != null ? mQuickContact : mPhotoView;
-        if (mPhotoPosition == PhotoPosition.LEFT) {
-            // Photo is the left most view. All the other Views should on the right of the photo.
-            if (photoView != null) {
-                // Center the photo vertically
-                final int photoTop = topBound + (bottomBound - topBound - mPhotoViewHeight) / 2
-                        + mAvatarOffsetTop;
-                photoView.layout(
-                        leftBound,
-                        photoTop,
-                        leftBound + mPhotoViewWidth,
-                        photoTop + mPhotoViewHeight);
-                leftBound += mPhotoViewWidth + mGapBetweenImageAndText;
-            } else if (mKeepHorizontalPaddingForPhotoView) {
-                // Draw nothing but keep the padding.
-                leftBound += mPhotoViewWidth + mGapBetweenImageAndText;
-            }
-        } else {
-            // Photo is the right most view. Right bound should be adjusted that way.
-            if (photoView != null) {
-                // Center the photo vertically
-                final int photoTop = topBound + (bottomBound - topBound - mPhotoViewHeight) / 2
-                        + mAvatarOffsetTop;
-                photoView.layout(
-                        rightBound - mPhotoViewWidth,
-                        photoTop,
-                        rightBound,
-                        photoTop + mPhotoViewHeight);
-                rightBound -= (mPhotoViewWidth + mGapBetweenImageAndText);
-            } else if (mKeepHorizontalPaddingForPhotoView) {
-                // Draw nothing but keep the padding.
-                rightBound -= (mPhotoViewWidth + mGapBetweenImageAndText);
-            }
-
-            // Add indent between left-most padding and texts.
-            leftBound += mTextIndent;
-        }
-
-        if (mSupportVideoCallIcon) {
-            // Place the video call button at the end of the list (e.g. take into account RTL mode).
-            if (isVisible(mVideoCallIcon)) {
-                // Center the video icon vertically
-                final int videoIconTop = topBound +
-                        (bottomBound - topBound - mVideoCallIconSize) / 2;
-
-                if (!isLayoutRtl) {
-                    // When photo is on left, video icon is placed on the right edge.
-                    mVideoCallIcon.layout(rightBound - mVideoCallIconSize,
-                            videoIconTop,
-                            rightBound,
-                            videoIconTop + mVideoCallIconSize);
-                } else {
-                    // When photo is on right, video icon is placed on the left edge.
-                    mVideoCallIcon.layout(leftBound,
-                            videoIconTop,
-                            leftBound + mVideoCallIconSize,
-                            videoIconTop + mVideoCallIconSize);
-                }
-            }
-
-            if (mPhotoPosition == PhotoPosition.LEFT) {
-                rightBound -= (mVideoCallIconSize + mVideoCallIconMargin);
-            } else {
-                leftBound += mVideoCallIconSize + mVideoCallIconMargin;
-            }
-        }
-
-
-        // Center text vertically, then apply the top offset.
-        final int totalTextHeight = mNameTextViewHeight + mPhoneticNameTextViewHeight +
-                mLabelAndDataViewMaxHeight + mSnippetTextViewHeight + mStatusTextViewHeight;
-        int textTopBound = (bottomBound + topBound - totalTextHeight) / 2 + mTextOffsetTop;
-
-        // Work Profile icon align top
-        int workProfileIconWidth = 0;
-        if (isVisible(mWorkProfileIcon)) {
-            workProfileIconWidth = mWorkProfileIcon.getMeasuredWidth();
-            final int distanceFromEnd = mCheckBoxWidth > 0
-                    ? mCheckBoxWidth + mGapBetweenImageAndText : 0;
-            if (mPhotoPosition == PhotoPosition.LEFT) {
-                // When photo is on left, label is placed on the right edge of the list item.
-                mWorkProfileIcon.layout(rightBound - workProfileIconWidth - distanceFromEnd,
-                        textTopBound,
-                        rightBound - distanceFromEnd,
-                        textTopBound + mNameTextViewHeight);
-            } else {
-                // When photo is on right, label is placed on the left of data view.
-                mWorkProfileIcon.layout(leftBound + distanceFromEnd,
-                        textTopBound,
-                        leftBound + workProfileIconWidth + distanceFromEnd,
-                        textTopBound + mNameTextViewHeight);
-            }
-        }
-
-        // Layout all text view and presence icon
-        // Put name TextView first
-        if (isVisible(mNameTextView)) {
-            final int distanceFromEnd = workProfileIconWidth
-                    + (mCheckBoxWidth > 0 ? mCheckBoxWidth + mGapBetweenImageAndText : 0);
-            if (mPhotoPosition == PhotoPosition.LEFT) {
-                mNameTextView.layout(leftBound,
-                        textTopBound,
-                        rightBound - distanceFromEnd,
-                        textTopBound + mNameTextViewHeight);
-            } else {
-                mNameTextView.layout(leftBound + distanceFromEnd,
-                        textTopBound,
-                        rightBound,
-                        textTopBound + mNameTextViewHeight);
-            }
-        }
-
-        if (isVisible(mNameTextView) || isVisible(mWorkProfileIcon)) {
-            textTopBound += mNameTextViewHeight;
-        }
-
-        // Presence and status
-        if (isLayoutRtl) {
-            int statusRightBound = rightBound;
-            if (isVisible(mPresenceIcon)) {
-                int iconWidth = mPresenceIcon.getMeasuredWidth();
-                mPresenceIcon.layout(
-                        rightBound - iconWidth,
-                        textTopBound,
-                        rightBound,
-                        textTopBound + mStatusTextViewHeight);
-                statusRightBound -= (iconWidth + mPresenceIconMargin);
-            }
-
-            if (isVisible(mStatusView)) {
-                mStatusView.layout(leftBound,
-                        textTopBound,
-                        statusRightBound,
-                        textTopBound + mStatusTextViewHeight);
-            }
-        } else {
-            int statusLeftBound = leftBound;
-            if (isVisible(mPresenceIcon)) {
-                int iconWidth = mPresenceIcon.getMeasuredWidth();
-                mPresenceIcon.layout(
-                        leftBound,
-                        textTopBound,
-                        leftBound + iconWidth,
-                        textTopBound + mStatusTextViewHeight);
-                statusLeftBound += (iconWidth + mPresenceIconMargin);
-            }
-
-            if (isVisible(mStatusView)) {
-                mStatusView.layout(statusLeftBound,
-                        textTopBound,
-                        rightBound,
-                        textTopBound + mStatusTextViewHeight);
-            }
-        }
-
-        if (isVisible(mStatusView) || isVisible(mPresenceIcon)) {
-            textTopBound += mStatusTextViewHeight;
-        }
-
-        // Rest of text views
-        int dataLeftBound = leftBound;
-        if (isVisible(mPhoneticNameTextView)) {
-            mPhoneticNameTextView.layout(leftBound,
-                    textTopBound,
-                    rightBound,
-                    textTopBound + mPhoneticNameTextViewHeight);
-            textTopBound += mPhoneticNameTextViewHeight;
-        }
-
-        // Label and Data align bottom.
-        if (isVisible(mLabelView)) {
-            if (!isLayoutRtl) {
-                mLabelView.layout(dataLeftBound,
-                        textTopBound + mLabelAndDataViewMaxHeight - mLabelViewHeight,
-                        rightBound,
-                        textTopBound + mLabelAndDataViewMaxHeight);
-                dataLeftBound += mLabelView.getMeasuredWidth() + mGapBetweenLabelAndData;
-            } else {
-                dataLeftBound = leftBound + mLabelView.getMeasuredWidth();
-                mLabelView.layout(rightBound - mLabelView.getMeasuredWidth(),
-                        textTopBound + mLabelAndDataViewMaxHeight - mLabelViewHeight,
-                        rightBound,
-                        textTopBound + mLabelAndDataViewMaxHeight);
-                rightBound -= (mLabelView.getMeasuredWidth() + mGapBetweenLabelAndData);
-            }
-        }
-
-        if (isVisible(mDataView)) {
-            if (!isLayoutRtl) {
-                mDataView.layout(dataLeftBound,
-                        textTopBound + mLabelAndDataViewMaxHeight - mDataViewHeight,
-                        rightBound,
-                        textTopBound + mLabelAndDataViewMaxHeight);
-            } else {
-                mDataView.layout(rightBound - mDataView.getMeasuredWidth(),
-                        textTopBound + mLabelAndDataViewMaxHeight - mDataViewHeight,
-                        rightBound,
-                        textTopBound + mLabelAndDataViewMaxHeight);
-            }
-        }
-        if (isVisible(mLabelView) || isVisible(mDataView)) {
-            textTopBound += mLabelAndDataViewMaxHeight;
-        }
-
-        if (isVisible(mSnippetView)) {
-            mSnippetView.layout(leftBound,
-                    textTopBound,
-                    rightBound,
-                    textTopBound + mSnippetTextViewHeight);
-        }
-    }
-
-    @Override
-    public void adjustListItemSelectionBounds(Rect bounds) {
-        if (mAdjustSelectionBoundsEnabled) {
-            bounds.top += mBoundsWithoutHeader.top;
-            bounds.bottom = bounds.top + mBoundsWithoutHeader.height();
-            bounds.left = mBoundsWithoutHeader.left;
-            bounds.right = mBoundsWithoutHeader.right;
-        }
-    }
-
-    protected boolean isVisible(View view) {
-        return view != null && view.getVisibility() == View.VISIBLE;
-    }
-
-    /**
-     * Extracts width and height from the style
-     */
-    private void ensurePhotoViewSize() {
-        if (!mPhotoViewWidthAndHeightAreReady) {
-            mPhotoViewWidth = mPhotoViewHeight = getDefaultPhotoViewSize();
-            if (!mQuickContactEnabled && mPhotoView == null) {
-                if (!mKeepHorizontalPaddingForPhotoView) {
-                    mPhotoViewWidth = 0;
-                }
-                if (!mKeepVerticalPaddingForPhotoView) {
-                    mPhotoViewHeight = 0;
-                }
-            }
-
-            mPhotoViewWidthAndHeightAreReady = true;
-        }
-    }
-
-    protected int getDefaultPhotoViewSize() {
-        return mDefaultPhotoViewSize;
-    }
-
-    /**
-     * Gets a LayoutParam that corresponds to the default photo size.
-     *
-     * @return A new LayoutParam.
-     */
-    private LayoutParams getDefaultPhotoLayoutParams() {
-        LayoutParams params = generateDefaultLayoutParams();
-        params.width = getDefaultPhotoViewSize();
-        params.height = params.width;
-        return params;
-    }
-
-    @Override
-    protected void drawableStateChanged() {
-        super.drawableStateChanged();
-        if (mActivatedStateSupported) {
-            mActivatedBackgroundDrawable.setState(getDrawableState());
-        }
-    }
-
-    @Override
-    protected boolean verifyDrawable(Drawable who) {
-        return who == mActivatedBackgroundDrawable || super.verifyDrawable(who);
-    }
-
-    @Override
-    public void jumpDrawablesToCurrentState() {
-        super.jumpDrawablesToCurrentState();
-        if (mActivatedStateSupported) {
-            mActivatedBackgroundDrawable.jumpToCurrentState();
-        }
-    }
-
-    @Override
-    public void dispatchDraw(Canvas canvas) {
-        if (mActivatedStateSupported && isActivated()) {
-            mActivatedBackgroundDrawable.draw(canvas);
-        }
-
-        super.dispatchDraw(canvas);
-    }
-
-    /**
-     * Sets section header or makes it invisible if the title is null.
-     */
-    public void setSectionHeader(String title) {
-        if (title != null) {
-            // Empty section title is the favorites so show the star here.
-            if (title.isEmpty()) {
-                if (mHeaderView == null) {
-                    addStarImageHeader();
-                } else if (mHeaderView instanceof TextView) {
-                    removeView(mHeaderView);
-                    addStarImageHeader();
-                } else {
-                    mHeaderView.setVisibility(View.VISIBLE);
-                }
-            } else {
-                if (mHeaderView == null) {
-                    addTextHeader(title);
-                } else if (mHeaderView instanceof ImageView) {
-                    removeView(mHeaderView);
-                    addTextHeader(title);
-                } else {
-                    updateHeaderText((TextView) mHeaderView, title);
-                }
-            }
-        } else if (mHeaderView != null) {
-            mHeaderView.setVisibility(View.GONE);
-        }
-    }
-
-    private void addTextHeader(String title) {
-        mHeaderView = new TextView(getContext());
-        final TextView headerTextView = (TextView) mHeaderView;
-        headerTextView.setTextAppearance(getContext(), R.style.SectionHeaderStyle);
-        headerTextView.setGravity(Gravity.CENTER_HORIZONTAL);
-        updateHeaderText(headerTextView, title);
-        addView(headerTextView);
-    }
-
-    private void updateHeaderText(TextView headerTextView, String title) {
-        setMarqueeText(headerTextView, title);
-        headerTextView.setAllCaps(true);
-        if (ContactsSectionIndexer.BLANK_HEADER_STRING.equals(title)) {
-            headerTextView.setContentDescription(
-                    getContext().getString(R.string.description_no_name_header));
-        } else {
-            headerTextView.setContentDescription(title);
-        }
-        headerTextView.setVisibility(View.VISIBLE);
-    }
-
-    private void addStarImageHeader() {
-        mHeaderView = new ImageView(getContext());
-        final ImageView headerImageView = (ImageView) mHeaderView;
-        headerImageView.setImageDrawable(
-                getResources().getDrawable(R.drawable.ic_material_star, getContext().getTheme()));
-        headerImageView.setImageTintList(ColorStateList.valueOf(getResources()
-                .getColor(R.color.material_star_pink)));
-        headerImageView.setContentDescription(
-                getContext().getString(R.string.contactsFavoritesLabel));
-        headerImageView.setVisibility(View.VISIBLE);
-        addView(headerImageView);
-    }
-
-    public void setIsSectionHeaderEnabled(boolean isSectionHeaderEnabled) {
-        mIsSectionHeaderEnabled = isSectionHeaderEnabled;
-    }
-
-    /**
-     * Returns the quick contact badge, creating it if necessary.
-     */
-    public QuickContactBadge getQuickContact() {
-        if (!mQuickContactEnabled) {
-            throw new IllegalStateException("QuickContact is disabled for this view");
-        }
-        if (mQuickContact == null) {
-            mQuickContact = new QuickContactBadge(getContext());
-            if (CompatUtils.isLollipopCompatible()) {
-                mQuickContact.setOverlay(null);
-            }
-            mQuickContact.setLayoutParams(getDefaultPhotoLayoutParams());
-            if (mNameTextView != null) {
-                mQuickContact.setContentDescription(getContext().getString(
-                        R.string.description_quick_contact_for, mNameTextView.getText()));
-            }
-
-            addView(mQuickContact);
-            mPhotoViewWidthAndHeightAreReady = false;
-        }
-        return mQuickContact;
-    }
-
-    /**
-     * Returns the photo view, creating it if necessary.
-     */
-    public ImageView getPhotoView() {
-        if (mPhotoView == null) {
-            mPhotoView = new ImageView(getContext());
-            mPhotoView.setLayoutParams(getDefaultPhotoLayoutParams());
-            // Quick contact style used above will set a background - remove it
-            mPhotoView.setBackground(null);
-            addView(mPhotoView);
-            mPhotoViewWidthAndHeightAreReady = false;
-        }
-        return mPhotoView;
-    }
-
-    /**
-     * Removes the photo view.
-     */
-    public void removePhotoView() {
-        removePhotoView(false, true);
-    }
-
-    /**
-     * Removes the photo view.
-     *
-     * @param keepHorizontalPadding True means data on the right side will have
-     *            padding on left, pretending there is still a photo view.
-     * @param keepVerticalPadding True means the View will have some height
-     *            enough for accommodating a photo view.
-     */
-    public void removePhotoView(boolean keepHorizontalPadding, boolean keepVerticalPadding) {
-        mPhotoViewWidthAndHeightAreReady = false;
-        mKeepHorizontalPaddingForPhotoView = keepHorizontalPadding;
-        mKeepVerticalPaddingForPhotoView = keepVerticalPadding;
-        if (mPhotoView != null) {
-            removeView(mPhotoView);
-            mPhotoView = null;
-        }
-        if (mQuickContact != null) {
-            removeView(mQuickContact);
-            mQuickContact = null;
-        }
-    }
-
-    /**
-     * Sets a word prefix that will be highlighted if encountered in fields like
-     * name and search snippet. This will disable the mask highlighting for names.
-     * <p>
-     * NOTE: must be all upper-case
-     */
-    public void setHighlightedPrefix(String upperCasePrefix) {
-        mHighlightedPrefix = upperCasePrefix;
-    }
-
-    /**
-     * Clears previously set highlight sequences for the view.
-     */
-    public void clearHighlightSequences() {
-        mNameHighlightSequence.clear();
-        mNumberHighlightSequence.clear();
-        mHighlightedPrefix = null;
-    }
-
-    /**
-     * Adds a highlight sequence to the name highlighter.
-     * @param start The start position of the highlight sequence.
-     * @param end The end position of the highlight sequence.
-     */
-    public void addNameHighlightSequence(int start, int end) {
-        mNameHighlightSequence.add(new HighlightSequence(start, end));
-    }
-
-    /**
-     * Adds a highlight sequence to the number highlighter.
-     * @param start The start position of the highlight sequence.
-     * @param end The end position of the highlight sequence.
-     */
-    public void addNumberHighlightSequence(int start, int end) {
-        mNumberHighlightSequence.add(new HighlightSequence(start, end));
-    }
-
-    /**
-     * Returns the text view for the contact name, creating it if necessary.
-     */
-    public TextView getNameTextView() {
-        if (mNameTextView == null) {
-            mNameTextView = new TextView(getContext());
-            mNameTextView.setSingleLine(true);
-            mNameTextView.setEllipsize(getTextEllipsis());
-            mNameTextView.setTextColor(ResourcesCompat.getColorStateList(getResources(),
-                    R.color.contact_list_name_text_color, getContext().getTheme()));
-            mNameTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mNameTextViewTextSize);
-            // Manually call setActivated() since this view may be added after the first
-            // setActivated() call toward this whole item view.
-            mNameTextView.setActivated(isActivated());
-            mNameTextView.setGravity(Gravity.CENTER_VERTICAL);
-            mNameTextView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
-            mNameTextView.setId(R.id.cliv_name_textview);
-            if (CompatUtils.isLollipopCompatible()) {
-                mNameTextView.setElegantTextHeight(false);
-            }
-            addView(mNameTextView);
-        }
-        return mNameTextView;
-    }
-
-    /**
-     * Adds or updates a text view for the phonetic name.
-     */
-    public void setPhoneticName(char[] text, int size) {
-        if (text == null || size == 0) {
-            if (mPhoneticNameTextView != null) {
-                mPhoneticNameTextView.setVisibility(View.GONE);
-            }
-        } else {
-            getPhoneticNameTextView();
-            setMarqueeText(mPhoneticNameTextView, text, size);
-            mPhoneticNameTextView.setVisibility(VISIBLE);
-        }
-    }
-
-    /**
-     * Returns the text view for the phonetic name, creating it if necessary.
-     */
-    public TextView getPhoneticNameTextView() {
-        if (mPhoneticNameTextView == null) {
-            mPhoneticNameTextView = new TextView(getContext());
-            mPhoneticNameTextView.setSingleLine(true);
-            mPhoneticNameTextView.setEllipsize(getTextEllipsis());
-            mPhoneticNameTextView.setTextAppearance(getContext(), android.R.style.TextAppearance_Small);
-            mPhoneticNameTextView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
-            mPhoneticNameTextView.setTypeface(mPhoneticNameTextView.getTypeface(), Typeface.BOLD);
-            mPhoneticNameTextView.setActivated(isActivated());
-            mPhoneticNameTextView.setId(R.id.cliv_phoneticname_textview);
-            addView(mPhoneticNameTextView);
-        }
-        return mPhoneticNameTextView;
-    }
-
-    /**
-     * Adds or updates a text view for the data label.
-     */
-    public void setLabel(CharSequence text) {
-        if (TextUtils.isEmpty(text)) {
-            if (mLabelView != null) {
-                mLabelView.setVisibility(View.GONE);
-            }
-        } else {
-            getLabelView();
-            setMarqueeText(mLabelView, text);
-            mLabelView.setVisibility(VISIBLE);
-        }
-    }
-
-    /**
-     * Returns the text view for the data label, creating it if necessary.
-     */
-    public TextView getLabelView() {
-        if (mLabelView == null) {
-            mLabelView = new TextView(getContext());
-            mLabelView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
-                    LayoutParams.WRAP_CONTENT));
-
-            mLabelView.setSingleLine(true);
-            mLabelView.setEllipsize(getTextEllipsis());
-            mLabelView.setTextAppearance(getContext(), R.style.TextAppearanceSmall);
-            if (mPhotoPosition == PhotoPosition.LEFT) {
-                mLabelView.setAllCaps(true);
-            } else {
-                mLabelView.setTypeface(mLabelView.getTypeface(), Typeface.BOLD);
-            }
-            mLabelView.setActivated(isActivated());
-            mLabelView.setId(R.id.cliv_label_textview);
-            addView(mLabelView);
-        }
-        return mLabelView;
-    }
-
-    /**
-     * Adds or updates a text view for the data element.
-     */
-    public void setData(char[] text, int size) {
-        if (text == null || size == 0) {
-            if (mDataView != null) {
-                mDataView.setVisibility(View.GONE);
-            }
-        } else {
-            getDataView();
-            setMarqueeText(mDataView, text, size);
-            mDataView.setVisibility(VISIBLE);
-        }
-    }
-
-    /**
-     * Sets phone number for a list item. This takes care of number highlighting if the highlight
-     * mask exists.
-     */
-    public void setPhoneNumber(String text, String countryIso) {
-        if (text == null) {
-            if (mDataView != null) {
-                mDataView.setVisibility(View.GONE);
-            }
-        } else {
-            getDataView();
-
-            // TODO: Format number using PhoneNumberUtils.formatNumber before assigning it to
-            // mDataView. Make sure that determination of the highlight sequences are done only
-            // after number formatting.
-
-            // Sets phone number texts for display after highlighting it, if applicable.
-            // CharSequence textToSet = text;
-            final SpannableString textToSet = new SpannableString(text);
-
-            if (mNumberHighlightSequence.size() != 0) {
-                final HighlightSequence highlightSequence = mNumberHighlightSequence.get(0);
-                mTextHighlighter.applyMaskingHighlight(textToSet, highlightSequence.start,
-                        highlightSequence.end);
-            }
-
-            setMarqueeText(mDataView, textToSet);
-            mDataView.setVisibility(VISIBLE);
-
-            // We have a phone number as "mDataView" so make it always LTR and VIEW_START
-            mDataView.setTextDirection(View.TEXT_DIRECTION_LTR);
-            mDataView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
-        }
-    }
-
-    private void setMarqueeText(TextView textView, char[] text, int size) {
-        if (getTextEllipsis() == TruncateAt.MARQUEE) {
-            setMarqueeText(textView, new String(text, 0, size));
-        } else {
-            textView.setText(text, 0, size);
-        }
-    }
-
-    private void setMarqueeText(TextView textView, CharSequence text) {
-        if (getTextEllipsis() == TruncateAt.MARQUEE) {
-            // To show MARQUEE correctly (with END effect during non-active state), we need
-            // to build Spanned with MARQUEE in addition to TextView's ellipsize setting.
-            final SpannableString spannable = new SpannableString(text);
-            spannable.setSpan(TruncateAt.MARQUEE, 0, spannable.length(),
-                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
-            textView.setText(spannable);
-        } else {
-            textView.setText(text);
-        }
-    }
-
-    /**
-     * Returns the {@link AppCompatCheckBox} view, creating it if necessary.
-     */
-    public AppCompatCheckBox getCheckBox() {
-        if (mCheckBox == null) {
-            mCheckBox = new AppCompatCheckBox(getContext());
-            // Make non-focusable, so the rest of the ContactListItemView can be clicked.
-            mCheckBox.setFocusable(false);
-            addView(mCheckBox);
-        }
-        return mCheckBox;
-    }
-
-    /**
-     * Returns the {@link AppCompatImageButton} delete button, creating it if necessary.
-     */
-    public AppCompatImageButton getDeleteImageButton(
-            final MultiSelectEntryContactListAdapter.DeleteContactListener listener,
-            final int position) {
-        if (mDeleteImageButton == null) {
-            mDeleteImageButton = new AppCompatImageButton(getContext());
-            mDeleteImageButton.setImageResource(R.drawable.ic_cancel_black_24dp);
-            mDeleteImageButton.setScaleType(ScaleType.CENTER);
-            mDeleteImageButton.setBackgroundColor(Color.TRANSPARENT);
-            mDeleteImageButton.setContentDescription(
-                    getResources().getString(R.string.description_delete_contact));
-            if (CompatUtils. isLollipopCompatible()) {
-                final TypedValue typedValue = new TypedValue();
-                getContext().getTheme().resolveAttribute(
-                        android.R.attr.selectableItemBackgroundBorderless, typedValue, true);
-                mDeleteImageButton.setBackgroundResource(typedValue.resourceId);
-            }
-            addView(mDeleteImageButton);
-        }
-        // Reset onClickListener because after reloading the view, position might be changed.
-        mDeleteImageButton.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                // Inform the adapter that delete icon was clicked.
-                if (listener != null) {
-                    listener.onContactDeleteClicked(position);
-                }
-            }
-        });
-        return mDeleteImageButton;
-    }
-
-    /**
-     * Returns the text view for the data text, creating it if necessary.
-     */
-    public TextView getDataView() {
-        if (mDataView == null) {
-            mDataView = new TextView(getContext());
-            mDataView.setSingleLine(true);
-            mDataView.setEllipsize(getTextEllipsis());
-            mDataView.setTextAppearance(getContext(), R.style.TextAppearanceSmall);
-            mDataView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
-            mDataView.setActivated(isActivated());
-            mDataView.setId(R.id.cliv_data_view);
-            if (CompatUtils.isLollipopCompatible()) {
-                mDataView.setElegantTextHeight(false);
-            }
-            addView(mDataView);
-        }
-        return mDataView;
-    }
-
-    /**
-     * Adds or updates a text view for the search snippet.
-     */
-    public void setSnippet(String text) {
-        if (TextUtils.isEmpty(text)) {
-            if (mSnippetView != null) {
-                mSnippetView.setVisibility(View.GONE);
-            }
-        } else {
-            mTextHighlighter.setPrefixText(getSnippetView(), text, mHighlightedPrefix);
-            mSnippetView.setVisibility(VISIBLE);
-            if (ContactDisplayUtils.isPossiblePhoneNumber(text)) {
-                // Give the text-to-speech engine a hint that it's a phone number
-                mSnippetView.setContentDescription(
-                        PhoneNumberUtilsCompat.createTtsSpannable(text));
-            } else {
-                mSnippetView.setContentDescription(null);
-            }
-        }
-    }
-
-    /**
-     * Returns the text view for the search snippet, creating it if necessary.
-     */
-    public TextView getSnippetView() {
-        if (mSnippetView == null) {
-            mSnippetView = new TextView(getContext());
-            mSnippetView.setSingleLine(true);
-            mSnippetView.setEllipsize(getTextEllipsis());
-            mSnippetView.setTextAppearance(getContext(), android.R.style.TextAppearance_Small);
-            mSnippetView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
-            mSnippetView.setActivated(isActivated());
-            addView(mSnippetView);
-        }
-        return mSnippetView;
-    }
-
-    /**
-     * Returns the text view for the status, creating it if necessary.
-     */
-    public TextView getStatusView() {
-        if (mStatusView == null) {
-            mStatusView = new TextView(getContext());
-            mStatusView.setSingleLine(true);
-            mStatusView.setEllipsize(getTextEllipsis());
-            mStatusView.setTextAppearance(getContext(), android.R.style.TextAppearance_Small);
-            mStatusView.setTextColor(mSecondaryTextColor);
-            mStatusView.setActivated(isActivated());
-            mStatusView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
-            addView(mStatusView);
-        }
-        return mStatusView;
-    }
-
-    /**
-     * Adds or updates a text view for the status.
-     */
-    public void setStatus(CharSequence text) {
-        if (TextUtils.isEmpty(text)) {
-            if (mStatusView != null) {
-                mStatusView.setVisibility(View.GONE);
-            }
-        } else {
-            getStatusView();
-            setMarqueeText(mStatusView, text);
-            mStatusView.setVisibility(VISIBLE);
-        }
-    }
-
-    /**
-     * Adds or updates the presence icon view.
-     */
-    public void setPresence(Drawable icon) {
-        if (icon != null) {
-            if (mPresenceIcon == null) {
-                mPresenceIcon = new ImageView(getContext());
-                addView(mPresenceIcon);
-            }
-            mPresenceIcon.setImageDrawable(icon);
-            mPresenceIcon.setScaleType(ScaleType.CENTER);
-            mPresenceIcon.setVisibility(View.VISIBLE);
-        } else {
-            if (mPresenceIcon != null) {
-                mPresenceIcon.setVisibility(View.GONE);
-            }
-        }
-    }
-
-    /**
-     * Set to display work profile icon or not
-     *
-     * @param enabled set to display work profile icon or not
-     */
-    public void setWorkProfileIconEnabled(boolean enabled) {
-        if (mWorkProfileIcon != null) {
-            mWorkProfileIcon.setVisibility(enabled ? View.VISIBLE : View.GONE);
-        } else if (enabled) {
-            mWorkProfileIcon = new ImageView(getContext());
-            addView(mWorkProfileIcon);
-            mWorkProfileIcon.setImageResource(R.drawable.ic_work_profile);
-            mWorkProfileIcon.setScaleType(ScaleType.CENTER_INSIDE);
-            mWorkProfileIcon.setVisibility(View.VISIBLE);
-        }
-    }
-
-    private TruncateAt getTextEllipsis() {
-        return TruncateAt.MARQUEE;
-    }
-
-    public void showDisplayName(Cursor cursor, int nameColumnIndex, int displayOrder) {
-        CharSequence name = cursor.getString(nameColumnIndex);
-        setDisplayName(name);
-
-        // Since the quick contact content description is derived from the display name and there is
-        // no guarantee that when the quick contact is initialized the display name is already set,
-        // do it here too.
-        if (mQuickContact != null) {
-            mQuickContact.setContentDescription(getContext().getString(
-                    R.string.description_quick_contact_for, mNameTextView.getText()));
-        }
-    }
-
-    public void setDisplayName(CharSequence name, boolean highlight) {
-        if (!TextUtils.isEmpty(name) && highlight) {
-            clearHighlightSequences();
-            addNameHighlightSequence(0, name.length());
-        }
-        setDisplayName(name);
-    }
-
-    public void setDisplayName(CharSequence name) {
-        if (!TextUtils.isEmpty(name)) {
-            // Chooses the available highlighting method for highlighting.
-            if (mHighlightedPrefix != null) {
-                name = mTextHighlighter.applyPrefixHighlight(name, mHighlightedPrefix);
-            } else if (mNameHighlightSequence.size() != 0) {
-                final SpannableString spannableName = new SpannableString(name);
-                for (HighlightSequence highlightSequence : mNameHighlightSequence) {
-                    mTextHighlighter.applyMaskingHighlight(spannableName, highlightSequence.start,
-                            highlightSequence.end);
-                }
-                name = spannableName;
-            }
-        } else {
-            name = mUnknownNameText;
-        }
-        setMarqueeText(getNameTextView(), name);
-
-        if (ContactDisplayUtils.isPossiblePhoneNumber(name)) {
-            // Give the text-to-speech engine a hint that it's a phone number
-            mNameTextView.setTextDirection(View.TEXT_DIRECTION_LTR);
-            mNameTextView.setContentDescription(
-                    PhoneNumberUtilsCompat.createTtsSpannable(name.toString()));
-        } else {
-            // Remove span tags of highlighting for talkback to avoid reading highlighting and rest
-            // of the name into two separate parts.
-            mNameTextView.setContentDescription(name.toString());
-        }
-    }
-
-    public void hideCheckBox() {
-        if (mCheckBox != null) {
-            removeView(mCheckBox);
-            mCheckBox = null;
-        }
-    }
-
-    public void hideDeleteImageButton() {
-        if (mDeleteImageButton != null) {
-            removeView(mDeleteImageButton);
-            mDeleteImageButton = null;
-        }
-    }
-
-    public void hideDisplayName() {
-        if (mNameTextView != null) {
-            removeView(mNameTextView);
-            mNameTextView = null;
-        }
-    }
-
-    public void showPhoneticName(Cursor cursor, int phoneticNameColumnIndex) {
-        cursor.copyStringToBuffer(phoneticNameColumnIndex, mPhoneticNameBuffer);
-        int phoneticNameSize = mPhoneticNameBuffer.sizeCopied;
-        if (phoneticNameSize != 0) {
-            setPhoneticName(mPhoneticNameBuffer.data, phoneticNameSize);
-        } else {
-            setPhoneticName(null, 0);
-        }
-    }
-
-    public void hidePhoneticName() {
-        if (mPhoneticNameTextView != null) {
-            removeView(mPhoneticNameTextView);
-            mPhoneticNameTextView = null;
-        }
-    }
-
-    /**
-     * Sets the proper icon (star or presence or nothing) and/or status message.
-     */
-    public void showPresenceAndStatusMessage(Cursor cursor, int presenceColumnIndex,
-            int contactStatusColumnIndex) {
-        Drawable icon = null;
-        int presence = 0;
-        if (!cursor.isNull(presenceColumnIndex)) {
-            presence = cursor.getInt(presenceColumnIndex);
-            icon = ContactPresenceIconUtil.getPresenceIcon(getContext(), presence);
-        }
-        setPresence(icon);
-
-        String statusMessage = null;
-        if (contactStatusColumnIndex != 0 && !cursor.isNull(contactStatusColumnIndex)) {
-            statusMessage = cursor.getString(contactStatusColumnIndex);
-        }
-        // If there is no status message from the contact, but there was a presence value, then use
-        // the default status message string
-        if (statusMessage == null && presence != 0) {
-            statusMessage = ContactStatusUtil.getStatusString(getContext(), presence);
-        }
-        setStatus(statusMessage);
-    }
-
-    /**
-     * Shows search snippet for email and phone number matches.
-     */
-    public void showSnippet(Cursor cursor, String query, int snippetColumn) {
-        // TODO: this does not properly handle phone numbers with control characters
-        // For example if the phone number is 444-5555, the search query 4445 will match the
-        // number since we normalize it before querying CP2 but the snippet will fail since
-        // the portion to be highlighted is 444-5 not 4445.
-        final String snippet = cursor.getString(snippetColumn);
-        if (snippet == null) {
-            setSnippet(null);
-            return;
-        }
-        final String displayName = cursor.getColumnIndex(Contacts.DISPLAY_NAME) >= 0
-                ? cursor.getString(cursor.getColumnIndex(Contacts.DISPLAY_NAME)) : null;
-        if (snippet.equals(displayName)) {
-            // If the snippet exactly matches the display name (i.e. the phone number or email
-            // address is being used as the display name) then no snippet is necessary
-            setSnippet(null);
-            return;
-        }
-        // Show the snippet with the part of the query that matched it
-        setSnippet(updateSnippet(snippet, query, displayName));
-    }
-
-    /**
-     * Shows search snippet.
-     */
-    public void showSnippet(Cursor cursor, int summarySnippetColumnIndex) {
-        if (cursor.getColumnCount() <= summarySnippetColumnIndex
-            || !SearchSnippets.SNIPPET.equals(cursor.getColumnName(summarySnippetColumnIndex))) {
-            setSnippet(null);
-            return;
-        }
-
-        String snippet = cursor.getString(summarySnippetColumnIndex);
-
-        // Do client side snippeting if provider didn't do it
-        final Bundle extras = cursor.getExtras();
-        if (extras.getBoolean(ContactsContract.DEFERRED_SNIPPETING)) {
-
-            final String query = extras.getString(ContactsContract.DEFERRED_SNIPPETING_QUERY);
-
-            String displayName = null;
-            int displayNameIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
-            if (displayNameIndex >= 0) {
-                displayName = cursor.getString(displayNameIndex);
-            }
-
-            snippet = updateSnippet(snippet, query, displayName);
-
-        } else {
-            if (snippet != null) {
-                int from = 0;
-                int to = snippet.length();
-                int start = snippet.indexOf(DefaultContactListAdapter.SNIPPET_START_MATCH);
-                if (start == -1) {
-                    snippet = null;
-                } else {
-                    int firstNl = snippet.lastIndexOf('\n', start);
-                    if (firstNl != -1) {
-                        from = firstNl + 1;
-                    }
-                    int end = snippet.lastIndexOf(DefaultContactListAdapter.SNIPPET_END_MATCH);
-                    if (end != -1) {
-                        int lastNl = snippet.indexOf('\n', end);
-                        if (lastNl != -1) {
-                            to = lastNl;
-                        }
-                    }
-
-                    StringBuilder sb = new StringBuilder();
-                    for (int i = from; i < to; i++) {
-                        char c = snippet.charAt(i);
-                        if (c != DefaultContactListAdapter.SNIPPET_START_MATCH &&
-                                c != DefaultContactListAdapter.SNIPPET_END_MATCH) {
-                            sb.append(c);
-                        }
-                    }
-                    snippet = sb.toString();
-                }
-            }
-        }
-
-        setSnippet(snippet);
-    }
-
-    /**
-     * Used for deferred snippets from the database. The contents come back as large strings which
-     * need to be extracted for display.
-     *
-     * @param snippet The snippet from the database.
-     * @param query The search query substring.
-     * @param displayName The contact display name.
-     * @return The proper snippet to display.
-     */
-    private String updateSnippet(String snippet, String query, String displayName) {
-
-        if (TextUtils.isEmpty(snippet) || TextUtils.isEmpty(query)) {
-            return null;
-        }
-        query = SearchUtil.cleanStartAndEndOfSearchQuery(query.toLowerCase());
-
-        // If the display name already contains the query term, return empty - snippets should
-        // not be needed in that case.
-        if (!TextUtils.isEmpty(displayName)) {
-            final String lowerDisplayName = displayName.toLowerCase();
-            final List<String> nameTokens = split(lowerDisplayName);
-            for (String nameToken : nameTokens) {
-                if (nameToken.startsWith(query)) {
-                    return null;
-                }
-            }
-        }
-
-        // The snippet may contain multiple data lines.
-        // Show the first line that matches the query.
-        final SearchUtil.MatchedLine matched = SearchUtil.findMatchingLine(snippet, query);
-
-        if (matched != null && matched.line != null) {
-            // Tokenize for long strings since the match may be at the end of it.
-            // Skip this part for short strings since the whole string will be displayed.
-            // Most contact strings are short so the snippetize method will be called infrequently.
-            final int lengthThreshold = getResources().getInteger(
-                    R.integer.snippet_length_before_tokenize);
-            if (matched.line.length() > lengthThreshold) {
-                return snippetize(matched.line, matched.startIndex, lengthThreshold);
-            } else {
-                return matched.line;
-            }
-        }
-
-        // No match found.
-        return null;
-    }
-
-    private String snippetize(String line, int matchIndex, int maxLength) {
-        // Show up to maxLength characters. But we only show full tokens so show the last full token
-        // up to maxLength characters. So as many starting tokens as possible before trying ending
-        // tokens.
-        int remainingLength = maxLength;
-        int tempRemainingLength = remainingLength;
-
-        // Start the end token after the matched query.
-        int index = matchIndex;
-        int endTokenIndex = index;
-
-        // Find the match token first.
-        while (index < line.length()) {
-            if (!Character.isLetterOrDigit(line.charAt(index))) {
-                endTokenIndex = index;
-                remainingLength = tempRemainingLength;
-                break;
-            }
-            tempRemainingLength--;
-            index++;
-        }
-
-        // Find as much content before the match.
-        index = matchIndex - 1;
-        tempRemainingLength = remainingLength;
-        int startTokenIndex = matchIndex;
-        while (index > -1 && tempRemainingLength > 0) {
-            if (!Character.isLetterOrDigit(line.charAt(index))) {
-                startTokenIndex = index;
-                remainingLength = tempRemainingLength;
-            }
-            tempRemainingLength--;
-            index--;
-        }
-
-        index = endTokenIndex;
-        tempRemainingLength = remainingLength;
-        // Find remaining content at after match.
-        while (index < line.length() && tempRemainingLength > 0) {
-            if (!Character.isLetterOrDigit(line.charAt(index))) {
-                endTokenIndex = index;
-            }
-            tempRemainingLength--;
-            index++;
-        }
-        // Append ellipse if there is content before or after.
-        final StringBuilder sb = new StringBuilder();
-        if (startTokenIndex > 0) {
-            sb.append("...");
-        }
-        sb.append(line.substring(startTokenIndex, endTokenIndex));
-        if (endTokenIndex < line.length()) {
-            sb.append("...");
-        }
-        return sb.toString();
-    }
-
-    private static final Pattern SPLIT_PATTERN = Pattern.compile(
-            "([\\w-\\.]+)@((?:[\\w]+\\.)+)([a-zA-Z]{2,4})|[\\w]+");
-
-    /**
-     * Helper method for splitting a string into tokens.  The lists passed in are populated with
-     * the
-     * tokens and offsets into the content of each token.  The tokenization function parses e-mail
-     * addresses as a single token; otherwise it splits on any non-alphanumeric character.
-     *
-     * @param content Content to split.
-     * @return List of token strings.
-     */
-    private static List<String> split(String content) {
-        final Matcher matcher = SPLIT_PATTERN.matcher(content);
-        final ArrayList<String> tokens = Lists.newArrayList();
-        while (matcher.find()) {
-            tokens.add(matcher.group());
-        }
-        return tokens;
-    }
-
-    /**
-     * Shows data element.
-     */
-    public void showData(Cursor cursor, int dataColumnIndex) {
-        cursor.copyStringToBuffer(dataColumnIndex, mDataBuffer);
-        setData(mDataBuffer.data, mDataBuffer.sizeCopied);
-    }
-
-    public void setActivatedStateSupported(boolean flag) {
-        this.mActivatedStateSupported = flag;
-    }
-
-    public void setAdjustSelectionBoundsEnabled(boolean enabled) {
-        mAdjustSelectionBoundsEnabled = enabled;
-    }
-
-    @Override
-    public void requestLayout() {
-        // We will assume that once measured this will not need to resize
-        // itself, so there is no need to pass the layout request to the parent
-        // view (ListView).
-        forceLayout();
-    }
-
-    public void setPhotoPosition(PhotoPosition photoPosition) {
-        mPhotoPosition = photoPosition;
-    }
-
-    public PhotoPosition getPhotoPosition() {
-        return mPhotoPosition;
-    }
-
-    /**
-     * Set drawable resources directly for the drawable resource of the photo view.
-     *
-     * @param drawableId Id of drawable resource.
-     */
-    public void setDrawableResource(int drawableId) {
-        ImageView photo = getPhotoView();
-        photo.setScaleType(ImageView.ScaleType.CENTER);
-        final Drawable drawable = ContextCompat.getDrawable(getContext(), drawableId);
-        final int iconColor =
-                ContextCompat.getColor(getContext(), R.color.search_shortcut_icon_color);
-        if (CompatUtils.isLollipopCompatible()) {
-            photo.setImageDrawable(drawable);
-            photo.setImageTintList(ColorStateList.valueOf(iconColor));
-        } else {
-            final Drawable drawableWrapper = DrawableCompat.wrap(drawable).mutate();
-            DrawableCompat.setTint(drawableWrapper, iconColor);
-            photo.setImageDrawable(drawableWrapper);
-        }
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        final float x = event.getX();
-        final float y = event.getY();
-        // If the touch event's coordinates are not within the view's header, then delegate
-        // to super.onTouchEvent so that regular view behavior is preserved. Otherwise, consume
-        // and ignore the touch event.
-        if (mBoundsWithoutHeader.contains((int) x, (int) y) || !pointIsInView(x, y)) {
-            return super.onTouchEvent(event);
-        } else {
-            return true;
-        }
-    }
-
-    private final boolean pointIsInView(float localX, float localY) {
-        return localX >= mLeftOffset && localX < mRightOffset
-                && localY >= 0 && localY < (getBottom() - getTop());
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactListPinnedHeaderView.java b/src/com/android/contacts/common/list/ContactListPinnedHeaderView.java
deleted file mode 100644
index c208bef..0000000
--- a/src/com/android/contacts/common/list/ContactListPinnedHeaderView.java
+++ /dev/null
@@ -1,79 +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.common.list;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.graphics.Color;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.view.View;
-import android.widget.LinearLayout.LayoutParams;
-import android.widget.TextView;
-
-import com.android.contacts.common.R;
-
-/**
- * A custom view for the pinned section header shown at the top of the contact list.
- */
-public class ContactListPinnedHeaderView extends TextView {
-
-    public ContactListPinnedHeaderView(Context context, AttributeSet attrs, View parent) {
-        super(context, attrs);
-
-        if (R.styleable.ContactListItemView == null) {
-            return;
-        }
-        TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ContactListItemView);
-        int backgroundColor = a.getColor(
-                R.styleable.ContactListItemView_list_item_background_color, Color.WHITE);
-        int textOffsetTop = a.getDimensionPixelSize(
-                R.styleable.ContactListItemView_list_item_text_offset_top, 0);
-        int paddingStartOffset = a.getDimensionPixelSize(
-                R.styleable.ContactListItemView_list_item_padding_left, 0);
-        int textWidth = getResources().getDimensionPixelSize(
-                R.dimen.contact_list_section_header_width);
-        int widthIncludingPadding = paddingStartOffset + textWidth;
-        a.recycle();
-
-        setBackgroundColor(backgroundColor);
-        setTextAppearance(getContext(), R.style.SectionHeaderStyle);
-        setLayoutParams(new LayoutParams(widthIncludingPadding, LayoutParams.WRAP_CONTENT));
-        setLayoutDirection(parent.getLayoutDirection());
-        setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
-
-        // Apply text top offset. Multiply by two, because we are implementing this by padding for a
-        // vertically centered view, rather than adjusting the position directly via a layout.
-        setPaddingRelative(
-                getPaddingStart() + paddingStartOffset,
-                getPaddingTop() + (textOffsetTop * 2),
-                getPaddingEnd(),
-                getPaddingBottom());
-    }
-
-    /**
-     * Sets section header or makes it invisible if the title is null.
-     */
-    public void setSectionHeaderTitle(String title) {
-        if (title != null) {
-            setText(title);
-            setVisibility(View.VISIBLE);
-        } else {
-            setVisibility(View.GONE);
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactTileAdapter.java b/src/com/android/contacts/common/list/ContactTileAdapter.java
deleted file mode 100644
index 6ce4efb..0000000
--- a/src/com/android/contacts/common/list/ContactTileAdapter.java
+++ /dev/null
@@ -1,632 +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.common.list;
-
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.provider.ContactsContract.Contacts;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.FrameLayout;
-import android.widget.TextView;
-
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPresenceIconUtil;
-import com.android.contacts.common.ContactStatusUtil;
-import com.android.contacts.common.ContactTileLoaderFactory;
-import com.android.contacts.common.MoreContactUtils;
-import com.android.contacts.common.R;
-import com.android.contacts.common.util.ViewUtil;
-
-import java.util.ArrayList;
-
-/**
- * Arranges contacts favorites according to provided {@link DisplayType}.
- * Also allows for a configurable number of columns and {@link DisplayType}
- */
-public class ContactTileAdapter extends BaseAdapter {
-    private static final String TAG = ContactTileAdapter.class.getSimpleName();
-
-    private DisplayType mDisplayType;
-    private ContactTileView.Listener mListener;
-    private Context mContext;
-    private Resources mResources;
-    protected Cursor mContactCursor = null;
-    private ContactPhotoManager mPhotoManager;
-    protected int mNumFrequents;
-
-    /**
-     * Index of the first NON starred contact in the {@link Cursor}
-     * Only valid when {@link DisplayType#STREQUENT} is true
-     */
-    private int mDividerPosition;
-    protected int mColumnCount;
-    private int mStarredIndex;
-
-    protected int mIdIndex;
-    protected int mLookupIndex;
-    protected int mPhotoUriIndex;
-    protected int mNameIndex;
-    protected int mPresenceIndex;
-    protected int mStatusIndex;
-
-    private boolean mIsQuickContactEnabled = false;
-    private final int mPaddingInPixels;
-    private final int mWhitespaceStartEnd;
-
-    /**
-     * Configures the adapter to filter and display contacts using different view types.
-     * TODO: Create Uris to support getting Starred_only and Frequent_only cursors.
-     */
-    public enum DisplayType {
-        /**
-         * Displays a mixed view type of starred and frequent contacts
-         */
-        STREQUENT,
-
-        /**
-         * Display only starred contacts
-         */
-        STARRED_ONLY,
-
-        /**
-         * Display only most frequently contacted
-         */
-        FREQUENT_ONLY,
-
-        /**
-         * Display all contacts from a group in the cursor
-         */
-        GROUP_MEMBERS
-    }
-
-    public ContactTileAdapter(Context context, ContactTileView.Listener listener, int numCols,
-            DisplayType displayType) {
-        mListener = listener;
-        mContext = context;
-        mResources = context.getResources();
-        mColumnCount = (displayType == DisplayType.FREQUENT_ONLY ? 1 : numCols);
-        mDisplayType = displayType;
-        mNumFrequents = 0;
-
-        // Converting padding in dips to padding in pixels
-        mPaddingInPixels = mContext.getResources()
-                .getDimensionPixelSize(R.dimen.contact_tile_divider_padding);
-        mWhitespaceStartEnd = mContext.getResources()
-                .getDimensionPixelSize(R.dimen.contact_tile_start_end_whitespace);
-
-        bindColumnIndices();
-    }
-
-    public void setPhotoLoader(ContactPhotoManager photoLoader) {
-        mPhotoManager = photoLoader;
-    }
-
-    public void setColumnCount(int columnCount) {
-        mColumnCount = columnCount;
-    }
-
-    public void setDisplayType(DisplayType displayType) {
-        mDisplayType = displayType;
-    }
-
-    public void enableQuickContact(boolean enableQuickContact) {
-        mIsQuickContactEnabled = enableQuickContact;
-    }
-
-    /**
-     * Sets the column indices for expected {@link Cursor}
-     * based on {@link DisplayType}.
-     */
-    protected void bindColumnIndices() {
-        mIdIndex = ContactTileLoaderFactory.CONTACT_ID;
-        mLookupIndex = ContactTileLoaderFactory.LOOKUP_KEY;
-        mPhotoUriIndex = ContactTileLoaderFactory.PHOTO_URI;
-        mNameIndex = ContactTileLoaderFactory.DISPLAY_NAME;
-        mStarredIndex = ContactTileLoaderFactory.STARRED;
-        mPresenceIndex = ContactTileLoaderFactory.CONTACT_PRESENCE;
-        mStatusIndex = ContactTileLoaderFactory.CONTACT_STATUS;
-    }
-
-    private static boolean cursorIsValid(Cursor cursor) {
-        return cursor != null && !cursor.isClosed();
-    }
-
-    /**
-     * Gets the number of frequents from the passed in cursor.
-     *
-     * This methods is needed so the GroupMemberTileAdapter can override this.
-     *
-     * @param cursor The cursor to get number of frequents from.
-     */
-    protected void saveNumFrequentsFromCursor(Cursor cursor) {
-
-        // count the number of frequents
-        switch (mDisplayType) {
-            case STARRED_ONLY:
-                mNumFrequents = 0;
-                break;
-            case STREQUENT:
-                mNumFrequents = cursorIsValid(cursor) ?
-                    cursor.getCount() - mDividerPosition : 0;
-                break;
-            case FREQUENT_ONLY:
-                mNumFrequents = cursorIsValid(cursor) ? cursor.getCount() : 0;
-                break;
-            default:
-                throw new IllegalArgumentException("Unrecognized DisplayType " + mDisplayType);
-        }
-    }
-
-    /**
-     * Creates {@link ContactTileView}s for each item in {@link Cursor}.
-     *
-     * Else use {@link ContactTileLoaderFactory}
-     */
-    public void setContactCursor(Cursor cursor) {
-        mContactCursor = cursor;
-        mDividerPosition = getDividerPosition(cursor);
-
-        saveNumFrequentsFromCursor(cursor);
-
-        // cause a refresh of any views that rely on this data
-        notifyDataSetChanged();
-    }
-
-    /**
-     * Iterates over the {@link Cursor}
-     * Returns position of the first NON Starred Contact
-     * Returns -1 if {@link DisplayType#STARRED_ONLY}
-     * Returns 0 if {@link DisplayType#FREQUENT_ONLY}
-     */
-    protected int getDividerPosition(Cursor cursor) {
-        switch (mDisplayType) {
-            case STREQUENT:
-                if (!cursorIsValid(cursor)) {
-                    return 0;
-                }
-                cursor.moveToPosition(-1);
-                while (cursor.moveToNext()) {
-                    if (cursor.getInt(mStarredIndex) == 0) {
-                        return cursor.getPosition();
-                    }
-                }
-
-                // There are not NON Starred contacts in cursor
-                // Set divider positon to end
-                return cursor.getCount();
-            case STARRED_ONLY:
-                // There is no divider
-                return -1;
-            case FREQUENT_ONLY:
-                // Divider is first
-                return 0;
-            default:
-                throw new IllegalStateException("Unrecognized DisplayType " + mDisplayType);
-        }
-    }
-
-    protected ContactEntry createContactEntryFromCursor(Cursor cursor, int position) {
-        // If the loader was canceled we will be given a null cursor.
-        // In that case, show an empty list of contacts.
-        if (!cursorIsValid(cursor) || cursor.getCount() <= position) {
-            return null;
-        }
-
-        cursor.moveToPosition(position);
-        long id = cursor.getLong(mIdIndex);
-        String photoUri = cursor.getString(mPhotoUriIndex);
-        String lookupKey = cursor.getString(mLookupIndex);
-
-        ContactEntry contact = new ContactEntry();
-        String name = cursor.getString(mNameIndex);
-        contact.namePrimary = (name != null) ? name : mResources.getString(R.string.missing_name);
-        contact.status = cursor.getString(mStatusIndex);
-        contact.photoUri = (photoUri != null ? Uri.parse(photoUri) : null);
-        contact.lookupKey = lookupKey;
-        contact.lookupUri = ContentUris.withAppendedId(
-                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), id);
-        contact.isFavorite = cursor.getInt(mStarredIndex) > 0;
-
-        // Set presence icon and status message
-        Drawable icon = null;
-        int presence = 0;
-        if (!cursor.isNull(mPresenceIndex)) {
-            presence = cursor.getInt(mPresenceIndex);
-            icon = ContactPresenceIconUtil.getPresenceIcon(mContext, presence);
-        }
-        contact.presenceIcon = icon;
-
-        String statusMessage = null;
-        if (mStatusIndex != 0 && !cursor.isNull(mStatusIndex)) {
-            statusMessage = cursor.getString(mStatusIndex);
-        }
-        // If there is no status message from the contact, but there was a presence value,
-        // then use the default status message string
-        if (statusMessage == null && presence != 0) {
-            statusMessage = ContactStatusUtil.getStatusString(mContext, presence);
-        }
-        contact.status = statusMessage;
-
-        return contact;
-    }
-
-    /**
-     * Returns the number of frequents that will be displayed in the list.
-     */
-    public int getNumFrequents() {
-        return mNumFrequents;
-    }
-
-    @Override
-    public int getCount() {
-        if (!cursorIsValid(mContactCursor)) {
-            return 0;
-        }
-
-        switch (mDisplayType) {
-            case STARRED_ONLY:
-                return getRowCount(mContactCursor.getCount());
-            case STREQUENT:
-                // Takes numbers of rows the Starred Contacts Occupy
-                int starredRowCount = getRowCount(mDividerPosition);
-
-                // Compute the frequent row count which is 1 plus the number of frequents
-                // (to account for the divider) or 0 if there are no frequents.
-                int frequentRowCount = mNumFrequents == 0 ? 0 : mNumFrequents + 1;
-
-                // Return the number of starred plus frequent rows
-                return starredRowCount + frequentRowCount;
-            case FREQUENT_ONLY:
-                // Number of frequent contacts
-                return mContactCursor.getCount();
-            default:
-                throw new IllegalArgumentException("Unrecognized DisplayType " + mDisplayType);
-        }
-    }
-
-    /**
-     * Returns the number of rows required to show the provided number of entries
-     * with the current number of columns.
-     */
-    protected int getRowCount(int entryCount) {
-        return entryCount == 0 ? 0 : ((entryCount - 1) / mColumnCount) + 1;
-    }
-
-    public int getColumnCount() {
-        return mColumnCount;
-    }
-
-    /**
-     * Returns an ArrayList of the {@link ContactEntry}s that are to appear
-     * on the row for the given position.
-     */
-    @Override
-    public ArrayList<ContactEntry> getItem(int position) {
-        ArrayList<ContactEntry> resultList = new ArrayList<ContactEntry>(mColumnCount);
-        int contactIndex = position * mColumnCount;
-
-        switch (mDisplayType) {
-            case FREQUENT_ONLY:
-                resultList.add(createContactEntryFromCursor(mContactCursor, position));
-                break;
-            case STARRED_ONLY:
-                for (int columnCounter = 0; columnCounter < mColumnCount; columnCounter++) {
-                    resultList.add(createContactEntryFromCursor(mContactCursor, contactIndex));
-                    contactIndex++;
-                }
-                break;
-            case STREQUENT:
-                if (position < getRowCount(mDividerPosition)) {
-                    for (int columnCounter = 0; columnCounter < mColumnCount &&
-                            contactIndex != mDividerPosition; columnCounter++) {
-                        resultList.add(createContactEntryFromCursor(mContactCursor, contactIndex));
-                        contactIndex++;
-                    }
-                } else {
-                    /*
-                     * Current position minus how many rows are before the divider and
-                     * Minus 1 for the divider itself provides the relative index of the frequent
-                     * contact being displayed. Then add the dividerPostion to give the offset
-                     * into the contacts cursor to get the absoulte index.
-                     */
-                    contactIndex = position - getRowCount(mDividerPosition) - 1 + mDividerPosition;
-                    resultList.add(createContactEntryFromCursor(mContactCursor, contactIndex));
-                }
-                break;
-            default:
-                throw new IllegalStateException("Unrecognized DisplayType " + mDisplayType);
-        }
-        return resultList;
-    }
-
-    @Override
-    public long getItemId(int position) {
-        // As we show several selectable items for each ListView row,
-        // we can not determine a stable id. But as we don't rely on ListView's selection,
-        // this should not be a problem.
-        return position;
-    }
-
-    @Override
-    public boolean areAllItemsEnabled() {
-        return (mDisplayType != DisplayType.STREQUENT);
-    }
-
-    @Override
-    public boolean isEnabled(int position) {
-        return position != getRowCount(mDividerPosition);
-    }
-
-    @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
-        int itemViewType = getItemViewType(position);
-
-        if (itemViewType == ViewTypes.DIVIDER) {
-            // Checking For Divider First so not to cast convertView
-            final TextView textView = (TextView) (convertView == null ? getDivider() : convertView);
-            setDividerPadding(textView, position == 0);
-            return textView;
-        }
-
-        ContactTileRow contactTileRowView = (ContactTileRow) convertView;
-        ArrayList<ContactEntry> contactList = getItem(position);
-
-        if (contactTileRowView == null) {
-            // Creating new row if needed
-            contactTileRowView = new ContactTileRow(mContext, itemViewType);
-        }
-
-        contactTileRowView.configureRow(contactList, position == getCount() - 1);
-        return contactTileRowView;
-    }
-
-    /**
-     * Divider uses a list_seperator.xml along with text to denote
-     * the most frequently contacted contacts.
-     */
-    private TextView getDivider() {
-        return MoreContactUtils.createHeaderView(mContext, R.string.favoritesFrequentContacted);
-    }
-
-    private void setDividerPadding(TextView headerTextView, boolean isFirstRow) {
-        MoreContactUtils.setHeaderViewBottomPadding(mContext, headerTextView, isFirstRow);
-    }
-
-    private int getLayoutResourceId(int viewType) {
-        switch (viewType) {
-            case ViewTypes.STARRED:
-                return mIsQuickContactEnabled ?
-                        R.layout.contact_tile_starred_quick_contact : R.layout.contact_tile_starred;
-            case ViewTypes.FREQUENT:
-                return R.layout.contact_tile_frequent;
-            default:
-                throw new IllegalArgumentException("Unrecognized viewType " + viewType);
-        }
-    }
-    @Override
-    public int getViewTypeCount() {
-        return ViewTypes.COUNT;
-    }
-
-    @Override
-    public int getItemViewType(int position) {
-        /*
-         * Returns view type based on {@link DisplayType}.
-         * {@link DisplayType#STARRED_ONLY} and {@link DisplayType#GROUP_MEMBERS}
-         * are {@link ViewTypes#STARRED}.
-         * {@link DisplayType#FREQUENT_ONLY} is {@link ViewTypes#FREQUENT}.
-         * {@link DisplayType#STREQUENT} mixes both {@link ViewTypes}
-         * and also adds in {@link ViewTypes#DIVIDER}.
-         */
-        switch (mDisplayType) {
-            case STREQUENT:
-                if (position < getRowCount(mDividerPosition)) {
-                    return ViewTypes.STARRED;
-                } else if (position == getRowCount(mDividerPosition)) {
-                    return ViewTypes.DIVIDER;
-                } else {
-                    return ViewTypes.FREQUENT;
-                }
-            case STARRED_ONLY:
-                return ViewTypes.STARRED;
-            case FREQUENT_ONLY:
-                return ViewTypes.FREQUENT;
-            default:
-                throw new IllegalStateException("Unrecognized DisplayType " + mDisplayType);
-        }
-    }
-
-    /**
-     * Returns the "frequent header" position. Only available when STREQUENT or
-     * STREQUENT_PHONE_ONLY is used for its display type.
-     */
-    public int getFrequentHeaderPosition() {
-        return getRowCount(mDividerPosition);
-    }
-
-    /**
-     * Acts as a row item composed of {@link ContactTileView}
-     *
-     * TODO: FREQUENT doesn't really need it.  Just let {@link #getView} return
-     */
-    private class ContactTileRow extends FrameLayout {
-        private int mItemViewType;
-        private int mLayoutResId;
-
-        public ContactTileRow(Context context, int itemViewType) {
-            super(context);
-            mItemViewType = itemViewType;
-            mLayoutResId = getLayoutResourceId(mItemViewType);
-
-            // Remove row (but not children) from accessibility node tree.
-            setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
-        }
-
-        /**
-         * Configures the row to add {@link ContactEntry}s information to the views
-         */
-        public void configureRow(ArrayList<ContactEntry> list, boolean isLastRow) {
-            int columnCount = mItemViewType == ViewTypes.FREQUENT ? 1 : mColumnCount;
-
-            // Adding tiles to row and filling in contact information
-            for (int columnCounter = 0; columnCounter < columnCount; columnCounter++) {
-                ContactEntry entry =
-                        columnCounter < list.size() ? list.get(columnCounter) : null;
-                addTileFromEntry(entry, columnCounter, isLastRow);
-            }
-        }
-
-        private void addTileFromEntry(ContactEntry entry, int childIndex, boolean isLastRow) {
-            final ContactTileView contactTile;
-
-            if (getChildCount() <= childIndex) {
-                contactTile = (ContactTileView) inflate(mContext, mLayoutResId, null);
-                // Note: the layoutparam set here is only actually used for FREQUENT.
-                // We override onMeasure() for STARRED and we don't care the layout param there.
-                Resources resources = mContext.getResources();
-                FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
-                        ViewGroup.LayoutParams.MATCH_PARENT,
-                        ViewGroup.LayoutParams.WRAP_CONTENT);
-                params.setMargins(
-                        mWhitespaceStartEnd,
-                        0,
-                        mWhitespaceStartEnd,
-                        0);
-                contactTile.setLayoutParams(params);
-                contactTile.setPhotoManager(mPhotoManager);
-                contactTile.setListener(mListener);
-                addView(contactTile);
-            } else {
-                contactTile = (ContactTileView) getChildAt(childIndex);
-            }
-            contactTile.loadFromContact(entry);
-
-            switch (mItemViewType) {
-                case ViewTypes.STARRED:
-                    // Set padding between tiles. Divide mPaddingInPixels between left and right
-                    // tiles as evenly as possible.
-                    contactTile.setPaddingRelative(
-                            (mPaddingInPixels + 1) / 2, 0,
-                            mPaddingInPixels
-                            / 2, 0);
-                    break;
-                case ViewTypes.FREQUENT:
-                    contactTile.setHorizontalDividerVisibility(
-                            isLastRow ? View.GONE : View.VISIBLE);
-                    break;
-                default:
-                    break;
-            }
-        }
-
-        @Override
-        protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-            switch (mItemViewType) {
-                case ViewTypes.STARRED:
-                    onLayoutForTiles();
-                    return;
-                default:
-                    super.onLayout(changed, left, top, right, bottom);
-                    return;
-            }
-        }
-
-        private void onLayoutForTiles() {
-            final int count = getChildCount();
-
-            // Amount of margin needed on the left is based on difference between offset and padding
-            int childLeft = mWhitespaceStartEnd - (mPaddingInPixels + 1) / 2;
-
-            // Just line up children horizontally.
-            for (int i = 0; i < count; i++) {
-                final int rtlAdjustedIndex = ViewUtil.isViewLayoutRtl(this) ? count - i - 1 : i;
-                final View child = getChildAt(rtlAdjustedIndex);
-
-                // Note MeasuredWidth includes the padding.
-                final int childWidth = child.getMeasuredWidth();
-                child.layout(childLeft, 0, childLeft + childWidth, child.getMeasuredHeight());
-                childLeft += childWidth;
-            }
-        }
-
-        @Override
-        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-            switch (mItemViewType) {
-                case ViewTypes.STARRED:
-                    onMeasureForTiles(widthMeasureSpec);
-                    return;
-                default:
-                    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-                    return;
-            }
-        }
-
-        private void onMeasureForTiles(int widthMeasureSpec) {
-            final int width = MeasureSpec.getSize(widthMeasureSpec);
-
-            final int childCount = getChildCount();
-            if (childCount == 0) {
-                // Just in case...
-                setMeasuredDimension(width, 0);
-                return;
-            }
-
-            // 1. Calculate image size.
-            //      = ([total width] - [total whitespace]) / [child count]
-            //
-            // 2. Set it to width/height of each children.
-            //    If we have a remainder, some tiles will have 1 pixel larger width than its height.
-            //
-            // 3. Set the dimensions of itself.
-            //    Let width = given width.
-            //    Let height = wrap content.
-
-            final int totalWhitespaceInPixels = (mColumnCount - 1) * mPaddingInPixels
-                    + mWhitespaceStartEnd * 2;
-
-            // Preferred width / height for images (excluding the padding).
-            // The actual width may be 1 pixel larger than this if we have a remainder.
-            final int imageSize = (width - totalWhitespaceInPixels) / mColumnCount;
-            final int remainder = width - (imageSize * mColumnCount) - totalWhitespaceInPixels;
-
-            for (int i = 0; i < childCount; i++) {
-                final View child = getChildAt(i);
-                final int childWidth = imageSize + child.getPaddingRight() + child.getPaddingLeft()
-                        // Compensate for the remainder
-                        + (i < remainder ? 1 : 0);
-
-                child.measure(
-                        MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY),
-                        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
-                        );
-            }
-            setMeasuredDimension(width, getChildAt(0).getMeasuredHeight());
-        }
-    }
-
-    protected static class ViewTypes {
-        public static final int COUNT = 4;
-        public static final int STARRED = 0;
-        public static final int DIVIDER = 1;
-        public static final int FREQUENT = 2;
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactTileFrequentView.java b/src/com/android/contacts/common/list/ContactTileFrequentView.java
deleted file mode 100644
index 7dcd0a1..0000000
--- a/src/com/android/contacts/common/list/ContactTileFrequentView.java
+++ /dev/null
@@ -1,40 +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.common.list;
-
-import android.content.Context;
-import android.util.AttributeSet;
-
-import com.android.contacts.common.util.ViewUtil;
-
-/**
- * A {@link com.android.contacts.common.list.ContactTileView} that is used for most frequently contacted in the People app
- */
-public class ContactTileFrequentView extends ContactTileView {
-    public ContactTileFrequentView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected boolean isDarkTheme() {
-        return false;
-    }
-
-    @Override
-    protected int getApproximateImageSize() {
-        return ViewUtil.getConstantPreLayoutWidth(getPhotoView());
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactTilePhoneFrequentView.java b/src/com/android/contacts/common/list/ContactTilePhoneFrequentView.java
deleted file mode 100644
index aec93ab..0000000
--- a/src/com/android/contacts/common/list/ContactTilePhoneFrequentView.java
+++ /dev/null
@@ -1,79 +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.common.list;
-
-import android.content.Context;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.view.View;
-
-import com.android.contacts.common.MoreContactUtils;
-import com.android.contacts.common.util.ViewUtil;
-
-/**
- * A dark version of the {@link com.android.contacts.common.list.ContactTileView} that is used in Dialtacts
- * for frequently called contacts. Slightly different behavior from superclass...
- * when you tap it, you want to call the frequently-called number for the
- * contact, even if that is not the default number for that contact.
- */
-public class ContactTilePhoneFrequentView extends ContactTileView {
-    private String mPhoneNumberString;
-
-    public ContactTilePhoneFrequentView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected boolean isDarkTheme() {
-        return true;
-    }
-
-    @Override
-    protected int getApproximateImageSize() {
-        return ViewUtil.getConstantPreLayoutWidth(getQuickContact());
-    }
-
-    @Override
-    public void loadFromContact(ContactEntry entry) {
-        super.loadFromContact(entry);
-        mPhoneNumberString = null; // ... in case we're reusing the view
-        if (entry != null) {
-            // Grab the phone-number to call directly... see {@link onClick()}
-            mPhoneNumberString = entry.phoneNumber;
-        }
-    }
-
-    @Override
-    protected OnClickListener createClickListener() {
-        return new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                if (mListener == null) return;
-                if (TextUtils.isEmpty(mPhoneNumberString)) {
-                    // Copy "superclass" implementation
-                    mListener.onContactSelected(getLookupUri(), MoreContactUtils
-                            .getTargetRectFromView(ContactTilePhoneFrequentView.this));
-                } else {
-                    // When you tap a frequently-called contact, you want to
-                    // call them at the number that you usually talk to them
-                    // at (i.e. the one displayed in the UI), regardless of
-                    // whether that's their default number.
-                    mListener.onCallNumberDirectly(mPhoneNumberString);
-                }
-            }
-        };
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactTileStarredView.java b/src/com/android/contacts/common/list/ContactTileStarredView.java
deleted file mode 100644
index 59ef81e..0000000
--- a/src/com/android/contacts/common/list/ContactTileStarredView.java
+++ /dev/null
@@ -1,56 +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.common.list;
-
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-
-import android.content.Context;
-import android.util.AttributeSet;
-
-/**
- * A {@link ContactTileStarredView} displays the contact's picture overlayed with their name
- * in a square. The actual dimensions are set by
- * {@link com.android.contacts.common.list.ContactTileAdapter.ContactTileRow}.
- */
-public class ContactTileStarredView extends ContactTileView {
-
-    /**
-     * The photo manager should display the default image/letter at 80% of its normal size.
-     */
-    private static final float DEFAULT_IMAGE_LETTER_SCALE = 0.8f;
-
-    public ContactTileStarredView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected boolean isDarkTheme() {
-        return false;
-    }
-
-    @Override
-    protected int getApproximateImageSize() {
-        // The picture is the full size of the tile (minus some padding, but we can be generous)
-        return mListener.getApproximateTileWidth();
-    }
-
-    @Override
-    protected DefaultImageRequest getDefaultImageRequest(String displayName, String lookupKey) {
-        return new DefaultImageRequest(displayName, lookupKey, ContactPhotoManager.TYPE_DEFAULT,
-                DEFAULT_IMAGE_LETTER_SCALE, /* offset = */ 0, /* isCircular = */ true);
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactTileView.java b/src/com/android/contacts/common/list/ContactTileView.java
deleted file mode 100644
index 172d720..0000000
--- a/src/com/android/contacts/common/list/ContactTileView.java
+++ /dev/null
@@ -1,241 +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.common.list;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.View;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.QuickContactBadge;
-import android.widget.TextView;
-
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.MoreContactUtils;
-import com.android.contacts.common.R;
-
-/**
- * A ContactTile displays a contact's picture and name
- */
-public abstract class ContactTileView extends FrameLayout {
-    private final static String TAG = ContactTileView.class.getSimpleName();
-
-    private Uri mLookupUri;
-    private ImageView mPhoto;
-    private QuickContactBadge mQuickContact;
-    private TextView mName;
-    private TextView mStatus;
-    private TextView mPhoneLabel;
-    private TextView mPhoneNumber;
-    private ContactPhotoManager mPhotoManager = null;
-    private View mPushState;
-    private View mHorizontalDivider;
-    protected Listener mListener;
-
-    public ContactTileView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-        mName = (TextView) findViewById(R.id.contact_tile_name);
-
-        mQuickContact = (QuickContactBadge) findViewById(R.id.contact_tile_quick);
-        mPhoto = (ImageView) findViewById(R.id.contact_tile_image);
-        mStatus = (TextView) findViewById(R.id.contact_tile_status);
-        mPhoneLabel = (TextView) findViewById(R.id.contact_tile_phone_type);
-        mPhoneNumber = (TextView) findViewById(R.id.contact_tile_phone_number);
-        mPushState = findViewById(R.id.contact_tile_push_state);
-        mHorizontalDivider = findViewById(R.id.contact_tile_horizontal_divider);
-
-        OnClickListener listener = createClickListener();
-        setOnClickListener(listener);
-    }
-
-    protected OnClickListener createClickListener() {
-        return new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                if (mListener == null) return;
-                mListener.onContactSelected(
-                        getLookupUri(),
-                        MoreContactUtils.getTargetRectFromView(ContactTileView.this));
-            }
-        };
-    }
-
-    public void setPhotoManager(ContactPhotoManager photoManager) {
-        mPhotoManager = photoManager;
-    }
-
-    /**
-     * Populates the data members to be displayed from the
-     * fields in {@link com.android.contacts.common.list.ContactEntry}
-     */
-    public void loadFromContact(ContactEntry entry) {
-
-        if (entry != null) {
-            mName.setText(getNameForView(entry));
-            mLookupUri = entry.lookupUri;
-
-            if (mStatus != null) {
-                if (entry.status == null) {
-                    mStatus.setVisibility(View.GONE);
-                } else {
-                    mStatus.setText(entry.status);
-                    mStatus.setCompoundDrawablesWithIntrinsicBounds(entry.presenceIcon,
-                            null, null, null);
-                    mStatus.setVisibility(View.VISIBLE);
-                }
-            }
-
-            if (mPhoneLabel != null) {
-                if (TextUtils.isEmpty(entry.phoneLabel)) {
-                    mPhoneLabel.setVisibility(View.GONE);
-                } else {
-                    mPhoneLabel.setVisibility(View.VISIBLE);
-                    mPhoneLabel.setText(entry.phoneLabel);
-                }
-            }
-
-            if (mPhoneNumber != null) {
-                // TODO: Format number correctly
-                mPhoneNumber.setText(entry.phoneNumber);
-            }
-
-            setVisibility(View.VISIBLE);
-
-            if (mPhotoManager != null) {
-                DefaultImageRequest request = getDefaultImageRequest(entry.namePrimary,
-                        entry.lookupKey);
-                configureViewForImage(entry.photoUri == null);
-                if (mPhoto != null) {
-                    mPhotoManager.loadPhoto(mPhoto, entry.photoUri, getApproximateImageSize(),
-                            isDarkTheme(), isContactPhotoCircular(), request);
-
-                    if (mQuickContact != null) {
-                        mQuickContact.assignContactUri(mLookupUri);
-                    }
-                } else if (mQuickContact != null) {
-                    mQuickContact.assignContactUri(mLookupUri);
-                    mPhotoManager.loadPhoto(mQuickContact, entry.photoUri,
-                            getApproximateImageSize(), isDarkTheme(), isContactPhotoCircular(),
-                            request);
-                }
-            } else {
-                Log.w(TAG, "contactPhotoManager not set");
-            }
-
-            if (mPushState != null) {
-                mPushState.setContentDescription(entry.namePrimary);
-            } else if (mQuickContact != null) {
-                mQuickContact.setContentDescription(entry.namePrimary);
-            }
-        } else {
-            setVisibility(View.INVISIBLE);
-        }
-    }
-
-    public void setListener(Listener listener) {
-        mListener = listener;
-    }
-
-    public void setHorizontalDividerVisibility(int visibility) {
-        if (mHorizontalDivider != null) mHorizontalDivider.setVisibility(visibility);
-    }
-
-    public Uri getLookupUri() {
-        return mLookupUri;
-    }
-
-    protected QuickContactBadge getQuickContact() {
-        return mQuickContact;
-    }
-
-    protected View getPhotoView() {
-        return mPhoto;
-    }
-
-    /**
-     * Returns the string that should actually be displayed as the contact's name. Subclasses
-     * can override this to return formatted versions of the name - i.e. first name only.
-     */
-    protected String getNameForView(ContactEntry contactEntry) {
-        return contactEntry.namePrimary;
-    }
-
-    /**
-     * Implemented by subclasses to estimate the size of the picture. This can return -1 if only
-     * a thumbnail is shown anyway
-     */
-    protected abstract int getApproximateImageSize();
-
-    protected abstract boolean isDarkTheme();
-
-    /**
-     * Implemented by subclasses to reconfigure the view's layout and subviews, based on whether
-     * or not the contact has a user-defined photo.
-     *
-     * @param isDefaultImage True if the contact does not have a user-defined contact photo
-     * (which means a default contact image will be applied by the {@link ContactPhotoManager}
-     */
-    protected void configureViewForImage(boolean isDefaultImage) {
-        // No-op by default.
-    }
-
-    /**
-     * Implemented by subclasses to allow them to return a {@link DefaultImageRequest} with the
-     * various image parameters defined to match their own layouts.
-     *
-     * @param displayName The display name of the contact
-     * @param lookupKey The lookup key of the contact
-     * @return A {@link DefaultImageRequest} object with each field configured by the subclass
-     * as desired, or {@code null}.
-     */
-    protected DefaultImageRequest getDefaultImageRequest(String displayName, String lookupKey) {
-        return new DefaultImageRequest(displayName, lookupKey, isContactPhotoCircular());
-    }
-
-    /**
-     * Whether contact photo should be displayed as a circular image. Implemented by subclasses
-     * so they can change which drawables to fetch.
-     */
-    protected boolean isContactPhotoCircular() {
-        return true;
-    }
-
-    public interface Listener {
-        /**
-         * Notification that the contact was selected; no specific action is dictated.
-         */
-        void onContactSelected(Uri contactLookupUri, Rect viewRect);
-        /**
-         * Notification that the specified number is to be called.
-         */
-        void onCallNumberDirectly(String phoneNumber);
-        /**
-         * @return The width of each tile. This doesn't have to be a precise number (e.g. paddings
-         *         can be ignored), but is used to load the correct picture size from the database
-         */
-        int getApproximateTileWidth();
-    }
-}
diff --git a/src/com/android/contacts/common/list/ContactsSectionIndexer.java b/src/com/android/contacts/common/list/ContactsSectionIndexer.java
deleted file mode 100644
index 031380d..0000000
--- a/src/com/android/contacts/common/list/ContactsSectionIndexer.java
+++ /dev/null
@@ -1,128 +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.common.list;
-
-import android.text.TextUtils;
-import android.widget.SectionIndexer;
-
-import java.util.Arrays;
-
-/**
- * A section indexer that is configured with precomputed section titles and
- * their respective counts.
- */
-public class ContactsSectionIndexer implements SectionIndexer {
-
-    protected static final String BLANK_HEADER_STRING = "\u2026"; // ellipsis
-
-    private String[] mSections;
-    private int[] mPositions;
-    private int mCount;
-
-    /**
-     * Constructor.
-     *
-     * @param sections a non-null array
-     * @param counts a non-null array of the same size as <code>sections</code>
-     */
-    public ContactsSectionIndexer(String[] sections, int[] counts) {
-        if (sections == null || counts == null) {
-            throw new NullPointerException();
-        }
-
-        if (sections.length != counts.length) {
-            throw new IllegalArgumentException(
-                    "The sections and counts arrays must have the same length");
-        }
-
-        // TODO process sections/counts based on current locale and/or specific section titles
-
-        this.mSections = sections;
-        mPositions = new int[counts.length];
-        int position = 0;
-        for (int i = 0; i < counts.length; i++) {
-            // Enforce that there will be no null or empty sections.
-            if (TextUtils.isEmpty(mSections[i])) {
-                mSections[i] = BLANK_HEADER_STRING;
-            } else if (!mSections[i].equals(BLANK_HEADER_STRING)) {
-                mSections[i] = mSections[i].trim();
-            }
-
-            mPositions[i] = position;
-            position += counts[i];
-        }
-        mCount = position;
-    }
-
-    public Object[] getSections() {
-        return mSections;
-    }
-
-    public int[] getPositions() {
-        return mPositions;
-    }
-
-    public int getPositionForSection(int section) {
-        if (section < 0 || section >= mSections.length) {
-            return -1;
-        }
-
-        return mPositions[section];
-    }
-
-    public int getSectionForPosition(int position) {
-        if (position < 0 || position >= mCount) {
-            return -1;
-        }
-
-        int index = Arrays.binarySearch(mPositions, position);
-
-        /*
-         * Consider this example: section positions are 0, 3, 5; the supplied
-         * position is 4. The section corresponding to position 4 starts at
-         * position 3, so the expected return value is 1. Binary search will not
-         * find 4 in the array and thus will return -insertPosition-1, i.e. -3.
-         * To get from that number to the expected value of 1 we need to negate
-         * and subtract 2.
-         */
-        return index >= 0 ? index : -index - 2;
-    }
-
-    public void setFavoritesHeader(int numberOfItemsToAdd) {
-        if (mSections != null) {
-            // Don't do anything if the header is already set properly.
-            if (mSections.length > 0 && mSections[0].isEmpty()) {
-                return;
-            }
-
-            // Since the section indexer isn't aware of the profile at the top, we need to add a
-            // special section at the top for it and shift everything else down.
-            String[] tempSections = new String[mSections.length + 1];
-            int[] tempPositions = new int[mPositions.length + 1];
-            // Favorites section is empty to hide fast scroll preview.
-            tempSections[0] = "";
-            tempPositions[0] = 0;
-            for (int i = 1; i <= mPositions.length; i++) {
-                tempSections[i] = mSections[i - 1];
-                tempPositions[i] = mPositions[i - 1] + numberOfItemsToAdd;
-            }
-            mSections = tempSections;
-            mPositions = tempPositions;
-            mCount = mCount + numberOfItemsToAdd;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/list/CustomContactListFilterActivity.java b/src/com/android/contacts/common/list/CustomContactListFilterActivity.java
deleted file mode 100644
index 157d0a8..0000000
--- a/src/com/android/contacts/common/list/CustomContactListFilterActivity.java
+++ /dev/null
@@ -1,1023 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.list;
-
-import android.app.ActionBar;
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.app.ProgressDialog;
-import android.content.AsyncTaskLoader;
-import android.content.ContentProviderOperation;
-import android.content.ContentResolver;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.Loader;
-import android.content.OperationApplicationException;
-import android.database.Cursor;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.RemoteException;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Groups;
-import android.provider.ContactsContract.Settings;
-import android.util.Log;
-import android.view.ContextMenu;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MenuItem.OnMenuItemClickListener;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseExpandableListAdapter;
-import android.widget.CheckBox;
-import android.widget.ExpandableListAdapter;
-import android.widget.ExpandableListView;
-import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
-import android.widget.TextView;
-
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.AccountTypeManager;
-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.EmptyService;
-import com.android.contacts.common.util.LocalizedNameResolver;
-import com.android.contacts.common.util.WeakAsyncTask;
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Shows a list of all available {@link Groups} available, letting the user
- * select which ones they want to be visible.
- */
-public class CustomContactListFilterActivity extends Activity implements
-        ExpandableListView.OnChildClickListener,
-        LoaderCallbacks<CustomContactListFilterActivity.AccountSet> {
-    private static final String TAG = "CustomContactListFilterActivity";
-
-    public static final String EXTRA_CURRENT_LIST_FILTER_TYPE = "currentListFilterType";
-
-    private static final int ACCOUNT_SET_LOADER_ID = 1;
-
-    private ExpandableListView mList;
-    private DisplayAdapter mAdapter;
-
-    @Override
-    protected void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-        setContentView(R.layout.contact_list_filter_custom);
-
-        mList = (ExpandableListView) findViewById(android.R.id.list);
-        mList.setOnChildClickListener(this);
-        mList.setHeaderDividersEnabled(true);
-        mList.setChildDivider(new ColorDrawable(Color.TRANSPARENT));
-
-        mList.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
-            @Override
-            public void onLayoutChange(final View v, final int left, final int top, final int right,
-                    final int bottom, final int oldLeft, final int oldTop, final int oldRight,
-                    final int oldBottom) {
-                mList.setIndicatorBounds(
-                        mList.getWidth() - getResources().getDimensionPixelSize(
-                                R.dimen.contact_filter_indicator_padding_end),
-                        mList.getWidth() - getResources().getDimensionPixelSize(
-                                R.dimen.contact_filter_indicator_padding_start));
-            }
-        });
-
-        mAdapter = new DisplayAdapter(this);
-
-        mList.setOnCreateContextMenuListener(this);
-
-        mList.setAdapter(mAdapter);
-
-        ActionBar actionBar = getActionBar();
-        if (actionBar != null) {
-            // android.R.id.home will be triggered in onOptionsItemSelected()
-            actionBar.setDisplayHomeAsUpEnabled(true);
-        }
-    }
-
-    public static class CustomFilterConfigurationLoader extends AsyncTaskLoader<AccountSet> {
-
-        private AccountSet mAccountSet;
-
-        public CustomFilterConfigurationLoader(Context context) {
-            super(context);
-        }
-
-        @Override
-        public AccountSet loadInBackground() {
-            Context context = getContext();
-            final AccountTypeManager accountTypes = AccountTypeManager.getInstance(context);
-            final ContentResolver resolver = context.getContentResolver();
-
-            final AccountSet accounts = new AccountSet();
-
-            // Don't include the null account because it doesn't support writing to
-            // ContactsContract.Settings
-            final List<AccountWithDataSet> sourceAccounts = accountTypes.getAccounts(
-                    AccountTypeManager.nonNullAccountFilter());
-            final AccountDisplayInfoFactory displayableAccountFactory =
-                    new AccountDisplayInfoFactory(context, sourceAccounts);
-            for (AccountWithDataSet account : sourceAccounts) {
-                final AccountType accountType = accountTypes.getAccountTypeForAccount(account);
-                if (accountType.isExtension() && !account.hasData(context)) {
-                    // Extension with no data -- skip.
-                    continue;
-                }
-
-                AccountDisplay accountDisplay =
-                        new AccountDisplay(resolver, account.name, account.type, account.dataSet,
-                                displayableAccountFactory.getAccountDisplayInfo(account));
-
-                final Uri.Builder groupsUri = Groups.CONTENT_URI.buildUpon()
-                        .appendQueryParameter(Groups.ACCOUNT_NAME, account.name)
-                        .appendQueryParameter(Groups.ACCOUNT_TYPE, account.type);
-                if (account.dataSet != null) {
-                    groupsUri.appendQueryParameter(Groups.DATA_SET, account.dataSet).build();
-                }
-                final Cursor cursor = resolver.query(groupsUri.build(), null, null, null, null);
-                if (cursor == null) {
-                    continue;
-                }
-                android.content.EntityIterator iterator =
-                        ContactsContract.Groups.newEntityIterator(cursor);
-                try {
-                    boolean hasGroups = false;
-
-                    // Create entries for each known group
-                    while (iterator.hasNext()) {
-                        final ContentValues values = iterator.next().getEntityValues();
-                        final GroupDelta group = GroupDelta.fromBefore(values);
-                        accountDisplay.addGroup(group);
-                        hasGroups = true;
-                    }
-                    // Create single entry handling ungrouped status
-                    accountDisplay.mUngrouped =
-                        GroupDelta.fromSettings(resolver, account.name, account.type,
-                                account.dataSet, hasGroups);
-                    accountDisplay.addGroup(accountDisplay.mUngrouped);
-                } finally {
-                    iterator.close();
-                }
-
-                accounts.add(accountDisplay);
-            }
-
-            return accounts;
-        }
-
-        @Override
-        public void deliverResult(AccountSet cursor) {
-            if (isReset()) {
-                return;
-            }
-
-            mAccountSet = cursor;
-
-            if (isStarted()) {
-                super.deliverResult(cursor);
-            }
-        }
-
-        @Override
-        protected void onStartLoading() {
-            if (mAccountSet != null) {
-                deliverResult(mAccountSet);
-            }
-            if (takeContentChanged() || mAccountSet == null) {
-                forceLoad();
-            }
-        }
-
-        @Override
-        protected void onStopLoading() {
-            cancelLoad();
-        }
-
-        @Override
-        protected void onReset() {
-            super.onReset();
-            onStopLoading();
-            mAccountSet = null;
-        }
-    }
-
-    @Override
-    protected void onStart() {
-        getLoaderManager().initLoader(ACCOUNT_SET_LOADER_ID, null, this);
-        super.onStart();
-    }
-
-    @Override
-    public Loader<AccountSet> onCreateLoader(int id, Bundle args) {
-        return new CustomFilterConfigurationLoader(this);
-    }
-
-    @Override
-    public void onLoadFinished(Loader<AccountSet> loader, AccountSet data) {
-        mAdapter.setAccounts(data);
-    }
-
-    @Override
-    public void onLoaderReset(Loader<AccountSet> loader) {
-        mAdapter.setAccounts(null);
-    }
-
-    private static final int DEFAULT_SHOULD_SYNC = 1;
-    private static final int DEFAULT_VISIBLE = 0;
-
-    /**
-     * Entry holding any changes to {@link Groups} or {@link Settings} rows,
-     * such as {@link Groups#SHOULD_SYNC} or {@link Groups#GROUP_VISIBLE}.
-     */
-    protected static class GroupDelta extends ValuesDelta {
-        private boolean mUngrouped = false;
-        private boolean mAccountHasGroups;
-
-        private GroupDelta() {
-            super();
-        }
-
-        /**
-         * Build {@link GroupDelta} from the {@link Settings} row for the given
-         * {@link Settings#ACCOUNT_NAME}, {@link Settings#ACCOUNT_TYPE}, and
-         * {@link Settings#DATA_SET}.
-         */
-        public static GroupDelta fromSettings(ContentResolver resolver, String accountName,
-                String accountType, String dataSet, boolean accountHasGroups) {
-            final Uri.Builder settingsUri = Settings.CONTENT_URI.buildUpon()
-                    .appendQueryParameter(Settings.ACCOUNT_NAME, accountName)
-                    .appendQueryParameter(Settings.ACCOUNT_TYPE, accountType);
-            if (dataSet != null) {
-                settingsUri.appendQueryParameter(Settings.DATA_SET, dataSet);
-            }
-            final Cursor cursor = resolver.query(settingsUri.build(), new String[] {
-                    Settings.SHOULD_SYNC, Settings.UNGROUPED_VISIBLE
-            }, null, null, null);
-
-            try {
-                final ContentValues values = new ContentValues();
-                values.put(Settings.ACCOUNT_NAME, accountName);
-                values.put(Settings.ACCOUNT_TYPE, accountType);
-                values.put(Settings.DATA_SET, dataSet);
-
-                if (cursor != null && cursor.moveToFirst()) {
-                    // Read existing values when present
-                    values.put(Settings.SHOULD_SYNC, cursor.getInt(0));
-                    values.put(Settings.UNGROUPED_VISIBLE, cursor.getInt(1));
-                    return fromBefore(values).setUngrouped(accountHasGroups);
-                } else {
-                    // Nothing found, so treat as create
-                    values.put(Settings.SHOULD_SYNC, DEFAULT_SHOULD_SYNC);
-                    values.put(Settings.UNGROUPED_VISIBLE, DEFAULT_VISIBLE);
-                    return fromAfter(values).setUngrouped(accountHasGroups);
-                }
-            } finally {
-                if (cursor != null) cursor.close();
-            }
-        }
-
-        public static GroupDelta fromBefore(ContentValues before) {
-            final GroupDelta entry = new GroupDelta();
-            entry.mBefore = before;
-            entry.mAfter = new ContentValues();
-            return entry;
-        }
-
-        public static GroupDelta fromAfter(ContentValues after) {
-            final GroupDelta entry = new GroupDelta();
-            entry.mBefore = null;
-            entry.mAfter = after;
-            return entry;
-        }
-
-        protected GroupDelta setUngrouped(boolean accountHasGroups) {
-            mUngrouped = true;
-            mAccountHasGroups = accountHasGroups;
-            return this;
-        }
-
-        @Override
-        public boolean beforeExists() {
-            return mBefore != null;
-        }
-
-        public boolean getShouldSync() {
-            return getAsInteger(mUngrouped ? Settings.SHOULD_SYNC : Groups.SHOULD_SYNC,
-                    DEFAULT_SHOULD_SYNC) != 0;
-        }
-
-        public boolean getVisible() {
-            return getAsInteger(mUngrouped ? Settings.UNGROUPED_VISIBLE : Groups.GROUP_VISIBLE,
-                    DEFAULT_VISIBLE) != 0;
-        }
-
-        public void putShouldSync(boolean shouldSync) {
-            put(mUngrouped ? Settings.SHOULD_SYNC : Groups.SHOULD_SYNC, shouldSync ? 1 : 0);
-        }
-
-        public void putVisible(boolean visible) {
-            put(mUngrouped ? Settings.UNGROUPED_VISIBLE : Groups.GROUP_VISIBLE, visible ? 1 : 0);
-        }
-
-        private String getAccountType() {
-            return (mBefore == null ? mAfter : mBefore).getAsString(Settings.ACCOUNT_TYPE);
-        }
-
-        public CharSequence getTitle(Context context) {
-            if (mUngrouped) {
-                final String customAllContactsName =
-                        LocalizedNameResolver.getAllContactsName(context, getAccountType());
-                if (customAllContactsName != null) {
-                    return customAllContactsName;
-                }
-                if (mAccountHasGroups) {
-                    return context.getText(R.string.display_ungrouped);
-                } else {
-                    return context.getText(R.string.display_all_contacts);
-                }
-            } else {
-                final Integer titleRes = getAsInteger(Groups.TITLE_RES);
-                if (titleRes != null && titleRes != 0) {
-                    final String packageName = getAsString(Groups.RES_PACKAGE);
-                    if (packageName != null) {
-                        return context.getPackageManager().getText(packageName, titleRes, null);
-                    }
-                }
-                return getAsString(Groups.TITLE);
-            }
-        }
-
-        /**
-         * Build a possible {@link ContentProviderOperation} to persist any
-         * changes to the {@link Groups} or {@link Settings} row described by
-         * this {@link GroupDelta}.
-         */
-        public ContentProviderOperation buildDiff() {
-            if (isInsert()) {
-                // Only allow inserts for Settings
-                if (mUngrouped) {
-                    mAfter.remove(mIdColumn);
-                    return ContentProviderOperation.newInsert(Settings.CONTENT_URI)
-                            .withValues(mAfter)
-                            .build();
-                }
-                else {
-                    throw new IllegalStateException("Unexpected diff");
-                }
-            } else if (isUpdate()) {
-                if (mUngrouped) {
-                    String accountName = this.getAsString(Settings.ACCOUNT_NAME);
-                    String accountType = this.getAsString(Settings.ACCOUNT_TYPE);
-                    String dataSet = this.getAsString(Settings.DATA_SET);
-                    StringBuilder selection = new StringBuilder(Settings.ACCOUNT_NAME + "=? AND "
-                            + Settings.ACCOUNT_TYPE + "=?");
-                    String[] selectionArgs;
-                    if (dataSet == null) {
-                        selection.append(" AND " + Settings.DATA_SET + " IS NULL");
-                        selectionArgs = new String[] {accountName, accountType};
-                    } else {
-                        selection.append(" AND " + Settings.DATA_SET + "=?");
-                        selectionArgs = new String[] {accountName, accountType, dataSet};
-                    }
-                    return ContentProviderOperation.newUpdate(Settings.CONTENT_URI)
-                            .withSelection(selection.toString(), selectionArgs)
-                            .withValues(mAfter)
-                            .build();
-                } else {
-                    return ContentProviderOperation.newUpdate(
-                                    addCallerIsSyncAdapterParameter(Groups.CONTENT_URI))
-                            .withSelection(Groups._ID + "=" + this.getId(), null)
-                            .withValues(mAfter)
-                            .build();
-                }
-            } else {
-                return null;
-            }
-        }
-    }
-
-    private static Uri addCallerIsSyncAdapterParameter(Uri uri) {
-        return uri.buildUpon()
-            .appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true")
-            .build();
-    }
-
-    /**
-     * {@link Comparator} to sort by {@link Groups#_ID}.
-     */
-    private static Comparator<GroupDelta> sIdComparator = new Comparator<GroupDelta>() {
-        public int compare(GroupDelta object1, GroupDelta object2) {
-            final Long id1 = object1.getId();
-            final Long id2 = object2.getId();
-            if (id1 == null && id2 == null) {
-                return 0;
-            } else if (id1 == null) {
-                return -1;
-            } else if (id2 == null) {
-                return 1;
-            } else if (id1 < id2) {
-                return -1;
-            } else if (id1 > id2) {
-                return 1;
-            } else {
-                return 0;
-            }
-        }
-    };
-
-    /**
-     * Set of all {@link AccountDisplay} entries, one for each source.
-     */
-    protected static class AccountSet extends ArrayList<AccountDisplay> {
-        public ArrayList<ContentProviderOperation> buildDiff() {
-            final ArrayList<ContentProviderOperation> diff = Lists.newArrayList();
-            for (AccountDisplay account : this) {
-                account.buildDiff(diff);
-            }
-            return diff;
-        }
-    }
-
-    /**
-     * {@link GroupDelta} details for a single {@link AccountWithDataSet}, usually shown as
-     * children under a single expandable group.
-     */
-    protected static class AccountDisplay {
-        public final String mName;
-        public final String mType;
-        public final String mDataSet;
-        public final AccountDisplayInfo mAccountDisplayInfo;
-
-        public GroupDelta mUngrouped;
-        public ArrayList<GroupDelta> mSyncedGroups = Lists.newArrayList();
-        public ArrayList<GroupDelta> mUnsyncedGroups = Lists.newArrayList();
-
-        public GroupDelta getGroup(int position) {
-            if (position < mSyncedGroups.size()) {
-                return mSyncedGroups.get(position);
-            }
-            position -= mSyncedGroups.size();
-            return mUnsyncedGroups.get(position);
-        }
-
-        /**
-         * Build an {@link AccountDisplay} covering all {@link Groups} under the
-         * given {@link AccountWithDataSet}.
-         */
-        public AccountDisplay(ContentResolver resolver, String accountName, String accountType,
-                String dataSet, AccountDisplayInfo displayableInfo) {
-            mName = accountName;
-            mType = accountType;
-            mDataSet = dataSet;
-            mAccountDisplayInfo = displayableInfo;
-        }
-
-        /**
-         * Add the given {@link GroupDelta} internally, filing based on its
-         * {@link GroupDelta#getShouldSync()} status.
-         */
-        private void addGroup(GroupDelta group) {
-            if (group.getShouldSync()) {
-                mSyncedGroups.add(group);
-            } else {
-                mUnsyncedGroups.add(group);
-            }
-        }
-
-        /**
-         * Set the {@link GroupDelta#putShouldSync(boolean)} value for all
-         * children {@link GroupDelta} rows.
-         */
-        public void setShouldSync(boolean shouldSync) {
-            final Iterator<GroupDelta> oppositeChildren = shouldSync ?
-                    mUnsyncedGroups.iterator() : mSyncedGroups.iterator();
-            while (oppositeChildren.hasNext()) {
-                final GroupDelta child = oppositeChildren.next();
-                setShouldSync(child, shouldSync, false);
-                oppositeChildren.remove();
-            }
-        }
-
-        public void setShouldSync(GroupDelta child, boolean shouldSync) {
-            setShouldSync(child, shouldSync, true);
-        }
-
-        /**
-         * Set {@link GroupDelta#putShouldSync(boolean)}, and file internally
-         * based on updated state.
-         */
-        public void setShouldSync(GroupDelta child, boolean shouldSync, boolean attemptRemove) {
-            child.putShouldSync(shouldSync);
-            if (shouldSync) {
-                if (attemptRemove) {
-                    mUnsyncedGroups.remove(child);
-                }
-                mSyncedGroups.add(child);
-                Collections.sort(mSyncedGroups, sIdComparator);
-            } else {
-                if (attemptRemove) {
-                    mSyncedGroups.remove(child);
-                }
-                mUnsyncedGroups.add(child);
-            }
-        }
-
-        /**
-         * Build set of {@link ContentProviderOperation} to persist any user
-         * changes to {@link GroupDelta} rows under this {@link AccountWithDataSet}.
-         */
-        public void buildDiff(ArrayList<ContentProviderOperation> diff) {
-            for (GroupDelta group : mSyncedGroups) {
-                final ContentProviderOperation oper = group.buildDiff();
-                if (oper != null) diff.add(oper);
-            }
-            for (GroupDelta group : mUnsyncedGroups) {
-                final ContentProviderOperation oper = group.buildDiff();
-                if (oper != null) diff.add(oper);
-            }
-        }
-    }
-
-    /**
-     * {@link ExpandableListAdapter} that shows {@link GroupDelta} settings,
-     * grouped by {@link AccountWithDataSet} type. Shows footer row when any groups are
-     * unsynced, as determined through {@link AccountDisplay#mUnsyncedGroups}.
-     */
-    protected static class DisplayAdapter extends BaseExpandableListAdapter {
-        private Context mContext;
-        private LayoutInflater mInflater;
-        private AccountTypeManager mAccountTypes;
-        private AccountSet mAccounts;
-
-        private boolean mChildWithPhones = false;
-
-        public DisplayAdapter(Context context) {
-            mContext = context;
-            mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-            mAccountTypes = AccountTypeManager.getInstance(context);
-        }
-
-        public void setAccounts(AccountSet accounts) {
-            mAccounts = accounts;
-            notifyDataSetChanged();
-        }
-
-        /**
-         * In group descriptions, show the number of contacts with phone
-         * numbers, in addition to the total contacts.
-         */
-        public void setChildDescripWithPhones(boolean withPhones) {
-            mChildWithPhones = withPhones;
-        }
-
-        @Override
-        public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
-                ViewGroup parent) {
-            if (convertView == null) {
-                convertView = mInflater.inflate(
-                        R.layout.custom_contact_list_filter_account, parent, false);
-            }
-
-            final TextView text1 = (TextView)convertView.findViewById(android.R.id.text1);
-            final TextView text2 = (TextView)convertView.findViewById(android.R.id.text2);
-
-            final AccountDisplay account = (AccountDisplay)this.getGroup(groupPosition);
-
-            text1.setText(account.mAccountDisplayInfo.getNameLabel());
-            text1.setVisibility(!account.mAccountDisplayInfo.isDeviceAccount()
-                    || account.mAccountDisplayInfo.hasDistinctName()
-                    ? View.VISIBLE : View.GONE);
-            text2.setText(account.mAccountDisplayInfo.getTypeLabel());
-
-            final int textColor = mContext.getResources().getColor(isExpanded
-                    ? R.color.dialtacts_theme_color
-                    : R.color.account_filter_text_color);
-            text1.setTextColor(textColor);
-            text2.setTextColor(textColor);
-
-            return convertView;
-        }
-
-        @Override
-        public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
-                View convertView, ViewGroup parent) {
-            if (convertView == null) {
-                convertView = mInflater.inflate(
-                        R.layout.custom_contact_list_filter_group, parent, false);
-            }
-
-            final TextView text1 = (TextView)convertView.findViewById(android.R.id.text1);
-            final TextView text2 = (TextView)convertView.findViewById(android.R.id.text2);
-            final CheckBox checkbox = (CheckBox)convertView.findViewById(android.R.id.checkbox);
-
-            final AccountDisplay account = mAccounts.get(groupPosition);
-            final GroupDelta child = (GroupDelta)this.getChild(groupPosition, childPosition);
-            if (child != null) {
-                // Handle normal group, with title and checkbox
-                final boolean groupVisible = child.getVisible();
-                checkbox.setVisibility(View.VISIBLE);
-                checkbox.setChecked(groupVisible);
-
-                final CharSequence groupTitle = child.getTitle(mContext);
-                text1.setText(groupTitle);
-                text2.setVisibility(View.GONE);
-            } else {
-                // When unknown child, this is "more" footer view
-                checkbox.setVisibility(View.GONE);
-                text1.setText(R.string.display_more_groups);
-                text2.setVisibility(View.GONE);
-            }
-
-            // Show divider at bottom only for the last child.
-            final View dividerBottom = convertView.findViewById(R.id.adapter_divider_bottom);
-            dividerBottom.setVisibility(isLastChild ? View.VISIBLE : View.GONE);
-
-            return convertView;
-        }
-
-        @Override
-        public Object getChild(int groupPosition, int childPosition) {
-            final AccountDisplay account = mAccounts.get(groupPosition);
-            final boolean validChild = childPosition >= 0
-                    && childPosition < account.mSyncedGroups.size()
-                    + account.mUnsyncedGroups.size();
-            if (validChild) {
-                return account.getGroup(childPosition);
-            } else {
-                return null;
-            }
-        }
-
-        @Override
-        public long getChildId(int groupPosition, int childPosition) {
-            final GroupDelta child = (GroupDelta)getChild(groupPosition, childPosition);
-            if (child != null) {
-                final Long childId = child.getId();
-                return childId != null ? childId : Long.MIN_VALUE;
-            } else {
-                return Long.MIN_VALUE;
-            }
-        }
-
-        @Override
-        public int getChildrenCount(int groupPosition) {
-            // Count is any synced groups, plus possible footer
-            final AccountDisplay account = mAccounts.get(groupPosition);
-            return account.mSyncedGroups.size() + account.mUnsyncedGroups.size();
-        }
-
-        @Override
-        public Object getGroup(int groupPosition) {
-            return mAccounts.get(groupPosition);
-        }
-
-        @Override
-        public int getGroupCount() {
-            if (mAccounts == null) {
-                return 0;
-            }
-            return mAccounts.size();
-        }
-
-        @Override
-        public long getGroupId(int groupPosition) {
-            return groupPosition;
-        }
-
-        @Override
-        public boolean hasStableIds() {
-            return true;
-        }
-
-        @Override
-        public boolean isChildSelectable(int groupPosition, int childPosition) {
-            return true;
-        }
-    }
-
-    /**
-     * Handle any clicks on {@link ExpandableListAdapter} children, which
-     * usually mean toggling its visible state.
-     */
-    @Override
-    public boolean onChildClick(ExpandableListView parent, View view, int groupPosition,
-            int childPosition, long id) {
-        final CheckBox checkbox = (CheckBox)view.findViewById(android.R.id.checkbox);
-
-        final AccountDisplay account = (AccountDisplay)mAdapter.getGroup(groupPosition);
-        final GroupDelta child = (GroupDelta)mAdapter.getChild(groupPosition, childPosition);
-        if (child != null) {
-            checkbox.toggle();
-            child.putVisible(checkbox.isChecked());
-        } else {
-            // Open context menu for bringing back unsynced
-            this.openContextMenu(view);
-        }
-        return true;
-    }
-
-    // TODO: move these definitions to framework constants when we begin
-    // defining this mode through <sync-adapter> tags
-    private static final int SYNC_MODE_UNSUPPORTED = 0;
-    private static final int SYNC_MODE_UNGROUPED = 1;
-    private static final int SYNC_MODE_EVERYTHING = 2;
-
-    protected int getSyncMode(AccountDisplay account) {
-        // TODO: read sync mode through <sync-adapter> definition
-        if (GoogleAccountType.ACCOUNT_TYPE.equals(account.mType) && account.mDataSet == null) {
-            return SYNC_MODE_EVERYTHING;
-        } else {
-            return SYNC_MODE_UNSUPPORTED;
-        }
-    }
-
-    @Override
-    public void onCreateContextMenu(ContextMenu menu, View view,
-            ContextMenu.ContextMenuInfo menuInfo) {
-        super.onCreateContextMenu(menu, view, menuInfo);
-
-        // Bail if not working with expandable long-press, or if not child
-        if (!(menuInfo instanceof ExpandableListContextMenuInfo)) return;
-
-        final ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuInfo;
-        final int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
-        final int childPosition = ExpandableListView.getPackedPositionChild(info.packedPosition);
-
-        // Skip long-press on expandable parents
-        if (childPosition == -1) return;
-
-        final AccountDisplay account = (AccountDisplay)mAdapter.getGroup(groupPosition);
-        final GroupDelta child = (GroupDelta)mAdapter.getChild(groupPosition, childPosition);
-
-        // Ignore when selective syncing unsupported
-        final int syncMode = getSyncMode(account);
-        if (syncMode == SYNC_MODE_UNSUPPORTED) return;
-
-        if (child != null) {
-            showRemoveSync(menu, account, child, syncMode);
-        } else {
-            showAddSync(menu, account, syncMode);
-        }
-    }
-
-    protected void showRemoveSync(ContextMenu menu, final AccountDisplay account,
-            final GroupDelta child, final int syncMode) {
-        final CharSequence title = child.getTitle(this);
-
-        menu.setHeaderTitle(title);
-        menu.add(R.string.menu_sync_remove).setOnMenuItemClickListener(
-                new OnMenuItemClickListener() {
-                    public boolean onMenuItemClick(MenuItem item) {
-                        handleRemoveSync(account, child, syncMode, title);
-                        return true;
-                    }
-                });
-    }
-
-    protected void handleRemoveSync(final AccountDisplay account, final GroupDelta child,
-            final int syncMode, CharSequence title) {
-        final boolean shouldSyncUngrouped = account.mUngrouped.getShouldSync();
-        if (syncMode == SYNC_MODE_EVERYTHING && shouldSyncUngrouped
-                && !child.equals(account.mUngrouped)) {
-            // Warn before removing this group when it would cause ungrouped to stop syncing
-            final AlertDialog.Builder builder = new AlertDialog.Builder(this);
-            final CharSequence removeMessage = this.getString(
-                    R.string.display_warn_remove_ungrouped, title);
-            builder.setTitle(R.string.menu_sync_remove);
-            builder.setMessage(removeMessage);
-            builder.setNegativeButton(android.R.string.cancel, null);
-            builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                public void onClick(DialogInterface dialog, int which) {
-                    // Mark both this group and ungrouped to stop syncing
-                    account.setShouldSync(account.mUngrouped, false);
-                    account.setShouldSync(child, false);
-                    mAdapter.notifyDataSetChanged();
-                }
-            });
-            builder.show();
-        } else {
-            // Mark this group to not sync
-            account.setShouldSync(child, false);
-            mAdapter.notifyDataSetChanged();
-        }
-    }
-
-    protected void showAddSync(ContextMenu menu, final AccountDisplay account, final int syncMode) {
-        menu.setHeaderTitle(R.string.dialog_sync_add);
-
-        // Create item for each available, unsynced group
-        for (final GroupDelta child : account.mUnsyncedGroups) {
-            if (!child.getShouldSync()) {
-                final CharSequence title = child.getTitle(this);
-                menu.add(title).setOnMenuItemClickListener(new OnMenuItemClickListener() {
-                    public boolean onMenuItemClick(MenuItem item) {
-                        // Adding specific group for syncing
-                        if (child.mUngrouped && syncMode == SYNC_MODE_EVERYTHING) {
-                            account.setShouldSync(true);
-                        } else {
-                            account.setShouldSync(child, true);
-                        }
-                        mAdapter.notifyDataSetChanged();
-                        return true;
-                    }
-                });
-            }
-        }
-    }
-
-    private boolean hasUnsavedChanges() {
-        if (mAdapter == null || mAdapter.mAccounts == null) {
-            return false;
-        }
-        if (getCurrentListFilterType() != ContactListFilter.FILTER_TYPE_CUSTOM) {
-            return true;
-        }
-        final ArrayList<ContentProviderOperation> diff = mAdapter.mAccounts.buildDiff();
-        if (diff.isEmpty()) {
-            return false;
-        }
-        return true;
-    }
-
-    @SuppressWarnings("unchecked")
-    private void doSaveAction() {
-        if (mAdapter == null || mAdapter.mAccounts == null) {
-            finish();
-            return;
-        }
-
-        setResult(RESULT_OK);
-
-        final ArrayList<ContentProviderOperation> diff = mAdapter.mAccounts.buildDiff();
-        if (diff.isEmpty()) {
-            finish();
-            return;
-        }
-
-        new UpdateTask(this).execute(diff);
-    }
-
-    /**
-     * Background task that persists changes to {@link Groups#GROUP_VISIBLE},
-     * showing spinner dialog to user while updating.
-     */
-    public static class UpdateTask extends
-            WeakAsyncTask<ArrayList<ContentProviderOperation>, Void, Void, Activity> {
-        private ProgressDialog mProgress;
-
-        public UpdateTask(Activity target) {
-            super(target);
-        }
-
-        /** {@inheritDoc} */
-        @Override
-        protected void onPreExecute(Activity target) {
-            final Context context = target;
-
-            mProgress = ProgressDialog.show(
-                    context, null, context.getText(R.string.savingDisplayGroups));
-
-            // Before starting this task, start an empty service to protect our
-            // process from being reclaimed by the system.
-            context.startService(new Intent(context, EmptyService.class));
-        }
-
-        /** {@inheritDoc} */
-        @Override
-        protected Void doInBackground(
-                Activity target, ArrayList<ContentProviderOperation>... params) {
-            final Context context = target;
-            final ContentValues values = new ContentValues();
-            final ContentResolver resolver = context.getContentResolver();
-
-            try {
-                final ArrayList<ContentProviderOperation> diff = params[0];
-                resolver.applyBatch(ContactsContract.AUTHORITY, diff);
-            } catch (RemoteException e) {
-                Log.e(TAG, "Problem saving display groups", e);
-            } catch (OperationApplicationException e) {
-                Log.e(TAG, "Problem saving display groups", e);
-            }
-
-            return null;
-        }
-
-        /** {@inheritDoc} */
-        @Override
-        protected void onPostExecute(Activity target, Void result) {
-            final Context context = target;
-
-            try {
-                mProgress.dismiss();
-            } catch (Exception e) {
-                Log.e(TAG, "Error dismissing progress dialog", e);
-            }
-
-            target.finish();
-
-            // Stop the service that was protecting us
-            context.stopService(new Intent(context, EmptyService.class));
-        }
-    }
-
-    @Override
-    public boolean onCreateOptionsMenu(Menu menu) {
-        super.onCreateOptionsMenu(menu);
-
-        final MenuItem menuItem = menu.add(Menu.NONE, R.id.menu_save, Menu.NONE,
-                R.string.menu_custom_filter_save);
-        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
-
-        return true;
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home:
-                confirmFinish();
-                return true;
-            case R.id.menu_save:
-                this.doSaveAction();
-                return true;
-            default:
-                break;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    @Override
-    public void onBackPressed() {
-        confirmFinish();
-    }
-
-    private void confirmFinish() {
-        // Prompt the user whether they want to discard there customizations unless
-        // nothing will be changed.
-        if (hasUnsavedChanges()) {
-            new ConfirmNavigationDialogFragment().show(getFragmentManager(),
-                    "ConfirmNavigationDialog");
-        } else {
-            setResult(RESULT_CANCELED);
-            finish();
-        }
-    }
-
-    private int getCurrentListFilterType() {
-        return getIntent().getIntExtra(EXTRA_CURRENT_LIST_FILTER_TYPE,
-                ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
-    }
-
-    public static class ConfirmNavigationDialogFragment
-            extends DialogFragment implements DialogInterface.OnClickListener {
-
-        @Override
-        public Dialog onCreateDialog(Bundle savedInstanceState) {
-            return new AlertDialog.Builder(getActivity(), getTheme())
-                    .setMessage(R.string.leave_customize_confirmation_dialog_message)
-                    .setNegativeButton(android.R.string.no, null)
-                    .setPositiveButton(android.R.string.yes, this)
-                    .create();
-        }
-
-        @Override
-        public void onClick(DialogInterface dialogInterface, int i) {
-            if (i == DialogInterface.BUTTON_POSITIVE) {
-                getActivity().setResult(RESULT_CANCELED);
-                getActivity().finish();
-            }
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/list/DefaultContactListAdapter.java b/src/com/android/contacts/common/list/DefaultContactListAdapter.java
deleted file mode 100644
index 5827930..0000000
--- a/src/com/android/contacts/common/list/DefaultContactListAdapter.java
+++ /dev/null
@@ -1,305 +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.common.list;
-
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.CursorLoader;
-import android.content.SharedPreferences;
-import android.database.Cursor;
-import android.net.Uri;
-import android.net.Uri.Builder;
-import android.preference.PreferenceManager;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Directory;
-import android.provider.ContactsContract.SearchSnippets;
-import android.text.TextUtils;
-import android.view.View;
-
-import com.android.contacts.common.Experiments;
-import com.android.contacts.common.compat.ContactsCompat;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contactsbind.experiments.Flags;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A cursor adapter for the {@link ContactsContract.Contacts#CONTENT_TYPE} content type.
- */
-public class DefaultContactListAdapter extends ContactListAdapter {
-
-    public static final char SNIPPET_START_MATCH = '[';
-    public static final char SNIPPET_END_MATCH = ']';
-
-    // Contacts contacted within the last 3 days (in seconds)
-    private static final long LAST_TIME_USED_3_DAYS_SEC = 3L * 24 * 60 * 60;
-
-    // Contacts contacted within the last 7 days (in seconds)
-    private static final long LAST_TIME_USED_7_DAYS_SEC = 7L * 24 * 60 * 60;
-
-    // Contacts contacted within the last 14 days (in seconds)
-    private static final long LAST_TIME_USED_14_DAYS_SEC = 14L * 24 * 60 * 60;
-
-    // Contacts contacted within the last 30 days (in seconds)
-    private static final long LAST_TIME_USED_30_DAYS_SEC = 30L * 24 * 60 * 60;
-
-    private static final String TIME_SINCE_LAST_USED_SEC =
-            "(strftime('%s', 'now') - " + Contacts.LAST_TIME_CONTACTED + "/1000)";
-
-    private static final String STREQUENT_SORT =
-            "(CASE WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_3_DAYS_SEC +
-                    " THEN 0 " +
-                    " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_7_DAYS_SEC +
-                    " THEN 1 " +
-                    " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_14_DAYS_SEC +
-                    " THEN 2 " +
-                    " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_30_DAYS_SEC +
-                    " THEN 3 " +
-                    " ELSE 4 END), " +
-                    Contacts.TIMES_CONTACTED + " DESC, " +
-                    Contacts.STARRED + " DESC";
-
-    public DefaultContactListAdapter(Context context) {
-        super(context);
-    }
-
-    @Override
-    public void configureLoader(CursorLoader loader, long directoryId) {
-        if (loader instanceof FavoritesAndContactsLoader) {
-            ((FavoritesAndContactsLoader) loader).setLoadFavorites(shouldIncludeFavorites());
-        }
-
-        String sortOrder = null;
-        if (isSearchMode()) {
-            String query = getQueryString();
-            if (query == null) query = "";
-            query = query.trim();
-            if (TextUtils.isEmpty(query)) {
-                // Regardless of the directory, we don't want anything returned,
-                // so let's just send a "nothing" query to the local directory.
-                loader.setUri(Contacts.CONTENT_URI);
-                loader.setProjection(getProjection(false));
-                loader.setSelection("0");
-            } else if (isGroupMembersFilter()) {
-                final ContactListFilter filter = getFilter();
-                configureUri(loader, directoryId, filter);
-                // TODO: This is not the normal type to filter URI so we load the non-search
-                // projection. Consider creating a specific group member adapter to make it more
-                // clear.
-                loader.setProjection(getProjection(/* forSearch */ false));
-                loader.setSelection(
-                        Contacts.DISPLAY_NAME_PRIMARY + " LIKE ?1 OR " +
-                        Contacts.DISPLAY_NAME_ALTERNATIVE + " LIKE ?1");
-                final String[] args = new String[1];
-                args[0] = query + "%";
-                loader.setSelectionArgs(args);
-            } else {
-                final Builder builder = ContactsCompat.getContentUri().buildUpon();
-                appendSearchParameters(builder, query, directoryId);
-                loader.setUri(builder.build());
-                loader.setProjection(getProjection(true));
-                sortOrder = STREQUENT_SORT;
-            }
-        } else {
-            final ContactListFilter filter = getFilter();
-            configureUri(loader, directoryId, filter);
-            if (filter != null
-                    && filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS) {
-                loader.setProjection(getDataProjectionForContacts(false));
-            } else {
-                loader.setProjection(getProjection(false));
-            }
-            configureSelection(loader, directoryId, filter);
-        }
-
-        if (getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
-            if (sortOrder == null) {
-                sortOrder = Contacts.SORT_KEY_PRIMARY;
-            } else {
-                sortOrder += ", " + Contacts.SORT_KEY_PRIMARY;
-            }
-        } else {
-            if (sortOrder == null) {
-                sortOrder = Contacts.SORT_KEY_ALTERNATIVE;
-            } else {
-                sortOrder += ", " + Contacts.SORT_KEY_ALTERNATIVE;
-            }
-        }
-        loader.setSortOrder(sortOrder);
-    }
-
-    private boolean isGroupMembersFilter() {
-        final ContactListFilter filter = getFilter();
-        return filter != null && filter.filterType == ContactListFilter.FILTER_TYPE_GROUP_MEMBERS;
-    }
-
-    private void appendSearchParameters(Builder builder, String query, long directoryId) {
-        builder.appendPath(query); // Builder will encode the query
-        builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
-                String.valueOf(directoryId));
-        if (directoryId != Directory.DEFAULT && directoryId != Directory.LOCAL_INVISIBLE) {
-            builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
-                    String.valueOf(getDirectoryResultLimit(getDirectoryById(directoryId))));
-        }
-        builder.appendQueryParameter(SearchSnippets.DEFERRED_SNIPPETING_KEY, "1");
-    }
-
-    protected void configureUri(CursorLoader loader, long directoryId, ContactListFilter filter) {
-        Uri uri = Contacts.CONTENT_URI;
-        if (filter != null) {
-            if (filter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
-                String lookupKey = getSelectedContactLookupKey();
-                if (lookupKey != null) {
-                    uri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey);
-                } else {
-                    uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, getSelectedContactId());
-                }
-            } else if (filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS) {
-                uri = Data.CONTENT_URI;
-            }
-        }
-
-        if (directoryId == Directory.DEFAULT && isSectionHeaderDisplayEnabled()) {
-            uri = ContactListAdapter.buildSectionIndexerUri(uri);
-        }
-
-        // The "All accounts" filter is the same as the entire contents of Directory.DEFAULT
-        if (filter != null
-                && filter.filterType != ContactListFilter.FILTER_TYPE_CUSTOM
-                && filter.filterType != ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
-            final Uri.Builder builder = uri.buildUpon();
-            builder.appendQueryParameter(
-                    ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT));
-            if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT
-                || filter.filterType == ContactListFilter.FILTER_TYPE_GROUP_MEMBERS) {
-                filter.addAccountQueryParameterToUrl(builder);
-            }
-            uri = builder.build();
-        }
-
-        loader.setUri(uri);
-    }
-
-    private void configureSelection(
-            CursorLoader loader, long directoryId, ContactListFilter filter) {
-        if (filter == null) {
-            return;
-        }
-
-        if (directoryId != Directory.DEFAULT) {
-            return;
-        }
-
-        StringBuilder selection = new StringBuilder();
-        List<String> selectionArgs = new ArrayList<String>();
-
-        switch (filter.filterType) {
-            case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS: {
-                // We have already added directory=0 to the URI, which takes care of this
-                // filter
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_SINGLE_CONTACT: {
-                // We have already added the lookup key to the URI, which takes care of this
-                // filter
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_STARRED: {
-                selection.append(Contacts.STARRED + "!=0");
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY: {
-                selection.append(Contacts.HAS_PHONE_NUMBER + "=1");
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_CUSTOM: {
-                selection.append(Contacts.IN_VISIBLE_GROUP + "=1");
-                if (isCustomFilterForPhoneNumbersOnly()) {
-                    selection.append(" AND " + Contacts.HAS_PHONE_NUMBER + "=1");
-                }
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_ACCOUNT: {
-                // We use query parameters for account filter, so no selection to add here.
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_GROUP_MEMBERS: {
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS: {
-                if (filter.accountType != null) {
-                    selection.append(ContactsContract.RawContacts.ACCOUNT_TYPE)
-                            .append("=?");
-                    selectionArgs.add(filter.accountType);
-                    if (filter.accountName != null) {
-                        selection.append(" AND ").append(ContactsContract.RawContacts.ACCOUNT_NAME)
-                                .append(("=?"));
-                        selectionArgs.add(filter.accountName);
-                    }
-                } else {
-                    selection.append(AccountWithDataSet.LOCAL_ACCOUNT_SELECTION);
-                }
-                break;
-            }
-        }
-        loader.setSelection(selection.toString());
-        loader.setSelectionArgs(selectionArgs.toArray(new String[0]));
-    }
-
-    @Override
-    protected void bindView(View itemView, int partition, Cursor cursor, int position) {
-        super.bindView(itemView, partition, cursor, position);
-        final ContactListItemView view = (ContactListItemView)itemView;
-
-        view.setHighlightedPrefix(isSearchMode() ? getUpperCaseQueryString() : null);
-
-        if (isSelectionVisible()) {
-            view.setActivated(isSelectedContact(partition, cursor));
-        }
-
-        bindSectionHeaderAndDivider(view, position, cursor);
-
-        if (isQuickContactEnabled()) {
-            bindQuickContact(view, partition, cursor, ContactQuery.CONTACT_PHOTO_ID,
-                    ContactQuery.CONTACT_PHOTO_URI, ContactQuery.CONTACT_ID,
-                    ContactQuery.CONTACT_LOOKUP_KEY, ContactQuery.CONTACT_DISPLAY_NAME);
-        } else {
-            if (getDisplayPhotos()) {
-                bindPhoto(view, partition, cursor);
-            }
-        }
-
-        bindNameAndViewId(view, cursor);
-        bindPresenceAndStatusMessage(view, cursor);
-
-        if (isSearchMode()) {
-            bindSearchSnippet(view, cursor);
-        } else {
-            view.setSnippet(null);
-        }
-    }
-
-    private boolean isCustomFilterForPhoneNumbersOnly() {
-        // TODO: this flag should not be stored in shared prefs.  It needs to be in the db.
-        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
-        return prefs.getBoolean(ContactsPreferences.PREF_DISPLAY_ONLY_PHONES,
-                ContactsPreferences.PREF_DISPLAY_ONLY_PHONES_DEFAULT);
-    }
-}
diff --git a/src/com/android/contacts/common/list/DirectoryListLoader.java b/src/com/android/contacts/common/list/DirectoryListLoader.java
deleted file mode 100644
index 13d0f92..0000000
--- a/src/com/android/contacts/common/list/DirectoryListLoader.java
+++ /dev/null
@@ -1,219 +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.common.list;
-
-import android.content.AsyncTaskLoader;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.net.Uri;
-import android.os.Handler;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Directory;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.R;
-import com.android.contacts.common.compat.DirectoryCompat;
-
-/**
- * A specialized loader for the list of directories, see {@link Directory}.
- */
-public class DirectoryListLoader extends AsyncTaskLoader<Cursor> {
-
-    private static final String TAG = "ContactEntryListAdapter";
-
-    public static final int SEARCH_MODE_NONE = 0;
-    public static final int SEARCH_MODE_DEFAULT = 1;
-    public static final int SEARCH_MODE_CONTACT_SHORTCUT = 2;
-    public static final int SEARCH_MODE_DATA_SHORTCUT = 3;
-
-    private static final class DirectoryQuery {
-        public static final String ORDER_BY = Directory._ID;
-
-        public static final String[] PROJECTION = {
-            Directory._ID,
-            Directory.PACKAGE_NAME,
-            Directory.TYPE_RESOURCE_ID,
-            Directory.DISPLAY_NAME,
-            Directory.PHOTO_SUPPORT,
-        };
-
-        public static final int ID = 0;
-        public static final int PACKAGE_NAME = 1;
-        public static final int TYPE_RESOURCE_ID = 2;
-        public static final int DISPLAY_NAME = 3;
-        public static final int PHOTO_SUPPORT = 4;
-
-        public static Uri getDirectoryUri(int mode) {
-            if (mode == SEARCH_MODE_DATA_SHORTCUT || mode == SEARCH_MODE_CONTACT_SHORTCUT) {
-                return Directory.CONTENT_URI;
-            } else {
-                return DirectoryCompat.getContentUri();
-            }
-        }
-    }
-
-    // This is a virtual column created for a MatrixCursor.
-    public static final String DIRECTORY_TYPE = "directoryType";
-
-    private static final String[] RESULT_PROJECTION = {
-        Directory._ID,
-        DIRECTORY_TYPE,
-        Directory.DISPLAY_NAME,
-        Directory.PHOTO_SUPPORT,
-    };
-
-    private final ContentObserver mObserver = new ContentObserver(new Handler()) {
-        @Override
-        public void onChange(boolean selfChange) {
-            forceLoad();
-        }
-    };
-
-    private int mDirectorySearchMode;
-    private boolean mLocalInvisibleDirectoryEnabled;
-
-    private MatrixCursor mDefaultDirectoryList;
-
-    public DirectoryListLoader(Context context) {
-        super(context);
-    }
-
-    public void setDirectorySearchMode(int mode) {
-        mDirectorySearchMode = mode;
-    }
-
-    /**
-     * A flag that indicates whether the {@link Directory#LOCAL_INVISIBLE} directory should
-     * be included in the results.
-     */
-    public void setLocalInvisibleDirectoryEnabled(boolean flag) {
-        this.mLocalInvisibleDirectoryEnabled = flag;
-    }
-
-    @Override
-    protected void onStartLoading() {
-        getContext().getContentResolver().
-                registerContentObserver(DirectoryQuery.getDirectoryUri(mDirectorySearchMode),
-                        false, mObserver);
-        forceLoad();
-    }
-
-    @Override
-    protected void onStopLoading() {
-        getContext().getContentResolver().unregisterContentObserver(mObserver);
-    }
-
-    @Override
-    public Cursor loadInBackground() {
-        if (mDirectorySearchMode == SEARCH_MODE_NONE) {
-            return getDefaultDirectories();
-        }
-
-        MatrixCursor result = new MatrixCursor(RESULT_PROJECTION);
-        Context context = getContext();
-        PackageManager pm = context.getPackageManager();
-        String selection;
-        switch (mDirectorySearchMode) {
-            case SEARCH_MODE_DEFAULT:
-                selection = null;
-                break;
-
-            case SEARCH_MODE_CONTACT_SHORTCUT:
-                selection = Directory.SHORTCUT_SUPPORT + "=" + Directory.SHORTCUT_SUPPORT_FULL;
-                break;
-
-            case SEARCH_MODE_DATA_SHORTCUT:
-                selection = Directory.SHORTCUT_SUPPORT + " IN ("
-                        + Directory.SHORTCUT_SUPPORT_FULL + ", "
-                        + Directory.SHORTCUT_SUPPORT_DATA_ITEMS_ONLY + ")";
-                break;
-
-            default:
-                throw new RuntimeException(
-                        "Unsupported directory search mode: " + mDirectorySearchMode);
-        }
-        Cursor cursor = null;
-        try {
-            cursor = context.getContentResolver().query(
-                    DirectoryQuery.getDirectoryUri(mDirectorySearchMode),
-                    DirectoryQuery.PROJECTION, selection, null, DirectoryQuery.ORDER_BY);
-
-            if (cursor == null) {
-                return result;
-            }
-
-            while(cursor.moveToNext()) {
-                long directoryId = cursor.getLong(DirectoryQuery.ID);
-                if (!mLocalInvisibleDirectoryEnabled
-                        && DirectoryCompat.isInvisibleDirectory(directoryId)) {
-                    continue;
-                }
-                String directoryType = null;
-
-                String packageName = cursor.getString(DirectoryQuery.PACKAGE_NAME);
-                int typeResourceId = cursor.getInt(DirectoryQuery.TYPE_RESOURCE_ID);
-                if (!TextUtils.isEmpty(packageName) && typeResourceId != 0) {
-                    try {
-                        directoryType = pm.getResourcesForApplication(packageName)
-                                .getString(typeResourceId);
-                    } catch (Exception e) {
-                        Log.e(TAG, "Cannot obtain directory type from package: " + packageName);
-                    }
-                }
-                String displayName = cursor.getString(DirectoryQuery.DISPLAY_NAME);
-                int photoSupport = cursor.getInt(DirectoryQuery.PHOTO_SUPPORT);
-                result.addRow(new Object[]{directoryId, directoryType, displayName, photoSupport});
-            }
-        } catch (RuntimeException e) {
-            Log.w(TAG, "Runtime Exception when querying directory");
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-
-        return result;
-    }
-
-    private Cursor getDefaultDirectories() {
-        if (mDefaultDirectoryList == null) {
-            mDefaultDirectoryList = new MatrixCursor(RESULT_PROJECTION);
-            mDefaultDirectoryList.addRow(new Object[] {
-                    Directory.DEFAULT,
-                    getContext().getString(R.string.contactsList),
-                    null,
-                    null
-            });
-            mDefaultDirectoryList.addRow(new Object[] {
-                    Directory.LOCAL_INVISIBLE,
-                    getContext().getString(R.string.local_invisible_directory),
-                    null,
-                    null
-            });
-        }
-        return mDefaultDirectoryList;
-    }
-
-    @Override
-    protected void onReset() {
-        stopLoading();
-    }
-}
diff --git a/src/com/android/contacts/common/list/DirectoryPartition.java b/src/com/android/contacts/common/list/DirectoryPartition.java
deleted file mode 100644
index ca0dc11..0000000
--- a/src/com/android/contacts/common/list/DirectoryPartition.java
+++ /dev/null
@@ -1,179 +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.common.list;
-
-import android.provider.ContactsContract.Directory;
-
-import com.android.common.widget.CompositeCursorAdapter;
-
-/**
- * Model object for a {@link Directory} row.
- */
-public final class DirectoryPartition extends CompositeCursorAdapter.Partition {
-
-    public static final int STATUS_NOT_LOADED = 0;
-    public static final int STATUS_LOADING = 1;
-    public static final int STATUS_LOADED = 2;
-
-    public static final int RESULT_LIMIT_DEFAULT = -1;
-
-    private long mDirectoryId;
-    private String mContentUri;
-    private String mDirectoryType;
-    private String mDisplayName;
-    private int mStatus;
-    private boolean mPriorityDirectory;
-    private boolean mPhotoSupported;
-    private int mResultLimit = RESULT_LIMIT_DEFAULT;
-    private boolean mDisplayNumber = true;
-
-    private String mLabel;
-
-    public DirectoryPartition(boolean showIfEmpty, boolean hasHeader) {
-        super(showIfEmpty, hasHeader);
-    }
-
-    /**
-     * Directory ID, see {@link Directory}.
-     */
-    public long getDirectoryId() {
-        return mDirectoryId;
-    }
-
-    public void setDirectoryId(long directoryId) {
-        this.mDirectoryId = directoryId;
-    }
-
-    /**
-     * Directory type resolved from {@link Directory#PACKAGE_NAME} and
-     * {@link Directory#TYPE_RESOURCE_ID};
-     */
-    public String getDirectoryType() {
-        return mDirectoryType;
-    }
-
-    public void setDirectoryType(String directoryType) {
-        this.mDirectoryType = directoryType;
-    }
-
-    /**
-     * See {@link Directory#DISPLAY_NAME}.
-     */
-    public String getDisplayName() {
-        return mDisplayName;
-    }
-
-    public void setDisplayName(String displayName) {
-        this.mDisplayName = displayName;
-    }
-
-    public int getStatus() {
-        return mStatus;
-    }
-
-    public void setStatus(int status) {
-        mStatus = status;
-    }
-
-    public boolean isLoading() {
-        return mStatus == STATUS_NOT_LOADED || mStatus == STATUS_LOADING;
-    }
-
-    /**
-     * Returns true if this directory should be loaded before non-priority directories.
-     */
-    public boolean isPriorityDirectory() {
-        return mPriorityDirectory;
-    }
-
-    public void setPriorityDirectory(boolean priorityDirectory) {
-        mPriorityDirectory = priorityDirectory;
-    }
-
-    /**
-     * Returns true if this directory supports photos.
-     */
-    public boolean isPhotoSupported() {
-        return mPhotoSupported;
-    }
-
-    public void setPhotoSupported(boolean flag) {
-        this.mPhotoSupported = flag;
-    }
-
-    /**
-     * Max number of results for this directory. Defaults to {@link #RESULT_LIMIT_DEFAULT} which
-     * implies using the adapter's
-     * {@link com.android.contacts.common.list.ContactListAdapter#getDirectoryResultLimit()}
-     */
-    public int getResultLimit() {
-        return mResultLimit;
-    }
-
-    public void setResultLimit(int resultLimit) {
-        mResultLimit = resultLimit;
-    }
-
-    /**
-     * Used by extended directories to specify a custom content URI. Extended directories MUST have
-     * a content URI
-     */
-    public String getContentUri() {
-        return mContentUri;
-    }
-
-    public void setContentUri(String contentUri) {
-        mContentUri = contentUri;
-    }
-
-    /**
-     * A label to display in the header next to the display name.
-     */
-    public String getLabel() {
-        return mLabel;
-    }
-
-    public void setLabel(String label) {
-        mLabel = label;
-    }
-
-    @Override
-    public String toString() {
-        return "DirectoryPartition{" +
-                "mDirectoryId=" + mDirectoryId +
-                ", mContentUri='" + mContentUri + '\'' +
-                ", mDirectoryType='" + mDirectoryType + '\'' +
-                ", mDisplayName='" + mDisplayName + '\'' +
-                ", mStatus=" + mStatus +
-                ", mPriorityDirectory=" + mPriorityDirectory +
-                ", mPhotoSupported=" + mPhotoSupported +
-                ", mResultLimit=" + mResultLimit +
-                ", mLabel='" + mLabel + '\'' +
-                '}';
-    }
-
-    /**
-     * Whether or not to display the phone number in app that have that option - Dialer. If false,
-     * Phone Label should be used instead of Phone Number.
-     */
-    public boolean isDisplayNumber() {
-        return mDisplayNumber;
-    }
-
-    public void setDisplayNumber(boolean displayNumber) {
-        mDisplayNumber = displayNumber;
-    }
-}
diff --git a/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java b/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java
deleted file mode 100644
index 25dd711..0000000
--- a/src/com/android/contacts/common/list/FavoritesAndContactsLoader.java
+++ /dev/null
@@ -1,96 +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.common.list;
-
-import android.content.Context;
-import android.content.CursorLoader;
-import android.database.Cursor;
-import android.database.MergeCursor;
-import android.database.sqlite.SQLiteException;
-import android.os.Bundle;
-import android.provider.ContactsContract.Contacts;
-
-import com.google.common.collect.Lists;
-
-import java.util.List;
-
-/**
- * A loader for use in the default contact list, which will also query for favorite contacts
- * if configured to do so.
- */
-public class FavoritesAndContactsLoader extends CursorLoader {
-
-    private boolean mLoadFavorites;
-
-    private String[] mProjection;
-
-
-    public FavoritesAndContactsLoader(Context context) {
-        super(context);
-    }
-
-    /** Whether to load favorites and merge results in before any other results. */
-    public void setLoadFavorites(boolean flag) {
-        mLoadFavorites = flag;
-    }
-
-    public void setProjection(String[] projection) {
-        super.setProjection(projection);
-        mProjection = projection;
-    }
-
-    @Override
-    public Cursor loadInBackground() {
-        List<Cursor> cursors = Lists.newArrayList();
-        if (mLoadFavorites) {
-            cursors.add(loadFavoritesContacts());
-        }
-        final Cursor contactsCursor = loadContacts();
-        cursors.add(contactsCursor);
-        return new MergeCursor(cursors.toArray(new Cursor[cursors.size()])) {
-            @Override
-            public Bundle getExtras() {
-                // Need to get the extras from the contacts cursor.
-                return contactsCursor == null ? new Bundle() : contactsCursor.getExtras();
-            }
-        };
-    }
-
-    private Cursor loadContacts() {
-        // ContactsCursor.loadInBackground() can return null; MergeCursor
-        // correctly handles null cursors.
-        try {
-            return super.loadInBackground();
-
-        } catch (NullPointerException | SQLiteException | SecurityException e) {
-            // Ignore NPEs, SQLiteExceptions and SecurityExceptions thrown by providers
-        }
-        return null;
-    }
-
-    private Cursor loadFavoritesContacts() {
-        final StringBuilder selection = new StringBuilder();
-        selection.append(Contacts.STARRED + "=?");
-        final ContactListFilter filter =
-                ContactListFilterController.getInstance(getContext()).getFilter();
-        if (filter != null && filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
-            selection.append(" AND ").append(Contacts.IN_VISIBLE_GROUP + "=1");
-        }
-        return getContext().getContentResolver().query(
-                Contacts.CONTENT_URI, mProjection, selection.toString(), new String[]{"1"},
-                getSortOrder());
-    }
-}
diff --git a/src/com/android/contacts/common/list/IndexerListAdapter.java b/src/com/android/contacts/common/list/IndexerListAdapter.java
deleted file mode 100644
index 032bb53..0000000
--- a/src/com/android/contacts/common/list/IndexerListAdapter.java
+++ /dev/null
@@ -1,226 +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.common.list;
-
-import android.content.Context;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ListView;
-import android.widget.SectionIndexer;
-
-/**
- * A list adapter that supports section indexer and a pinned header.
- */
-public abstract class IndexerListAdapter extends PinnedHeaderListAdapter implements SectionIndexer {
-
-    protected Context mContext;
-    private SectionIndexer mIndexer;
-    private int mIndexedPartition = 0;
-    private boolean mSectionHeaderDisplayEnabled;
-    private View mHeader;
-
-    /**
-     * An item view is displayed differently depending on whether it is placed
-     * at the beginning, middle or end of a section. It also needs to know the
-     * section header when it is at the beginning of a section. This object
-     * captures all this configuration.
-     */
-    public static final class Placement {
-        private int position = ListView.INVALID_POSITION;
-        public boolean firstInSection;
-        public boolean lastInSection;
-        public String sectionHeader;
-
-        public void invalidate() {
-            position = ListView.INVALID_POSITION;
-        }
-    }
-
-    private Placement mPlacementCache = new Placement();
-
-    /**
-     * Constructor.
-     */
-    public IndexerListAdapter(Context context) {
-        super(context);
-        mContext = context;
-    }
-
-    /**
-     * Creates a section header view that will be pinned at the top of the list
-     * as the user scrolls.
-     */
-    protected abstract View createPinnedSectionHeaderView(Context context, ViewGroup parent);
-
-    /**
-     * Sets the title in the pinned header as the user scrolls.
-     */
-    protected abstract void setPinnedSectionTitle(View pinnedHeaderView, String title);
-
-    public boolean isSectionHeaderDisplayEnabled() {
-        return mSectionHeaderDisplayEnabled;
-    }
-
-    public void setSectionHeaderDisplayEnabled(boolean flag) {
-        this.mSectionHeaderDisplayEnabled = flag;
-    }
-
-    public int getIndexedPartition() {
-        return mIndexedPartition;
-    }
-
-    public void setIndexedPartition(int partition) {
-        this.mIndexedPartition = partition;
-    }
-
-    public SectionIndexer getIndexer() {
-        return mIndexer;
-    }
-
-    public void setIndexer(SectionIndexer indexer) {
-        mIndexer = indexer;
-        mPlacementCache.invalidate();
-    }
-
-    public Object[] getSections() {
-        if (mIndexer == null) {
-            return new String[] { " " };
-        } else {
-            return mIndexer.getSections();
-        }
-    }
-
-    /**
-     * @return relative position of the section in the indexed partition
-     */
-    public int getPositionForSection(int sectionIndex) {
-        if (mIndexer == null) {
-            return -1;
-        }
-
-        return mIndexer.getPositionForSection(sectionIndex);
-    }
-
-    /**
-     * @param position relative position in the indexed partition
-     */
-    public int getSectionForPosition(int position) {
-        if (mIndexer == null) {
-            return -1;
-        }
-
-        return mIndexer.getSectionForPosition(position);
-    }
-
-    @Override
-    public int getPinnedHeaderCount() {
-        if (isSectionHeaderDisplayEnabled()) {
-            return super.getPinnedHeaderCount() + 1;
-        } else {
-            return super.getPinnedHeaderCount();
-        }
-    }
-
-    @Override
-    public View getPinnedHeaderView(int viewIndex, View convertView, ViewGroup parent) {
-        if (isSectionHeaderDisplayEnabled() && viewIndex == getPinnedHeaderCount() - 1) {
-            if (mHeader == null) {
-                mHeader = createPinnedSectionHeaderView(mContext, parent);
-            }
-            return mHeader;
-        } else {
-            return super.getPinnedHeaderView(viewIndex, convertView, parent);
-        }
-    }
-
-    @Override
-    public void configurePinnedHeaders(PinnedHeaderListView listView) {
-        super.configurePinnedHeaders(listView);
-
-        if (!isSectionHeaderDisplayEnabled()) {
-            return;
-        }
-
-        int index = getPinnedHeaderCount() - 1;
-        if (mIndexer == null || getCount() == 0) {
-            listView.setHeaderInvisible(index, false);
-        } else {
-            int listPosition = listView.getPositionAt(listView.getTotalTopPinnedHeaderHeight());
-            int position = listPosition - listView.getHeaderViewsCount();
-
-            int section = -1;
-            int partition = getPartitionForPosition(position);
-            if (partition == mIndexedPartition) {
-                int offset = getOffsetInPartition(position);
-                if (offset != -1) {
-                    section = getSectionForPosition(offset);
-                }
-            }
-
-            if (section == -1) {
-                listView.setHeaderInvisible(index, false);
-            } else {
-                View topChild = listView.getChildAt(listPosition);
-                if (topChild != null) {
-                    // Match the pinned header's height to the height of the list item.
-                    mHeader.setMinimumHeight(topChild.getMeasuredHeight());
-                }
-                setPinnedSectionTitle(mHeader, (String)mIndexer.getSections()[section]);
-
-                // Compute the item position where the current partition begins
-                int partitionStart = getPositionForPartition(mIndexedPartition);
-                if (hasHeader(mIndexedPartition)) {
-                    partitionStart++;
-                }
-
-                // Compute the item position where the next section begins
-                int nextSectionPosition = partitionStart + getPositionForSection(section + 1);
-                boolean isLastInSection = position == nextSectionPosition - 1;
-                listView.setFadingHeader(index, listPosition, isLastInSection);
-            }
-        }
-    }
-
-    /**
-     * Computes the item's placement within its section and populates the {@code placement}
-     * object accordingly.  Please note that the returned object is volatile and should be
-     * copied if the result needs to be used later.
-     */
-    public Placement getItemPlacementInSection(int position) {
-        if (mPlacementCache.position == position) {
-            return mPlacementCache;
-        }
-
-        mPlacementCache.position = position;
-        if (isSectionHeaderDisplayEnabled()) {
-            int section = getSectionForPosition(position);
-            if (section != -1 && getPositionForSection(section) == position) {
-                mPlacementCache.firstInSection = true;
-                mPlacementCache.sectionHeader = (String)getSections()[section];
-            } else {
-                mPlacementCache.firstInSection = false;
-                mPlacementCache.sectionHeader = null;
-            }
-
-            mPlacementCache.lastInSection = (getPositionForSection(section + 1) - 1 == position);
-        } else {
-            mPlacementCache.firstInSection = false;
-            mPlacementCache.lastInSection = false;
-            mPlacementCache.sectionHeader = null;
-        }
-        return mPlacementCache;
-    }
-}
diff --git a/src/com/android/contacts/common/list/MultiSelectEntryContactListAdapter.java b/src/com/android/contacts/common/list/MultiSelectEntryContactListAdapter.java
deleted file mode 100644
index efba9ca..0000000
--- a/src/com/android/contacts/common/list/MultiSelectEntryContactListAdapter.java
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.list;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.provider.ContactsContract;
-import android.view.View;
-import android.widget.CheckBox;
-
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.group.GroupUtil;
-
-import java.util.TreeSet;
-
-/**
- * An extension of the default contact adapter that adds checkboxes and the ability
- * to select multiple contacts.
- */
-public abstract class MultiSelectEntryContactListAdapter extends ContactEntryListAdapter {
-
-    private SelectedContactsListener mSelectedContactsListener;
-    private DeleteContactListener mDeleteContactListener;
-    private TreeSet<Long> mSelectedContactIds = new TreeSet<>();
-    private boolean mDisplayCheckBoxes;
-    private final int mContactIdColumnIndex;
-
-    public interface SelectedContactsListener {
-        void onSelectedContactsChanged();
-    }
-
-    public interface DeleteContactListener {
-        void onContactDeleteClicked(int position);
-    }
-
-    /**
-     * @param contactIdColumnIndex the column index of the contact ID in the underlying cursor;
-     *         it is passed in so that this adapter can support different kinds of contact
-     *         lists (e.g. aggregate contacts or raw contacts).
-     */
-    public MultiSelectEntryContactListAdapter(Context context, int contactIdColumnIndex) {
-        super(context);
-        mContactIdColumnIndex = contactIdColumnIndex;
-    }
-
-    /**
-     * Returns the column index of the contact ID in the underlying cursor; the contact ID
-     * retrieved using this index is the value that is selected by this adapter (and returned
-     * by {@link #getSelectedContactIds}).
-     */
-    public int getContactColumnIdIndex() {
-        return mContactIdColumnIndex;
-    }
-
-    public DeleteContactListener getDeleteContactListener() {
-        return mDeleteContactListener;
-    }
-
-    public void setDeleteContactListener(DeleteContactListener deleteContactListener) {
-        mDeleteContactListener = deleteContactListener;
-    }
-
-    public void setSelectedContactsListener(SelectedContactsListener listener) {
-        mSelectedContactsListener = listener;
-    }
-
-    /**
-     * Returns set of selected contacts.
-     */
-    public TreeSet<Long> getSelectedContactIds() {
-        return mSelectedContactIds;
-    }
-
-    public boolean hasSelectedItems() {
-        return mSelectedContactIds.size() > 0;
-    }
-
-    /**
-     * Returns the selected contacts as an array.
-     */
-    public long[] getSelectedContactIdsArray() {
-        return GroupUtil.convertLongSetToLongArray(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) {
-        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
-    public long getItemId(int position) {
-        Cursor cursor = (Cursor) getItem(position);
-        if (cursor != null) {
-            return cursor.getLong(getContactColumnIdIndex());
-        }
-        return 0;
-    }
-
-    @Override
-    protected void bindView(View itemView, int partition, Cursor cursor, int position) {
-        super.bindView(itemView, partition, cursor, position);
-        final ContactListItemView view = (ContactListItemView) itemView;
-        bindViewId(view, cursor, getContactColumnIdIndex());
-        bindCheckBox(view, cursor, partition == ContactsContract.Directory.DEFAULT);
-    }
-
-    /**
-      * Loads the photo for the photo view.
-      * @param photoIdColumn Index of the photo id column
-      * @param lookUpKeyColumn Index of the lookup key column
-      * @param displayNameColumn Index of the display name column
-      */
-    protected void bindPhoto(final ContactListItemView view, final Cursor cursor,
-           final int photoIdColumn, final int lookUpKeyColumn, final int displayNameColumn) {
-        final long photoId = cursor.isNull(photoIdColumn)
-            ? 0 : cursor.getLong(photoIdColumn);
-        final ContactPhotoManager.DefaultImageRequest imageRequest = photoId == 0
-            ? getDefaultImageRequestFromCursor(cursor, displayNameColumn,
-            lookUpKeyColumn)
-            : null;
-        getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, false, getCircularPhotos(),
-                imageRequest);
-    }
-
-    private void bindCheckBox(ContactListItemView view, Cursor cursor, boolean isLocalDirectory) {
-        // Disable clicking on all contacts from remote directories when showing check boxes. We do
-        // this by telling the view to handle clicking itself.
-        view.setClickable(!isLocalDirectory && mDisplayCheckBoxes);
-        // Only show checkboxes if mDisplayCheckBoxes is enabled. Also, never show the
-        // checkbox for other directory contacts except local directory.
-        if (!mDisplayCheckBoxes || !isLocalDirectory) {
-            view.hideCheckBox();
-            return;
-        }
-        final CheckBox checkBox = view.getCheckBox();
-        final long contactId = cursor.getLong(mContactIdColumnIndex);
-        checkBox.setChecked(mSelectedContactIds.contains(contactId));
-        checkBox.setClickable(false);
-        checkBox.setTag(contactId);
-    }
-}
diff --git a/src/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java b/src/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java
deleted file mode 100644
index fe23054..0000000
--- a/src/com/android/contacts/common/list/OnPhoneNumberPickerActionListener.java
+++ /dev/null
@@ -1,48 +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.common.list;
-
-import android.app.ActionBar;
-import android.content.Intent;
-import android.net.Uri;
-
-/**
- * Action callbacks that can be sent by a phone number picker.
- */
-public interface OnPhoneNumberPickerActionListener  {
-    public static final int CALL_INITIATION_UNKNOWN = 0;
-
-    /**
-     * Returns the selected phone number uri to the requester.
-     */
-    void onPickDataUri(Uri dataUri, boolean isVideoCall, int callInitiationType);
-
-    /**
-     * Returns the specified phone number to the requester.
-     * May call the specified phone number, either as an audio or video call.
-     */
-    void onPickPhoneNumber(String phoneNumber, boolean isVideoCall, int callInitiationType);
-
-    /**
-     * Returns the selected number as a shortcut intent.
-     */
-    void onShortcutIntentCreated(Intent intent);
-
-    /**
-     * Called when home menu in {@link ActionBar} is clicked by the user.
-     */
-    void onHomeInActionBarSelected();
-}
diff --git a/src/com/android/contacts/common/list/PhoneNumberListAdapter.java b/src/com/android/contacts/common/list/PhoneNumberListAdapter.java
deleted file mode 100644
index 348cac2..0000000
--- a/src/com/android/contacts/common/list/PhoneNumberListAdapter.java
+++ /dev/null
@@ -1,657 +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.common.list;
-
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.CursorLoader;
-import android.database.Cursor;
-import android.net.Uri;
-import android.net.Uri.Builder;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Callable;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.SipAddress;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Directory;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.contacts.common.CallUtil;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.R;
-import com.android.contacts.common.compat.CallableCompat;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.DirectoryCompat;
-import com.android.contacts.common.compat.PhoneCompat;
-import com.android.contacts.common.extensions.ExtendedPhoneDirectoriesManager;
-import com.android.contacts.common.extensions.ExtensionsFactory;
-import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.common.util.Constants;
-
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A cursor adapter for the {@link Phone#CONTENT_ITEM_TYPE} and
- * {@link SipAddress#CONTENT_ITEM_TYPE}.
- *
- * By default this adapter just handles phone numbers. When {@link #setUseCallableUri(boolean)} is
- * called with "true", this adapter starts handling SIP addresses too, by using {@link Callable}
- * API instead of {@link Phone}.
- */
-public class PhoneNumberListAdapter extends ContactEntryListAdapter {
-
-    private static final String TAG = PhoneNumberListAdapter.class.getSimpleName();
-
-    public interface Listener {
-        void onVideoCallIconClicked(int position);
-    }
-
-    // A list of extended directories to add to the directories from the database
-    private final List<DirectoryPartition> mExtendedDirectories;
-
-    // Extended directories will have ID's that are higher than any of the id's from the database,
-    // so that we can identify them and set them up properly. If no extended directories
-    // exist, this will be Long.MAX_VALUE
-    private long mFirstExtendedDirectoryId = Long.MAX_VALUE;
-
-    public static class PhoneQuery {
-
-        /**
-         * Optional key used as part of a JSON lookup key to specify an analytics category
-         * associated with the row.
-         */
-        public static final String ANALYTICS_CATEGORY = "analytics_category";
-
-        /**
-         * Optional key used as part of a JSON lookup key to specify an analytics action associated
-         * with the row.
-         */
-        public static final String ANALYTICS_ACTION = "analytics_action";
-
-        /**
-         * Optional key used as part of a JSON lookup key to specify an analytics value associated
-         * with the row.
-         */
-        public static final String ANALYTICS_VALUE = "analytics_value";
-
-        public static final String[] PROJECTION_PRIMARY_INTERNAL = new String[] {
-            Phone._ID,                          // 0
-            Phone.TYPE,                         // 1
-            Phone.LABEL,                        // 2
-            Phone.NUMBER,                       // 3
-            Phone.CONTACT_ID,                   // 4
-            Phone.LOOKUP_KEY,                   // 5
-            Phone.PHOTO_ID,                     // 6
-            Phone.DISPLAY_NAME_PRIMARY,         // 7
-            Phone.PHOTO_THUMBNAIL_URI,          // 8
-        };
-
-        public static final String[] PROJECTION_PRIMARY;
-
-        static {
-            final List<String> projectionList = Lists.newArrayList(PROJECTION_PRIMARY_INTERNAL);
-            if (CompatUtils.isMarshmallowCompatible()) {
-                projectionList.add(Phone.CARRIER_PRESENCE); // 9
-            }
-            PROJECTION_PRIMARY = projectionList.toArray(new String[projectionList.size()]);
-        }
-
-        public static final String[] PROJECTION_ALTERNATIVE_INTERNAL = new String[] {
-            Phone._ID,                          // 0
-            Phone.TYPE,                         // 1
-            Phone.LABEL,                        // 2
-            Phone.NUMBER,                       // 3
-            Phone.CONTACT_ID,                   // 4
-            Phone.LOOKUP_KEY,                   // 5
-            Phone.PHOTO_ID,                     // 6
-            Phone.DISPLAY_NAME_ALTERNATIVE,     // 7
-            Phone.PHOTO_THUMBNAIL_URI,          // 8
-        };
-
-        public static final String[] PROJECTION_ALTERNATIVE;
-
-        static {
-            final List<String> projectionList = Lists.newArrayList(PROJECTION_ALTERNATIVE_INTERNAL);
-            if (CompatUtils.isMarshmallowCompatible()) {
-                projectionList.add(Phone.CARRIER_PRESENCE); // 9
-            }
-            PROJECTION_ALTERNATIVE = projectionList.toArray(new String[projectionList.size()]);
-        }
-
-        public static final int PHONE_ID                = 0;
-        public static final int PHONE_TYPE              = 1;
-        public static final int PHONE_LABEL             = 2;
-        public static final int PHONE_NUMBER            = 3;
-        public static final int CONTACT_ID              = 4;
-        public static final int LOOKUP_KEY              = 5;
-        public static final int PHOTO_ID                = 6;
-        public static final int DISPLAY_NAME            = 7;
-        public static final int PHOTO_URI               = 8;
-        public static final int CARRIER_PRESENCE        = 9;
-    }
-
-    private static final String IGNORE_NUMBER_TOO_LONG_CLAUSE =
-            "length(" + Phone.NUMBER + ") < 1000";
-
-    private final CharSequence mUnknownNameText;
-    private final String mCountryIso;
-
-    private ContactListItemView.PhotoPosition mPhotoPosition;
-
-    private boolean mUseCallableUri;
-
-    private Listener mListener;
-
-    private boolean mIsVideoEnabled;
-    private boolean mIsPresenceEnabled;
-
-    public PhoneNumberListAdapter(Context context) {
-        super(context);
-        setDefaultFilterHeaderText(R.string.list_filter_phones);
-        mUnknownNameText = context.getText(android.R.string.unknownName);
-        mCountryIso = GeoUtil.getCurrentCountryIso(context);
-
-        final ExtendedPhoneDirectoriesManager manager
-                = ExtensionsFactory.getExtendedPhoneDirectoriesManager();
-        if (manager != null) {
-            mExtendedDirectories = manager.getExtendedDirectories(mContext);
-        } else {
-            // Empty list to avoid sticky NPE's
-            mExtendedDirectories = new ArrayList<DirectoryPartition>();
-        }
-
-        int videoCapabilities = CallUtil.getVideoCallingAvailability(context);
-        mIsVideoEnabled = (videoCapabilities & CallUtil.VIDEO_CALLING_ENABLED) != 0;
-        mIsPresenceEnabled = (videoCapabilities & CallUtil.VIDEO_CALLING_PRESENCE) != 0;
-    }
-
-    protected CharSequence getUnknownNameText() {
-        return mUnknownNameText;
-    }
-
-    @Override
-    public void configureLoader(CursorLoader loader, long directoryId) {
-        String query = getQueryString();
-        if (query == null) {
-            query = "";
-        }
-        if (isExtendedDirectory(directoryId)) {
-            final DirectoryPartition directory = getExtendedDirectoryFromId(directoryId);
-            final String contentUri = directory.getContentUri();
-            if (contentUri == null) {
-                throw new IllegalStateException("Extended directory must have a content URL: "
-                        + directory);
-            }
-            final Builder builder = Uri.parse(contentUri).buildUpon();
-            builder.appendPath(query);
-            builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
-                    String.valueOf(getDirectoryResultLimit(directory)));
-            loader.setUri(builder.build());
-            loader.setProjection(PhoneQuery.PROJECTION_PRIMARY);
-        } else {
-            final boolean isRemoteDirectoryQuery
-                    = DirectoryCompat.isRemoteDirectoryId(directoryId);
-            final Builder builder;
-            if (isSearchMode()) {
-                final Uri baseUri;
-                if (isRemoteDirectoryQuery) {
-                    baseUri = PhoneCompat.getContentFilterUri();
-                } else if (mUseCallableUri) {
-                    baseUri = CallableCompat.getContentFilterUri();
-                } else {
-                    baseUri = PhoneCompat.getContentFilterUri();
-                }
-                builder = baseUri.buildUpon();
-                builder.appendPath(query);      // Builder will encode the query
-                builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
-                        String.valueOf(directoryId));
-                if (isRemoteDirectoryQuery) {
-                    builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
-                            String.valueOf(getDirectoryResultLimit(getDirectoryById(directoryId))));
-                }
-            } else {
-                Uri baseUri = mUseCallableUri ? Callable.CONTENT_URI : Phone.CONTENT_URI;
-                builder = baseUri.buildUpon().appendQueryParameter(
-                        ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT));
-                if (isSectionHeaderDisplayEnabled()) {
-                    builder.appendQueryParameter(Phone.EXTRA_ADDRESS_BOOK_INDEX, "true");
-                }
-                applyFilter(loader, builder, directoryId, getFilter());
-            }
-
-            // Ignore invalid phone numbers that are too long. These can potentially cause freezes
-            // in the UI and there is no reason to display them.
-            final String prevSelection = loader.getSelection();
-            final String newSelection;
-            if (!TextUtils.isEmpty(prevSelection)) {
-                newSelection = prevSelection + " AND " + IGNORE_NUMBER_TOO_LONG_CLAUSE;
-            } else {
-                newSelection = IGNORE_NUMBER_TOO_LONG_CLAUSE;
-            }
-            loader.setSelection(newSelection);
-
-            // Remove duplicates when it is possible.
-            builder.appendQueryParameter(ContactsContract.REMOVE_DUPLICATE_ENTRIES, "true");
-            loader.setUri(builder.build());
-
-            // TODO a projection that includes the search snippet
-            if (getContactNameDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
-                loader.setProjection(PhoneQuery.PROJECTION_PRIMARY);
-            } else {
-                loader.setProjection(PhoneQuery.PROJECTION_ALTERNATIVE);
-            }
-
-            if (getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
-                loader.setSortOrder(Phone.SORT_KEY_PRIMARY);
-            } else {
-                loader.setSortOrder(Phone.SORT_KEY_ALTERNATIVE);
-            }
-        }
-    }
-
-    protected boolean isExtendedDirectory(long directoryId) {
-        return directoryId >= mFirstExtendedDirectoryId;
-    }
-
-    private DirectoryPartition getExtendedDirectoryFromId(long directoryId) {
-        final int directoryIndex = (int) (directoryId - mFirstExtendedDirectoryId);
-        return mExtendedDirectories.get(directoryIndex);
-    }
-
-    /**
-     * Configure {@code loader} and {@code uriBuilder} according to {@code directoryId} and {@code
-     * filter}.
-     */
-    private void applyFilter(CursorLoader loader, Uri.Builder uriBuilder, long directoryId,
-            ContactListFilter filter) {
-        if (filter == null || directoryId != Directory.DEFAULT) {
-            return;
-        }
-
-        final StringBuilder selection = new StringBuilder();
-        final List<String> selectionArgs = new ArrayList<String>();
-
-        switch (filter.filterType) {
-            case ContactListFilter.FILTER_TYPE_CUSTOM: {
-                selection.append(Contacts.IN_VISIBLE_GROUP + "=1");
-                selection.append(" AND " + Contacts.HAS_PHONE_NUMBER + "=1");
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_ACCOUNT: {
-                filter.addAccountQueryParameterToUrl(uriBuilder);
-                break;
-            }
-            case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS:
-            case ContactListFilter.FILTER_TYPE_DEFAULT:
-                break; // No selection needed.
-            case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
-                break; // This adapter is always "phone only", so no selection needed either.
-            default:
-                Log.w(TAG, "Unsupported filter type came " +
-                        "(type: " + filter.filterType + ", toString: " + filter + ")" +
-                        " showing all contacts.");
-                // No selection.
-                break;
-        }
-        loader.setSelection(selection.toString());
-        loader.setSelectionArgs(selectionArgs.toArray(new String[0]));
-    }
-
-    @Override
-    public String getContactDisplayName(int position) {
-        return ((Cursor) getItem(position)).getString(PhoneQuery.DISPLAY_NAME);
-    }
-
-    public String getPhoneNumber(int position) {
-        final Cursor item = (Cursor)getItem(position);
-        return item != null ? item.getString(PhoneQuery.PHONE_NUMBER) : null;
-    }
-
-    /**
-     * Builds a {@link Data#CONTENT_URI} for the given cursor position.
-     *
-     * @return Uri for the data. may be null if the cursor is not ready.
-     */
-    public Uri getDataUri(int position) {
-        final int partitionIndex = getPartitionForPosition(position);
-        final Cursor item = (Cursor)getItem(position);
-        return item != null ? getDataUri(partitionIndex, item) : null;
-    }
-
-    public Uri getDataUri(int partitionIndex, Cursor cursor) {
-        final long directoryId =
-                ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
-        if (DirectoryCompat.isRemoteDirectoryId(directoryId)) {
-            return null;
-        } else if (DirectoryCompat.isEnterpriseDirectoryId(directoryId)) {
-            /*
-             * ContentUris.withAppendedId(Data.CONTENT_URI, phoneId), is invalid if
-             * isEnterpriseDirectoryId returns true, because the uri itself will fail since the
-             * ContactsProvider in Android Framework currently doesn't support it. return null until
-             * Android framework has enterprise version of Data.CONTENT_URI
-             */
-            return null;
-        } else {
-            final long phoneId = cursor.getLong(PhoneQuery.PHONE_ID);
-            return ContentUris.withAppendedId(Data.CONTENT_URI, phoneId);
-        }
-    }
-
-    /**
-     * Retrieves the lookup key for the given cursor position.
-     *
-     * @param position The cursor position.
-     * @return The lookup key.
-     */
-    public String getLookupKey(int position) {
-        final Cursor item = (Cursor)getItem(position);
-        return item != null ? item.getString(PhoneQuery.LOOKUP_KEY) : null;
-    }
-
-    @Override
-    protected ContactListItemView newView(
-            Context context, int partition, Cursor cursor, int position, ViewGroup parent) {
-        ContactListItemView view = super.newView(context, partition, cursor, position, parent);
-        view.setUnknownNameText(mUnknownNameText);
-        view.setQuickContactEnabled(isQuickContactEnabled());
-        view.setPhotoPosition(mPhotoPosition);
-        return view;
-    }
-
-    protected void setHighlight(ContactListItemView view, Cursor cursor) {
-        view.setHighlightedPrefix(isSearchMode() ? getUpperCaseQueryString() : null);
-    }
-
-    // Override default, which would return number of phone numbers, so we
-    // instead return number of contacts.
-    @Override
-    protected int getResultCount(Cursor cursor) {
-        if (cursor == null) {
-            return 0;
-        }
-        cursor.moveToPosition(-1);
-        long curContactId = -1;
-        int numContacts = 0;
-        while(cursor.moveToNext()) {
-            final long contactId = cursor.getLong(PhoneQuery.CONTACT_ID);
-            if (contactId != curContactId) {
-                curContactId = contactId;
-                ++numContacts;
-            }
-        }
-        return numContacts;
-    }
-
-    @Override
-    protected void bindView(View itemView, int partition, Cursor cursor, int position) {
-        super.bindView(itemView, partition, cursor, position);
-        ContactListItemView view = (ContactListItemView)itemView;
-
-        setHighlight(view, cursor);
-
-        // Look at elements before and after this position, checking if contact IDs are same.
-        // If they have one same contact ID, it means they can be grouped.
-        //
-        // In one group, only the first entry will show its photo and its name, and the other
-        // entries in the group show just their data (e.g. phone number, email address).
-        cursor.moveToPosition(position);
-        boolean isFirstEntry = true;
-        boolean showBottomDivider = true;
-        final long currentContactId = cursor.getLong(PhoneQuery.CONTACT_ID);
-        if (cursor.moveToPrevious() && !cursor.isBeforeFirst()) {
-            final long previousContactId = cursor.getLong(PhoneQuery.CONTACT_ID);
-            if (currentContactId == previousContactId) {
-                isFirstEntry = false;
-            }
-        }
-        cursor.moveToPosition(position);
-        if (cursor.moveToNext() && !cursor.isAfterLast()) {
-            final long nextContactId = cursor.getLong(PhoneQuery.CONTACT_ID);
-            if (currentContactId == nextContactId) {
-                // The following entry should be in the same group, which means we don't want a
-                // divider between them.
-                // TODO: we want a different divider than the divider between groups. Just hiding
-                // this divider won't be enough.
-                showBottomDivider = false;
-            }
-        }
-        cursor.moveToPosition(position);
-
-        bindViewId(view, cursor, PhoneQuery.PHONE_ID);
-
-        bindSectionHeaderAndDivider(view, position);
-        if (isFirstEntry) {
-            bindName(view, cursor);
-            if (isQuickContactEnabled()) {
-                bindQuickContact(view, partition, cursor, PhoneQuery.PHOTO_ID,
-                        PhoneQuery.PHOTO_URI, PhoneQuery.CONTACT_ID,
-                        PhoneQuery.LOOKUP_KEY, PhoneQuery.DISPLAY_NAME);
-            } else {
-                if (getDisplayPhotos()) {
-                    bindPhoto(view, partition, cursor);
-                }
-            }
-        } else {
-            unbindName(view);
-
-            view.removePhotoView(true, false);
-        }
-
-        final DirectoryPartition directory = (DirectoryPartition) getPartition(partition);
-        bindPhoneNumber(view, cursor, directory.isDisplayNumber(), position);
-    }
-
-    protected void bindPhoneNumber(ContactListItemView view, Cursor cursor, boolean displayNumber,
-            int position) {
-        CharSequence label = null;
-        if (displayNumber &&  !cursor.isNull(PhoneQuery.PHONE_TYPE)) {
-            final int type = cursor.getInt(PhoneQuery.PHONE_TYPE);
-            final String customLabel = cursor.getString(PhoneQuery.PHONE_LABEL);
-
-            // TODO cache
-            label = Phone.getTypeLabel(getContext().getResources(), type, customLabel);
-        }
-        view.setLabel(label);
-        final String text;
-        if (displayNumber) {
-            text = cursor.getString(PhoneQuery.PHONE_NUMBER);
-        } else {
-            // Display phone label. If that's null, display geocoded location for the number
-            final String phoneLabel = cursor.getString(PhoneQuery.PHONE_LABEL);
-            if (phoneLabel != null) {
-                text = phoneLabel;
-            } else {
-                final String phoneNumber = cursor.getString(PhoneQuery.PHONE_NUMBER);
-                text = GeoUtil.getGeocodedLocationFor(mContext, phoneNumber);
-            }
-        }
-        view.setPhoneNumber(text, mCountryIso);
-
-        if (CompatUtils.isVideoCompatible()) {
-            // Determine if carrier presence indicates the number supports video calling.
-            int carrierPresence = cursor.getInt(PhoneQuery.CARRIER_PRESENCE);
-            boolean isPresent = (carrierPresence & Phone.CARRIER_PRESENCE_VT_CAPABLE) != 0;
-
-            boolean isVideoIconShown = mIsVideoEnabled && (
-                    mIsPresenceEnabled && isPresent || !mIsPresenceEnabled);
-            view.setShowVideoCallIcon(isVideoIconShown, mListener, position);
-        }
-    }
-
-    protected void bindSectionHeaderAndDivider(final ContactListItemView view, int position) {
-        if (isSectionHeaderDisplayEnabled()) {
-            Placement placement = getItemPlacementInSection(position);
-            view.setSectionHeader(placement.firstInSection ? placement.sectionHeader : null);
-        } else {
-            view.setSectionHeader(null);
-        }
-    }
-
-    protected void bindName(final ContactListItemView view, Cursor cursor) {
-        view.showDisplayName(cursor, PhoneQuery.DISPLAY_NAME, getContactNameDisplayOrder());
-        // Note: we don't show phonetic names any more (see issue 5265330)
-    }
-
-    protected void unbindName(final ContactListItemView view) {
-        view.hideDisplayName();
-    }
-
-    @Override
-    protected void bindWorkProfileIcon(final ContactListItemView view, int partition) {
-        final DirectoryPartition directory = (DirectoryPartition) getPartition(partition);
-        final long directoryId = directory.getDirectoryId();
-        final long userType = ContactsUtils.determineUserType(directoryId, null);
-        // Work directory must not be a extended directory. An extended directory is custom
-        // directory in the app, but not a directory provided by framework. So it can't be
-        // USER_TYPE_WORK.
-        view.setWorkProfileIconEnabled(
-                !isExtendedDirectory(directoryId) && userType == ContactsUtils.USER_TYPE_WORK);
-    }
-
-    protected void bindPhoto(final ContactListItemView view, int partitionIndex, Cursor cursor) {
-        if (!isPhotoSupported(partitionIndex)) {
-            view.removePhotoView();
-            return;
-        }
-
-        long photoId = 0;
-        if (!cursor.isNull(PhoneQuery.PHOTO_ID)) {
-            photoId = cursor.getLong(PhoneQuery.PHOTO_ID);
-        }
-
-        if (photoId != 0) {
-            getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, false,
-                    getCircularPhotos(), null);
-        } else {
-            final String photoUriString = cursor.getString(PhoneQuery.PHOTO_URI);
-            final Uri photoUri = photoUriString == null ? null : Uri.parse(photoUriString);
-
-            DefaultImageRequest request = null;
-            if (photoUri == null) {
-                final String displayName = cursor.getString(PhoneQuery.DISPLAY_NAME);
-                final String lookupKey = cursor.getString(PhoneQuery.LOOKUP_KEY);
-                request = new DefaultImageRequest(displayName, lookupKey, getCircularPhotos());
-            }
-            getPhotoLoader().loadDirectoryPhoto(view.getPhotoView(), photoUri, false,
-                    getCircularPhotos(), request);
-        }
-    }
-
-    public void setPhotoPosition(ContactListItemView.PhotoPosition photoPosition) {
-        mPhotoPosition = photoPosition;
-    }
-
-    public ContactListItemView.PhotoPosition getPhotoPosition() {
-        return mPhotoPosition;
-    }
-
-    public void setUseCallableUri(boolean useCallableUri) {
-        mUseCallableUri = useCallableUri;
-    }
-
-    public boolean usesCallableUri() {
-        return mUseCallableUri;
-    }
-
-    /**
-     * Override base implementation to inject extended directories between local & remote
-     * directories. This is done in the following steps:
-     * 1. Call base implementation to add directories from the cursor.
-     * 2. Iterate all base directories and establish the following information:
-     *   a. The highest directory id so that we can assign unused id's to the extended directories.
-     *   b. The index of the last non-remote directory. This is where we will insert extended
-     *      directories.
-     * 3. Iterate the extended directories and for each one, assign an ID and insert it in the
-     *    proper location.
-     */
-    @Override
-    public void changeDirectories(Cursor cursor) {
-        super.changeDirectories(cursor);
-        if (getDirectorySearchMode() == DirectoryListLoader.SEARCH_MODE_NONE) {
-            return;
-        }
-        final int numExtendedDirectories = mExtendedDirectories.size();
-        if (getPartitionCount() == cursor.getCount() + numExtendedDirectories) {
-            // already added all directories;
-            return;
-        }
-        //
-        mFirstExtendedDirectoryId = Long.MAX_VALUE;
-        if (numExtendedDirectories > 0) {
-            // The Directory.LOCAL_INVISIBLE is not in the cursor but we can't reuse it's
-            // "special" ID.
-            long maxId = Directory.LOCAL_INVISIBLE;
-            int insertIndex = 0;
-            for (int i = 0, n = getPartitionCount(); i < n; i++) {
-                final DirectoryPartition partition = (DirectoryPartition) getPartition(i);
-                final long id = partition.getDirectoryId();
-                if (id > maxId) {
-                    maxId = id;
-                }
-                if (!DirectoryCompat.isRemoteDirectoryId(id)) {
-                    // assuming remote directories come after local, we will end up with the index
-                    // where we should insert extended directories. This also works if there are no
-                    // remote directories at all.
-                    insertIndex = i + 1;
-                }
-            }
-            // Extended directories ID's cannot collide with base directories
-            mFirstExtendedDirectoryId = maxId + 1;
-            for (int i = 0; i < numExtendedDirectories; i++) {
-                final long id = mFirstExtendedDirectoryId + i;
-                final DirectoryPartition directory = mExtendedDirectories.get(i);
-                if (getPartitionByDirectoryId(id) == -1) {
-                    addPartition(insertIndex, directory);
-                    directory.setDirectoryId(id);
-                }
-            }
-        }
-    }
-
-    @Override
-    protected Uri getContactUri(int partitionIndex, Cursor cursor,
-            int contactIdColumn, int lookUpKeyColumn) {
-        final DirectoryPartition directory = (DirectoryPartition) getPartition(partitionIndex);
-        final long directoryId = directory.getDirectoryId();
-        if (!isExtendedDirectory(directoryId)) {
-            return super.getContactUri(partitionIndex, cursor, contactIdColumn, lookUpKeyColumn);
-        }
-        return Contacts.CONTENT_LOOKUP_URI.buildUpon()
-                .appendPath(Constants.LOOKUP_URI_ENCODED)
-                .appendQueryParameter(Directory.DISPLAY_NAME, directory.getLabel())
-                .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
-                        String.valueOf(directoryId))
-                .encodedFragment(cursor.getString(lookUpKeyColumn))
-                .build();
-    }
-
-    public Listener getListener() {
-        return mListener;
-    }
-
-    public void setListener(Listener listener) {
-        mListener = listener;
-    }
-}
diff --git a/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java
deleted file mode 100644
index bbbd794..0000000
--- a/src/com/android/contacts/common/list/PhoneNumberPickerFragment.java
+++ /dev/null
@@ -1,297 +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.common.list;
-
-import android.content.Intent;
-import android.content.Loader;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
-
-/**
- * Fragment containing a phone number list for picking.
- */
-public class PhoneNumberPickerFragment extends ContactEntryListFragment<ContactEntryListAdapter>
-        implements OnShortcutIntentCreatedListener, PhoneNumberListAdapter.Listener {
-    private static final String TAG = PhoneNumberPickerFragment.class.getSimpleName();
-
-    private static final String KEY_SHORTCUT_ACTION = "shortcutAction";
-
-    private OnPhoneNumberPickerActionListener mListener;
-    private String mShortcutAction;
-
-    private ContactListFilter mFilter;
-
-    private static final String KEY_FILTER = "filter";
-
-    /** true if the loader has started at least once. */
-    private boolean mLoaderStarted;
-
-    private boolean mUseCallableUri;
-
-    private ContactListItemView.PhotoPosition mPhotoPosition =
-            ContactListItemView.getDefaultPhotoPosition(false /* normal/non opposite */);
-
-    /**
-     * Handles a click on the video call icon for a row in the list.
-     *
-     * @param position The position in the list where the click ocurred.
-     */
-    @Override
-    public void onVideoCallIconClicked(int position) {
-        callNumber(position, true /* isVideoCall */);
-    }
-
-    public PhoneNumberPickerFragment() {
-        setQuickContactEnabled(false);
-        setPhotoLoaderEnabled(true);
-        setSectionHeaderDisplayEnabled(true);
-        setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
-
-        // Show nothing instead of letting caller Activity show something.
-        setHasOptionsMenu(true);
-    }
-
-    public void setDirectorySearchEnabled(boolean flag) {
-        setDirectorySearchMode(flag ? DirectoryListLoader.SEARCH_MODE_DEFAULT
-                : DirectoryListLoader.SEARCH_MODE_NONE);
-    }
-
-    public void setOnPhoneNumberPickerActionListener(OnPhoneNumberPickerActionListener listener) {
-        this.mListener = listener;
-    }
-
-    public OnPhoneNumberPickerActionListener getOnPhoneNumberPickerListener() {
-        return mListener;
-    }
-
-    @Override
-    protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
-        super.onCreateView(inflater, container);
-
-        setVisibleScrollbarEnabled(getVisibleScrollbarEnabled());
-    }
-
-    protected boolean getVisibleScrollbarEnabled() {
-        return true;
-    }
-
-    @Override
-    public void restoreSavedState(Bundle savedState) {
-        super.restoreSavedState(savedState);
-
-        if (savedState == null) {
-            return;
-        }
-
-        mFilter = savedState.getParcelable(KEY_FILTER);
-        mShortcutAction = savedState.getString(KEY_SHORTCUT_ACTION);
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putParcelable(KEY_FILTER, mFilter);
-        outState.putString(KEY_SHORTCUT_ACTION, mShortcutAction);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        final int itemId = item.getItemId();
-        if (itemId == android.R.id.home) {  // See ActionBar#setDisplayHomeAsUpEnabled()
-            if (mListener != null) {
-                mListener.onHomeInActionBarSelected();
-            }
-            return true;
-        }
-        return super.onOptionsItemSelected(item);
-    }
-
-    /**
-     * @param shortcutAction either {@link Intent#ACTION_CALL} or
-     *            {@link Intent#ACTION_SENDTO} or null.
-     */
-    public void setShortcutAction(String shortcutAction) {
-        this.mShortcutAction = shortcutAction;
-    }
-
-    @Override
-    protected void onItemClick(int position, long id) {
-        callNumber(position, false /* isVideoCall */);
-    }
-
-    /**
-     * Initiates a call to the number at the specified position.
-     *
-     * @param position The position.
-     * @param isVideoCall {@code true} if the call should be initiated as a video call,
-     *      {@code false} otherwise.
-     */
-    private void callNumber(int position, boolean isVideoCall) {
-        final Uri phoneUri = getPhoneUri(position);
-
-        if (phoneUri != null) {
-            pickPhoneNumber(phoneUri, isVideoCall);
-        } else {
-            final String number = getPhoneNumber(position);
-            if (!TextUtils.isEmpty(number)) {
-                cacheContactInfo(position);
-                mListener.onPickPhoneNumber(number, isVideoCall,
-                        getCallInitiationType(true /* isRemoteDirectory */));
-            } else {
-                Log.w(TAG, "Item at " + position + " was clicked before"
-                        + " adapter is ready. Ignoring");
-            }
-        }
-    }
-
-    protected void cacheContactInfo(int position) {
-        // Not implemented. Hook for child classes
-    }
-
-    protected String getPhoneNumber(int position) {
-        final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter();
-        return adapter.getPhoneNumber(position);
-    }
-
-    protected Uri getPhoneUri(int position) {
-        final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter();
-        return adapter.getDataUri(position);
-    }
-
-    protected String getLookupKey(int position) {
-        final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter();
-        return adapter.getLookupKey(position);
-    }
-
-    @Override
-    protected void startLoading() {
-        mLoaderStarted = true;
-        super.startLoading();
-    }
-
-    @Override
-    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
-        super.onLoadFinished(loader, data);
-
-        // disable scroll bar if there is no data
-        setVisibleScrollbarEnabled(data != null && !data.isClosed() && data.getCount() > 0);
-    }
-
-    public void setUseCallableUri(boolean useCallableUri) {
-        mUseCallableUri = useCallableUri;
-    }
-
-    public boolean usesCallableUri() {
-        return mUseCallableUri;
-    }
-
-    @Override
-    protected ContactEntryListAdapter createListAdapter() {
-        PhoneNumberListAdapter adapter = new PhoneNumberListAdapter(getActivity());
-        adapter.setDisplayPhotos(true);
-        adapter.setUseCallableUri(mUseCallableUri);
-        return adapter;
-    }
-
-    @Override
-    protected void configureAdapter() {
-        super.configureAdapter();
-
-        final ContactEntryListAdapter adapter = getAdapter();
-        if (adapter == null) {
-            return;
-        }
-
-        if (!isSearchMode() && mFilter != null) {
-            adapter.setFilter(mFilter);
-        }
-
-        setPhotoPosition(adapter);
-    }
-
-    protected void setPhotoPosition(ContactEntryListAdapter adapter) {
-        ((PhoneNumberListAdapter) adapter).setPhotoPosition(mPhotoPosition);
-    }
-
-    @Override
-    protected View inflateView(LayoutInflater inflater, ViewGroup container) {
-        return inflater.inflate(R.layout.contact_list_content, null);
-    }
-
-    public void pickPhoneNumber(Uri uri, boolean isVideoCall) {
-        if (mShortcutAction == null) {
-            mListener.onPickDataUri(uri, isVideoCall,
-                    getCallInitiationType(false /* isRemoteDirectory */));
-        } else {
-            startPhoneNumberShortcutIntent(uri, isVideoCall);
-        }
-    }
-
-    protected void startPhoneNumberShortcutIntent(Uri uri, boolean isVideoCall) {
-        ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this);
-        builder.createPhoneNumberShortcutIntent(uri, mShortcutAction);
-    }
-
-    @Override
-    public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
-        mListener.onShortcutIntentCreated(shortcutIntent);
-    }
-
-    @Override
-    public void onPickerResult(Intent data) {
-        mListener.onPickDataUri(data.getData(), false /* isVideoCall */,
-                getCallInitiationType(false /* isRemoteDirectory */));
-    }
-
-    public void setFilter(ContactListFilter filter) {
-        if ((mFilter == null && filter == null) ||
-                (mFilter != null && mFilter.equals(filter))) {
-            return;
-        }
-
-        mFilter = filter;
-        if (mLoaderStarted) {
-            reloadData();
-        }
-    }
-
-    public void setPhotoPosition(ContactListItemView.PhotoPosition photoPosition) {
-        mPhotoPosition = photoPosition;
-
-        final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter();
-        if (adapter != null) {
-            adapter.setPhotoPosition(photoPosition);
-        }
-    }
-
-    /**
-     * @param isRemoteDirectory {@code true} if the call was initiated using a contact/phone number
-     *         not in the local contacts database
-     */
-    protected int getCallInitiationType(boolean isRemoteDirectory) {
-        return OnPhoneNumberPickerActionListener.CALL_INITIATION_UNKNOWN;
-    }
-}
diff --git a/src/com/android/contacts/common/list/PinnedHeaderListAdapter.java b/src/com/android/contacts/common/list/PinnedHeaderListAdapter.java
deleted file mode 100644
index 72f3f19..0000000
--- a/src/com/android/contacts/common/list/PinnedHeaderListAdapter.java
+++ /dev/null
@@ -1,169 +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.common.list;
-
-import android.content.Context;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.common.widget.CompositeCursorAdapter;
-
-/**
- * A subclass of {@link CompositeCursorAdapter} that manages pinned partition headers.
- */
-public abstract class PinnedHeaderListAdapter extends CompositeCursorAdapter
-        implements PinnedHeaderListView.PinnedHeaderAdapter {
-
-    public static final int PARTITION_HEADER_TYPE = 0;
-
-    private boolean mPinnedPartitionHeadersEnabled;
-    private boolean mHeaderVisibility[];
-
-    public PinnedHeaderListAdapter(Context context) {
-        super(context);
-    }
-
-    public PinnedHeaderListAdapter(Context context, int initialCapacity) {
-        super(context, initialCapacity);
-    }
-
-    public boolean getPinnedPartitionHeadersEnabled() {
-        return mPinnedPartitionHeadersEnabled;
-    }
-
-    public void setPinnedPartitionHeadersEnabled(boolean flag) {
-        this.mPinnedPartitionHeadersEnabled = flag;
-    }
-
-    @Override
-    public int getPinnedHeaderCount() {
-        if (mPinnedPartitionHeadersEnabled) {
-            return getPartitionCount();
-        } else {
-            return 0;
-        }
-    }
-
-    protected boolean isPinnedPartitionHeaderVisible(int partition) {
-        return getPinnedPartitionHeadersEnabled() && hasHeader(partition)
-                && !isPartitionEmpty(partition);
-    }
-
-    /**
-     * The default implementation creates the same type of view as a normal
-     * partition header.
-     */
-    @Override
-    public View getPinnedHeaderView(int partition, View convertView, ViewGroup parent) {
-        if (hasHeader(partition)) {
-            View view = null;
-            if (convertView != null) {
-                Integer headerType = (Integer)convertView.getTag();
-                if (headerType != null && headerType == PARTITION_HEADER_TYPE) {
-                    view = convertView;
-                }
-            }
-            if (view == null) {
-                view = newHeaderView(getContext(), partition, null, parent);
-                view.setTag(PARTITION_HEADER_TYPE);
-                view.setFocusable(false);
-                view.setEnabled(false);
-            }
-            bindHeaderView(view, partition, getCursor(partition));
-            view.setLayoutDirection(parent.getLayoutDirection());
-            return view;
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    public void configurePinnedHeaders(PinnedHeaderListView listView) {
-        if (!getPinnedPartitionHeadersEnabled()) {
-            return;
-        }
-
-        int size = getPartitionCount();
-
-        // Cache visibility bits, because we will need them several times later on
-        if (mHeaderVisibility == null || mHeaderVisibility.length != size) {
-            mHeaderVisibility = new boolean[size];
-        }
-        for (int i = 0; i < size; i++) {
-            boolean visible = isPinnedPartitionHeaderVisible(i);
-            mHeaderVisibility[i] = visible;
-            if (!visible) {
-                listView.setHeaderInvisible(i, true);
-            }
-        }
-
-        int headerViewsCount = listView.getHeaderViewsCount();
-
-        // Starting at the top, find and pin headers for partitions preceding the visible one(s)
-        int maxTopHeader = -1;
-        int topHeaderHeight = 0;
-        for (int i = 0; i < size; i++) {
-            if (mHeaderVisibility[i]) {
-                int position = listView.getPositionAt(topHeaderHeight) - headerViewsCount;
-                int partition = getPartitionForPosition(position);
-                if (i > partition) {
-                    break;
-                }
-
-                listView.setHeaderPinnedAtTop(i, topHeaderHeight, false);
-                topHeaderHeight += listView.getPinnedHeaderHeight(i);
-                maxTopHeader = i;
-            }
-        }
-
-        // Starting at the bottom, find and pin headers for partitions following the visible one(s)
-        int maxBottomHeader = size;
-        int bottomHeaderHeight = 0;
-        int listHeight = listView.getHeight();
-        for (int i = size; --i > maxTopHeader;) {
-            if (mHeaderVisibility[i]) {
-                int position = listView.getPositionAt(listHeight - bottomHeaderHeight)
-                        - headerViewsCount;
-                if (position < 0) {
-                    break;
-                }
-
-                int partition = getPartitionForPosition(position - 1);
-                if (partition == -1 || i <= partition) {
-                    break;
-                }
-
-                int height = listView.getPinnedHeaderHeight(i);
-                bottomHeaderHeight += height;
-
-                listView.setHeaderPinnedAtBottom(i, listHeight - bottomHeaderHeight, false);
-                maxBottomHeader = i;
-            }
-        }
-
-        // Headers in between the top-pinned and bottom-pinned should be hidden
-        for (int i = maxTopHeader + 1; i < maxBottomHeader; i++) {
-            if (mHeaderVisibility[i]) {
-                listView.setHeaderInvisible(i, isPartitionEmpty(i));
-            }
-        }
-    }
-
-    @Override
-    public int getScrollPositionForHeader(int viewIndex) {
-        return getPositionForPartition(viewIndex);
-    }
-}
diff --git a/src/com/android/contacts/common/list/PinnedHeaderListView.java b/src/com/android/contacts/common/list/PinnedHeaderListView.java
deleted file mode 100644
index b68ff1f..0000000
--- a/src/com/android/contacts/common/list/PinnedHeaderListView.java
+++ /dev/null
@@ -1,581 +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.common.list;
-
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.RectF;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AbsListView;
-import android.widget.AbsListView.OnScrollListener;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemSelectedListener;
-import android.widget.ListAdapter;
-import android.widget.TextView;
-
-import com.android.contacts.common.util.ViewUtil;
-
-/**
- * A ListView that maintains a header pinned at the top of the list. The
- * pinned header can be pushed up and dissolved as needed.
- */
-public class PinnedHeaderListView extends AutoScrollListView
-        implements OnScrollListener, OnItemSelectedListener {
-
-    /**
-     * Adapter interface.  The list adapter must implement this interface.
-     */
-    public interface PinnedHeaderAdapter {
-
-        /**
-         * Returns the overall number of pinned headers, visible or not.
-         */
-        int getPinnedHeaderCount();
-
-        /**
-         * Creates or updates the pinned header view.
-         */
-        View getPinnedHeaderView(int viewIndex, View convertView, ViewGroup parent);
-
-        /**
-         * Configures the pinned headers to match the visible list items. The
-         * adapter should call {@link PinnedHeaderListView#setHeaderPinnedAtTop},
-         * {@link PinnedHeaderListView#setHeaderPinnedAtBottom},
-         * {@link PinnedHeaderListView#setFadingHeader} or
-         * {@link PinnedHeaderListView#setHeaderInvisible}, for each header that
-         * needs to change its position or visibility.
-         */
-        void configurePinnedHeaders(PinnedHeaderListView listView);
-
-        /**
-         * Returns the list position to scroll to if the pinned header is touched.
-         * Return -1 if the list does not need to be scrolled.
-         */
-        int getScrollPositionForHeader(int viewIndex);
-    }
-
-    private static final int MAX_ALPHA = 255;
-    private static final int TOP = 0;
-    private static final int BOTTOM = 1;
-    private static final int FADING = 2;
-
-    private static final int DEFAULT_ANIMATION_DURATION = 20;
-
-    private static final int DEFAULT_SMOOTH_SCROLL_DURATION = 100;
-
-    private static final class PinnedHeader {
-        View view;
-        boolean visible;
-        int y;
-        int height;
-        int alpha;
-        int state;
-
-        boolean animating;
-        boolean targetVisible;
-        int sourceY;
-        int targetY;
-        long targetTime;
-    }
-
-    private PinnedHeaderAdapter mAdapter;
-    private int mSize;
-    private PinnedHeader[] mHeaders;
-    private RectF mBounds = new RectF();
-    private OnScrollListener mOnScrollListener;
-    private OnItemSelectedListener mOnItemSelectedListener;
-    private int mScrollState;
-
-    private boolean mScrollToSectionOnHeaderTouch = false;
-    private boolean mHeaderTouched = false;
-
-    private int mAnimationDuration = DEFAULT_ANIMATION_DURATION;
-    private boolean mAnimating;
-    private long mAnimationTargetTime;
-    private int mHeaderPaddingStart;
-    private int mHeaderWidth;
-
-    public PinnedHeaderListView(Context context) {
-        this(context, null, android.R.attr.listViewStyle);
-    }
-
-    public PinnedHeaderListView(Context context, AttributeSet attrs) {
-        this(context, attrs, android.R.attr.listViewStyle);
-    }
-
-    public PinnedHeaderListView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        super.setOnScrollListener(this);
-        super.setOnItemSelectedListener(this);
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int l, int t, int r, int b) {
-        super.onLayout(changed, l, t, r, b);
-        mHeaderPaddingStart = getPaddingStart();
-        mHeaderWidth = r - l - mHeaderPaddingStart - getPaddingEnd();
-    }
-
-    @Override
-    public void setAdapter(ListAdapter adapter) {
-        mAdapter = (PinnedHeaderAdapter)adapter;
-        super.setAdapter(adapter);
-    }
-
-    @Override
-    public void setOnScrollListener(OnScrollListener onScrollListener) {
-        mOnScrollListener = onScrollListener;
-        super.setOnScrollListener(this);
-    }
-
-    @Override
-    public void setOnItemSelectedListener(OnItemSelectedListener listener) {
-        mOnItemSelectedListener = listener;
-        super.setOnItemSelectedListener(this);
-    }
-
-    public void setScrollToSectionOnHeaderTouch(boolean value) {
-        mScrollToSectionOnHeaderTouch = value;
-    }
-
-    @Override
-    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
-            int totalItemCount) {
-        if (mAdapter != null) {
-            int count = mAdapter.getPinnedHeaderCount();
-            if (count != mSize) {
-                mSize = count;
-                if (mHeaders == null) {
-                    mHeaders = new PinnedHeader[mSize];
-                } else if (mHeaders.length < mSize) {
-                    PinnedHeader[] headers = mHeaders;
-                    mHeaders = new PinnedHeader[mSize];
-                    System.arraycopy(headers, 0, mHeaders, 0, headers.length);
-                }
-            }
-
-            for (int i = 0; i < mSize; i++) {
-                if (mHeaders[i] == null) {
-                    mHeaders[i] = new PinnedHeader();
-                }
-                mHeaders[i].view = mAdapter.getPinnedHeaderView(i, mHeaders[i].view, this);
-            }
-
-            mAnimationTargetTime = System.currentTimeMillis() + mAnimationDuration;
-            mAdapter.configurePinnedHeaders(this);
-            invalidateIfAnimating();
-        }
-        if (mOnScrollListener != null) {
-            mOnScrollListener.onScroll(this, firstVisibleItem, visibleItemCount, totalItemCount);
-        }
-    }
-
-    @Override
-    protected float getTopFadingEdgeStrength() {
-        // Disable vertical fading at the top when the pinned header is present
-        return mSize > 0 ? 0 : super.getTopFadingEdgeStrength();
-    }
-
-    @Override
-    public void onScrollStateChanged(AbsListView view, int scrollState) {
-        mScrollState = scrollState;
-        if (mOnScrollListener != null) {
-            mOnScrollListener.onScrollStateChanged(this, scrollState);
-        }
-    }
-
-    /**
-     * Ensures that the selected item is positioned below the top-pinned headers
-     * and above the bottom-pinned ones.
-     */
-    @Override
-    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
-        int height = getHeight();
-
-        int windowTop = 0;
-        int windowBottom = height;
-
-        for (int i = 0; i < mSize; i++) {
-            PinnedHeader header = mHeaders[i];
-            if (header.visible) {
-                if (header.state == TOP) {
-                    windowTop = header.y + header.height;
-                } else if (header.state == BOTTOM) {
-                    windowBottom = header.y;
-                    break;
-                }
-            }
-        }
-
-        View selectedView = getSelectedView();
-        if (selectedView != null) {
-            if (selectedView.getTop() < windowTop) {
-                setSelectionFromTop(position, windowTop);
-            } else if (selectedView.getBottom() > windowBottom) {
-                setSelectionFromTop(position, windowBottom - selectedView.getHeight());
-            }
-        }
-
-        if (mOnItemSelectedListener != null) {
-            mOnItemSelectedListener.onItemSelected(parent, view, position, id);
-        }
-    }
-
-    @Override
-    public void onNothingSelected(AdapterView<?> parent) {
-        if (mOnItemSelectedListener != null) {
-            mOnItemSelectedListener.onNothingSelected(parent);
-        }
-    }
-
-    public int getPinnedHeaderHeight(int viewIndex) {
-        ensurePinnedHeaderLayout(viewIndex);
-        return mHeaders[viewIndex].view.getHeight();
-    }
-
-    /**
-     * Set header to be pinned at the top.
-     *
-     * @param viewIndex index of the header view
-     * @param y is position of the header in pixels.
-     * @param animate true if the transition to the new coordinate should be animated
-     */
-    public void setHeaderPinnedAtTop(int viewIndex, int y, boolean animate) {
-        ensurePinnedHeaderLayout(viewIndex);
-        PinnedHeader header = mHeaders[viewIndex];
-        header.visible = true;
-        header.y = y;
-        header.state = TOP;
-
-        // TODO perhaps we should animate at the top as well
-        header.animating = false;
-    }
-
-    /**
-     * Set header to be pinned at the bottom.
-     *
-     * @param viewIndex index of the header view
-     * @param y is position of the header in pixels.
-     * @param animate true if the transition to the new coordinate should be animated
-     */
-    public void setHeaderPinnedAtBottom(int viewIndex, int y, boolean animate) {
-        ensurePinnedHeaderLayout(viewIndex);
-        PinnedHeader header = mHeaders[viewIndex];
-        header.state = BOTTOM;
-        if (header.animating) {
-            header.targetTime = mAnimationTargetTime;
-            header.sourceY = header.y;
-            header.targetY = y;
-        } else if (animate && (header.y != y || !header.visible)) {
-            if (header.visible) {
-                header.sourceY = header.y;
-            } else {
-                header.visible = true;
-                header.sourceY = y + header.height;
-            }
-            header.animating = true;
-            header.targetVisible = true;
-            header.targetTime = mAnimationTargetTime;
-            header.targetY = y;
-        } else {
-            header.visible = true;
-            header.y = y;
-        }
-    }
-
-    /**
-     * Set header to be pinned at the top of the first visible item.
-     *
-     * @param viewIndex index of the header view
-     * @param position is position of the header in pixels.
-     */
-    public void setFadingHeader(int viewIndex, int position, boolean fade) {
-        ensurePinnedHeaderLayout(viewIndex);
-
-        View child = getChildAt(position - getFirstVisiblePosition());
-        if (child == null) return;
-
-        PinnedHeader header = mHeaders[viewIndex];
-        // Hide header when it's a star.
-        // TODO: try showing the view even when it's a star;
-        // if we have to hide the star view, then try hiding it in some higher layer.
-        header.visible = !((TextView) header.view).getText().toString().isEmpty();
-        header.state = FADING;
-        header.alpha = MAX_ALPHA;
-        header.animating = false;
-
-        int top = getTotalTopPinnedHeaderHeight();
-        header.y = top;
-        if (fade) {
-            int bottom = child.getBottom() - top;
-            int headerHeight = header.height;
-            if (bottom < headerHeight) {
-                int portion = bottom - headerHeight;
-                header.alpha = MAX_ALPHA * (headerHeight + portion) / headerHeight;
-                header.y = top + portion;
-            }
-        }
-    }
-
-    /**
-     * Makes header invisible.
-     *
-     * @param viewIndex index of the header view
-     * @param animate true if the transition to the new coordinate should be animated
-     */
-    public void setHeaderInvisible(int viewIndex, boolean animate) {
-        PinnedHeader header = mHeaders[viewIndex];
-        if (header.visible && (animate || header.animating) && header.state == BOTTOM) {
-            header.sourceY = header.y;
-            if (!header.animating) {
-                header.visible = true;
-                header.targetY = getBottom() + header.height;
-            }
-            header.animating = true;
-            header.targetTime = mAnimationTargetTime;
-            header.targetVisible = false;
-        } else {
-            header.visible = false;
-        }
-    }
-
-    private void ensurePinnedHeaderLayout(int viewIndex) {
-        View view = mHeaders[viewIndex].view;
-        if (view.isLayoutRequested()) {
-            ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
-            int widthSpec;
-            int heightSpec;
-
-            if (layoutParams != null && layoutParams.width > 0) {
-                widthSpec = View.MeasureSpec
-                        .makeMeasureSpec(layoutParams.width, View.MeasureSpec.EXACTLY);
-            } else {
-                widthSpec = View.MeasureSpec
-                        .makeMeasureSpec(mHeaderWidth, View.MeasureSpec.EXACTLY);
-            }
-
-            if (layoutParams != null && layoutParams.height > 0) {
-                heightSpec = View.MeasureSpec
-                        .makeMeasureSpec(layoutParams.height, View.MeasureSpec.EXACTLY);
-            } else {
-                heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
-            }
-            view.measure(widthSpec, heightSpec);
-            int height = view.getMeasuredHeight();
-            mHeaders[viewIndex].height = height;
-            view.layout(0, 0, view.getMeasuredWidth(), height);
-        }
-    }
-
-    /**
-     * Returns the sum of heights of headers pinned to the top.
-     */
-    public int getTotalTopPinnedHeaderHeight() {
-        for (int i = mSize; --i >= 0;) {
-            PinnedHeader header = mHeaders[i];
-            if (header.visible && header.state == TOP) {
-                return header.y + header.height;
-            }
-        }
-        return 0;
-    }
-
-    /**
-     * Returns the list item position at the specified y coordinate.
-     */
-    public int getPositionAt(int y) {
-        do {
-            int position = pointToPosition(getPaddingLeft() + 1, y);
-            if (position != -1) {
-                return position;
-            }
-            // If position == -1, we must have hit a separator. Let's examine
-            // a nearby pixel
-            y--;
-        } while (y > 0);
-        return 0;
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(MotionEvent ev) {
-        mHeaderTouched = false;
-        if (super.onInterceptTouchEvent(ev)) {
-            return true;
-        }
-
-        if (mScrollState == SCROLL_STATE_IDLE) {
-            final int y = (int)ev.getY();
-            final int x = (int)ev.getX();
-            for (int i = mSize; --i >= 0;) {
-                PinnedHeader header = mHeaders[i];
-                final int padding = ViewUtil.isViewLayoutRtl(this) ?
-                        getWidth() - mHeaderPaddingStart - header.view.getWidth() :
-                        mHeaderPaddingStart;
-                if (header.visible && header.y <= y && header.y + header.height > y &&
-                        x >= padding && padding + header.view.getWidth() >= x) {
-                    mHeaderTouched = true;
-                    if (mScrollToSectionOnHeaderTouch &&
-                            ev.getAction() == MotionEvent.ACTION_DOWN) {
-                        return smoothScrollToPartition(i);
-                    } else {
-                        return true;
-                    }
-                }
-            }
-        }
-
-        return false;
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent ev) {
-        if (mHeaderTouched) {
-            if (ev.getAction() == MotionEvent.ACTION_UP) {
-                mHeaderTouched = false;
-            }
-            return true;
-        }
-        return super.onTouchEvent(ev);
-    }
-
-    private boolean smoothScrollToPartition(int partition) {
-        if (mAdapter == null) {
-            return false;
-        }
-        final int position = mAdapter.getScrollPositionForHeader(partition);
-        if (position == -1) {
-            return false;
-        }
-
-        int offset = 0;
-        for (int i = 0; i < partition; i++) {
-            PinnedHeader header = mHeaders[i];
-            if (header.visible) {
-                offset += header.height;
-            }
-        }
-        smoothScrollToPositionFromTop(position + getHeaderViewsCount(), offset,
-                DEFAULT_SMOOTH_SCROLL_DURATION);
-        return true;
-    }
-
-    private void invalidateIfAnimating() {
-        mAnimating = false;
-        for (int i = 0; i < mSize; i++) {
-            if (mHeaders[i].animating) {
-                mAnimating = true;
-                invalidate();
-                return;
-            }
-        }
-    }
-
-    @Override
-    protected void dispatchDraw(Canvas canvas) {
-        long currentTime = mAnimating ? System.currentTimeMillis() : 0;
-
-        int top = 0;
-        int right = 0;
-        int bottom = getBottom();
-        boolean hasVisibleHeaders = false;
-        for (int i = 0; i < mSize; i++) {
-            PinnedHeader header = mHeaders[i];
-            if (header.visible) {
-                hasVisibleHeaders = true;
-                if (header.state == BOTTOM && header.y < bottom) {
-                    bottom = header.y;
-                } else if (header.state == TOP || header.state == FADING) {
-                    int newTop = header.y + header.height;
-                    if (newTop > top) {
-                        top = newTop;
-                    }
-                }
-            }
-        }
-
-        if (hasVisibleHeaders) {
-            canvas.save();
-        }
-
-        super.dispatchDraw(canvas);
-
-        if (hasVisibleHeaders) {
-            canvas.restore();
-
-            // If the first item is visible and if it has a positive top that is greater than the
-            // first header's assigned y-value, use that for the first header's y value. This way,
-            // the header inherits any padding applied to the list view.
-            if (mSize > 0 && getFirstVisiblePosition() == 0) {
-                View firstChild = getChildAt(0);
-                PinnedHeader firstHeader = mHeaders[0];
-
-                if (firstHeader != null) {
-                    int firstHeaderTop = firstChild != null ? firstChild.getTop() : 0;
-                    firstHeader.y = Math.max(firstHeader.y, firstHeaderTop);
-                }
-            }
-
-            // First draw top headers, then the bottom ones to handle the Z axis correctly
-            for (int i = mSize; --i >= 0;) {
-                PinnedHeader header = mHeaders[i];
-                if (header.visible && (header.state == TOP || header.state == FADING)) {
-                    drawHeader(canvas, header, currentTime);
-                }
-            }
-
-            for (int i = 0; i < mSize; i++) {
-                PinnedHeader header = mHeaders[i];
-                if (header.visible && header.state == BOTTOM) {
-                    drawHeader(canvas, header, currentTime);
-                }
-            }
-        }
-
-        invalidateIfAnimating();
-    }
-
-    private void drawHeader(Canvas canvas, PinnedHeader header, long currentTime) {
-        if (header.animating) {
-            int timeLeft = (int)(header.targetTime - currentTime);
-            if (timeLeft <= 0) {
-                header.y = header.targetY;
-                header.visible = header.targetVisible;
-                header.animating = false;
-            } else {
-                header.y = header.targetY + (header.sourceY - header.targetY) * timeLeft
-                        / mAnimationDuration;
-            }
-        }
-        if (header.visible) {
-            View view = header.view;
-            int saveCount = canvas.save();
-            int translateX = ViewUtil.isViewLayoutRtl(this) ?
-                    getWidth() - mHeaderPaddingStart - view.getWidth() :
-                    mHeaderPaddingStart;
-            canvas.translate(translateX, header.y);
-            if (header.state == FADING) {
-                mBounds.set(0, 0, view.getWidth(), view.getHeight());
-                canvas.saveLayerAlpha(mBounds, header.alpha, Canvas.ALL_SAVE_FLAG);
-            }
-            view.draw(canvas);
-            canvas.restoreToCount(saveCount);
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/list/ProviderStatusWatcher.java b/src/com/android/contacts/common/list/ProviderStatusWatcher.java
deleted file mode 100644
index af36db3..0000000
--- a/src/com/android/contacts/common/list/ProviderStatusWatcher.java
+++ /dev/null
@@ -1,280 +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.common.list;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.ContentObserver;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Handler;
-import android.provider.ContactsContract.ProviderStatus;
-import android.util.Log;
-
-import com.android.contacts.common.compat.ProviderStatusCompat;
-
-import com.android.contactsbind.FeedbackHelper;
-
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-
-/**
- * A singleton that keeps track of the last known provider status.
- *
- * All methods must be called on the UI thread unless noted otherwise.
- *
- * All members must be set on the UI thread unless noted otherwise.
- */
-public class ProviderStatusWatcher extends ContentObserver {
-    private static final String TAG = "ProviderStatusWatcher";
-    private static final boolean DEBUG = false;
-
-    /**
-     * Callback interface invoked when the provider status changes.
-     */
-    public interface ProviderStatusListener {
-        public void onProviderStatusChange();
-    }
-
-    private static final String[] PROJECTION = new String[] {
-        ProviderStatus.STATUS
-    };
-
-    /**
-     * We'll wait for this amount of time on the UI thread if the load hasn't finished.
-     */
-    private static final int LOAD_WAIT_TIMEOUT_MS = 1000;
-
-    private static ProviderStatusWatcher sInstance;
-
-    private final Context mContext;
-    private final Handler mHandler = new Handler();
-
-    private final Object mSignal = new Object();
-
-    private int mStartRequestedCount;
-
-    private LoaderTask mLoaderTask;
-
-    /** 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();
-
-    private final Runnable mStartLoadingRunnable = new Runnable() {
-        @Override
-        public void run() {
-            startLoading();
-        }
-    };
-
-    /**
-     * Returns the singleton instance.
-     */
-    public synchronized static ProviderStatusWatcher getInstance(Context context) {
-        if (sInstance == null) {
-            sInstance = new ProviderStatusWatcher(context);
-        }
-        return sInstance;
-    }
-
-    private ProviderStatusWatcher(Context context) {
-        super(null);
-        mContext = context;
-    }
-
-    /** Add a listener. */
-    public void addListener(ProviderStatusListener listener) {
-        mListeners.add(listener);
-    }
-
-    /** Remove a listener */
-    public void removeListener(ProviderStatusListener listener) {
-        mListeners.remove(listener);
-    }
-
-    private void notifyListeners() {
-        if (DEBUG) {
-            Log.d(TAG, "notifyListeners: " + mListeners.size());
-        }
-        if (isStarted()) {
-            for (ProviderStatusListener listener : mListeners) {
-                listener.onProviderStatusChange();
-            }
-        }
-    }
-
-    private boolean isStarted() {
-        return mStartRequestedCount > 0;
-    }
-
-    /**
-     * Starts watching the provider status.  {@link #start()} and {@link #stop()} calls can be
-     * nested.
-     */
-    public void start() {
-        if (++mStartRequestedCount == 1) {
-            mContext.getContentResolver()
-                .registerContentObserver(ProviderStatus.CONTENT_URI, false, this);
-            startLoading();
-
-            if (DEBUG) {
-                Log.d(TAG, "Start observing");
-            }
-        }
-    }
-
-    /**
-     * Stops watching the provider status.
-     */
-    public void stop() {
-        if (!isStarted()) {
-            Log.e(TAG, "Already stopped");
-            return;
-        }
-        if (--mStartRequestedCount == 0) {
-
-            mHandler.removeCallbacks(mStartLoadingRunnable);
-
-            mContext.getContentResolver().unregisterContentObserver(this);
-            if (DEBUG) {
-                Log.d(TAG, "Stop observing");
-            }
-        }
-    }
-
-    /**
-     * @return last known provider status.
-     *
-     * If this method is called when we haven't started the status query or the query is still in
-     * progress, it will start a query in a worker thread if necessary, and *wait for the result*.
-     *
-     * This means this method is essentially a blocking {@link ProviderStatus#CONTENT_URI} query.
-     * This URI is not backed by the file system, so is usually fast enough to perform on the main
-     * thread, but in extreme cases (when the system takes a while to bring up the contacts
-     * provider?) this may still cause ANRs.
-     *
-     * In order to avoid that, if we can't load the status within {@link #LOAD_WAIT_TIMEOUT_MS},
-     * we'll give up and just returns {@link ProviderStatusCompat#STATUS_BUSY} in order to unblock
-     * the UI thread.  The actual result will be delivered later via {@link ProviderStatusListener}.
-     * (If {@link ProviderStatusCompat#STATUS_BUSY} is returned, the app (should) shows an according
-     * message, like "contacts are being updated".)
-     */
-    public int getProviderStatus() {
-        waitForLoaded();
-
-        if (mProviderStatus == null) {
-            return ProviderStatusCompat.STATUS_BUSY;
-        }
-
-        return mProviderStatus;
-    }
-
-    private void waitForLoaded() {
-        if (mProviderStatus == null) {
-            if (mLoaderTask == null) {
-                // For some reason the loader couldn't load the status.  Let's start it again.
-                startLoading();
-            }
-            synchronized (mSignal) {
-                try {
-                    mSignal.wait(LOAD_WAIT_TIMEOUT_MS);
-                } catch (InterruptedException ignore) {
-                }
-            }
-        }
-    }
-
-    private void startLoading() {
-        if (mLoaderTask != null) {
-            return; // Task already running.
-        }
-
-        if (DEBUG) {
-            Log.d(TAG, "Start loading");
-        }
-
-        mLoaderTask = new LoaderTask();
-        mLoaderTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
-    }
-
-    private class LoaderTask extends AsyncTask<Void, Void, Boolean> {
-        @Override
-        protected Boolean doInBackground(Void... params) {
-            try {
-                Cursor cursor = mContext.getContentResolver().query(ProviderStatus.CONTENT_URI,
-                        PROJECTION, null, null, null);
-                if (cursor != null) {
-                    try {
-                        if (cursor.moveToFirst()) {
-                            // Note here we can't just say "Status", as AsyncTask has the "Status"
-                            // enum too.
-                            mProviderStatus = cursor.getInt(0);
-                            return true;
-                        }
-                    } finally {
-                        cursor.close();
-                    }
-                }
-                return false;
-            } catch (SecurityException e) {
-                FeedbackHelper.sendFeedback(mContext, TAG,
-                        "Security exception when querying provider status", e);
-                return false;
-            } finally {
-                synchronized (mSignal) {
-                    mSignal.notifyAll();
-                }
-            }
-        }
-
-        @Override
-        protected void onCancelled(Boolean result) {
-            cleanUp();
-        }
-
-        @Override
-        protected void onPostExecute(Boolean loaded) {
-            cleanUp();
-            if (loaded != null && loaded) {
-                notifyListeners();
-            }
-        }
-
-        private void cleanUp() {
-            mLoaderTask = null;
-        }
-    }
-
-    /**
-     * Called when provider status may has changed.
-     *
-     * This method will be called on a worker thread by the framework.
-     */
-    @Override
-    public void onChange(boolean selfChange, Uri uri) {
-        if (!ProviderStatus.CONTENT_URI.equals(uri)) return;
-
-        // Provider status change is rare, so okay to log.
-        Log.i(TAG, "Provider status changed.");
-
-        mHandler.removeCallbacks(mStartLoadingRunnable); // Remove one in the queue, if any.
-        mHandler.post(mStartLoadingRunnable);
-    }
-}
diff --git a/src/com/android/contacts/common/list/ShortcutIntentBuilder.java b/src/com/android/contacts/common/list/ShortcutIntentBuilder.java
deleted file mode 100644
index e230996..0000000
--- a/src/com/android/contacts/common/list/ShortcutIntentBuilder.java
+++ /dev/null
@@ -1,410 +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.common.list;
-
-import android.app.ActivityManager;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Paint.FontMetricsInt;
-import android.graphics.Rect;
-import android.graphics.drawable.BitmapDrawable;
-import android.graphics.drawable.Drawable;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
-import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
-import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
-import android.telecom.PhoneAccount;
-import android.text.TextPaint;
-import android.text.TextUtils;
-import android.text.TextUtils.TruncateAt;
-
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.R;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-
-/**
- * Constructs shortcut intents.
- */
-public class ShortcutIntentBuilder {
-
-    private static final String[] CONTACT_COLUMNS = {
-        Contacts.DISPLAY_NAME,
-        Contacts.PHOTO_ID,
-        Contacts.LOOKUP_KEY
-    };
-
-    private static final int CONTACT_DISPLAY_NAME_COLUMN_INDEX = 0;
-    private static final int CONTACT_PHOTO_ID_COLUMN_INDEX = 1;
-    private static final int CONTACT_LOOKUP_KEY_COLUMN_INDEX = 2;
-
-    private static final String[] PHONE_COLUMNS = {
-        Phone.DISPLAY_NAME,
-        Phone.PHOTO_ID,
-        Phone.NUMBER,
-        Phone.TYPE,
-        Phone.LABEL,
-        Phone.LOOKUP_KEY
-    };
-
-    private static final int PHONE_DISPLAY_NAME_COLUMN_INDEX = 0;
-    private static final int PHONE_PHOTO_ID_COLUMN_INDEX = 1;
-    private static final int PHONE_NUMBER_COLUMN_INDEX = 2;
-    private static final int PHONE_TYPE_COLUMN_INDEX = 3;
-    private static final int PHONE_LABEL_COLUMN_INDEX = 4;
-    private static final int PHONE_LOOKUP_KEY_COLUMN_INDEX = 5;
-
-    private static final String[] PHOTO_COLUMNS = {
-        Photo.PHOTO,
-    };
-
-    private static final int PHOTO_PHOTO_COLUMN_INDEX = 0;
-
-    private static final String PHOTO_SELECTION = Photo._ID + "=?";
-
-    private final OnShortcutIntentCreatedListener mListener;
-    private final Context mContext;
-    private int mIconSize;
-    private final int mIconDensity;
-    private final int mOverlayTextBackgroundColor;
-    private final Resources mResources;
-
-    /**
-     * This is a hidden API of the launcher in JellyBean that allows us to disable the animation
-     * that it would usually do, because it interferes with our own animation for QuickContact.
-     * This is needed since some versions of the launcher override the intent flags and therefore
-     * ignore Intent.FLAG_ACTIVITY_NO_ANIMATION.
-     */
-    public static final String INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION =
-            "com.android.launcher.intent.extra.shortcut.INGORE_LAUNCH_ANIMATION";
-
-    /**
-     * Listener interface.
-     */
-    public interface OnShortcutIntentCreatedListener {
-
-        /**
-         * Callback for shortcut intent creation.
-         *
-         * @param uri the original URI for which the shortcut intent has been
-         *            created.
-         * @param shortcutIntent resulting shortcut intent.
-         */
-        void onShortcutIntentCreated(Uri uri, Intent shortcutIntent);
-    }
-
-    public ShortcutIntentBuilder(Context context, OnShortcutIntentCreatedListener listener) {
-        mContext = context;
-        mListener = listener;
-
-        mResources = context.getResources();
-        final ActivityManager am = (ActivityManager) context
-                .getSystemService(Context.ACTIVITY_SERVICE);
-        mIconSize = mResources.getDimensionPixelSize(R.dimen.shortcut_icon_size);
-        if (mIconSize == 0) {
-            mIconSize = am.getLauncherLargeIconSize();
-        }
-        mIconDensity = am.getLauncherLargeIconDensity();
-        mOverlayTextBackgroundColor = mResources.getColor(R.color.shortcut_overlay_text_background);
-    }
-
-    public void createContactShortcutIntent(Uri contactUri) {
-        new ContactLoadingAsyncTask(contactUri).execute();
-    }
-
-    public void createPhoneNumberShortcutIntent(Uri dataUri, String shortcutAction) {
-        new PhoneNumberLoadingAsyncTask(dataUri, shortcutAction).execute();
-    }
-
-    /**
-     * An asynchronous task that loads name, photo and other data from the database.
-     */
-    private abstract class LoadingAsyncTask extends AsyncTask<Void, Void, Void> {
-        protected Uri mUri;
-        protected String mContentType;
-        protected String mDisplayName;
-        protected String mLookupKey;
-        protected byte[] mBitmapData;
-        protected long mPhotoId;
-
-        public LoadingAsyncTask(Uri uri) {
-            mUri = uri;
-        }
-
-        @Override
-        protected Void doInBackground(Void... params) {
-            mContentType = mContext.getContentResolver().getType(mUri);
-            loadData();
-            loadPhoto();
-            return null;
-        }
-
-        protected abstract void loadData();
-
-        private void loadPhoto() {
-            if (mPhotoId == 0) {
-                return;
-            }
-
-            ContentResolver resolver = mContext.getContentResolver();
-            Cursor cursor = resolver.query(Data.CONTENT_URI, PHOTO_COLUMNS, PHOTO_SELECTION,
-                    new String[] { String.valueOf(mPhotoId) }, null);
-            if (cursor != null) {
-                try {
-                    if (cursor.moveToFirst()) {
-                        mBitmapData = cursor.getBlob(PHOTO_PHOTO_COLUMN_INDEX);
-                    }
-                } finally {
-                    cursor.close();
-                }
-            }
-        }
-    }
-
-    private final class ContactLoadingAsyncTask extends LoadingAsyncTask {
-        public ContactLoadingAsyncTask(Uri uri) {
-            super(uri);
-        }
-
-        @Override
-        protected void loadData() {
-            ContentResolver resolver = mContext.getContentResolver();
-            Cursor cursor = resolver.query(mUri, CONTACT_COLUMNS, null, null, null);
-            if (cursor != null) {
-                try {
-                    if (cursor.moveToFirst()) {
-                        mDisplayName = cursor.getString(CONTACT_DISPLAY_NAME_COLUMN_INDEX);
-                        mPhotoId = cursor.getLong(CONTACT_PHOTO_ID_COLUMN_INDEX);
-                        mLookupKey = cursor.getString(CONTACT_LOOKUP_KEY_COLUMN_INDEX);
-                    }
-                } finally {
-                    cursor.close();
-                }
-            }
-        }
-        @Override
-        protected void onPostExecute(Void result) {
-            createContactShortcutIntent(mUri, mContentType, mDisplayName, mLookupKey, mBitmapData);
-        }
-    }
-
-    private final class PhoneNumberLoadingAsyncTask extends LoadingAsyncTask {
-        private final String mShortcutAction;
-        private String mPhoneNumber;
-        private int mPhoneType;
-        private String mPhoneLabel;
-
-        public PhoneNumberLoadingAsyncTask(Uri uri, String shortcutAction) {
-            super(uri);
-            mShortcutAction = shortcutAction;
-        }
-
-        @Override
-        protected void loadData() {
-            ContentResolver resolver = mContext.getContentResolver();
-            Cursor cursor = resolver.query(mUri, PHONE_COLUMNS, null, null, null);
-            if (cursor != null) {
-                try {
-                    if (cursor.moveToFirst()) {
-                        mDisplayName = cursor.getString(PHONE_DISPLAY_NAME_COLUMN_INDEX);
-                        mPhotoId = cursor.getLong(PHONE_PHOTO_ID_COLUMN_INDEX);
-                        mPhoneNumber = cursor.getString(PHONE_NUMBER_COLUMN_INDEX);
-                        mPhoneType = cursor.getInt(PHONE_TYPE_COLUMN_INDEX);
-                        mPhoneLabel = cursor.getString(PHONE_LABEL_COLUMN_INDEX);
-                        mLookupKey = cursor.getString(PHONE_LOOKUP_KEY_COLUMN_INDEX);
-                    }
-                } finally {
-                    cursor.close();
-                }
-            }
-        }
-
-        @Override
-        protected void onPostExecute(Void result) {
-            createPhoneNumberShortcutIntent(mUri, mDisplayName, mLookupKey, mBitmapData,
-                    mPhoneNumber, mPhoneType, mPhoneLabel, mShortcutAction);
-        }
-    }
-
-    private Drawable getPhotoDrawable(byte[] bitmapData, String displayName, String lookupKey) {
-        if (bitmapData != null) {
-            Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapData, 0, bitmapData.length, null);
-            return new BitmapDrawable(mContext.getResources(), bitmap);
-        } else {
-            return ContactPhotoManager.getDefaultAvatarDrawableForContact(mContext.getResources(),
-                    false, new DefaultImageRequest(displayName, lookupKey, false));
-        }
-    }
-
-    private void createContactShortcutIntent(Uri contactUri, String contentType, String displayName,
-            String lookupKey, byte[] bitmapData) {
-        Drawable drawable = getPhotoDrawable(bitmapData, displayName, lookupKey);
-
-        final Intent shortcutIntent = ImplicitIntentsUtil.getIntentForQuickContactLauncherShortcut(
-                mContext, contactUri);
-
-        final Bitmap icon = generateQuickContactIcon(drawable);
-
-        Intent intent = new Intent();
-        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
-        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
-        if (TextUtils.isEmpty(displayName)) {
-            intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, mContext.getResources().getString(
-                    R.string.missing_name));
-        } else {
-            intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, displayName);
-        }
-
-        mListener.onShortcutIntentCreated(contactUri, intent);
-    }
-
-    private void createPhoneNumberShortcutIntent(Uri uri, String displayName, String lookupKey,
-            byte[] bitmapData, String phoneNumber, int phoneType, String phoneLabel,
-            String shortcutAction) {
-        Drawable drawable = getPhotoDrawable(bitmapData, displayName, lookupKey);
-
-        Bitmap bitmap;
-        Uri phoneUri;
-        if (Intent.ACTION_CALL.equals(shortcutAction)) {
-            // Make the URI a direct tel: URI so that it will always continue to work
-            phoneUri = Uri.fromParts(PhoneAccount.SCHEME_TEL, phoneNumber, null);
-            bitmap = generatePhoneNumberIcon(drawable, phoneType, phoneLabel,
-                    R.drawable.ic_call);
-        } else {
-            phoneUri = Uri.fromParts(ContactsUtils.SCHEME_SMSTO, phoneNumber, null);
-            bitmap = generatePhoneNumberIcon(drawable, phoneType, phoneLabel,
-                    R.drawable.ic_message_24dp_mirrored);
-        }
-
-        Intent shortcutIntent = new Intent(shortcutAction, phoneUri);
-        shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-
-        Intent intent = new Intent();
-        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);
-        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
-
-        if (TextUtils.isEmpty(displayName)) {
-            displayName = mContext.getResources().getString(R.string.missing_name);
-        }
-        if (TextUtils.equals(shortcutAction, Intent.ACTION_CALL)) {
-            intent.putExtra(Intent.EXTRA_SHORTCUT_NAME,
-                    mContext.getResources().getString(R.string.call_by_shortcut, displayName));
-        } else if (TextUtils.equals(shortcutAction, Intent.ACTION_SENDTO)) {
-            intent.putExtra(Intent.EXTRA_SHORTCUT_NAME,
-                    mContext.getResources().getString(R.string.sms_by_shortcut, displayName));
-        }
-
-        mListener.onShortcutIntentCreated(uri, intent);
-    }
-
-    private Bitmap generateQuickContactIcon(Drawable photo) {
-
-        // Setup the drawing classes
-        Bitmap bitmap = Bitmap.createBitmap(mIconSize, mIconSize, Bitmap.Config.ARGB_8888);
-        Canvas canvas = new Canvas(bitmap);
-
-        // Copy in the photo
-        Rect dst = new Rect(0,0, mIconSize, mIconSize);
-        photo.setBounds(dst);
-        photo.draw(canvas);
-
-        // Draw the icon with a rounded border
-        RoundedBitmapDrawable roundedDrawable =
-                RoundedBitmapDrawableFactory.create(mResources, bitmap);
-        roundedDrawable.setAntiAlias(true);
-        roundedDrawable.setCornerRadius(mIconSize / 2);
-        Bitmap roundedBitmap = Bitmap.createBitmap(mIconSize, mIconSize, Bitmap.Config.ARGB_8888);
-        canvas.setBitmap(roundedBitmap);
-        roundedDrawable.setBounds(dst);
-        roundedDrawable.draw(canvas);
-        canvas.setBitmap(null);
-
-        return roundedBitmap;
-    }
-
-    /**
-     * Generates a phone number shortcut icon. Adds an overlay describing the type of the phone
-     * number, and if there is a photo also adds the call action icon.
-     */
-    private Bitmap generatePhoneNumberIcon(Drawable photo, int phoneType, String phoneLabel,
-            int actionResId) {
-        final Resources r = mContext.getResources();
-        final float density = r.getDisplayMetrics().density;
-
-        Bitmap phoneIcon = ((BitmapDrawable) r.getDrawableForDensity(actionResId, mIconDensity))
-                .getBitmap();
-
-        Bitmap icon = generateQuickContactIcon(photo);
-        Canvas canvas = new Canvas(icon);
-
-        // Copy in the photo
-        Paint photoPaint = new Paint();
-        photoPaint.setDither(true);
-        photoPaint.setFilterBitmap(true);
-        Rect dst = new Rect(0, 0, mIconSize, mIconSize);
-
-        // Create an overlay for the phone number type
-        CharSequence overlay = Phone.getTypeLabel(r, phoneType, phoneLabel);
-
-        if (overlay != null) {
-            TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);
-            textPaint.setTextSize(r.getDimension(R.dimen.shortcut_overlay_text_size));
-            textPaint.setColor(r.getColor(R.color.textColorIconOverlay));
-            textPaint.setShadowLayer(4f, 0, 2f, r.getColor(R.color.textColorIconOverlayShadow));
-
-            final FontMetricsInt fmi = textPaint.getFontMetricsInt();
-
-            // First fill in a darker background around the text to be drawn
-            final Paint workPaint = new Paint();
-            workPaint.setColor(mOverlayTextBackgroundColor);
-            workPaint.setStyle(Paint.Style.FILL);
-            final int textPadding = r
-                    .getDimensionPixelOffset(R.dimen.shortcut_overlay_text_background_padding);
-            final int textBandHeight = (fmi.descent - fmi.ascent) + textPadding * 2;
-            dst.set(0, mIconSize - textBandHeight, mIconSize, mIconSize);
-            canvas.drawRect(dst, workPaint);
-
-            overlay = TextUtils.ellipsize(overlay, textPaint, mIconSize, TruncateAt.END);
-            final float textWidth = textPaint.measureText(overlay, 0, overlay.length());
-            canvas.drawText(overlay, 0, overlay.length(), (mIconSize - textWidth) / 2, mIconSize
-                    - fmi.descent - textPadding, textPaint);
-        }
-
-        // Draw the phone action icon as an overlay
-        Rect src = new Rect(0, 0, phoneIcon.getWidth(), phoneIcon.getHeight());
-        int iconWidth = icon.getWidth();
-        dst.set(iconWidth - ((int) (20 * density)), -1,
-                iconWidth, ((int) (19 * density)));
-        canvas.drawBitmap(phoneIcon, src, dst, photoPaint);
-
-        canvas.setBitmap(null);
-
-        return icon;
-    }
-}
diff --git a/src/com/android/contacts/common/location/CountryDetector.java b/src/com/android/contacts/common/location/CountryDetector.java
deleted file mode 100644
index bceadc4..0000000
--- a/src/com/android/contacts/common/location/CountryDetector.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package com.android.contacts.common.location;
-
-import android.content.Context;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.util.Locale;
-
-/**
- * This class is used to detect the country where the user is. It is a simplified version of the
- * country detector service in the framework. The sources of country location are queried in the
- * following order of reliability:
- * <ul>
- * <li>Mobile network</li>
- * <li>SIM's country</li>
- * <li>User's default locale</li>
- * </ul>
- *
- * As far as possible this class tries to replicate the behavior of the system's country detector
- * service:
- * 1) Order in priority of sources of country location
- * 2) Mobile network information provided by CDMA phones is ignored
- */
-public class CountryDetector {
-    private static final String TAG = "CountryDetector";
-
-    private static CountryDetector sInstance;
-
-    private final Context mContext;
-    private final LocaleProvider mLocaleProvider;
-    private final TelephonyManager mTelephonyManager;
-
-    // Used as a default country code when all the sources of country data have failed in the
-    // exceedingly rare event that the device does not have a default locale set for some reason.
-    private final String DEFAULT_COUNTRY_ISO = "US";
-
-    /**
-     * Class that can be used to return the user's default locale. This is in its own class so that
-     * it can be mocked out.
-     */
-    public static class LocaleProvider {
-        public Locale getDefaultLocale() {
-            return Locale.getDefault();
-        }
-    }
-
-    private CountryDetector(Context context) {
-        this (context, (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE),
-                new LocaleProvider());
-    }
-
-    private CountryDetector(Context context, TelephonyManager telephonyManager,
-            LocaleProvider localeProvider) {
-        mTelephonyManager = telephonyManager;
-        mLocaleProvider = localeProvider;
-        mContext = context;
-    }
-
-    /**
-     * Factory method for {@link CountryDetector} that allows the caller to provide mock objects.
-     */
-    public CountryDetector getInstanceForTest(Context context, TelephonyManager telephonyManager,
-            LocaleProvider localeProvider) {
-        return new CountryDetector(context, telephonyManager, localeProvider);
-    }
-
-    /**
-     * Returns the instance of the country detector. {@link #initialize(Context)} must have been
-     * called previously.
-     *
-     * @return the initialized country detector.
-     */
-    public synchronized static CountryDetector getInstance(Context context) {
-        if (sInstance == null) {
-            sInstance = new CountryDetector(context.getApplicationContext());
-        }
-        return sInstance;
-    }
-
-    public String getCurrentCountryIso() {
-        String result = null;
-        if (isNetworkCountryCodeAvailable()) {
-            result = getNetworkBasedCountryIso();
-        }
-        if (TextUtils.isEmpty(result)) {
-            result = getSimBasedCountryIso();
-        }
-        if (TextUtils.isEmpty(result)) {
-            result = getLocaleBasedCountryIso();
-        }
-        if (TextUtils.isEmpty(result)) {
-            result = DEFAULT_COUNTRY_ISO;
-        }
-        return result.toUpperCase(Locale.US);
-    }
-
-    /**
-     * @return the country code of the current telephony network the user is connected to.
-     */
-    private String getNetworkBasedCountryIso() {
-        return mTelephonyManager.getNetworkCountryIso();
-    }
-
-    /**
-     * @return the country code of the SIM card currently inserted in the device.
-     */
-    private String getSimBasedCountryIso() {
-        return mTelephonyManager.getSimCountryIso();
-    }
-
-    /**
-     * @return the country code of the user's currently selected locale.
-     */
-    private String getLocaleBasedCountryIso() {
-        Locale defaultLocale = mLocaleProvider.getDefaultLocale();
-        if (defaultLocale != null) {
-            return defaultLocale.getCountry();
-        }
-        return null;
-    }
-
-    private boolean isNetworkCountryCodeAvailable() {
-        // On CDMA TelephonyManager.getNetworkCountryIso() just returns the SIM's country code.
-        return mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM;
-    }
-}
diff --git a/src/com/android/contacts/common/logging/EditorEvent.java b/src/com/android/contacts/common/logging/EditorEvent.java
deleted file mode 100644
index e5b42f8..0000000
--- a/src/com/android/contacts/common/logging/EditorEvent.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.logging;
-
-import com.google.common.base.MoreObjects;
-
-public class EditorEvent {
-
-    /** The editor event type that is logged. */
-    public int eventType;
-
-    /** The number of raw contacts shown in the raw contacts picker. */
-    public int numberRawContacts;
-
-    public static final class EventType {
-        public static final int UNKNOWN = 0;
-        public static final int SHOW_RAW_CONTACT_PICKER = 1;
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(this)
-                .add("eventType", eventType)
-                .add("numberRawContacts", numberRawContacts)
-                .toString();
-    }
-}
diff --git a/src/com/android/contacts/common/logging/ListEvent.java b/src/com/android/contacts/common/logging/ListEvent.java
deleted file mode 100644
index 47979bf..0000000
--- a/src/com/android/contacts/common/logging/ListEvent.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.logging;
-
-import com.google.common.base.MoreObjects;
-
-/**
- * Describes how user view and use a list
- */
-public final class ListEvent {
-
-    /** The type of action taken by the user. **/
-    public int actionType;
-
-    /** The type of list the user is viewing. **/
-    public int listType;
-
-    /** The number of contacts in the list. **/
-    public int count;
-
-    /** The index of contact clicked by user. **/
-    public int clickedIndex = -1;
-
-    /** The number of contact selected when user takes an action (link, delete, share, etc). **/
-    public int numSelected;
-
-    // Should match ContactsExtension.ListEvent.ActionType values in
-    // http://cs/google3/logs/proto/wireless/android/contacts/contacts_extensions.proto
-    public static final class ActionType {
-        public static final int UNKNOWN = 0;
-        public static final int LOAD = 1;
-        public static final int CLICK = 2;
-        public static final int SELECT = 3;
-        public static final int SHARE = 4;
-        public static final int DELETE = 5;
-        public static final int LINK = 6;
-        public static final int REMOVE_LABEL = 7;
-
-        private ActionType() {
-        }
-    }
-
-    // Should match ContactsExtension.ListEvent.ListType values in
-    // http://cs/google3/logs/proto/wireless/android/contacts/contacts_extensions.proto
-    public static final class ListType {
-        public static final int UNKNOWN_LIST = 0;
-        public static final int ALL_CONTACTS = 1;
-        public static final int ACCOUNT = 2;
-        public static final int GROUP = 3;
-        public static final int SEARCH_RESULT = 4;
-        public static final int DEVICE = 5;
-        public static final int CUSTOM = 6;
-        public static final int STARRED = 7;
-        public static final int PHONE_NUMBERS = 8;
-        public static final int SINGLE_CONTACT = 9;
-        public static final int PICK_CONTACT = 10;
-        public static final int PICK_CONTACT_FOR_SHORTCUT = 11;
-        public static final int PICK_PHONE = 12;
-        public static final int PICK_EMAIL = 13;
-        public static final int PICK_POSTAL = 14;
-        public static final int PICK_JOIN = 15;
-        public static final int PICK_GROUP_MEMBERS = 16;
-
-        private ListType() {
-        }
-    }
-
-    public ListEvent() {
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(this)
-                .add("actionType", actionType)
-                .add("listType", listType)
-                .add("count", count)
-                .add("clickedIndex", clickedIndex)
-                .add("numSelected", numSelected)
-                .toString();
-    }
-}
diff --git a/src/com/android/contacts/common/logging/Logger.java b/src/com/android/contacts/common/logging/Logger.java
deleted file mode 100644
index cb75ca9..0000000
--- a/src/com/android/contacts/common/logging/Logger.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.logging;
-
-import android.app.Activity;
-
-import com.android.contacts.common.logging.ScreenEvent.ScreenType;
-import com.android.contactsbind.ObjectFactory;
-
-/**
- * Logs analytics events.
- */
-public abstract class Logger {
-    public static final String TAG = "Logger";
-
-    private static Logger getInstance() {
-        return ObjectFactory.getLogger();
-    }
-
-    /**
-     * Logs an event indicating that a screen was displayed.
-     *
-     * @param screenType integer identifier of the displayed screen
-     * @param activity Parent activity of the displayed screen.
-     */
-    public static void logScreenView(Activity activity, int screenType) {
-        logScreenView(activity, screenType, ScreenType.UNKNOWN);
-    }
-
-    /**
-     * @param previousScreenType integer identifier of the displayed screen the user came from.
-     */
-    public static void logScreenView(Activity activity, int screenType, int previousScreenType) {
-        final Logger logger = getInstance();
-        if (logger != null) {
-            logger.logScreenViewImpl(screenType, previousScreenType);
-        }
-    }
-
-    /**
-     * Logs the results of a user search for a particular contact.
-     */
-    public static void logSearchEvent(SearchState searchState) {
-        final Logger logger = getInstance();
-        if (logger != null) {
-            logger.logSearchEventImpl(searchState);
-        }
-    }
-
-    /**
-     * Logs how users view and use a contacts list. See {@link ListEvent} for definition of
-     * parameters.
-     */
-    public static void logListEvent(int actionType, int listType, int count, int clickedIndex,
-            int numSelected) {
-        final ListEvent event = new ListEvent();
-        event.actionType = actionType;
-        event.listType = listType;
-        event.count = count;
-        event.clickedIndex = clickedIndex;
-        event.numSelected = numSelected;
-
-        final Logger logger = getInstance();
-        if (logger != null) {
-            logger.logListEventImpl(event);
-        }
-    }
-
-    /**
-     * Logs an event on QuickContact. See {@link QuickContactEvent} for definition of parameters.
-     */
-    public static void logQuickContactEvent(String referrer, int contactType, int cardType,
-            int actionType, String thirdPartyAction) {
-        final Logger logger = getInstance();
-        if (logger != null) {
-            final QuickContactEvent event = new QuickContactEvent();
-            event.referrer = referrer == null ? "Unknown" : referrer;
-            event.contactType = contactType;
-            event.cardType = cardType;
-            event.actionType = actionType;
-            event.thirdPartyAction = thirdPartyAction == null ? "" : thirdPartyAction;
-            logger.logQuickContactEventImpl(event);
-        }
-    }
-
-    public static void logEditorEvent(int eventType, int numberRawContacts) {
-        final Logger logger = getInstance();
-        if (logger != null) {
-            final EditorEvent event = new EditorEvent();
-            event.eventType = eventType;
-            event.numberRawContacts = numberRawContacts;
-            logger.logEditorEventImpl(event);
-        }
-    }
-
-    public abstract void logScreenViewImpl(int screenType, int previousScreenType);
-    public abstract void logSearchEventImpl(SearchState searchState);
-    public abstract void logListEventImpl(ListEvent event);
-    public abstract void logQuickContactEventImpl(QuickContactEvent event);
-    public abstract void logEditorEventImpl(EditorEvent event);
-}
diff --git a/src/com/android/contacts/common/logging/QuickContactEvent.java b/src/com/android/contacts/common/logging/QuickContactEvent.java
deleted file mode 100644
index f19646f..0000000
--- a/src/com/android/contacts/common/logging/QuickContactEvent.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.logging;
-
-import com.google.common.base.MoreObjects;
-
-/**
- * Describes how user views and takes action in Quick contact
- */
-public final class QuickContactEvent {
-
-    /** The package name that QuickContact is launched from. **/
-    public String referrer;
-
-    /** The type of the contact displayed in QuickContact. **/
-    public int contactType;
-
-    /** The type of the card displayed in QuickContact. **/
-    public int cardType;
-
-    /** The type of the user action in QuickContact. **/
-    public int actionType;
-
-    /** The third party action that a user takes. **/
-    public String thirdPartyAction;
-
-    // Should match ContactsExtension.QuickContactEvent values in
-    // http://cs/google3/logs/proto/wireless/android/contacts/contacts_extensions.proto
-    public static final class ContactType {
-        public static final int UNKNOWN_TYPE = 0;
-        public static final int EDITABLE = 1;
-        public static final int INVISIBLE_AND_ADDABLE = 2;
-        public static final int DIRECTORY = 3;
-    }
-
-    public static final class CardType {
-        public static final int UNKNOWN_CARD = 0;
-        public static final int NO_CONTACT = 1;
-        public static final int CONTACT = 2;
-        public static final int RECENT = 3;
-        public static final int ABOUT = 4;
-        public static final int PERMISSION = 5;
-    }
-
-    public static final class ActionType {
-        public static final int UNKNOWN_ACTION = 0;
-        public static final int START = 1;
-        public static final int STAR = 2;
-        public static final int UNSTAR = 3;
-        public static final int EDIT = 4;
-        public static final int ADD = 5;
-        public static final int REMOVE = 6;
-        public static final int SHARE = 7;
-        public static final int SHORTCUT = 8;
-        public static final int HELP = 9;
-        public static final int CALL = 10;
-        public static final int SMS = 11;
-        public static final int VIDEOCALL = 12;
-        public static final int EMAIL = 13;
-        public static final int SIPCALL = 14;
-        public static final int ADDRESS = 15;
-        public static final int DIRECTIONS = 16;
-        public static final int THIRD_PARTY = 17;
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(this)
-                .add("referrer", referrer)
-                .add("contactType", contactType)
-                .add("cardType", cardType)
-                .add("actionType", actionType)
-                .add("thirdPartyAction", thirdPartyAction)
-                .toString();
-    }
-}
diff --git a/src/com/android/contacts/common/logging/ScreenEvent.java b/src/com/android/contacts/common/logging/ScreenEvent.java
deleted file mode 100644
index 6af020b..0000000
--- a/src/com/android/contacts/common/logging/ScreenEvent.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.logging;
-
-/**
- * Stores constants identifying individual screens/dialogs/fragments in the application, and also
- * provides a mapping of integer id -> screen name mappings for analytics purposes.
- */
-public class ScreenEvent {
-
-    // Should match ContactsExtension.ScreenEvent.ScreenType values in
-    // http://cs/google3/logs/proto/wireless/android/contacts/contacts_extensions.proto
-    public static class ScreenType {
-        public static final int UNKNOWN = 0;
-        public static final int SEARCH = 1;
-        public static final int SEARCH_EXIT = 2;
-        public static final int FAVORITES = 3;
-        public static final int ALL_CONTACTS = 4;
-        public static final int QUICK_CONTACT = 5;
-        public static final int EDITOR = 6;
-        public static final int LIST_ACCOUNT = 7;
-        public static final int LIST_GROUP = 8;
-        public static final int ME_CONTACT = 9;
-    }
-}
diff --git a/src/com/android/contacts/common/logging/SearchState.java b/src/com/android/contacts/common/logging/SearchState.java
deleted file mode 100644
index d1224b4..0000000
--- a/src/com/android/contacts/common/logging/SearchState.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.logging;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import com.google.common.base.MoreObjects;
-
-/**
- * Describes the results of a user search for a particular contact.
- */
-public final class SearchState implements Parcelable {
-
-    /** The length of the query string input by the user. */
-    public int queryLength;
-
-    /** The number of partitions (groups of results) presented to the user. */
-    public int numPartitions;
-
-    /** The total number of results (across all partitions) presented to the user. */
-    public int numResults;
-
-    /** The number of results presented to the user in the partition that was selected. */
-    public int numResultsInSelectedPartition = -1;
-
-    /** The zero-based index of the partition in which the clicked query result resides. */
-    public int selectedPartition = -1;
-
-    /** The index of the clicked query result within its partition. */
-    public int selectedIndexInPartition = -1;
-
-    /**
-     * The zero-based index of the clicked query result among all results displayed to the user
-     * (across partitions).
-     */
-    public int selectedIndex = -1;
-
-    public static final Creator<SearchState> CREATOR = new Creator<SearchState>() {
-        @Override
-        public SearchState createFromParcel(Parcel in) {
-            return new SearchState(in);
-        }
-
-        @Override
-        public SearchState[] newArray(int size) {
-            return new SearchState[size];
-        }
-    };
-
-    public SearchState() {
-    }
-
-    protected SearchState(Parcel source) {
-        readFromParcel(source);
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(this)
-                .add("queryLength", queryLength)
-                .add("numPartitions", numPartitions)
-                .add("numResults", numResults)
-                .add("numResultsInSelectedPartition", numResultsInSelectedPartition)
-                .add("selectedPartition", selectedPartition)
-                .add("selectedIndexInPartition", selectedIndexInPartition)
-                .add("selectedIndex", selectedIndex)
-                .toString();
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeInt(queryLength);
-        dest.writeInt(numPartitions);
-        dest.writeInt(numResults);
-        dest.writeInt(numResultsInSelectedPartition);
-        dest.writeInt(selectedPartition);
-        dest.writeInt(selectedIndexInPartition);
-        dest.writeInt(selectedIndex);
-    }
-
-    private void readFromParcel(Parcel source) {
-        queryLength = source.readInt();
-        numPartitions = source.readInt();
-        numResults = source.readInt();
-        numResultsInSelectedPartition = source.readInt();
-        selectedPartition = source.readInt();
-        selectedIndexInPartition = source.readInt();
-        selectedIndex = source.readInt();
-    }
-}
diff --git a/src/com/android/contacts/common/model/AccountTypeManager.java b/src/com/android/contacts/common/model/AccountTypeManager.java
deleted file mode 100644
index f4cb428..0000000
--- a/src/com/android/contacts/common/model/AccountTypeManager.java
+++ /dev/null
@@ -1,1058 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.accounts.AuthenticatorDescription;
-import android.accounts.OnAccountsUpdateListener;
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.SharedPreferences;
-import android.content.SyncAdapterType;
-import android.content.SyncStatusObserver;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.database.ContentObserver;
-import android.net.Uri;
-import android.os.AsyncTask;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Looper;
-import android.os.Message;
-import android.os.SystemClock;
-import android.provider.ContactsContract;
-import android.support.v4.content.ContextCompat;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.TimingLogger;
-
-import com.android.contacts.R;
-import com.android.contacts.common.Experiments;
-import com.android.contacts.common.MoreContactUtils;
-import com.android.contacts.common.list.ContactListFilterController;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountTypeWithDataSet;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.account.ExchangeAccountType;
-import com.android.contacts.common.model.account.ExternalAccountType;
-import com.android.contacts.common.model.account.FallbackAccountType;
-import com.android.contacts.common.model.account.GoogleAccountType;
-import com.android.contacts.common.model.account.SamsungAccountType;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.Constants;
-import com.android.contacts.common.util.DeviceLocalAccountTypeFactory;
-import com.android.contactsbind.ObjectFactory;
-import com.android.contactsbind.experiments.Flags;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Objects;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.annotation.Nullable;
-
-import static com.android.contacts.common.util.DeviceLocalAccountTypeFactory.Util.isLocalAccountType;
-
-/**
- * Singleton holder for all parsed {@link AccountType} available on the
- * system, typically filled through {@link PackageManager} queries.
- */
-public abstract class AccountTypeManager {
-    static final String TAG = "AccountTypeManager";
-
-    private static final Object mInitializationLock = new Object();
-    private static AccountTypeManager mAccountTypeManager;
-
-    /**
-     * Requests the singleton instance of {@link AccountTypeManager} with data bound from
-     * the available authenticators. This method can safely be called from the UI thread.
-     */
-    public static AccountTypeManager getInstance(Context context) {
-        if (!hasRequiredPermissions(context)) {
-            // Hopefully any component that depends on the values returned by this class
-            // will be restarted if the permissions change.
-            return EMPTY;
-        }
-        synchronized (mInitializationLock) {
-            if (mAccountTypeManager == null) {
-                context = context.getApplicationContext();
-                mAccountTypeManager = new AccountTypeManagerImpl(context,
-                        ObjectFactory.getDeviceLocalAccountTypeFactory(context));
-            }
-        }
-        return mAccountTypeManager;
-    }
-
-    /**
-     * Set the instance of account type manager.  This is only for and should only be used by unit
-     * tests.  While having this method is not ideal, it's simpler than the alternative of
-     * holding this as a service in the ContactsApplication context class.
-     *
-     * @param mockManager The mock AccountTypeManager.
-     */
-    public static void setInstanceForTest(AccountTypeManager mockManager) {
-        synchronized (mInitializationLock) {
-            mAccountTypeManager = mockManager;
-        }
-    }
-
-    private static final AccountTypeManager EMPTY = new AccountTypeManager() {
-        @Override
-        public List<AccountWithDataSet> getAccounts(boolean contactWritableOnly) {
-            return Collections.emptyList();
-        }
-
-        @Override
-        public List<AccountWithDataSet> getAccounts(Predicate<AccountWithDataSet> filter) {
-            return Collections.emptyList();
-        }
-
-        @Override
-        public List<AccountWithDataSet> getGroupWritableAccounts() {
-            return Collections.emptyList();
-        }
-
-        @Override
-        public Account getDefaultGoogleAccount() {
-            return null;
-        }
-
-        @Override
-        public List<AccountWithDataSet> getSortedAccounts(AccountWithDataSet defaultAccount,
-                boolean contactWritableOnly) {
-            return Collections.emptyList();
-        }
-
-        @Override
-        public AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet) {
-            return null;
-        }
-
-        @Override
-        public Map<AccountTypeWithDataSet, AccountType> getUsableInvitableAccountTypes() {
-            return null;
-        }
-
-        @Override
-        public List<AccountType> getAccountTypes(boolean contactWritableOnly) {
-            return Collections.emptyList();
-        }
-    };
-
-    /**
-     * Returns the list of all accounts (if contactWritableOnly is false) or just the list of
-     * contact writable accounts (if contactWritableOnly is true).
-     */
-    // TODO: Consider splitting this into getContactWritableAccounts() and getAllAccounts()
-    public abstract List<AccountWithDataSet> getAccounts(boolean contactWritableOnly);
-
-    public abstract List<AccountWithDataSet> getAccounts(Predicate<AccountWithDataSet> filter);
-
-    public abstract List<AccountWithDataSet> getSortedAccounts(AccountWithDataSet defaultAccount,
-            boolean contactWritableOnly);
-
-    /**
-     * Returns the list of accounts that are group writable.
-     */
-    public abstract List<AccountWithDataSet> getGroupWritableAccounts();
-
-    /**
-     * Returns the default google account.
-     */
-    public abstract Account getDefaultGoogleAccount();
-
-    static Account getDefaultGoogleAccount(AccountManager accountManager,
-            SharedPreferences prefs, String defaultAccountKey) {
-        // Get all the google accounts on the device
-        final Account[] accounts = accountManager.getAccountsByType(
-                GoogleAccountType.ACCOUNT_TYPE);
-        if (accounts == null || accounts.length == 0) {
-            return null;
-        }
-
-        // Get the default account from preferences
-        final String defaultAccount = prefs.getString(defaultAccountKey, null);
-        final AccountWithDataSet accountWithDataSet = defaultAccount == null ? null :
-                AccountWithDataSet.unstringify(defaultAccount);
-
-        // Look for an account matching the one from preferences
-        if (accountWithDataSet != null) {
-            for (int i = 0; i < accounts.length; i++) {
-                if (TextUtils.equals(accountWithDataSet.name, accounts[i].name)
-                        && TextUtils.equals(accountWithDataSet.type, accounts[i].type)) {
-                    return accounts[i];
-                }
-            }
-        }
-
-        // Just return the first one
-        return accounts[0];
-    }
-
-    public abstract AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet);
-
-    public final AccountType getAccountType(String accountType, String dataSet) {
-        return getAccountType(AccountTypeWithDataSet.get(accountType, dataSet));
-    }
-
-    public final AccountType getAccountTypeForAccount(AccountWithDataSet account) {
-        if (account != null) {
-            return getAccountType(account.getAccountTypeWithDataSet());
-        }
-        return getAccountType(null, null);
-    }
-
-    /**
-     * @return Unmodifiable map from {@link AccountTypeWithDataSet}s to {@link AccountType}s
-     * which support the "invite" feature and have one or more account.
-     *
-     * This is a filtered down and more "usable" list compared to
-     * {@link #getAllInvitableAccountTypes}, where usable is defined as:
-     * (1) making sure that the app that contributed the account type is not disabled
-     * (in order to avoid presenting the user with an option that does nothing), and
-     * (2) that there is at least one raw contact with that account type in the database
-     * (assuming that the user probably doesn't use that account type).
-     *
-     * Warning: Don't use on the UI thread because this can scan the database.
-     */
-    public abstract Map<AccountTypeWithDataSet, AccountType> getUsableInvitableAccountTypes();
-
-    /**
-     * Find the best {@link DataKind} matching the requested
-     * {@link AccountType#accountType}, {@link AccountType#dataSet}, and {@link DataKind#mimeType}.
-     * If no direct match found, we try searching {@link FallbackAccountType}.
-     */
-    public DataKind getKindOrFallback(AccountType type, String mimeType) {
-        return type == null ? null : type.getKindForMimetype(mimeType);
-    }
-
-    /**
-     * Returns all registered {@link AccountType}s, including extension ones.
-     *
-     * @param contactWritableOnly if true, it only returns ones that support writing contacts.
-     */
-    public abstract List<AccountType> getAccountTypes(boolean contactWritableOnly);
-
-    /**
-     * @param contactWritableOnly if true, it only returns ones that support writing contacts.
-     * @return true when this instance contains the given account.
-     */
-    public boolean contains(AccountWithDataSet account, boolean contactWritableOnly) {
-        for (AccountWithDataSet account_2 : getAccounts(contactWritableOnly)) {
-            if (account.equals(account_2)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public boolean hasGoogleAccount() {
-        return getDefaultGoogleAccount() != null;
-    }
-
-    private static boolean hasRequiredPermissions(Context context) {
-        final boolean canGetAccounts = ContextCompat.checkSelfPermission(context,
-                android.Manifest.permission.GET_ACCOUNTS) == PackageManager.PERMISSION_GRANTED;
-        final boolean canReadContacts = ContextCompat.checkSelfPermission(context,
-                android.Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED;
-        return canGetAccounts && canReadContacts;
-    }
-
-    public static Predicate<AccountWithDataSet> nonNullAccountFilter() {
-        return new Predicate<AccountWithDataSet>() {
-            @Override
-            public boolean apply(@Nullable AccountWithDataSet account) {
-                return account != null && account.name != null && account.type != null;
-            }
-        };
-    }
-}
-
-class AccountComparator implements Comparator<AccountWithDataSet> {
-    private AccountWithDataSet mDefaultAccount;
-
-    public AccountComparator(AccountWithDataSet defaultAccount) {
-        mDefaultAccount = defaultAccount;
-    }
-
-    @Override
-    public int compare(AccountWithDataSet a, AccountWithDataSet b) {
-        if (Objects.equal(a.name, b.name) && Objects.equal(a.type, b.type)
-                && Objects.equal(a.dataSet, b.dataSet)) {
-            return 0;
-        } else if (b.name == null || b.type == null) {
-            return -1;
-        } else if (a.name == null || a.type == null) {
-            return 1;
-        } else if (isWritableGoogleAccount(a) && a.equals(mDefaultAccount)) {
-            return -1;
-        } else if (isWritableGoogleAccount(b) && b.equals(mDefaultAccount)) {
-            return 1;
-        } else if (isWritableGoogleAccount(a) && !isWritableGoogleAccount(b)) {
-            return -1;
-        } else if (isWritableGoogleAccount(b) && !isWritableGoogleAccount(a)) {
-            return 1;
-        } else {
-            int diff = a.name.compareToIgnoreCase(b.name);
-            if (diff != 0) {
-                return diff;
-            }
-            diff = a.type.compareToIgnoreCase(b.type);
-            if (diff != 0) {
-                return diff;
-            }
-
-            // Accounts without data sets get sorted before those that have them.
-            if (a.dataSet != null) {
-                return b.dataSet == null ? 1 : a.dataSet.compareToIgnoreCase(b.dataSet);
-            } else {
-                return -1;
-            }
-        }
-    }
-
-    private static boolean isWritableGoogleAccount(AccountWithDataSet account) {
-        return GoogleAccountType.ACCOUNT_TYPE.equals(account.type) && account.dataSet == null;
-    }
-}
-
-class AccountTypeManagerImpl extends AccountTypeManager
-        implements OnAccountsUpdateListener, SyncStatusObserver {
-
-    private static final Map<AccountTypeWithDataSet, AccountType>
-            EMPTY_UNMODIFIABLE_ACCOUNT_TYPE_MAP =
-            Collections.unmodifiableMap(new HashMap<AccountTypeWithDataSet, AccountType>());
-
-    /**
-     * A sample contact URI used to test whether any activities will respond to an
-     * invitable intent with the given URI as the intent data. This doesn't need to be
-     * specific to a real contact because an app that intercepts the intent should probably do so
-     * for all types of contact URIs.
-     */
-    private static final Uri SAMPLE_CONTACT_URI = ContactsContract.Contacts.getLookupUri(
-            1, "xxx");
-
-    private Context mContext;
-    private AccountManager mAccountManager;
-    private DeviceLocalAccountTypeFactory mDeviceLocalAccountTypeFactory;
-
-    private AccountType mFallbackAccountType;
-
-    private List<AccountWithDataSet> mAccounts = Lists.newArrayList();
-    private List<AccountWithDataSet> mContactWritableAccounts = Lists.newArrayList();
-    private List<AccountWithDataSet> mGroupWritableAccounts = Lists.newArrayList();
-    private Map<AccountTypeWithDataSet, AccountType> mAccountTypesWithDataSets = Maps.newHashMap();
-    private Map<AccountTypeWithDataSet, AccountType> mInvitableAccountTypes =
-            EMPTY_UNMODIFIABLE_ACCOUNT_TYPE_MAP;
-
-    private final InvitableAccountTypeCache mInvitableAccountTypeCache;
-
-    /**
-     * The boolean value is equal to true if the {@link InvitableAccountTypeCache} has been
-     * initialized. False otherwise.
-     */
-    private final AtomicBoolean mInvitablesCacheIsInitialized = new AtomicBoolean(false);
-
-    /**
-     * The boolean value is equal to true if the {@link FindInvitablesTask} is still executing.
-     * False otherwise.
-     */
-    private final AtomicBoolean mInvitablesTaskIsRunning = new AtomicBoolean(false);
-
-    private static final int MESSAGE_LOAD_DATA = 0;
-    private static final int MESSAGE_PROCESS_BROADCAST_INTENT = 1;
-
-    private HandlerThread mListenerThread;
-    private Handler mListenerHandler;
-
-    private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper());
-    private final Runnable mCheckFilterValidityRunnable = new Runnable () {
-        @Override
-        public void run() {
-            ContactListFilterController.getInstance(mContext).checkFilterValidity(true);
-        }
-    };
-
-    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
-
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            Message msg = mListenerHandler.obtainMessage(MESSAGE_PROCESS_BROADCAST_INTENT, intent);
-            mListenerHandler.sendMessage(msg);
-        }
-
-    };
-
-    /* A latch that ensures that asynchronous initialization completes before data is used */
-    private volatile CountDownLatch mInitializationLatch = new CountDownLatch(1);
-
-    /**
-     * Internal constructor that only performs initial parsing.
-     */
-    public AccountTypeManagerImpl(Context context,
-            DeviceLocalAccountTypeFactory deviceLocalAccountTypeFactory) {
-        mContext = context;
-        mFallbackAccountType = new FallbackAccountType(context);
-        mDeviceLocalAccountTypeFactory = deviceLocalAccountTypeFactory;
-
-        mAccountManager = AccountManager.get(mContext);
-
-        mListenerThread = new HandlerThread("AccountChangeListener");
-        mListenerThread.start();
-        mListenerHandler = new Handler(mListenerThread.getLooper()) {
-            @Override
-            public void handleMessage(Message msg) {
-                switch (msg.what) {
-                    case MESSAGE_LOAD_DATA:
-                        loadAccountsInBackground();
-                        break;
-                    case MESSAGE_PROCESS_BROADCAST_INTENT:
-                        processBroadcastIntent((Intent) msg.obj);
-                        break;
-                }
-            }
-        };
-
-        mInvitableAccountTypeCache = new InvitableAccountTypeCache();
-
-        // Request updates when packages or accounts change
-        IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
-        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
-        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
-        filter.addDataScheme("package");
-        mContext.registerReceiver(mBroadcastReceiver, filter);
-        IntentFilter sdFilter = new IntentFilter();
-        sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
-        sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
-        mContext.registerReceiver(mBroadcastReceiver, sdFilter);
-
-        // Request updates when locale is changed so that the order of each field will
-        // be able to be changed on the locale change.
-        filter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);
-        mContext.registerReceiver(mBroadcastReceiver, filter);
-
-        mAccountManager.addOnAccountsUpdatedListener(this, mListenerHandler, false);
-
-        ContentResolver.addStatusChangeListener(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS, this);
-
-
-        if (Flags.getInstance().getBoolean(Experiments.OEM_CP2_DEVICE_ACCOUNT_DETECTION_ENABLED)) {
-            // Observe changes to RAW_CONTACTS so that we will update the list of "Device" accounts
-            // if a new device contact is added.
-            mContext.getContentResolver().registerContentObserver(
-                    ContactsContract.RawContacts.CONTENT_URI, /* notifyDescendents */ true,
-                    new ContentObserver(mListenerHandler) {
-                        @Override
-                        public boolean deliverSelfNotifications() {
-                            return true;
-                        }
-
-                        @Override
-                        public void onChange(boolean selfChange) {
-                            mListenerHandler.sendEmptyMessage(MESSAGE_LOAD_DATA);
-                        }
-
-                        @Override
-                        public void onChange(boolean selfChange, Uri uri) {
-                            mListenerHandler.sendEmptyMessage(MESSAGE_LOAD_DATA);
-                        }
-                    });
-        }
-
-        mListenerHandler.sendEmptyMessage(MESSAGE_LOAD_DATA);
-    }
-
-    @Override
-    public void onStatusChanged(int which) {
-        mListenerHandler.sendEmptyMessage(MESSAGE_LOAD_DATA);
-    }
-
-    public void processBroadcastIntent(Intent intent) {
-        mListenerHandler.sendEmptyMessage(MESSAGE_LOAD_DATA);
-    }
-
-    /* This notification will arrive on the background thread */
-    public void onAccountsUpdated(Account[] accounts) {
-        // Refresh to catch any changed accounts
-        loadAccountsInBackground();
-    }
-
-    /**
-     * Returns instantly if accounts and account types have already been loaded.
-     * Otherwise waits for the background thread to complete the loading.
-     */
-    void ensureAccountsLoaded() {
-        CountDownLatch latch = mInitializationLatch;
-        if (latch == null) {
-            return;
-        }
-
-        while (true) {
-            try {
-                latch.await();
-                return;
-            } catch (InterruptedException e) {
-                Thread.currentThread().interrupt();
-            }
-        }
-    }
-
-    /**
-     * Loads account list and corresponding account types (potentially with data sets). Always
-     * called on a background thread.
-     */
-    protected void loadAccountsInBackground() {
-        if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG)) {
-            Log.d(Constants.PERFORMANCE_TAG, "AccountTypeManager.loadAccountsInBackground start");
-        }
-        TimingLogger timings = new TimingLogger(TAG, "loadAccountsInBackground");
-        final long startTime = SystemClock.currentThreadTimeMillis();
-        final long startTimeWall = SystemClock.elapsedRealtime();
-
-        // Account types, keyed off the account type and data set concatenation.
-        final Map<AccountTypeWithDataSet, AccountType> accountTypesByTypeAndDataSet =
-                Maps.newHashMap();
-
-        // The same AccountTypes, but keyed off {@link RawContacts#ACCOUNT_TYPE}.  Since there can
-        // be multiple account types (with different data sets) for the same type of account, each
-        // type string may have multiple AccountType entries.
-        final Map<String, List<AccountType>> accountTypesByType = Maps.newHashMap();
-
-        final List<AccountWithDataSet> allAccounts = Lists.newArrayList();
-        final List<AccountWithDataSet> contactWritableAccounts = Lists.newArrayList();
-        final List<AccountWithDataSet> groupWritableAccounts = Lists.newArrayList();
-        final Set<String> extensionPackages = Sets.newHashSet();
-
-        final AccountManager am = mAccountManager;
-
-        final SyncAdapterType[] syncs = ContentResolver.getSyncAdapterTypes();
-        final AuthenticatorDescription[] auths = am.getAuthenticatorTypes();
-
-        // First process sync adapters to find any that provide contact data.
-        for (SyncAdapterType sync : syncs) {
-            if (!ContactsContract.AUTHORITY.equals(sync.authority)) {
-                // Skip sync adapters that don't provide contact data.
-                continue;
-            }
-
-            // Look for the formatting details provided by each sync
-            // adapter, using the authenticator to find general resources.
-            final String type = sync.accountType;
-            final AuthenticatorDescription auth = findAuthenticator(auths, type);
-            if (auth == null) {
-                Log.w(TAG, "No authenticator found for type=" + type + ", ignoring it.");
-                continue;
-            }
-
-            AccountType accountType;
-            if (GoogleAccountType.ACCOUNT_TYPE.equals(type)) {
-                accountType = new GoogleAccountType(mContext, auth.packageName);
-            } else if (ExchangeAccountType.isExchangeType(type)) {
-                accountType = new ExchangeAccountType(mContext, auth.packageName, type);
-            } else if (SamsungAccountType.isSamsungAccountType(mContext, type,
-                    auth.packageName)) {
-                accountType = new SamsungAccountType(mContext, auth.packageName, type);
-            } else if (!ExternalAccountType.hasContactsXml(mContext, auth.packageName)
-                    && isLocalAccountType(mDeviceLocalAccountTypeFactory, type)) {
-                // This will be loaded by the DeviceLocalAccountLocator so don't try to create an
-                // ExternalAccountType for it.
-                continue;
-            } else {
-                Log.d(TAG, "Registering external account type=" + type
-                        + ", packageName=" + auth.packageName);
-                accountType = new ExternalAccountType(mContext, auth.packageName, false);
-            }
-            if (!accountType.isInitialized()) {
-                if (accountType.isEmbedded()) {
-                    throw new IllegalStateException("Problem initializing embedded type "
-                            + accountType.getClass().getCanonicalName());
-                } else {
-                    // Skip external account types that couldn't be initialized.
-                    continue;
-                }
-            }
-
-            accountType.initializeFieldsFromAuthenticator(auth);
-
-            addAccountType(accountType, accountTypesByTypeAndDataSet, accountTypesByType);
-
-            // Check to see if the account type knows of any other non-sync-adapter packages
-            // that may provide other data sets of contact data.
-            extensionPackages.addAll(accountType.getExtensionPackageNames());
-        }
-
-        // If any extension packages were specified, process them as well.
-        if (!extensionPackages.isEmpty()) {
-            Log.d(TAG, "Registering " + extensionPackages.size() + " extension packages");
-            for (String extensionPackage : extensionPackages) {
-                ExternalAccountType accountType =
-                    new ExternalAccountType(mContext, extensionPackage, true);
-                if (!accountType.isInitialized()) {
-                    // Skip external account types that couldn't be initialized.
-                    continue;
-                }
-                if (!accountType.hasContactsMetadata()) {
-                    Log.w(TAG, "Skipping extension package " + extensionPackage + " because"
-                            + " it doesn't have the CONTACTS_STRUCTURE metadata");
-                    continue;
-                }
-                if (TextUtils.isEmpty(accountType.accountType)) {
-                    Log.w(TAG, "Skipping extension package " + extensionPackage + " because"
-                            + " the CONTACTS_STRUCTURE metadata doesn't have the accountType"
-                            + " attribute");
-                    continue;
-                }
-                Log.d(TAG, "Registering extension package account type="
-                        + accountType.accountType + ", dataSet=" + accountType.dataSet
-                        + ", packageName=" + extensionPackage);
-
-                addAccountType(accountType, accountTypesByTypeAndDataSet, accountTypesByType);
-            }
-        }
-        timings.addSplit("Loaded account types");
-
-        boolean foundWritableGoogleAccount = false;
-        // Map in accounts to associate the account names with each account type entry.
-        Account[] accounts = mAccountManager.getAccounts();
-        for (Account account : accounts) {
-            boolean syncable =
-                ContentResolver.getIsSyncable(account, ContactsContract.AUTHORITY) > 0;
-
-            if (syncable || GoogleAccountType.ACCOUNT_TYPE.equals(account.type)) {
-                List<AccountType> accountTypes = accountTypesByType.get(account.type);
-                if (accountTypes != null) {
-                    // Add an account-with-data-set entry for each account type that is
-                    // authenticated by this account.
-                    for (AccountType accountType : accountTypes) {
-                        AccountWithDataSet accountWithDataSet = new AccountWithDataSet(
-                                account.name, account.type, accountType.dataSet);
-                        allAccounts.add(accountWithDataSet);
-                        if (accountType.areContactsWritable()) {
-                            contactWritableAccounts.add(accountWithDataSet);
-                            if (GoogleAccountType.ACCOUNT_TYPE.equals(account.type)
-                                    && accountWithDataSet.dataSet == null) {
-                                foundWritableGoogleAccount = true;
-                            }
-
-                            if (accountType.isGroupMembershipEditable()) {
-                                groupWritableAccounts.add(accountWithDataSet);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        final DeviceLocalAccountLocator deviceAccountLocator = DeviceLocalAccountLocator
-                .create(mContext, allAccounts);
-        final List<AccountWithDataSet> localAccounts = deviceAccountLocator
-                .getDeviceLocalAccounts();
-        allAccounts.addAll(localAccounts);
-
-        for (AccountWithDataSet localAccount : localAccounts) {
-            // Prefer a known type if it exists. This covers the case that a local account has an
-            // authenticator with a valid contacts.xml
-            AccountType localAccountType = accountTypesByTypeAndDataSet.get(
-                    localAccount.getAccountTypeWithDataSet());
-            if (localAccountType == null) {
-                localAccountType = mDeviceLocalAccountTypeFactory.getAccountType(localAccount.type);
-            }
-            accountTypesByTypeAndDataSet.put(localAccount.getAccountTypeWithDataSet(),
-                    localAccountType);
-
-            // Skip the null account if there is a Google account available. This is done because
-            // the Google account's sync adapter will automatically move accounts in the "null"
-            // account.  Hence, it would be confusing to still show it as an available writable
-            // account since contacts that were saved to it would magically change accounts when the
-            // sync adapter runs.
-            if (foundWritableGoogleAccount && localAccount.type == null) {
-                continue;
-            }
-            if (localAccountType.areContactsWritable()) {
-                contactWritableAccounts.add(localAccount);
-
-                if (localAccountType.isGroupMembershipEditable()) {
-                    groupWritableAccounts.add(localAccount);
-                }
-            }
-        }
-
-        final AccountComparator accountComparator = new AccountComparator(null);
-        Collections.sort(allAccounts, accountComparator);
-        Collections.sort(contactWritableAccounts, accountComparator);
-        Collections.sort(groupWritableAccounts, accountComparator);
-
-        timings.addSplit("Loaded accounts");
-
-        synchronized (this) {
-            mAccountTypesWithDataSets = accountTypesByTypeAndDataSet;
-            mAccounts = allAccounts;
-            mContactWritableAccounts = contactWritableAccounts;
-            mGroupWritableAccounts = groupWritableAccounts;
-            mInvitableAccountTypes = findAllInvitableAccountTypes(
-                    mContext, allAccounts, accountTypesByTypeAndDataSet);
-        }
-
-        timings.dumpToLog();
-        final long endTimeWall = SystemClock.elapsedRealtime();
-        final long endTime = SystemClock.currentThreadTimeMillis();
-
-        Log.i(TAG, "Loaded meta-data for " + mAccountTypesWithDataSets.size() + " account types, "
-                + mAccounts.size() + " accounts in " + (endTimeWall - startTimeWall) + "ms(wall) "
-                + (endTime - startTime) + "ms(cpu)");
-
-        if (mInitializationLatch != null) {
-            mInitializationLatch.countDown();
-            mInitializationLatch = null;
-        }
-        if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG)) {
-            Log.d(Constants.PERFORMANCE_TAG, "AccountTypeManager.loadAccountsInBackground finish");
-        }
-
-        // Check filter validity since filter may become obsolete after account update. It must be
-        // done from UI thread.
-        mMainThreadHandler.post(mCheckFilterValidityRunnable);
-    }
-
-    // Bookkeeping method for tracking the known account types in the given maps.
-    private void addAccountType(AccountType accountType,
-            Map<AccountTypeWithDataSet, AccountType> accountTypesByTypeAndDataSet,
-            Map<String, List<AccountType>> accountTypesByType) {
-        accountTypesByTypeAndDataSet.put(accountType.getAccountTypeAndDataSet(), accountType);
-        List<AccountType> accountsForType = accountTypesByType.get(accountType.accountType);
-        if (accountsForType == null) {
-            accountsForType = Lists.newArrayList();
-        }
-        accountsForType.add(accountType);
-        accountTypesByType.put(accountType.accountType, accountsForType);
-    }
-
-    /**
-     * Find a specific {@link AuthenticatorDescription} in the provided list
-     * that matches the given account type.
-     */
-    protected static AuthenticatorDescription findAuthenticator(AuthenticatorDescription[] auths,
-            String accountType) {
-        for (AuthenticatorDescription auth : auths) {
-            if (accountType.equals(auth.type)) {
-                return auth;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Return list of all known or contact writable {@link AccountWithDataSet}'s.
-     * {@param contactWritableOnly} whether to restrict to contact writable accounts only
-     */
-    @Override
-    public List<AccountWithDataSet> getAccounts(boolean contactWritableOnly) {
-        ensureAccountsLoaded();
-        return Lists.newArrayList(contactWritableOnly ? mContactWritableAccounts : mAccounts);
-    }
-
-    @Override
-    public List<AccountWithDataSet> getAccounts(Predicate<AccountWithDataSet> filter) {
-        return new ArrayList<>(Collections2.filter(mAccounts, filter));
-    }
-
-    /**
-     * Return list of all known or contact writable {@link AccountWithDataSet}'s sorted by
-     * {@code defaultAccount}.
-     * {@param defaultAccount} account to sort by
-     * {@param contactWritableOnly} whether to restrict to contact writable accounts only
-     */
-    @Override
-    public List<AccountWithDataSet> getSortedAccounts(AccountWithDataSet defaultAccount,
-            boolean contactWritableOnly) {
-        final AccountComparator comparator = new AccountComparator(defaultAccount);
-        final List<AccountWithDataSet> accounts = getAccounts(contactWritableOnly);
-        Collections.sort(accounts, comparator);
-        return accounts;
-    }
-
-    /**
-     * Return the list of all known, group writable {@link AccountWithDataSet}'s.
-     */
-    public List<AccountWithDataSet> getGroupWritableAccounts() {
-        ensureAccountsLoaded();
-        return Lists.newArrayList(mGroupWritableAccounts);
-    }
-
-    /**
-     * Returns the default google account specified in preferences, the first google account
-     * if it is not specified in preferences or is no longer on the device, and null otherwise.
-     */
-    @Override
-    public Account getDefaultGoogleAccount() {
-        final AccountManager accountManager = AccountManager.get(mContext);
-        final SharedPreferences sharedPreferences =
-                mContext.getSharedPreferences(mContext.getPackageName(), Context.MODE_PRIVATE);
-        final String defaultAccountKey =
-                mContext.getResources().getString(R.string.contact_editor_default_account_key);
-        return getDefaultGoogleAccount(accountManager, sharedPreferences, defaultAccountKey);
-    }
-
-    /**
-     * Find the best {@link DataKind} matching the requested
-     * {@link AccountType#accountType}, {@link AccountType#dataSet}, and {@link DataKind#mimeType}.
-     * If no direct match found, we try searching {@link FallbackAccountType}.
-     */
-    @Override
-    public DataKind getKindOrFallback(AccountType type, String mimeType) {
-        ensureAccountsLoaded();
-        DataKind kind = null;
-
-        // Try finding account type and kind matching request
-        if (type != null) {
-            kind = type.getKindForMimetype(mimeType);
-        }
-
-        if (kind == null) {
-            // Nothing found, so try fallback as last resort
-            kind = mFallbackAccountType.getKindForMimetype(mimeType);
-        }
-
-        if (kind == null) {
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, "Unknown type=" + type + ", mime=" + mimeType);
-            }
-        }
-
-        return kind;
-    }
-
-    /**
-     * Return {@link AccountType} for the given account type and data set.
-     */
-    @Override
-    public AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet) {
-        ensureAccountsLoaded();
-        synchronized (this) {
-            AccountType type = mAccountTypesWithDataSets.get(accountTypeWithDataSet);
-            return type != null ? type : mFallbackAccountType;
-        }
-    }
-
-    /**
-     * @return Unmodifiable map from {@link AccountTypeWithDataSet}s to {@link AccountType}s
-     * which support the "invite" feature and have one or more account. This is an unfiltered
-     * list. See {@link #getUsableInvitableAccountTypes()}.
-     */
-    private Map<AccountTypeWithDataSet, AccountType> getAllInvitableAccountTypes() {
-        ensureAccountsLoaded();
-        return mInvitableAccountTypes;
-    }
-
-    @Override
-    public Map<AccountTypeWithDataSet, AccountType> getUsableInvitableAccountTypes() {
-        ensureAccountsLoaded();
-        // Since this method is not thread-safe, it's possible for multiple threads to encounter
-        // the situation where (1) the cache has not been initialized yet or
-        // (2) an async task to refresh the account type list in the cache has already been
-        // started. Hence we use {@link AtomicBoolean}s and return cached values immediately
-        // while we compute the actual result in the background. We use this approach instead of
-        // using "synchronized" because computing the account type list involves a DB read, and
-        // can potentially cause a deadlock situation if this method is called from code which
-        // holds the DB lock. The trade-off of potentially having an incorrect list of invitable
-        // account types for a short period of time seems more manageable than enforcing the
-        // context in which this method is called.
-
-        // Computing the list of usable invitable account types is done on the fly as requested.
-        // If this method has never been called before, then block until the list has been computed.
-        if (!mInvitablesCacheIsInitialized.get()) {
-            mInvitableAccountTypeCache.setCachedValue(findUsableInvitableAccountTypes(mContext));
-            mInvitablesCacheIsInitialized.set(true);
-        } else {
-            // Otherwise, there is a value in the cache. If the value has expired and
-            // an async task has not already been started by another thread, then kick off a new
-            // async task to compute the list.
-            if (mInvitableAccountTypeCache.isExpired() &&
-                    mInvitablesTaskIsRunning.compareAndSet(false, true)) {
-                new FindInvitablesTask().execute();
-            }
-        }
-
-        return mInvitableAccountTypeCache.getCachedValue();
-    }
-
-    /**
-     * Return all {@link AccountType}s with at least one account which supports "invite", i.e.
-     * its {@link AccountType#getInviteContactActivityClassName()} is not empty.
-     */
-    @VisibleForTesting
-    static Map<AccountTypeWithDataSet, AccountType> findAllInvitableAccountTypes(Context context,
-            Collection<AccountWithDataSet> accounts,
-            Map<AccountTypeWithDataSet, AccountType> accountTypesByTypeAndDataSet) {
-        HashMap<AccountTypeWithDataSet, AccountType> result = Maps.newHashMap();
-        for (AccountWithDataSet account : accounts) {
-            AccountTypeWithDataSet accountTypeWithDataSet = account.getAccountTypeWithDataSet();
-            AccountType type = accountTypesByTypeAndDataSet.get(accountTypeWithDataSet);
-            if (type == null) continue; // just in case
-            if (result.containsKey(accountTypeWithDataSet)) continue;
-
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, "Type " + accountTypeWithDataSet
-                        + " inviteClass=" + type.getInviteContactActivityClassName());
-            }
-            if (!TextUtils.isEmpty(type.getInviteContactActivityClassName())) {
-                result.put(accountTypeWithDataSet, type);
-            }
-        }
-        return Collections.unmodifiableMap(result);
-    }
-
-    /**
-     * Return all usable {@link AccountType}s that support the "invite" feature from the
-     * list of all potential invitable account types (retrieved from
-     * {@link #getAllInvitableAccountTypes}). A usable invitable account type means:
-     * (1) there is at least 1 raw contact in the database with that account type, and
-     * (2) the app contributing the account type is not disabled.
-     *
-     * Warning: Don't use on the UI thread because this can scan the database.
-     */
-    private Map<AccountTypeWithDataSet, AccountType> findUsableInvitableAccountTypes(
-            Context context) {
-        Map<AccountTypeWithDataSet, AccountType> allInvitables = getAllInvitableAccountTypes();
-        if (allInvitables.isEmpty()) {
-            return EMPTY_UNMODIFIABLE_ACCOUNT_TYPE_MAP;
-        }
-
-        final HashMap<AccountTypeWithDataSet, AccountType> result = Maps.newHashMap();
-        result.putAll(allInvitables);
-
-        final PackageManager packageManager = context.getPackageManager();
-        for (AccountTypeWithDataSet accountTypeWithDataSet : allInvitables.keySet()) {
-            AccountType accountType = allInvitables.get(accountTypeWithDataSet);
-
-            // Make sure that account types don't come from apps that are disabled.
-            Intent invitableIntent = MoreContactUtils.getInvitableIntent(accountType,
-                    SAMPLE_CONTACT_URI);
-            if (invitableIntent == null) {
-                result.remove(accountTypeWithDataSet);
-                continue;
-            }
-            ResolveInfo resolveInfo = packageManager.resolveActivity(invitableIntent,
-                    PackageManager.MATCH_DEFAULT_ONLY);
-            if (resolveInfo == null) {
-                // If we can't find an activity to start for this intent, then there's no point in
-                // showing this option to the user.
-                result.remove(accountTypeWithDataSet);
-                continue;
-            }
-
-            // Make sure that there is at least 1 raw contact with this account type. This check
-            // is non-trivial and should not be done on the UI thread.
-            if (!accountTypeWithDataSet.hasData(context)) {
-                result.remove(accountTypeWithDataSet);
-            }
-        }
-
-        return Collections.unmodifiableMap(result);
-    }
-
-    @Override
-    public List<AccountType> getAccountTypes(boolean contactWritableOnly) {
-        ensureAccountsLoaded();
-        final List<AccountType> accountTypes = Lists.newArrayList();
-        synchronized (this) {
-            for (AccountType type : mAccountTypesWithDataSets.values()) {
-                if (!contactWritableOnly || type.areContactsWritable()) {
-                    accountTypes.add(type);
-                }
-            }
-        }
-        return accountTypes;
-    }
-
-    /**
-     * Background task to find all usable {@link AccountType}s that support the "invite" feature
-     * from the list of all potential invitable account types. Once the work is completed,
-     * the list of account types is stored in the {@link AccountTypeManager}'s
-     * {@link InvitableAccountTypeCache}.
-     */
-    private class FindInvitablesTask extends AsyncTask<Void, Void,
-            Map<AccountTypeWithDataSet, AccountType>> {
-
-        @Override
-        protected Map<AccountTypeWithDataSet, AccountType> doInBackground(Void... params) {
-            return findUsableInvitableAccountTypes(mContext);
-        }
-
-        @Override
-        protected void onPostExecute(Map<AccountTypeWithDataSet, AccountType> accountTypes) {
-            mInvitableAccountTypeCache.setCachedValue(accountTypes);
-            mInvitablesTaskIsRunning.set(false);
-        }
-    }
-
-    /**
-     * This cache holds a list of invitable {@link AccountTypeWithDataSet}s, in the form of a
-     * {@link Map<AccountTypeWithDataSet, AccountType>}. Note that the cached value is valid only
-     * for {@link #TIME_TO_LIVE} milliseconds.
-     */
-    private static final class InvitableAccountTypeCache {
-
-        /**
-         * The cached {@link #mInvitableAccountTypes} list expires after this number of milliseconds
-         * has elapsed.
-         */
-        private static final long TIME_TO_LIVE = 60000;
-
-        private Map<AccountTypeWithDataSet, AccountType> mInvitableAccountTypes;
-
-        private long mTimeLastSet;
-
-        /**
-         * Returns true if the data in this cache is stale and needs to be refreshed. Returns false
-         * otherwise.
-         */
-        public boolean isExpired() {
-             return SystemClock.elapsedRealtime() - mTimeLastSet > TIME_TO_LIVE;
-        }
-
-        /**
-         * Returns the cached value. Note that the caller is responsible for checking
-         * {@link #isExpired()} to ensure that the value is not stale.
-         */
-        public Map<AccountTypeWithDataSet, AccountType> getCachedValue() {
-            return mInvitableAccountTypes;
-        }
-
-        public void setCachedValue(Map<AccountTypeWithDataSet, AccountType> map) {
-            mInvitableAccountTypes = map;
-            mTimeLastSet = SystemClock.elapsedRealtime();
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/model/BuilderWrapper.java b/src/com/android/contacts/common/model/BuilderWrapper.java
deleted file mode 100644
index 325c3df..0000000
--- a/src/com/android/contacts/common/model/BuilderWrapper.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model;
-
-import android.content.ContentProviderOperation.Builder;
-
-/**
- * This class is created for the purpose of compatibility and make the type of
- * ContentProviderOperation available on pre-M SDKs. Since ContentProviderOperation is
- * usually created by Builder and we don’t have access to the type via Builder, so we need to
- * create a wrapper class for Builder first and include type. Then we could use the builder and
- * the type in this class to create a wrapper of ContentProviderOperation.
- */
-public class BuilderWrapper {
-    private Builder mBuilder;
-    private int mType;
-
-    public BuilderWrapper(Builder builder, int type) {
-        mBuilder = builder;
-        mType = type;
-    }
-
-    public int getType() {
-        return mType;
-    }
-
-    public void setType(int mType) {
-        this.mType = mType;
-    }
-
-    public Builder getBuilder() {
-        return mBuilder;
-    }
-
-    public void setBuilder(Builder mBuilder) {
-        this.mBuilder = mBuilder;
-    }
-}
diff --git a/src/com/android/contacts/common/model/CPOWrapper.java b/src/com/android/contacts/common/model/CPOWrapper.java
deleted file mode 100644
index 4124df8..0000000
--- a/src/com/android/contacts/common/model/CPOWrapper.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model;
-
-import android.content.ContentProviderOperation;
-
-/**
- * This class is created for the purpose of compatibility and make the type of
- * ContentProviderOperation available on pre-M SDKs.
- */
-public class CPOWrapper {
-    private ContentProviderOperation mOperation;
-    private int mType;
-
-    public CPOWrapper(ContentProviderOperation builder, int type) {
-        mOperation = builder;
-        mType = type;
-    }
-
-    public int getType() {
-        return mType;
-    }
-
-    public void setType(int type) {
-        this.mType = type;
-    }
-
-    public ContentProviderOperation getOperation() {
-        return mOperation;
-    }
-
-    public void setOperation(ContentProviderOperation operation) {
-        this.mOperation = operation;
-    }
-}
diff --git a/src/com/android/contacts/common/model/Contact.java b/src/com/android/contacts/common/model/Contact.java
deleted file mode 100644
index 586f80a..0000000
--- a/src/com/android/contacts/common/model/Contact.java
+++ /dev/null
@@ -1,513 +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.common.model;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.net.Uri;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Directory;
-import android.provider.ContactsContract.DisplayNameSources;
-
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.SimAccountType;
-import com.android.contacts.common.util.DataStatus;
-import com.android.contacts.group.GroupMetaData;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-
-import java.util.ArrayList;
-
-/**
- * A Contact represents a single person or logical entity as perceived by the user.  The information
- * about a contact can come from multiple data sources, which are each represented by a RawContact
- * object.  Thus, a Contact is associated with a collection of RawContact objects.
- *
- * The aggregation of raw contacts into a single contact is performed automatically, and it is
- * also possible for users to manually split and join raw contacts into various contacts.
- *
- * Only the {@link ContactLoader} class can create a Contact object with various flags to allow
- * partial loading of contact data.  Thus, an instance of this class should be treated as
- * a read-only object.
- */
-public class Contact {
-    private enum Status {
-        /** Contact is successfully loaded */
-        LOADED,
-        /** There was an error loading the contact */
-        ERROR,
-        /** Contact is not found */
-        NOT_FOUND,
-    }
-
-    private final Uri mRequestedUri;
-    private final Uri mLookupUri;
-    private final Uri mUri;
-    private final long mDirectoryId;
-    private final String mLookupKey;
-    private final long mId;
-    private final long mNameRawContactId;
-    private final int mDisplayNameSource;
-    private final long mPhotoId;
-    private final String mPhotoUri;
-    private final String mDisplayName;
-    private final String mAltDisplayName;
-    private final String mPhoneticName;
-    private final boolean mStarred;
-    private final Integer mPresence;
-    private ImmutableList<RawContact> mRawContacts;
-    private ImmutableMap<Long,DataStatus> mStatuses;
-    private ImmutableList<AccountType> mInvitableAccountTypes;
-
-    private String mDirectoryDisplayName;
-    private String mDirectoryType;
-    private String mDirectoryAccountType;
-    private String mDirectoryAccountName;
-    private int mDirectoryExportSupport;
-
-    private ImmutableList<GroupMetaData> mGroups;
-
-    private byte[] mPhotoBinaryData;
-    /**
-     * Small version of the contact photo loaded from a blob instead of from a file. If a large
-     * contact photo is not available yet, then this has the same value as mPhotoBinaryData.
-     */
-    private byte[] mThumbnailPhotoBinaryData;
-    private final boolean mSendToVoicemail;
-    private final String mCustomRingtone;
-    private final boolean mIsUserProfile;
-
-    private final Contact.Status mStatus;
-    private final Exception mException;
-
-    /**
-     * Constructor for special results, namely "no contact found" and "error".
-     */
-    private Contact(Uri requestedUri, Contact.Status status, Exception exception) {
-        if (status == Status.ERROR && exception == null) {
-            throw new IllegalArgumentException("ERROR result must have exception");
-        }
-        mStatus = status;
-        mException = exception;
-        mRequestedUri = requestedUri;
-        mLookupUri = null;
-        mUri = null;
-        mDirectoryId = -1;
-        mLookupKey = null;
-        mId = -1;
-        mRawContacts = null;
-        mStatuses = null;
-        mNameRawContactId = -1;
-        mDisplayNameSource = DisplayNameSources.UNDEFINED;
-        mPhotoId = -1;
-        mPhotoUri = null;
-        mDisplayName = null;
-        mAltDisplayName = null;
-        mPhoneticName = null;
-        mStarred = false;
-        mPresence = null;
-        mInvitableAccountTypes = null;
-        mSendToVoicemail = false;
-        mCustomRingtone = null;
-        mIsUserProfile = false;
-    }
-
-    public static Contact forError(Uri requestedUri, Exception exception) {
-        return new Contact(requestedUri, Status.ERROR, exception);
-    }
-
-    public static Contact forNotFound(Uri requestedUri) {
-        return new Contact(requestedUri, Status.NOT_FOUND, null);
-    }
-
-    /**
-     * Constructor to call when contact was found
-     */
-    public Contact(Uri requestedUri, Uri uri, Uri lookupUri, long directoryId, String lookupKey,
-            long id, long nameRawContactId, int displayNameSource, long photoId,
-            String photoUri, String displayName, String altDisplayName, String phoneticName,
-            boolean starred, Integer presence, boolean sendToVoicemail, String customRingtone,
-            boolean isUserProfile) {
-        mStatus = Status.LOADED;
-        mException = null;
-        mRequestedUri = requestedUri;
-        mLookupUri = lookupUri;
-        mUri = uri;
-        mDirectoryId = directoryId;
-        mLookupKey = lookupKey;
-        mId = id;
-        mRawContacts = null;
-        mStatuses = null;
-        mNameRawContactId = nameRawContactId;
-        mDisplayNameSource = displayNameSource;
-        mPhotoId = photoId;
-        mPhotoUri = photoUri;
-        mDisplayName = displayName;
-        mAltDisplayName = altDisplayName;
-        mPhoneticName = phoneticName;
-        mStarred = starred;
-        mPresence = presence;
-        mInvitableAccountTypes = null;
-        mSendToVoicemail = sendToVoicemail;
-        mCustomRingtone = customRingtone;
-        mIsUserProfile = isUserProfile;
-    }
-
-    public Contact(Uri requestedUri, Contact from) {
-        mRequestedUri = requestedUri;
-
-        mStatus = from.mStatus;
-        mException = from.mException;
-        mLookupUri = from.mLookupUri;
-        mUri = from.mUri;
-        mDirectoryId = from.mDirectoryId;
-        mLookupKey = from.mLookupKey;
-        mId = from.mId;
-        mNameRawContactId = from.mNameRawContactId;
-        mDisplayNameSource = from.mDisplayNameSource;
-        mPhotoId = from.mPhotoId;
-        mPhotoUri = from.mPhotoUri;
-        mDisplayName = from.mDisplayName;
-        mAltDisplayName = from.mAltDisplayName;
-        mPhoneticName = from.mPhoneticName;
-        mStarred = from.mStarred;
-        mPresence = from.mPresence;
-        mRawContacts = from.mRawContacts;
-        mStatuses = from.mStatuses;
-        mInvitableAccountTypes = from.mInvitableAccountTypes;
-
-        mDirectoryDisplayName = from.mDirectoryDisplayName;
-        mDirectoryType = from.mDirectoryType;
-        mDirectoryAccountType = from.mDirectoryAccountType;
-        mDirectoryAccountName = from.mDirectoryAccountName;
-        mDirectoryExportSupport = from.mDirectoryExportSupport;
-
-        mGroups = from.mGroups;
-
-        mPhotoBinaryData = from.mPhotoBinaryData;
-        mSendToVoicemail = from.mSendToVoicemail;
-        mCustomRingtone = from.mCustomRingtone;
-        mIsUserProfile = from.mIsUserProfile;
-    }
-
-    /**
-     * @param exportSupport See {@link Directory#EXPORT_SUPPORT}.
-     */
-    public void setDirectoryMetaData(String displayName, String directoryType,
-            String accountType, String accountName, int exportSupport) {
-        mDirectoryDisplayName = displayName;
-        mDirectoryType = directoryType;
-        mDirectoryAccountType = accountType;
-        mDirectoryAccountName = accountName;
-        mDirectoryExportSupport = exportSupport;
-    }
-
-    /* package */ void setPhotoBinaryData(byte[] photoBinaryData) {
-        mPhotoBinaryData = photoBinaryData;
-    }
-
-    /* package */ void setThumbnailPhotoBinaryData(byte[] photoBinaryData) {
-        mThumbnailPhotoBinaryData = photoBinaryData;
-    }
-
-    /**
-     * Returns the URI for the contact that contains both the lookup key and the ID. This is
-     * the best URI to reference a contact.
-     * For directory contacts, this is the same a the URI as returned by {@link #getUri()}
-     */
-    public Uri getLookupUri() {
-        return mLookupUri;
-    }
-
-    public String getLookupKey() {
-        return mLookupKey;
-    }
-
-    /**
-     * Returns the contact Uri that was passed to the provider to make the query. This is
-     * the same as the requested Uri, unless the requested Uri doesn't specify a Contact:
-     * If it either references a Raw-Contact or a Person (a pre-Eclair style Uri), this Uri will
-     * always reference the full aggregate contact.
-     */
-    public Uri getUri() {
-        return mUri;
-    }
-
-    /**
-     * Returns the URI for which this {@link ContactLoader) was initially requested.
-     */
-    public Uri getRequestedUri() {
-        return mRequestedUri;
-    }
-
-    /**
-     * Instantiate a new RawContactDeltaList for this contact.
-     */
-    public RawContactDeltaList createRawContactDeltaList() {
-        return RawContactDeltaList.fromIterator(getRawContacts().iterator());
-    }
-
-    /**
-     * Returns the contact ID.
-     */
-    @VisibleForTesting
-    public long getId() {
-        return mId;
-    }
-
-    /**
-     * @return true when an exception happened during loading, in which case
-     *     {@link #getException} returns the actual exception object.
-     *     Note {@link #isNotFound()} and {@link #isError()} are mutually exclusive; If
-     *     {@link #isError()} is {@code true}, {@link #isNotFound()} is always {@code false},
-     *     and vice versa.
-     */
-    public boolean isError() {
-        return mStatus == Status.ERROR;
-    }
-
-    public Exception getException() {
-        return mException;
-    }
-
-    /**
-     * @return true when the specified contact is not found.
-     *     Note {@link #isNotFound()} and {@link #isError()} are mutually exclusive; If
-     *     {@link #isError()} is {@code true}, {@link #isNotFound()} is always {@code false},
-     *     and vice versa.
-     */
-    public boolean isNotFound() {
-        return mStatus == Status.NOT_FOUND;
-    }
-
-    /**
-     * @return true if the specified contact is successfully loaded.
-     *     i.e. neither {@link #isError()} nor {@link #isNotFound()}.
-     */
-    public boolean isLoaded() {
-        return mStatus == Status.LOADED;
-    }
-
-    public long getNameRawContactId() {
-        return mNameRawContactId;
-    }
-
-    public int getDisplayNameSource() {
-        return mDisplayNameSource;
-    }
-
-    /**
-     * Used by various classes to determine whether or not this contact should be displayed as
-     * a business rather than a person.
-     */
-    public boolean isDisplayNameFromOrganization() {
-        return DisplayNameSources.ORGANIZATION == mDisplayNameSource;
-    }
-
-    public long getPhotoId() {
-        return mPhotoId;
-    }
-
-    public String getPhotoUri() {
-        return mPhotoUri;
-    }
-
-    public String getDisplayName() {
-        return mDisplayName;
-    }
-
-    public String getAltDisplayName() {
-        return mAltDisplayName;
-    }
-
-    public String getPhoneticName() {
-        return mPhoneticName;
-    }
-
-    public boolean getStarred() {
-        return mStarred;
-    }
-
-    public Integer getPresence() {
-        return mPresence;
-    }
-
-    /**
-     * This can return non-null invitable account types only if the {@link ContactLoader} was
-     * configured to load invitable account types in its constructor.
-     * @return
-     */
-    public ImmutableList<AccountType> getInvitableAccountTypes() {
-        return mInvitableAccountTypes;
-    }
-
-    public ImmutableList<RawContact> getRawContacts() {
-        return mRawContacts;
-    }
-
-    public ImmutableMap<Long, DataStatus> getStatuses() {
-        return mStatuses;
-    }
-
-    public long getDirectoryId() {
-        return mDirectoryId;
-    }
-
-    public boolean isDirectoryEntry() {
-        return mDirectoryId != -1 && mDirectoryId != Directory.DEFAULT
-                && mDirectoryId != Directory.LOCAL_INVISIBLE;
-    }
-
-    /**
-     * @return true if this is a contact (not group, etc.) with at least one
-     *         writable raw-contact, and false otherwise.
-     */
-    public boolean isWritableContact(final Context context) {
-        return getFirstWritableRawContactId(context) != -1;
-    }
-
-    /**
-     * Return the ID of the first raw-contact in the contact data that belongs to a
-     * contact-writable account, or -1 if no such entity exists.
-     */
-    public long getFirstWritableRawContactId(final Context context) {
-        // Directory entries are non-writable
-        if (isDirectoryEntry()) return -1;
-
-        // Iterate through raw-contacts; if we find a writable on, return its ID.
-        for (RawContact rawContact : getRawContacts()) {
-            AccountType accountType = rawContact.getAccountType(context);
-            if (accountType != null && accountType.areContactsWritable()) {
-                return rawContact.getId();
-            }
-        }
-        // No writable raw-contact was found.
-        return -1;
-    }
-
-    public int getDirectoryExportSupport() {
-        return mDirectoryExportSupport;
-    }
-
-    public String getDirectoryDisplayName() {
-        return mDirectoryDisplayName;
-    }
-
-    public String getDirectoryType() {
-        return mDirectoryType;
-    }
-
-    public String getDirectoryAccountType() {
-        return mDirectoryAccountType;
-    }
-
-    public String getDirectoryAccountName() {
-        return mDirectoryAccountName;
-    }
-
-    public byte[] getPhotoBinaryData() {
-        return mPhotoBinaryData;
-    }
-
-    public byte[] getThumbnailPhotoBinaryData() {
-        return mThumbnailPhotoBinaryData;
-    }
-
-    public ArrayList<ContentValues> getContentValues() {
-        if (mRawContacts.size() != 1) {
-            throw new IllegalStateException(
-                    "Cannot extract content values from an aggregated contact");
-        }
-
-        RawContact rawContact = mRawContacts.get(0);
-        ArrayList<ContentValues> result = rawContact.getContentValues();
-
-        // If the photo was loaded using the URI, create an entry for the photo
-        // binary data.
-        if (mPhotoId == 0 && mPhotoBinaryData != null) {
-            ContentValues photo = new ContentValues();
-            photo.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
-            photo.put(Photo.PHOTO, mPhotoBinaryData);
-            result.add(photo);
-        }
-
-        return result;
-    }
-
-    /**
-     * This can return non-null group meta-data only if the {@link ContactLoader} was configured to
-     * load group metadata in its constructor.
-     * @return
-     */
-    public ImmutableList<GroupMetaData> getGroupMetaData() {
-        return mGroups;
-    }
-
-    public boolean isSendToVoicemail() {
-        return mSendToVoicemail;
-    }
-
-    public String getCustomRingtone() {
-        return mCustomRingtone;
-    }
-
-    public boolean isUserProfile() {
-        return mIsUserProfile;
-    }
-
-    public boolean isMultipleRawContacts() {
-        return mRawContacts.size() > 1;
-    }
-
-    /**
-     * @return true if all the raw contacts are from SIM accounts, and false otherwise.
-     */
-    public boolean areAllRawContactsSimAccounts(final Context context) {
-        if (getRawContacts() == null) return false;
-
-        for (RawContact rawContact : getRawContacts()) {
-            final AccountType accountType = rawContact.getAccountType(context);
-            if (!(accountType instanceof SimAccountType)) return false;
-        }
-        return true;
-    }
-
-    @Override
-    public String toString() {
-        return "{requested=" + mRequestedUri + ",lookupkey=" + mLookupKey +
-                ",uri=" + mUri + ",status=" + mStatus + "}";
-    }
-
-    /* package */ void setRawContacts(ImmutableList<RawContact> rawContacts) {
-        mRawContacts = rawContacts;
-    }
-
-    /* package */ void setStatuses(ImmutableMap<Long, DataStatus> statuses) {
-        mStatuses = statuses;
-    }
-
-    /* package */ void setInvitableAccountTypes(ImmutableList<AccountType> accountTypes) {
-        mInvitableAccountTypes = accountTypes;
-    }
-
-    /* package */ void setGroupMetaData(ImmutableList<GroupMetaData> groups) {
-        mGroups = groups;
-    }
-}
diff --git a/src/com/android/contacts/common/model/ContactLoader.java b/src/com/android/contacts/common/model/ContactLoader.java
deleted file mode 100644
index 2cafc1f..0000000
--- a/src/com/android/contacts/common/model/ContactLoader.java
+++ /dev/null
@@ -1,1018 +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.common.model;
-
-import android.content.AsyncTaskLoader;
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.AssetFileDescriptor;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Directory;
-import android.provider.ContactsContract.Groups;
-import android.provider.ContactsContract.RawContacts;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.android.contacts.GroupMetaDataLoader;
-import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountTypeWithDataSet;
-import com.android.contacts.common.util.Constants;
-import com.android.contacts.common.util.ContactLoaderUtils;
-import com.android.contacts.common.util.DataStatus;
-import com.android.contacts.common.util.UriUtils;
-import com.android.contacts.common.model.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.PhoneDataItem;
-import com.android.contacts.common.model.dataitem.PhotoDataItem;
-import com.android.contacts.group.GroupMetaData;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-
-/**
- * Loads a single Contact and all it constituent RawContacts.
- */
-public class ContactLoader extends AsyncTaskLoader<Contact> {
-
-    private static final String TAG = ContactLoader.class.getSimpleName();
-
-    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-
-    /** A short-lived cache that can be set by {@link #cacheResult()} */
-    private static Contact sCachedResult = null;
-
-    private final Uri mRequestedUri;
-    private Uri mLookupUri;
-    private boolean mLoadGroupMetaData;
-    private boolean mLoadInvitableAccountTypes;
-    private boolean mPostViewNotification;
-    private boolean mComputeFormattedPhoneNumber;
-    private Contact mContact;
-    private ForceLoadContentObserver mObserver;
-    private final Set<Long> mNotifiedRawContactIds = Sets.newHashSet();
-
-    public ContactLoader(Context context, Uri lookupUri, boolean postViewNotification) {
-        this(context, lookupUri, false, false, postViewNotification, false);
-    }
-
-    public ContactLoader(Context context, Uri lookupUri, boolean postViewNotification,
-            boolean loadGroupMetaData) {
-        this(context, lookupUri, loadGroupMetaData, false, postViewNotification, false);
-    }
-
-    public ContactLoader(Context context, Uri lookupUri, boolean loadGroupMetaData,
-            boolean loadInvitableAccountTypes,
-            boolean postViewNotification, boolean computeFormattedPhoneNumber) {
-        super(context);
-        mLookupUri = lookupUri;
-        mRequestedUri = lookupUri;
-        mLoadGroupMetaData = loadGroupMetaData;
-        mLoadInvitableAccountTypes = loadInvitableAccountTypes;
-        mPostViewNotification = postViewNotification;
-        mComputeFormattedPhoneNumber = computeFormattedPhoneNumber;
-    }
-
-    /**
-     * Projection used for the query that loads all data for the entire contact (except for
-     * social stream items).
-     */
-    private static class ContactQuery {
-        static final String[] COLUMNS_INTERNAL = new String[] {
-                Contacts.NAME_RAW_CONTACT_ID,
-                Contacts.DISPLAY_NAME_SOURCE,
-                Contacts.LOOKUP_KEY,
-                Contacts.DISPLAY_NAME,
-                Contacts.DISPLAY_NAME_ALTERNATIVE,
-                Contacts.PHONETIC_NAME,
-                Contacts.PHOTO_ID,
-                Contacts.STARRED,
-                Contacts.CONTACT_PRESENCE,
-                Contacts.CONTACT_STATUS,
-                Contacts.CONTACT_STATUS_TIMESTAMP,
-                Contacts.CONTACT_STATUS_RES_PACKAGE,
-                Contacts.CONTACT_STATUS_LABEL,
-                Contacts.Entity.CONTACT_ID,
-                Contacts.Entity.RAW_CONTACT_ID,
-
-                RawContacts.ACCOUNT_NAME,
-                RawContacts.ACCOUNT_TYPE,
-                RawContacts.DATA_SET,
-                RawContacts.DIRTY,
-                RawContacts.VERSION,
-                RawContacts.SOURCE_ID,
-                RawContacts.SYNC1,
-                RawContacts.SYNC2,
-                RawContacts.SYNC3,
-                RawContacts.SYNC4,
-                RawContacts.DELETED,
-
-                Contacts.Entity.DATA_ID,
-                Data.DATA1,
-                Data.DATA2,
-                Data.DATA3,
-                Data.DATA4,
-                Data.DATA5,
-                Data.DATA6,
-                Data.DATA7,
-                Data.DATA8,
-                Data.DATA9,
-                Data.DATA10,
-                Data.DATA11,
-                Data.DATA12,
-                Data.DATA13,
-                Data.DATA14,
-                Data.DATA15,
-                Data.SYNC1,
-                Data.SYNC2,
-                Data.SYNC3,
-                Data.SYNC4,
-                Data.DATA_VERSION,
-                Data.IS_PRIMARY,
-                Data.IS_SUPER_PRIMARY,
-                Data.MIMETYPE,
-
-                GroupMembership.GROUP_SOURCE_ID,
-
-                Data.PRESENCE,
-                Data.CHAT_CAPABILITY,
-                Data.STATUS,
-                Data.STATUS_RES_PACKAGE,
-                Data.STATUS_ICON,
-                Data.STATUS_LABEL,
-                Data.STATUS_TIMESTAMP,
-
-                Contacts.PHOTO_URI,
-                Contacts.SEND_TO_VOICEMAIL,
-                Contacts.CUSTOM_RINGTONE,
-                Contacts.IS_USER_PROFILE,
-
-                Data.TIMES_USED,
-                Data.LAST_TIME_USED
-        };
-
-        static final String[] COLUMNS;
-
-        static {
-            List<String> projectionList = Lists.newArrayList(COLUMNS_INTERNAL);
-            if (CompatUtils.isMarshmallowCompatible()) {
-                projectionList.add(Data.CARRIER_PRESENCE);
-            }
-            COLUMNS = projectionList.toArray(new String[projectionList.size()]);
-        }
-
-        public static final int NAME_RAW_CONTACT_ID = 0;
-        public static final int DISPLAY_NAME_SOURCE = 1;
-        public static final int LOOKUP_KEY = 2;
-        public static final int DISPLAY_NAME = 3;
-        public static final int ALT_DISPLAY_NAME = 4;
-        public static final int PHONETIC_NAME = 5;
-        public static final int PHOTO_ID = 6;
-        public static final int STARRED = 7;
-        public static final int CONTACT_PRESENCE = 8;
-        public static final int CONTACT_STATUS = 9;
-        public static final int CONTACT_STATUS_TIMESTAMP = 10;
-        public static final int CONTACT_STATUS_RES_PACKAGE = 11;
-        public static final int CONTACT_STATUS_LABEL = 12;
-        public static final int CONTACT_ID = 13;
-        public static final int RAW_CONTACT_ID = 14;
-
-        public static final int ACCOUNT_NAME = 15;
-        public static final int ACCOUNT_TYPE = 16;
-        public static final int DATA_SET = 17;
-        public static final int DIRTY = 18;
-        public static final int VERSION = 19;
-        public static final int SOURCE_ID = 20;
-        public static final int SYNC1 = 21;
-        public static final int SYNC2 = 22;
-        public static final int SYNC3 = 23;
-        public static final int SYNC4 = 24;
-        public static final int DELETED = 25;
-
-        public static final int DATA_ID = 26;
-        public static final int DATA1 = 27;
-        public static final int DATA2 = 28;
-        public static final int DATA3 = 29;
-        public static final int DATA4 = 30;
-        public static final int DATA5 = 31;
-        public static final int DATA6 = 32;
-        public static final int DATA7 = 33;
-        public static final int DATA8 = 34;
-        public static final int DATA9 = 35;
-        public static final int DATA10 = 36;
-        public static final int DATA11 = 37;
-        public static final int DATA12 = 38;
-        public static final int DATA13 = 39;
-        public static final int DATA14 = 40;
-        public static final int DATA15 = 41;
-        public static final int DATA_SYNC1 = 42;
-        public static final int DATA_SYNC2 = 43;
-        public static final int DATA_SYNC3 = 44;
-        public static final int DATA_SYNC4 = 45;
-        public static final int DATA_VERSION = 46;
-        public static final int IS_PRIMARY = 47;
-        public static final int IS_SUPERPRIMARY = 48;
-        public static final int MIMETYPE = 49;
-
-        public static final int GROUP_SOURCE_ID = 50;
-
-        public static final int PRESENCE = 51;
-        public static final int CHAT_CAPABILITY = 52;
-        public static final int STATUS = 53;
-        public static final int STATUS_RES_PACKAGE = 54;
-        public static final int STATUS_ICON = 55;
-        public static final int STATUS_LABEL = 56;
-        public static final int STATUS_TIMESTAMP = 57;
-
-        public static final int PHOTO_URI = 58;
-        public static final int SEND_TO_VOICEMAIL = 59;
-        public static final int CUSTOM_RINGTONE = 60;
-        public static final int IS_USER_PROFILE = 61;
-
-        public static final int TIMES_USED = 62;
-        public static final int LAST_TIME_USED = 63;
-        public static final int CARRIER_PRESENCE = 64;
-    }
-
-    /**
-     * Projection used for the query that loads all data for the entire contact.
-     */
-    private static class DirectoryQuery {
-        static final String[] COLUMNS = new String[] {
-            Directory.DISPLAY_NAME,
-            Directory.PACKAGE_NAME,
-            Directory.TYPE_RESOURCE_ID,
-            Directory.ACCOUNT_TYPE,
-            Directory.ACCOUNT_NAME,
-            Directory.EXPORT_SUPPORT,
-        };
-
-        public static final int DISPLAY_NAME = 0;
-        public static final int PACKAGE_NAME = 1;
-        public static final int TYPE_RESOURCE_ID = 2;
-        public static final int ACCOUNT_TYPE = 3;
-        public static final int ACCOUNT_NAME = 4;
-        public static final int EXPORT_SUPPORT = 5;
-    }
-
-    public void setNewLookup(Uri lookupUri) {
-        mLookupUri = lookupUri;
-        mContact = null;
-    }
-
-    @Override
-    public Contact loadInBackground() {
-        try {
-            final ContentResolver resolver = getContext().getContentResolver();
-            final Uri uriCurrentFormat = ContactLoaderUtils.ensureIsContactUri(
-                    resolver, mLookupUri);
-            final Contact cachedResult = sCachedResult;
-            sCachedResult = null;
-            // Is this the same Uri as what we had before already? In that case, reuse that result
-            final Contact result;
-            final boolean resultIsCached;
-            if (cachedResult != null &&
-                    UriUtils.areEqual(cachedResult.getLookupUri(), mLookupUri)) {
-                // We are using a cached result from earlier. Below, we should make sure
-                // we are not doing any more network or disc accesses
-                result = new Contact(mRequestedUri, cachedResult);
-                resultIsCached = true;
-            } else {
-                if (uriCurrentFormat.getLastPathSegment().equals(Constants.LOOKUP_URI_ENCODED)) {
-                    result = loadEncodedContactEntity(uriCurrentFormat, mLookupUri);
-                } else {
-                    result = loadContactEntity(resolver, uriCurrentFormat);
-                }
-                resultIsCached = false;
-            }
-            if (result.isLoaded()) {
-                if (result.isDirectoryEntry()) {
-                    if (!resultIsCached) {
-                        loadDirectoryMetaData(result);
-                    }
-                } else if (mLoadGroupMetaData) {
-                    if (result.getGroupMetaData() == null) {
-                        loadGroupMetaData(result);
-                    }
-                }
-                if (mComputeFormattedPhoneNumber) {
-                    computeFormattedPhoneNumbers(result);
-                }
-                if (!resultIsCached) loadPhotoBinaryData(result);
-
-                // Note ME profile should never have "Add connection"
-                if (mLoadInvitableAccountTypes && result.getInvitableAccountTypes() == null) {
-                    loadInvitableAccountTypes(result);
-                }
-            }
-            return result;
-        } catch (Exception e) {
-            Log.e(TAG, "Error loading the contact: " + mLookupUri, e);
-            return Contact.forError(mRequestedUri, e);
-        }
-    }
-
-    /**
-     * Parses a {@link Contact} stored as a JSON string in a lookup URI.
-     *
-     * @param lookupUri The contact information to parse .
-     * @return The parsed {@code Contact} information.
-     * @throws JSONException
-     */
-    public static Contact parseEncodedContactEntity(Uri lookupUri)  {
-        try {
-            return loadEncodedContactEntity(lookupUri, lookupUri);
-        } catch (JSONException je) {
-            return null;
-        }
-    }
-
-    private static Contact loadEncodedContactEntity(Uri uri, Uri lookupUri) throws JSONException {
-        final String jsonString = uri.getEncodedFragment();
-        final JSONObject json = new JSONObject(jsonString);
-
-        final long directoryId =
-                Long.valueOf(uri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY));
-
-        final String displayName = json.optString(Contacts.DISPLAY_NAME);
-        final String altDisplayName = json.optString(
-                Contacts.DISPLAY_NAME_ALTERNATIVE, displayName);
-        final int displayNameSource = json.getInt(Contacts.DISPLAY_NAME_SOURCE);
-        final String photoUri = json.optString(Contacts.PHOTO_URI, null);
-        final Contact contact = new Contact(
-                uri, uri,
-                lookupUri,
-                directoryId,
-                null /* lookupKey */,
-                -1 /* id */,
-                -1 /* nameRawContactId */,
-                displayNameSource,
-                0 /* photoId */,
-                photoUri,
-                displayName,
-                altDisplayName,
-                null /* phoneticName */,
-                false /* starred */,
-                null /* presence */,
-                false /* sendToVoicemail */,
-                null /* customRingtone */,
-                false /* isUserProfile */);
-
-        contact.setStatuses(new ImmutableMap.Builder<Long, DataStatus>().build());
-
-        final String accountName = json.optString(RawContacts.ACCOUNT_NAME, null);
-        final String directoryName = uri.getQueryParameter(Directory.DISPLAY_NAME);
-        if (accountName != null) {
-            final String accountType = json.getString(RawContacts.ACCOUNT_TYPE);
-            contact.setDirectoryMetaData(directoryName, null, accountName, accountType,
-                    json.optInt(Directory.EXPORT_SUPPORT,
-                            Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY));
-        } else {
-            contact.setDirectoryMetaData(directoryName, null, null, null,
-                    json.optInt(Directory.EXPORT_SUPPORT, Directory.EXPORT_SUPPORT_ANY_ACCOUNT));
-        }
-
-        final ContentValues values = new ContentValues();
-        values.put(Data._ID, -1);
-        values.put(Data.CONTACT_ID, -1);
-        final RawContact rawContact = new RawContact(values);
-
-        final JSONObject items = json.getJSONObject(Contacts.CONTENT_ITEM_TYPE);
-        final Iterator keys = items.keys();
-        while (keys.hasNext()) {
-            final String mimetype = (String) keys.next();
-
-            // Could be single object or array.
-            final JSONObject obj = items.optJSONObject(mimetype);
-            if (obj == null) {
-                final JSONArray array = items.getJSONArray(mimetype);
-                for (int i = 0; i < array.length(); i++) {
-                    final JSONObject item = array.getJSONObject(i);
-                    processOneRecord(rawContact, item, mimetype);
-                }
-            } else {
-                processOneRecord(rawContact, obj, mimetype);
-            }
-        }
-
-        contact.setRawContacts(new ImmutableList.Builder<RawContact>()
-                .add(rawContact)
-                .build());
-        return contact;
-    }
-
-    private static void processOneRecord(RawContact rawContact, JSONObject item, String mimetype)
-            throws JSONException {
-        final ContentValues itemValues = new ContentValues();
-        itemValues.put(Data.MIMETYPE, mimetype);
-        itemValues.put(Data._ID, -1);
-
-        final Iterator iterator = item.keys();
-        while (iterator.hasNext()) {
-            String name = (String) iterator.next();
-            final Object o = item.get(name);
-            if (o instanceof String) {
-                itemValues.put(name, (String) o);
-            } else if (o instanceof Integer) {
-                itemValues.put(name, (Integer) o);
-            }
-        }
-        rawContact.addDataItemValues(itemValues);
-    }
-
-    private Contact loadContactEntity(ContentResolver resolver, Uri contactUri) {
-        Uri entityUri = Uri.withAppendedPath(contactUri, Contacts.Entity.CONTENT_DIRECTORY);
-        Cursor cursor = resolver.query(entityUri, ContactQuery.COLUMNS, null, null,
-                Contacts.Entity.RAW_CONTACT_ID);
-        if (cursor == null) {
-            Log.e(TAG, "No cursor returned in loadContactEntity");
-            return Contact.forNotFound(mRequestedUri);
-        }
-
-        try {
-            if (!cursor.moveToFirst()) {
-                cursor.close();
-                return Contact.forNotFound(mRequestedUri);
-            }
-
-            // Create the loaded contact starting with the header data.
-            Contact contact = loadContactHeaderData(cursor, contactUri);
-
-            // Fill in the raw contacts, which is wrapped in an Entity and any
-            // status data.  Initially, result has empty entities and statuses.
-            long currentRawContactId = -1;
-            RawContact rawContact = null;
-            ImmutableList.Builder<RawContact> rawContactsBuilder =
-                    new ImmutableList.Builder<RawContact>();
-            ImmutableMap.Builder<Long, DataStatus> statusesBuilder =
-                    new ImmutableMap.Builder<Long, DataStatus>();
-            do {
-                long rawContactId = cursor.getLong(ContactQuery.RAW_CONTACT_ID);
-                if (rawContactId != currentRawContactId) {
-                    // First time to see this raw contact id, so create a new entity, and
-                    // add it to the result's entities.
-                    currentRawContactId = rawContactId;
-                    rawContact = new RawContact(loadRawContactValues(cursor));
-                    rawContactsBuilder.add(rawContact);
-                }
-                if (!cursor.isNull(ContactQuery.DATA_ID)) {
-                    ContentValues data = loadDataValues(cursor);
-                    rawContact.addDataItemValues(data);
-
-                    if (!cursor.isNull(ContactQuery.PRESENCE)
-                            || !cursor.isNull(ContactQuery.STATUS)) {
-                        final DataStatus status = new DataStatus(cursor);
-                        final long dataId = cursor.getLong(ContactQuery.DATA_ID);
-                        statusesBuilder.put(dataId, status);
-                    }
-                }
-            } while (cursor.moveToNext());
-
-            contact.setRawContacts(rawContactsBuilder.build());
-            contact.setStatuses(statusesBuilder.build());
-
-            return contact;
-        } finally {
-            cursor.close();
-        }
-    }
-
-    /**
-     * Looks for the photo data item in entities. If found, a thumbnail will be stored. A larger
-     * photo will also be stored if available.
-     */
-    private void loadPhotoBinaryData(Contact contactData) {
-        loadThumbnailBinaryData(contactData);
-
-        // Try to load the large photo from a file using the photo URI.
-        String photoUri = contactData.getPhotoUri();
-        if (photoUri != null) {
-            try {
-                final InputStream inputStream;
-                final AssetFileDescriptor fd;
-                final Uri uri = Uri.parse(photoUri);
-                final String scheme = uri.getScheme();
-                if ("http".equals(scheme) || "https".equals(scheme)) {
-                    // Support HTTP urls that might come from extended directories
-                    inputStream = new URL(photoUri).openStream();
-                    fd = null;
-                } else {
-                    fd = getContext().getContentResolver().openAssetFileDescriptor(uri, "r");
-                    inputStream = fd.createInputStream();
-                }
-                byte[] buffer = new byte[16 * 1024];
-                ByteArrayOutputStream baos = new ByteArrayOutputStream();
-                try {
-                    int size;
-                    while ((size = inputStream.read(buffer)) != -1) {
-                        baos.write(buffer, 0, size);
-                    }
-                    contactData.setPhotoBinaryData(baos.toByteArray());
-                } finally {
-                    inputStream.close();
-                    if (fd != null) {
-                        fd.close();
-                    }
-                }
-                return;
-            } catch (IOException ioe) {
-                // Just fall back to the case below.
-            }
-        }
-
-        // If we couldn't load from a file, fall back to the data blob.
-        contactData.setPhotoBinaryData(contactData.getThumbnailPhotoBinaryData());
-    }
-
-    private void loadThumbnailBinaryData(Contact contactData) {
-        final long photoId = contactData.getPhotoId();
-        if (photoId <= 0) {
-            // No photo ID
-            return;
-        }
-
-        for (RawContact rawContact : contactData.getRawContacts()) {
-            for (DataItem dataItem : rawContact.getDataItems()) {
-                if (dataItem.getId() == photoId) {
-                    if (!(dataItem instanceof PhotoDataItem)) {
-                        break;
-                    }
-
-                    final PhotoDataItem photo = (PhotoDataItem) dataItem;
-                    contactData.setThumbnailPhotoBinaryData(photo.getPhoto());
-                    break;
-                }
-            }
-        }
-    }
-
-    /**
-     * Sets the "invitable" account types to {@link Contact#mInvitableAccountTypes}.
-     */
-    private void loadInvitableAccountTypes(Contact contactData) {
-        final ImmutableList.Builder<AccountType> resultListBuilder =
-                new ImmutableList.Builder<AccountType>();
-        if (!contactData.isUserProfile()) {
-            Map<AccountTypeWithDataSet, AccountType> invitables =
-                    AccountTypeManager.getInstance(getContext()).getUsableInvitableAccountTypes();
-            if (!invitables.isEmpty()) {
-                final Map<AccountTypeWithDataSet, AccountType> resultMap =
-                        Maps.newHashMap(invitables);
-
-                // Remove the ones that already have a raw contact in the current contact
-                for (RawContact rawContact : contactData.getRawContacts()) {
-                    final AccountTypeWithDataSet type = AccountTypeWithDataSet.get(
-                            rawContact.getAccountTypeString(),
-                            rawContact.getDataSet());
-                    resultMap.remove(type);
-                }
-
-                resultListBuilder.addAll(resultMap.values());
-            }
-        }
-
-        // Set to mInvitableAccountTypes
-        contactData.setInvitableAccountTypes(resultListBuilder.build());
-    }
-
-    /**
-     * Extracts Contact level columns from the cursor.
-     */
-    private Contact loadContactHeaderData(final Cursor cursor, Uri contactUri) {
-        final String directoryParameter =
-                contactUri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY);
-        final long directoryId = directoryParameter == null
-                ? Directory.DEFAULT
-                : Long.parseLong(directoryParameter);
-        final long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
-        final String lookupKey = cursor.getString(ContactQuery.LOOKUP_KEY);
-        final long nameRawContactId = cursor.getLong(ContactQuery.NAME_RAW_CONTACT_ID);
-        final int displayNameSource = cursor.getInt(ContactQuery.DISPLAY_NAME_SOURCE);
-        final String displayName = cursor.getString(ContactQuery.DISPLAY_NAME);
-        final String altDisplayName = cursor.getString(ContactQuery.ALT_DISPLAY_NAME);
-        final String phoneticName = cursor.getString(ContactQuery.PHONETIC_NAME);
-        final long photoId = cursor.getLong(ContactQuery.PHOTO_ID);
-        final String photoUri = cursor.getString(ContactQuery.PHOTO_URI);
-        final boolean starred = cursor.getInt(ContactQuery.STARRED) != 0;
-        final Integer presence = cursor.isNull(ContactQuery.CONTACT_PRESENCE)
-                ? null
-                : cursor.getInt(ContactQuery.CONTACT_PRESENCE);
-        final boolean sendToVoicemail = cursor.getInt(ContactQuery.SEND_TO_VOICEMAIL) == 1;
-        final String customRingtone = cursor.getString(ContactQuery.CUSTOM_RINGTONE);
-        final boolean isUserProfile = cursor.getInt(ContactQuery.IS_USER_PROFILE) == 1;
-
-        Uri lookupUri;
-        if (directoryId == Directory.DEFAULT || directoryId == Directory.LOCAL_INVISIBLE) {
-            lookupUri = ContentUris.withAppendedId(
-                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), contactId);
-        } else {
-            lookupUri = contactUri;
-        }
-
-        return new Contact(mRequestedUri, contactUri, lookupUri, directoryId, lookupKey,
-                contactId, nameRawContactId, displayNameSource, photoId, photoUri, displayName,
-                altDisplayName, phoneticName, starred, presence, sendToVoicemail,
-                customRingtone, isUserProfile);
-    }
-
-    /**
-     * Extracts RawContact level columns from the cursor.
-     */
-    private ContentValues loadRawContactValues(Cursor cursor) {
-        ContentValues cv = new ContentValues();
-
-        cv.put(RawContacts._ID, cursor.getLong(ContactQuery.RAW_CONTACT_ID));
-
-        cursorColumnToContentValues(cursor, cv, ContactQuery.ACCOUNT_NAME);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.ACCOUNT_TYPE);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SET);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DIRTY);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.VERSION);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.SOURCE_ID);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.SYNC1);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.SYNC2);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.SYNC3);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.SYNC4);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DELETED);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.CONTACT_ID);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.STARRED);
-
-        return cv;
-    }
-
-    /**
-     * Extracts Data level columns from the cursor.
-     */
-    private ContentValues loadDataValues(Cursor cursor) {
-        ContentValues cv = new ContentValues();
-
-        cv.put(Data._ID, cursor.getLong(ContactQuery.DATA_ID));
-
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA1);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA2);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA3);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA4);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA5);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA6);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA7);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA8);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA9);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA10);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA11);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA12);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA13);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA14);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA15);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SYNC1);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SYNC2);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SYNC3);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SYNC4);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_VERSION);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.IS_PRIMARY);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.IS_SUPERPRIMARY);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.MIMETYPE);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.GROUP_SOURCE_ID);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.CHAT_CAPABILITY);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.TIMES_USED);
-        cursorColumnToContentValues(cursor, cv, ContactQuery.LAST_TIME_USED);
-        if (CompatUtils.isMarshmallowCompatible()) {
-            cursorColumnToContentValues(cursor, cv, ContactQuery.CARRIER_PRESENCE);
-        }
-
-        return cv;
-    }
-
-    private void cursorColumnToContentValues(
-            Cursor cursor, ContentValues values, int index) {
-        switch (cursor.getType(index)) {
-            case Cursor.FIELD_TYPE_NULL:
-                // don't put anything in the content values
-                break;
-            case Cursor.FIELD_TYPE_INTEGER:
-                values.put(ContactQuery.COLUMNS[index], cursor.getLong(index));
-                break;
-            case Cursor.FIELD_TYPE_STRING:
-                values.put(ContactQuery.COLUMNS[index], cursor.getString(index));
-                break;
-            case Cursor.FIELD_TYPE_BLOB:
-                values.put(ContactQuery.COLUMNS[index], cursor.getBlob(index));
-                break;
-            default:
-                throw new IllegalStateException("Invalid or unhandled data type");
-        }
-    }
-
-    private void loadDirectoryMetaData(Contact result) {
-        long directoryId = result.getDirectoryId();
-
-        Cursor cursor = getContext().getContentResolver().query(
-                ContentUris.withAppendedId(Directory.CONTENT_URI, directoryId),
-                DirectoryQuery.COLUMNS, null, null, null);
-        if (cursor == null) {
-            return;
-        }
-        try {
-            if (cursor.moveToFirst()) {
-                final String displayName = cursor.getString(DirectoryQuery.DISPLAY_NAME);
-                final String packageName = cursor.getString(DirectoryQuery.PACKAGE_NAME);
-                final int typeResourceId = cursor.getInt(DirectoryQuery.TYPE_RESOURCE_ID);
-                final String accountType = cursor.getString(DirectoryQuery.ACCOUNT_TYPE);
-                final String accountName = cursor.getString(DirectoryQuery.ACCOUNT_NAME);
-                final int exportSupport = cursor.getInt(DirectoryQuery.EXPORT_SUPPORT);
-                String directoryType = null;
-                if (!TextUtils.isEmpty(packageName)) {
-                    PackageManager pm = getContext().getPackageManager();
-                    try {
-                        Resources resources = pm.getResourcesForApplication(packageName);
-                        directoryType = resources.getString(typeResourceId);
-                    } catch (NameNotFoundException e) {
-                        Log.w(TAG, "Contact directory resource not found: "
-                                + packageName + "." + typeResourceId);
-                    }
-                }
-
-                result.setDirectoryMetaData(
-                        displayName, directoryType, accountType, accountName, exportSupport);
-            }
-        } finally {
-            cursor.close();
-        }
-    }
-
-    static private class AccountKey {
-        private final String mAccountName;
-        private final String mAccountType;
-        private final String mDataSet;
-
-        public AccountKey(String accountName, String accountType, String dataSet) {
-            mAccountName = accountName;
-            mAccountType = accountType;
-            mDataSet = dataSet;
-        }
-
-        @Override
-        public int hashCode() {
-            return Objects.hash(mAccountName, mAccountType, mDataSet);
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (!(obj instanceof AccountKey)) {
-                return false;
-            }
-            final AccountKey other = (AccountKey) obj;
-            return Objects.equals(mAccountName, other.mAccountName)
-                && Objects.equals(mAccountType, other.mAccountType)
-                && Objects.equals(mDataSet, other.mDataSet);
-        }
-    }
-
-    /**
-     * Loads groups meta-data for all groups associated with all constituent raw contacts'
-     * accounts.
-     */
-    private void loadGroupMetaData(Contact result) {
-        StringBuilder selection = new StringBuilder();
-        ArrayList<String> selectionArgs = new ArrayList<String>();
-        final HashSet<AccountKey> accountsSeen = new HashSet<>();
-        for (RawContact rawContact : result.getRawContacts()) {
-            final String accountName = rawContact.getAccountName();
-            final String accountType = rawContact.getAccountTypeString();
-            final String dataSet = rawContact.getDataSet();
-            final AccountKey accountKey = new AccountKey(accountName, accountType, dataSet);
-            if (accountName != null && accountType != null &&
-                    !accountsSeen.contains(accountKey)) {
-                accountsSeen.add(accountKey);
-                if (selection.length() != 0) {
-                    selection.append(" OR ");
-                }
-                selection.append(
-                        "(" + Groups.ACCOUNT_NAME + "=? AND " + Groups.ACCOUNT_TYPE + "=?");
-                selectionArgs.add(accountName);
-                selectionArgs.add(accountType);
-
-                selection.append(" AND " + Groups.DELETED + "=0");
-
-                if (dataSet != null) {
-                    selection.append(" AND " + Groups.DATA_SET + "=?");
-                    selectionArgs.add(dataSet);
-                } else {
-                    selection.append(" AND " + Groups.DATA_SET + " IS NULL");
-                }
-                selection.append(")");
-            }
-        }
-        final ImmutableList.Builder<GroupMetaData> groupListBuilder = new ImmutableList.Builder<>();
-        final Cursor cursor = getContext().getContentResolver().query(Groups.CONTENT_URI,
-                GroupMetaDataLoader.COLUMNS, selection.toString(),
-                selectionArgs.toArray(new String[0]), null);
-        if (cursor != null) {
-            try {
-                while (cursor.moveToNext()) {
-                    groupListBuilder.add(new GroupMetaData(getContext(), cursor));
-                }
-            } finally {
-                cursor.close();
-            }
-        }
-        result.setGroupMetaData(groupListBuilder.build());
-    }
-
-    /**
-     * Iterates over all data items that represent phone numbers are tries to calculate a formatted
-     * number. This function can safely be called several times as no unformatted data is
-     * overwritten
-     */
-    private void computeFormattedPhoneNumbers(Contact contactData) {
-        final String countryIso = GeoUtil.getCurrentCountryIso(getContext());
-        final ImmutableList<RawContact> rawContacts = contactData.getRawContacts();
-        final int rawContactCount = rawContacts.size();
-        for (int rawContactIndex = 0; rawContactIndex < rawContactCount; rawContactIndex++) {
-            final RawContact rawContact = rawContacts.get(rawContactIndex);
-            final List<DataItem> dataItems = rawContact.getDataItems();
-            final int dataCount = dataItems.size();
-            for (int dataIndex = 0; dataIndex < dataCount; dataIndex++) {
-                final DataItem dataItem = dataItems.get(dataIndex);
-                if (dataItem instanceof PhoneDataItem) {
-                    final PhoneDataItem phoneDataItem = (PhoneDataItem) dataItem;
-                    phoneDataItem.computeFormattedPhoneNumber(countryIso);
-                }
-            }
-        }
-    }
-
-    @Override
-    public void deliverResult(Contact result) {
-        unregisterObserver();
-
-        // The creator isn't interested in any further updates
-        if (isReset() || result == null) {
-            return;
-        }
-
-        mContact = result;
-
-        if (result.isLoaded()) {
-            mLookupUri = result.getLookupUri();
-
-            if (!result.isDirectoryEntry()) {
-                Log.i(TAG, "Registering content observer for " + mLookupUri);
-                if (mObserver == null) {
-                    mObserver = new ForceLoadContentObserver();
-                }
-                getContext().getContentResolver().registerContentObserver(
-                        mLookupUri, true, mObserver);
-            }
-
-            if (mPostViewNotification) {
-                // inform the source of the data that this contact is being looked at
-                postViewNotificationToSyncAdapter();
-            }
-        }
-
-        super.deliverResult(mContact);
-    }
-
-    /**
-     * Posts a message to the contributing sync adapters that have opted-in, notifying them
-     * that the contact has just been loaded
-     */
-    private void postViewNotificationToSyncAdapter() {
-        Context context = getContext();
-        for (RawContact rawContact : mContact.getRawContacts()) {
-            final long rawContactId = rawContact.getId();
-            if (mNotifiedRawContactIds.contains(rawContactId)) {
-                continue; // Already notified for this raw contact.
-            }
-            mNotifiedRawContactIds.add(rawContactId);
-            final AccountType accountType = rawContact.getAccountType(context);
-            final String serviceName = accountType.getViewContactNotifyServiceClassName();
-            final String servicePackageName = accountType.getViewContactNotifyServicePackageName();
-            if (!TextUtils.isEmpty(serviceName) && !TextUtils.isEmpty(servicePackageName)) {
-                final Uri uri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
-                final Intent intent = new Intent();
-                intent.setClassName(servicePackageName, serviceName);
-                intent.setAction(Intent.ACTION_VIEW);
-                intent.setDataAndType(uri, RawContacts.CONTENT_ITEM_TYPE);
-                try {
-                    context.startService(intent);
-                } catch (Exception e) {
-                    Log.e(TAG, "Error sending message to source-app", e);
-                }
-            }
-        }
-    }
-
-    private void unregisterObserver() {
-        if (mObserver != null) {
-            getContext().getContentResolver().unregisterContentObserver(mObserver);
-            mObserver = null;
-        }
-    }
-
-    /**
-     * Fully upgrades this ContactLoader to one with all lists fully loaded. When done, the
-     * new result will be delivered
-     */
-    public void upgradeToFullContact() {
-        // Everything requested already? Nothing to do, so let's bail out
-        if (mLoadGroupMetaData && mLoadInvitableAccountTypes
-                && mPostViewNotification && mComputeFormattedPhoneNumber) return;
-
-        mLoadGroupMetaData = true;
-        mLoadInvitableAccountTypes = true;
-        mPostViewNotification = true;
-        mComputeFormattedPhoneNumber = true;
-
-        // Cache the current result, so that we only load the "missing" parts of the contact.
-        cacheResult();
-
-        // Our load parameters have changed, so let's pretend the data has changed. Its the same
-        // thing, essentially.
-        onContentChanged();
-    }
-
-    public Uri getLookupUri() {
-        return mLookupUri;
-    }
-
-    @Override
-    protected void onStartLoading() {
-        if (mContact != null) {
-            deliverResult(mContact);
-        }
-
-        if (takeContentChanged() || mContact == null) {
-            forceLoad();
-        }
-    }
-
-    @Override
-    protected void onStopLoading() {
-        cancelLoad();
-    }
-
-    @Override
-    protected void onReset() {
-        super.onReset();
-        cancelLoad();
-        unregisterObserver();
-        mContact = null;
-    }
-
-    /**
-     * Caches the result, which is useful when we switch from activity to activity, using the same
-     * contact. If the next load is for a different contact, the cached result will be dropped
-     */
-    public void cacheResult() {
-        if (mContact == null || !mContact.isLoaded()) {
-            sCachedResult = null;
-        } else {
-            sCachedResult = mContact;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/model/Cp2DeviceLocalAccountLocator.java b/src/com/android/contacts/common/model/Cp2DeviceLocalAccountLocator.java
deleted file mode 100644
index 64f7c03..0000000
--- a/src/com/android/contacts/common/model/Cp2DeviceLocalAccountLocator.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.model;
-
-import android.accounts.AccountManager;
-import android.content.ContentResolver;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.ContactsContract;
-import android.support.annotation.VisibleForTesting;
-
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.DeviceLocalAccountTypeFactory;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Attempts to create accounts for "Device" contacts by querying
- * CP2 for records with {@link android.provider.ContactsContract.RawContacts#ACCOUNT_TYPE} columns
- * that do not exist for any account returned by {@link AccountManager#getAccounts()}
- *
- * This class should be used from a background thread since it does DB queries
- */
-public class Cp2DeviceLocalAccountLocator extends DeviceLocalAccountLocator {
-
-    // Note this class is assuming ACCOUNT_NAME and ACCOUNT_TYPE have same values in
-    // RawContacts, Groups, and Settings. This assumption simplifies the code somewhat and it
-    // is true right now and unlikely to ever change.
-    @VisibleForTesting
-    static String[] PROJECTION = new String[] {
-            ContactsContract.RawContacts.ACCOUNT_NAME, ContactsContract.RawContacts.ACCOUNT_TYPE,
-            ContactsContract.RawContacts.DATA_SET
-    };
-
-    private static final int COL_NAME = 0;
-    private static final int COL_TYPE = 1;
-    private static final int COL_DATA_SET = 2;
-
-    private final ContentResolver mResolver;
-    private final DeviceLocalAccountTypeFactory mAccountTypeFactory;
-
-    private final String mSelection;
-    private final String[] mSelectionArgs;
-
-    public Cp2DeviceLocalAccountLocator(ContentResolver contentResolver,
-            DeviceLocalAccountTypeFactory factory,
-            List<AccountWithDataSet> knownAccounts) {
-        mResolver = contentResolver;
-        mAccountTypeFactory = factory;
-
-        final Set<String> knownAccountTypes = new HashSet<>();
-        for (AccountWithDataSet account : knownAccounts) {
-            knownAccountTypes.add(account.type);
-        }
-        mSelection = getSelection(knownAccountTypes);
-        mSelectionArgs = getSelectionArgs(knownAccountTypes);
-    }
-
-    @Override
-    public List<AccountWithDataSet> getDeviceLocalAccounts() {
-
-        final Set<AccountWithDataSet> localAccounts = new HashSet<>();
-
-        // Many device accounts have default groups associated with them.
-        addAccountsFromQuery(ContactsContract.Groups.CONTENT_URI, localAccounts);
-        addAccountsFromQuery(ContactsContract.Settings.CONTENT_URI, localAccounts);
-        addAccountsFromQuery(ContactsContract.RawContacts.CONTENT_URI, localAccounts);
-
-        return new ArrayList<>(localAccounts);
-    }
-
-    private void addAccountsFromQuery(Uri uri, Set<AccountWithDataSet> accounts) {
-        final Cursor cursor = mResolver.query(uri, PROJECTION, mSelection, mSelectionArgs, null);
-
-        if (cursor == null) return;
-
-        try {
-            addAccountsFromCursor(cursor, accounts);
-        } finally {
-            cursor.close();
-        }
-    }
-
-    private void addAccountsFromCursor(Cursor cursor, Set<AccountWithDataSet> accounts) {
-        while (cursor.moveToNext()) {
-            final String name = cursor.getString(COL_NAME);
-            final String type = cursor.getString(COL_TYPE);
-            final String dataSet = cursor.getString(COL_DATA_SET);
-
-            if (DeviceLocalAccountTypeFactory.Util.isLocalAccountType(
-                    mAccountTypeFactory, type)) {
-                accounts.add(new AccountWithDataSet(name, type, dataSet));
-            }
-        }
-    }
-
-    @VisibleForTesting
-    public String getSelection() {
-        return mSelection;
-    }
-
-    @VisibleForTesting
-    public String[] getSelectionArgs() {
-        return mSelectionArgs;
-    }
-
-    private static String getSelection(Set<String> knownAccountTypes) {
-        final StringBuilder sb = new StringBuilder()
-                .append(ContactsContract.RawContacts.ACCOUNT_TYPE).append(" IS NULL");
-        if (knownAccountTypes.isEmpty()) {
-            return sb.toString();
-        }
-        sb.append(" OR ").append(ContactsContract.RawContacts.ACCOUNT_TYPE).append(" NOT IN (");
-        for (String ignored : knownAccountTypes) {
-            sb.append("?,");
-        }
-        // Remove trailing ','
-        sb.deleteCharAt(sb.length() - 1).append(')');
-        return sb.toString();
-    }
-
-    private static String[] getSelectionArgs(Set<String> knownAccountTypes) {
-        if (knownAccountTypes.isEmpty()) return null;
-
-        return knownAccountTypes.toArray(new String[knownAccountTypes.size()]);
-    }
-}
diff --git a/src/com/android/contacts/common/model/DeviceLocalAccountLocator.java b/src/com/android/contacts/common/model/DeviceLocalAccountLocator.java
deleted file mode 100644
index 17f5f5e..0000000
--- a/src/com/android/contacts/common/model/DeviceLocalAccountLocator.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.model;
-
-import android.content.Context;
-
-import com.android.contacts.common.Experiments;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contactsbind.ObjectFactory;
-import com.android.contactsbind.experiments.Flags;
-
-import java.util.Collections;
-import java.util.List;
-
-/**
- * Attempts to detect accounts for device contacts
- */
-public abstract class DeviceLocalAccountLocator {
-
-    /**
-     * Returns a list of device local accounts
-     */
-    public abstract List<AccountWithDataSet> getDeviceLocalAccounts();
-
-    // This works on Nexus and AOSP because the local device account is the null account but most
-    // OEMs have a special account name and type for their device account.
-    public static final DeviceLocalAccountLocator NULL_ONLY = new DeviceLocalAccountLocator() {
-        @Override
-        public List<AccountWithDataSet> getDeviceLocalAccounts() {
-            return Collections.singletonList(AccountWithDataSet.getNullAccount());
-        }
-    };
-
-    public static DeviceLocalAccountLocator create(Context context,
-            List<AccountWithDataSet> knownAccounts) {
-        if (Flags.getInstance().getBoolean(Experiments.OEM_CP2_DEVICE_ACCOUNT_DETECTION_ENABLED)) {
-            return new Cp2DeviceLocalAccountLocator(context.getContentResolver(),
-                    ObjectFactory.getDeviceLocalAccountTypeFactory(context), knownAccounts);
-        }
-        return NULL_ONLY;
-    }
-}
diff --git a/src/com/android/contacts/common/model/RawContact.java b/src/com/android/contacts/common/model/RawContact.java
deleted file mode 100644
index 3d8db85..0000000
--- a/src/com/android/contacts/common/model/RawContact.java
+++ /dev/null
@@ -1,368 +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.common.model;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.Entity;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.RawContacts;
-
-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.model.dataitem.DataItem;
-import com.google.common.base.Objects;
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * RawContact represents a single raw contact in the raw contacts database.
- * It has specialized getters/setters for raw contact
- * items, and also contains a collection of DataItem objects.  A RawContact contains the information
- * from a single account.
- *
- * This allows RawContact objects to be thought of as a class with raw contact
- * fields (like account type, name, data set, sync state, etc.) and a list of
- * DataItem objects that represent contact information elements (like phone
- * numbers, email, address, etc.).
- */
-final public class RawContact implements Parcelable {
-
-    private AccountTypeManager mAccountTypeManager;
-    private final ContentValues mValues;
-    private final ArrayList<NamedDataItem> mDataItems;
-
-    final public static class NamedDataItem implements Parcelable {
-        public final Uri mUri;
-
-        // This use to be a DataItem. DataItem creation is now delayed until the point of request
-        // since there is no benefit to storing them here due to the multiple inheritance.
-        // Eventually instanceof still has to be used anyways to determine which sub-class of
-        // DataItem it is. And having parent DataItem's here makes it very difficult to serialize or
-        // parcelable.
-        //
-        // Instead of having a common DataItem super class, we should refactor this to be a generic
-        // Object where the object is a concrete class that no longer relies on ContentValues.
-        // (this will also make the classes easier to use).
-        // Since instanceof is used later anyways, having a list of Objects won't hurt and is no
-        // worse than having a DataItem.
-        public final ContentValues mContentValues;
-
-        public NamedDataItem(Uri uri, ContentValues values) {
-            this.mUri = uri;
-            this.mContentValues = values;
-        }
-
-        public NamedDataItem(Parcel parcel) {
-            this.mUri = parcel.readParcelable(Uri.class.getClassLoader());
-            this.mContentValues = parcel.readParcelable(ContentValues.class.getClassLoader());
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel parcel, int i) {
-            parcel.writeParcelable(mUri, i);
-            parcel.writeParcelable(mContentValues, i);
-        }
-
-        public static final Parcelable.Creator<NamedDataItem> CREATOR
-                = new Parcelable.Creator<NamedDataItem>() {
-
-            @Override
-            public NamedDataItem createFromParcel(Parcel parcel) {
-                return new NamedDataItem(parcel);
-            }
-
-            @Override
-            public NamedDataItem[] newArray(int i) {
-                return new NamedDataItem[i];
-            }
-        };
-
-        @Override
-        public int hashCode() {
-            return Objects.hashCode(mUri, mContentValues);
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (obj == null) return false;
-            if (getClass() != obj.getClass()) return false;
-
-            final NamedDataItem other = (NamedDataItem) obj;
-            return Objects.equal(mUri, other.mUri) &&
-                    Objects.equal(mContentValues, other.mContentValues);
-        }
-    }
-
-    public static RawContact createFrom(Entity entity) {
-        final ContentValues values = entity.getEntityValues();
-        final ArrayList<Entity.NamedContentValues> subValues = entity.getSubValues();
-
-        RawContact rawContact = new RawContact(values);
-        for (Entity.NamedContentValues subValue : subValues) {
-            rawContact.addNamedDataItemValues(subValue.uri, subValue.values);
-        }
-        return rawContact;
-    }
-
-    /**
-     * A RawContact object can be created with or without a context.
-     */
-    public RawContact() {
-        this(new ContentValues());
-    }
-
-    public RawContact(ContentValues values) {
-        mValues = values;
-        mDataItems = new ArrayList<NamedDataItem>();
-    }
-
-    /**
-     * Constructor for the parcelable.
-     *
-     * @param parcel The parcel to de-serialize from.
-     */
-    private RawContact(Parcel parcel) {
-        mValues = parcel.readParcelable(ContentValues.class.getClassLoader());
-        mDataItems = Lists.newArrayList();
-        parcel.readTypedList(mDataItems, NamedDataItem.CREATOR);
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel parcel, int i) {
-        parcel.writeParcelable(mValues, i);
-        parcel.writeTypedList(mDataItems);
-    }
-
-    /**
-     * Create for building the parcelable.
-     */
-    public static final Parcelable.Creator<RawContact> CREATOR
-            = new Parcelable.Creator<RawContact>() {
-
-        @Override
-        public RawContact createFromParcel(Parcel parcel) {
-            return new RawContact(parcel);
-        }
-
-        @Override
-        public RawContact[] newArray(int i) {
-            return new RawContact[i];
-        }
-    };
-
-    public AccountTypeManager getAccountTypeManager(Context context) {
-        if (mAccountTypeManager == null) {
-            mAccountTypeManager = AccountTypeManager.getInstance(context);
-        }
-        return mAccountTypeManager;
-    }
-
-    public ContentValues getValues() {
-        return mValues;
-    }
-
-    /**
-     * Returns the id of the raw contact.
-     */
-    public Long getId() {
-        return getValues().getAsLong(RawContacts._ID);
-    }
-
-    /**
-     * Returns the account name of the raw contact.
-     */
-    public String getAccountName() {
-        return getValues().getAsString(RawContacts.ACCOUNT_NAME);
-    }
-
-    /**
-     * Returns the account type of the raw contact.
-     */
-    public String getAccountTypeString() {
-        return getValues().getAsString(RawContacts.ACCOUNT_TYPE);
-    }
-
-    /**
-     * Returns the data set of the raw contact.
-     */
-    public String getDataSet() {
-        return getValues().getAsString(RawContacts.DATA_SET);
-    }
-
-    public boolean isDirty() {
-        return getValues().getAsBoolean(RawContacts.DIRTY);
-    }
-
-    public String getSourceId() {
-        return getValues().getAsString(RawContacts.SOURCE_ID);
-    }
-
-    public String getSync1() {
-        return getValues().getAsString(RawContacts.SYNC1);
-    }
-
-    public String getSync2() {
-        return getValues().getAsString(RawContacts.SYNC2);
-    }
-
-    public String getSync3() {
-        return getValues().getAsString(RawContacts.SYNC3);
-    }
-
-    public String getSync4() {
-        return getValues().getAsString(RawContacts.SYNC4);
-    }
-
-    public boolean isDeleted() {
-        return getValues().getAsBoolean(RawContacts.DELETED);
-    }
-
-    public long getContactId() {
-        return getValues().getAsLong(Contacts.Entity.CONTACT_ID);
-    }
-
-    public boolean isStarred() {
-        return getValues().getAsBoolean(Contacts.STARRED);
-    }
-
-    public AccountType getAccountType(Context context) {
-        return getAccountTypeManager(context).getAccountType(getAccountTypeString(), getDataSet());
-    }
-
-    /**
-     * Sets the account name, account type, and data set strings.
-     * Valid combinations for account-name, account-type, data-set
-     * 1) null, null, null (local account)
-     * 2) non-null, non-null, null (valid account without data-set)
-     * 3) non-null, non-null, non-null (valid account with data-set)
-     */
-    private void setAccount(String accountName, String accountType, String dataSet) {
-        final ContentValues values = getValues();
-        if (accountName == null) {
-            if (accountType == null && dataSet == null) {
-                // This is a local account
-                values.putNull(RawContacts.ACCOUNT_NAME);
-                values.putNull(RawContacts.ACCOUNT_TYPE);
-                values.putNull(RawContacts.DATA_SET);
-                return;
-            }
-        } else {
-            if (accountType != null) {
-                // This is a valid account, either with or without a dataSet.
-                values.put(RawContacts.ACCOUNT_NAME, accountName);
-                values.put(RawContacts.ACCOUNT_TYPE, accountType);
-                if (dataSet == null) {
-                    values.putNull(RawContacts.DATA_SET);
-                } else {
-                    values.put(RawContacts.DATA_SET, dataSet);
-                }
-                return;
-            }
-        }
-        throw new IllegalArgumentException(
-                "Not a valid combination of account name, type, and data set.");
-    }
-
-    public void setAccount(AccountWithDataSet accountWithDataSet) {
-        if (accountWithDataSet != null) {
-            setAccount(accountWithDataSet.name, accountWithDataSet.type,
-                    accountWithDataSet.dataSet);
-        } else {
-            setAccount(null, null, null);
-        }
-    }
-
-    public void setAccountToLocal() {
-        setAccount(null, null, null);
-    }
-
-    /**
-     * Creates and inserts a DataItem object that wraps the content values, and returns it.
-     */
-    public void addDataItemValues(ContentValues values) {
-        addNamedDataItemValues(Data.CONTENT_URI, values);
-    }
-
-    public NamedDataItem addNamedDataItemValues(Uri uri, ContentValues values) {
-        final NamedDataItem namedItem = new NamedDataItem(uri, values);
-        mDataItems.add(namedItem);
-        return namedItem;
-    }
-
-    public ArrayList<ContentValues> getContentValues() {
-        final ArrayList<ContentValues> list = Lists.newArrayListWithCapacity(mDataItems.size());
-        for (NamedDataItem dataItem : mDataItems) {
-            if (Data.CONTENT_URI.equals(dataItem.mUri)) {
-                list.add(dataItem.mContentValues);
-            }
-        }
-        return list;
-    }
-
-    public List<DataItem> getDataItems() {
-        final ArrayList<DataItem> list = Lists.newArrayListWithCapacity(mDataItems.size());
-        for (NamedDataItem dataItem : mDataItems) {
-            if (Data.CONTENT_URI.equals(dataItem.mUri)) {
-                list.add(DataItem.createFrom(dataItem.mContentValues));
-            }
-        }
-        return list;
-    }
-
-    public String toString() {
-        final StringBuilder sb = new StringBuilder();
-        sb.append("RawContact: ").append(mValues);
-        for (RawContact.NamedDataItem namedDataItem : mDataItems) {
-            sb.append("\n  ").append(namedDataItem.mUri);
-            sb.append("\n  -> ").append(namedDataItem.mContentValues);
-        }
-        return sb.toString();
-    }
-
-    @Override
-    public int hashCode() {
-        return Objects.hashCode(mValues, mDataItems);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (obj == null) return false;
-        if (getClass() != obj.getClass()) return false;
-
-        RawContact other = (RawContact) obj;
-        return Objects.equal(mValues, other.mValues) &&
-                Objects.equal(mDataItems, other.mDataItems);
-    }
-}
diff --git a/src/com/android/contacts/common/model/RawContactDelta.java b/src/com/android/contacts/common/model/RawContactDelta.java
deleted file mode 100644
index afa4a13..0000000
--- a/src/com/android/contacts/common/model/RawContactDelta.java
+++ /dev/null
@@ -1,660 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model;
-
-import android.content.ContentProviderOperation;
-import android.content.ContentProviderOperation.Builder;
-import android.content.ContentValues;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.BaseColumns;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Profile;
-import android.provider.ContactsContract.RawContacts;
-import android.util.Log;
-
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-/**
- * Contains a {@link RawContact} and records any modifications separately so the
- * original {@link RawContact} can be swapped out with a newer version and the
- * changes still cleanly applied.
- * <p>
- * One benefit of this approach is that we can build changes entirely on an
- * empty {@link RawContact}, which then becomes an insert {@link RawContacts} case.
- * <p>
- * When applying modifications over an {@link RawContact}, we try finding the
- * original {@link Data#_ID} rows where the modifications took place. If those
- * rows are missing from the new {@link RawContact}, we know the original data must
- * be deleted, but to preserve the user modifications we treat as an insert.
- */
-public class RawContactDelta implements Parcelable {
-    // TODO: optimize by using contentvalues pool, since we allocate so many of them
-
-    private static final String TAG = "EntityDelta";
-    private static final boolean LOGV = false;
-
-    /**
-     * Direct values from {@link Entity#getEntityValues()}.
-     */
-    private ValuesDelta mValues;
-
-    /**
-     * URI used for contacts queries, by default it is set to query raw contacts.
-     * It can be set to query the profile's raw contact(s).
-     */
-    private Uri mContactsQueryUri = RawContacts.CONTENT_URI;
-
-    /**
-     * Internal map of children values from {@link Entity#getSubValues()}, which
-     * we store here sorted into {@link Data#MIMETYPE} bins.
-     */
-    private final HashMap<String, ArrayList<ValuesDelta>> mEntries = Maps.newHashMap();
-
-    public RawContactDelta() {
-    }
-
-    public RawContactDelta(ValuesDelta values) {
-        mValues = values;
-    }
-
-    /**
-     * Build an {@link RawContactDelta} using the given {@link RawContact} as a
-     * starting point; the "before" snapshot.
-     */
-    public static RawContactDelta fromBefore(RawContact before) {
-        final RawContactDelta rawContactDelta = new RawContactDelta();
-        rawContactDelta.mValues = ValuesDelta.fromBefore(before.getValues());
-        rawContactDelta.mValues.setIdColumn(RawContacts._ID);
-        for (final ContentValues values : before.getContentValues()) {
-            rawContactDelta.addEntry(ValuesDelta.fromBefore(values));
-        }
-        return rawContactDelta;
-    }
-
-    /**
-     * Merge the "after" values from the given {@link RawContactDelta} onto the
-     * "before" state represented by this {@link RawContactDelta}, discarding any
-     * existing "after" states. This is typically used when re-parenting changes
-     * onto an updated {@link Entity}.
-     */
-    public static RawContactDelta mergeAfter(RawContactDelta local, RawContactDelta remote) {
-        // Bail early if trying to merge delete with missing local
-        final ValuesDelta remoteValues = remote.mValues;
-        if (local == null && (remoteValues.isDelete() || remoteValues.isTransient())) return null;
-
-        // Create local version if none exists yet
-        if (local == null) local = new RawContactDelta();
-
-        if (LOGV) {
-            final Long localVersion = (local.mValues == null) ? null : local.mValues
-                    .getAsLong(RawContacts.VERSION);
-            final Long remoteVersion = remote.mValues.getAsLong(RawContacts.VERSION);
-            Log.d(TAG, "Re-parenting from original version " + remoteVersion + " to "
-                    + localVersion);
-        }
-
-        // Create values if needed, and merge "after" changes
-        local.mValues = ValuesDelta.mergeAfter(local.mValues, remote.mValues);
-
-        // Find matching local entry for each remote values, or create
-        for (ArrayList<ValuesDelta> mimeEntries : remote.mEntries.values()) {
-            for (ValuesDelta remoteEntry : mimeEntries) {
-                final Long childId = remoteEntry.getId();
-
-                // Find or create local match and merge
-                final ValuesDelta localEntry = local.getEntry(childId);
-                final ValuesDelta merged = ValuesDelta.mergeAfter(localEntry, remoteEntry);
-
-                if (localEntry == null && merged != null) {
-                    // No local entry before, so insert
-                    local.addEntry(merged);
-                }
-            }
-        }
-
-        return local;
-    }
-
-    public ValuesDelta getValues() {
-        return mValues;
-    }
-
-    public boolean isContactInsert() {
-        return mValues.isInsert();
-    }
-
-    /**
-     * Get the {@link ValuesDelta} child marked as {@link Data#IS_PRIMARY},
-     * which may return null when no entry exists.
-     */
-    public ValuesDelta getPrimaryEntry(String mimeType) {
-        final ArrayList<ValuesDelta> mimeEntries = getMimeEntries(mimeType, false);
-        if (mimeEntries == null) return null;
-
-        for (ValuesDelta entry : mimeEntries) {
-            if (entry.isPrimary()) {
-                return entry;
-            }
-        }
-
-        // When no direct primary, return something
-        return mimeEntries.size() > 0 ? mimeEntries.get(0) : null;
-    }
-
-    /**
-     * calls {@link #getSuperPrimaryEntry(String, boolean)} with true
-     * @see #getSuperPrimaryEntry(String, boolean)
-     */
-    public ValuesDelta getSuperPrimaryEntry(String mimeType) {
-        return getSuperPrimaryEntry(mimeType, true);
-    }
-
-    /**
-     * Returns the super-primary entry for the given mime type
-     * @param forceSelection if true, will try to return some value even if a super-primary
-     *     doesn't exist (may be a primary, or just a random item
-     * @return
-     */
-    public ValuesDelta getSuperPrimaryEntry(String mimeType, boolean forceSelection) {
-        final ArrayList<ValuesDelta> mimeEntries = getMimeEntries(mimeType, false);
-        if (mimeEntries == null) return null;
-
-        ValuesDelta primary = null;
-        for (ValuesDelta entry : mimeEntries) {
-            if (entry.isSuperPrimary()) {
-                return entry;
-            } else if (entry.isPrimary()) {
-                primary = entry;
-            }
-        }
-
-        if (!forceSelection) {
-            return null;
-        }
-
-        // When no direct super primary, return something
-        if (primary != null) {
-            return primary;
-        }
-        return mimeEntries.size() > 0 ? mimeEntries.get(0) : null;
-    }
-
-    /**
-     * Return the AccountType that this raw-contact belongs to.
-     */
-    public AccountType getRawContactAccountType(Context context) {
-        ContentValues entityValues = getValues().getCompleteValues();
-        String type = entityValues.getAsString(RawContacts.ACCOUNT_TYPE);
-        String dataSet = entityValues.getAsString(RawContacts.DATA_SET);
-        return AccountTypeManager.getInstance(context).getAccountType(type, dataSet);
-    }
-
-    public Long getRawContactId() {
-        return getValues().getAsLong(RawContacts._ID);
-    }
-
-    public String getAccountName() {
-        return getValues().getAsString(RawContacts.ACCOUNT_NAME);
-    }
-
-    public String getAccountType() {
-        return getValues().getAsString(RawContacts.ACCOUNT_TYPE);
-    }
-
-    public String getDataSet() {
-        return getValues().getAsString(RawContacts.DATA_SET);
-    }
-
-    public AccountType getAccountType(AccountTypeManager manager) {
-        return manager.getAccountType(getAccountType(), getDataSet());
-    }
-
-    public AccountWithDataSet getAccountWithDataSet() {
-        return new AccountWithDataSet(getAccountName(), getAccountType(), getDataSet());
-    }
-
-    public boolean isVisible() {
-        return getValues().isVisible();
-    }
-
-    /**
-     * Return the list of child {@link ValuesDelta} from our optimized map,
-     * creating the list if requested.
-     */
-    private ArrayList<ValuesDelta> getMimeEntries(String mimeType, boolean lazyCreate) {
-        ArrayList<ValuesDelta> mimeEntries = mEntries.get(mimeType);
-        if (mimeEntries == null && lazyCreate) {
-            mimeEntries = Lists.newArrayList();
-            mEntries.put(mimeType, mimeEntries);
-        }
-        return mimeEntries;
-    }
-
-    public ArrayList<ValuesDelta> getMimeEntries(String mimeType) {
-        return getMimeEntries(mimeType, false);
-    }
-
-    public int getMimeEntriesCount(String mimeType, boolean onlyVisible) {
-        final ArrayList<ValuesDelta> mimeEntries = getMimeEntries(mimeType);
-        if (mimeEntries == null) return 0;
-
-        int count = 0;
-        for (ValuesDelta child : mimeEntries) {
-            // Skip deleted items when requesting only visible
-            if (onlyVisible && !child.isVisible()) continue;
-            count++;
-        }
-        return count;
-    }
-
-    public boolean hasMimeEntries(String mimeType) {
-        return mEntries.containsKey(mimeType);
-    }
-
-    public ValuesDelta addEntry(ValuesDelta entry) {
-        final String mimeType = entry.getMimetype();
-        getMimeEntries(mimeType, true).add(entry);
-        return entry;
-    }
-
-    public ArrayList<ContentValues> getContentValues() {
-        ArrayList<ContentValues> values = Lists.newArrayList();
-        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
-            for (ValuesDelta entry : mimeEntries) {
-                if (!entry.isDelete()) {
-                    values.add(entry.getCompleteValues());
-                }
-            }
-        }
-        return values;
-    }
-
-    /**
-     * Find entry with the given {@link BaseColumns#_ID} value.
-     */
-    public ValuesDelta getEntry(Long childId) {
-        if (childId == null) {
-            // Requesting an "insert" entry, which has no "before"
-            return null;
-        }
-
-        // Search all children for requested entry
-        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
-            for (ValuesDelta entry : mimeEntries) {
-                if (childId.equals(entry.getId())) {
-                    return entry;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Return the total number of {@link ValuesDelta} contained.
-     */
-    public int getEntryCount(boolean onlyVisible) {
-        int count = 0;
-        for (String mimeType : mEntries.keySet()) {
-            count += getMimeEntriesCount(mimeType, onlyVisible);
-        }
-        return count;
-    }
-
-    @Override
-    public boolean equals(Object object) {
-        if (object instanceof RawContactDelta) {
-            final RawContactDelta other = (RawContactDelta)object;
-
-            // Equality failed if parent values different
-            if (!other.mValues.equals(mValues)) return false;
-
-            for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
-                for (ValuesDelta child : mimeEntries) {
-                    // Equality failed if any children unmatched
-                    if (!other.containsEntry(child)) return false;
-                }
-            }
-
-            // Passed all tests, so equal
-            return true;
-        }
-        return false;
-    }
-
-    private boolean containsEntry(ValuesDelta entry) {
-        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
-            for (ValuesDelta child : mimeEntries) {
-                // Contained if we find any child that matches
-                if (child.equals(entry)) return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Mark this entire object deleted, including any {@link ValuesDelta}.
-     */
-    public void markDeleted() {
-        this.mValues.markDeleted();
-        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
-            for (ValuesDelta child : mimeEntries) {
-                child.markDeleted();
-            }
-        }
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder builder = new StringBuilder();
-        builder.append("\n(");
-        builder.append("Uri=");
-        builder.append(mContactsQueryUri);
-        builder.append(", Values=");
-        builder.append(mValues != null ? mValues.toString() : "null");
-        builder.append(", Entries={");
-        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
-            for (ValuesDelta child : mimeEntries) {
-                builder.append("\n\t");
-                child.toString(builder);
-            }
-        }
-        builder.append("\n})\n");
-        return builder.toString();
-    }
-
-    /**
-     * Consider building the given {@link ContentProviderOperation.Builder} and
-     * appending it to the given list, which only happens if builder is valid.
-     */
-    private void possibleAdd(ArrayList<ContentProviderOperation> diff,
-            ContentProviderOperation.Builder builder) {
-        if (builder != null) {
-            diff.add(builder.build());
-        }
-    }
-
-    /**
-     * For compatibility purpose, this method is copied from {@link #possibleAdd} and takes
-     * BuilderWrapper and an ArrayList of CPOWrapper as parameters.
-     */
-    private void possibleAddWrapper(ArrayList<CPOWrapper> diff, BuilderWrapper bw) {
-        if (bw != null && bw.getBuilder() != null) {
-            diff.add(new CPOWrapper(bw.getBuilder().build(), bw.getType()));
-        }
-    }
-
-    /**
-     * Build a list of {@link ContentProviderOperation} that will assert any
-     * "before" state hasn't changed. This is maintained separately so that all
-     * asserts can take place before any updates occur.
-     */
-    public void buildAssert(ArrayList<ContentProviderOperation> buildInto) {
-        final Builder builder = buildAssertHelper();
-        if (builder != null) {
-            buildInto.add(builder.build());
-        }
-    }
-
-    /**
-     * For compatibility purpose, this method is copied from {@link #buildAssert} and takes an
-     * ArrayList of CPOWrapper as parameter.
-     */
-    public void buildAssertWrapper(ArrayList<CPOWrapper> buildInto) {
-        final Builder builder = buildAssertHelper();
-        if (builder != null) {
-            buildInto.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_ASSERT));
-        }
-    }
-
-    private Builder buildAssertHelper() {
-        final boolean isContactInsert = mValues.isInsert();
-        ContentProviderOperation.Builder builder = null;
-        if (!isContactInsert) {
-            // Assert version is consistent while persisting changes
-            final Long beforeId = mValues.getId();
-            final Long beforeVersion = mValues.getAsLong(RawContacts.VERSION);
-            if (beforeId == null || beforeVersion == null) return builder;
-            builder = ContentProviderOperation.newAssertQuery(mContactsQueryUri);
-            builder.withSelection(RawContacts._ID + "=" + beforeId, null);
-            builder.withValue(RawContacts.VERSION, beforeVersion);
-        }
-        return builder;
-    }
-
-    /**
-     * Build a list of {@link ContentProviderOperation} that will transform the
-     * current "before" {@link Entity} state into the modified state which this
-     * {@link RawContactDelta} represents.
-     */
-    public void buildDiff(ArrayList<ContentProviderOperation> buildInto) {
-        final int firstIndex = buildInto.size();
-
-        final boolean isContactInsert = mValues.isInsert();
-        final boolean isContactDelete = mValues.isDelete();
-        final boolean isContactUpdate = !isContactInsert && !isContactDelete;
-
-        final Long beforeId = mValues.getId();
-
-        Builder builder;
-
-        if (isContactInsert) {
-            // TODO: for now simply disabling aggregation when a new contact is
-            // created on the phone.  In the future, will show aggregation suggestions
-            // after saving the contact.
-            mValues.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED);
-        }
-
-        // Build possible operation at Contact level
-        builder = mValues.buildDiff(mContactsQueryUri);
-        possibleAdd(buildInto, builder);
-
-        // Build operations for all children
-        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
-            for (ValuesDelta child : mimeEntries) {
-                // Ignore children if parent was deleted
-                if (isContactDelete) continue;
-
-                // Use the profile data URI if the contact is the profile.
-                if (mContactsQueryUri.equals(Profile.CONTENT_RAW_CONTACTS_URI)) {
-                    builder = child.buildDiff(Uri.withAppendedPath(Profile.CONTENT_URI,
-                            RawContacts.Data.CONTENT_DIRECTORY));
-                } else {
-                    builder = child.buildDiff(Data.CONTENT_URI);
-                }
-
-                if (child.isInsert()) {
-                    if (isContactInsert) {
-                        // Parent is brand new insert, so back-reference _id
-                        builder.withValueBackReference(Data.RAW_CONTACT_ID, firstIndex);
-                    } else {
-                        // Inserting under existing, so fill with known _id
-                        builder.withValue(Data.RAW_CONTACT_ID, beforeId);
-                    }
-                } else if (isContactInsert && builder != null) {
-                    // Child must be insert when Contact insert
-                    throw new IllegalArgumentException("When parent insert, child must be also");
-                }
-                possibleAdd(buildInto, builder);
-            }
-        }
-
-        final boolean addedOperations = buildInto.size() > firstIndex;
-        if (addedOperations && isContactUpdate) {
-            // Suspend aggregation while persisting updates
-            builder = buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_SUSPENDED);
-            buildInto.add(firstIndex, builder.build());
-
-            // Restore aggregation mode as last operation
-            builder = buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_DEFAULT);
-            buildInto.add(builder.build());
-        } else if (isContactInsert) {
-            // Restore aggregation mode as last operation
-            builder = ContentProviderOperation.newUpdate(mContactsQueryUri);
-            builder.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT);
-            builder.withSelection(RawContacts._ID + "=?", new String[1]);
-            builder.withSelectionBackReference(0, firstIndex);
-            buildInto.add(builder.build());
-        }
-    }
-
-    /**
-     * For compatibility purpose, this method is copied from {@link #buildDiff} and takes an
-     * ArrayList of CPOWrapper as parameter.
-     */
-    public void buildDiffWrapper(ArrayList<CPOWrapper> buildInto) {
-        final int firstIndex = buildInto.size();
-
-        final boolean isContactInsert = mValues.isInsert();
-        final boolean isContactDelete = mValues.isDelete();
-        final boolean isContactUpdate = !isContactInsert && !isContactDelete;
-
-        final Long beforeId = mValues.getId();
-
-        if (isContactInsert) {
-            // TODO: for now simply disabling aggregation when a new contact is
-            // created on the phone.  In the future, will show aggregation suggestions
-            // after saving the contact.
-            mValues.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED);
-        }
-
-        // Build possible operation at Contact level
-        BuilderWrapper bw = mValues.buildDiffWrapper(mContactsQueryUri);
-        possibleAddWrapper(buildInto, bw);
-
-        // Build operations for all children
-        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
-            for (ValuesDelta child : mimeEntries) {
-                // Ignore children if parent was deleted
-                if (isContactDelete) continue;
-
-                // Use the profile data URI if the contact is the profile.
-                if (mContactsQueryUri.equals(Profile.CONTENT_RAW_CONTACTS_URI)) {
-                    bw = child.buildDiffWrapper(Uri.withAppendedPath(Profile.CONTENT_URI,
-                            RawContacts.Data.CONTENT_DIRECTORY));
-                } else {
-                    bw = child.buildDiffWrapper(Data.CONTENT_URI);
-                }
-
-                if (child.isInsert()) {
-                    if (isContactInsert) {
-                        // Parent is brand new insert, so back-reference _id
-                        bw.getBuilder().withValueBackReference(Data.RAW_CONTACT_ID, firstIndex);
-                    } else {
-                        // Inserting under existing, so fill with known _id
-                        bw.getBuilder().withValue(Data.RAW_CONTACT_ID, beforeId);
-                    }
-                } else if (isContactInsert && bw != null && bw.getBuilder() != null) {
-                    // Child must be insert when Contact insert
-                    throw new IllegalArgumentException("When parent insert, child must be also");
-                }
-                possibleAddWrapper(buildInto, bw);
-            }
-        }
-
-        final boolean addedOperations = buildInto.size() > firstIndex;
-        if (addedOperations && isContactUpdate) {
-            // Suspend aggregation while persisting updates
-            Builder builder =
-                    buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_SUSPENDED);
-            buildInto.add(firstIndex, new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
-
-            // Restore aggregation mode as last operation
-            builder = buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_DEFAULT);
-            buildInto.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
-        } else if (isContactInsert) {
-            // Restore aggregation mode as last operation
-            Builder builder = ContentProviderOperation.newUpdate(mContactsQueryUri);
-            builder.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT);
-            builder.withSelection(RawContacts._ID + "=?", new String[1]);
-            builder.withSelectionBackReference(0, firstIndex);
-            buildInto.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
-        }
-    }
-
-    /**
-     * Build a {@link ContentProviderOperation} that changes
-     * {@link RawContacts#AGGREGATION_MODE} to the given value.
-     */
-    protected Builder buildSetAggregationMode(Long beforeId, int mode) {
-        Builder builder = ContentProviderOperation.newUpdate(mContactsQueryUri);
-        builder.withValue(RawContacts.AGGREGATION_MODE, mode);
-        builder.withSelection(RawContacts._ID + "=" + beforeId, null);
-        return builder;
-    }
-
-    /** {@inheritDoc} */
-    public int describeContents() {
-        // Nothing special about this parcel
-        return 0;
-    }
-
-    /** {@inheritDoc} */
-    public void writeToParcel(Parcel dest, int flags) {
-        final int size = this.getEntryCount(false);
-        dest.writeInt(size);
-        dest.writeParcelable(mValues, flags);
-        dest.writeParcelable(mContactsQueryUri, flags);
-        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
-            for (ValuesDelta child : mimeEntries) {
-                dest.writeParcelable(child, flags);
-            }
-        }
-    }
-
-    public void readFromParcel(Parcel source) {
-        final ClassLoader loader = getClass().getClassLoader();
-        final int size = source.readInt();
-        mValues = source.<ValuesDelta> readParcelable(loader);
-        mContactsQueryUri = source.<Uri> readParcelable(loader);
-        for (int i = 0; i < size; i++) {
-            final ValuesDelta child = source.<ValuesDelta> readParcelable(loader);
-            this.addEntry(child);
-        }
-    }
-
-    /**
-     * Used to set the query URI to the profile URI to store profiles.
-     */
-    public void setProfileQueryUri() {
-        mContactsQueryUri = Profile.CONTENT_RAW_CONTACTS_URI;
-    }
-
-    public static final Parcelable.Creator<RawContactDelta> CREATOR =
-            new Parcelable.Creator<RawContactDelta>() {
-        public RawContactDelta createFromParcel(Parcel in) {
-            final RawContactDelta state = new RawContactDelta();
-            state.readFromParcel(in);
-            return state;
-        }
-
-        public RawContactDelta[] newArray(int size) {
-            return new RawContactDelta[size];
-        }
-    };
-
-}
diff --git a/src/com/android/contacts/common/model/RawContactDeltaList.java b/src/com/android/contacts/common/model/RawContactDeltaList.java
deleted file mode 100644
index 2f281ef..0000000
--- a/src/com/android/contacts/common/model/RawContactDeltaList.java
+++ /dev/null
@@ -1,571 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model;
-
-import android.content.ContentProviderOperation;
-import android.content.ContentProviderOperation.Builder;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Entity;
-import android.content.EntityIterator;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.ContactsContract.AggregationExceptions;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.RawContacts;
-import android.util.Log;
-
-import com.android.contacts.common.compat.CompatUtils;
-
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-
-/**
- * Container for multiple {@link RawContactDelta} objects, usually when editing
- * together as an entire aggregate. Provides convenience methods for parceling
- * and applying another {@link RawContactDeltaList} over it.
- */
-public class RawContactDeltaList extends ArrayList<RawContactDelta> implements Parcelable {
-    private static final String TAG = RawContactDeltaList.class.getSimpleName();
-    private static final boolean VERBOSE_LOGGING = Log.isLoggable(TAG, Log.VERBOSE);
-
-    private boolean mSplitRawContacts;
-    private long[] mJoinWithRawContactIds;
-
-    public RawContactDeltaList() {
-    }
-
-    /**
-     * Create an {@link RawContactDeltaList} based on {@link Contacts} specified by the
-     * given query parameters. This closes the {@link EntityIterator} when
-     * finished, so it doesn't subscribe to updates.
-     */
-    public static RawContactDeltaList fromQuery(Uri entityUri, ContentResolver resolver,
-            String selection, String[] selectionArgs, String sortOrder) {
-        final EntityIterator iterator = RawContacts.newEntityIterator(
-                resolver.query(entityUri, null, selection, selectionArgs, sortOrder));
-        try {
-            return fromIterator(iterator);
-        } finally {
-            iterator.close();
-        }
-    }
-
-    /**
-     * Create an {@link RawContactDeltaList} that contains the entities of the Iterator as before
-     * values.  This function can be passed an iterator of Entity objects or an iterator of
-     * RawContact objects.
-     */
-    public static RawContactDeltaList fromIterator(Iterator<?> iterator) {
-        final RawContactDeltaList state = new RawContactDeltaList();
-        state.addAll(iterator);
-        return state;
-    }
-
-    public void addAll(Iterator<?> iterator) {
-        // Perform background query to pull contact details
-        while (iterator.hasNext()) {
-            // Read all contacts into local deltas to prepare for edits
-            Object nextObject = iterator.next();
-            final RawContact before = nextObject instanceof Entity
-                    ? RawContact.createFrom((Entity) nextObject)
-                    : (RawContact) nextObject;
-            final RawContactDelta rawContactDelta = RawContactDelta.fromBefore(before);
-            add(rawContactDelta);
-        }
-    }
-
-    /**
-     * Merge the "after" values from the given {@link RawContactDeltaList}, discarding any
-     * previous "after" states. This is typically used when re-parenting user
-     * edits onto an updated {@link RawContactDeltaList}.
-     */
-    public static RawContactDeltaList mergeAfter(RawContactDeltaList local,
-            RawContactDeltaList remote) {
-        if (local == null) local = new RawContactDeltaList();
-
-        // For each entity in the remote set, try matching over existing
-        for (RawContactDelta remoteEntity : remote) {
-            final Long rawContactId = remoteEntity.getValues().getId();
-
-            // Find or create local match and merge
-            final RawContactDelta localEntity = local.getByRawContactId(rawContactId);
-            final RawContactDelta merged = RawContactDelta.mergeAfter(localEntity, remoteEntity);
-
-            if (localEntity == null && merged != null) {
-                // No local entry before, so insert
-                local.add(merged);
-            }
-        }
-
-        return local;
-    }
-
-    /**
-     * Build a list of {@link ContentProviderOperation} that will transform all
-     * the "before" {@link Entity} states into the modified state which all
-     * {@link RawContactDelta} objects represent. This method specifically creates
-     * any {@link AggregationExceptions} rules needed to groups edits together.
-     */
-    public ArrayList<ContentProviderOperation> buildDiff() {
-        if (VERBOSE_LOGGING) {
-            Log.v(TAG, "buildDiff: list=" + toString());
-        }
-        final ArrayList<ContentProviderOperation> diff = Lists.newArrayList();
-
-        final long rawContactId = this.findRawContactId();
-        int firstInsertRow = -1;
-
-        // First pass enforces versions remain consistent
-        for (RawContactDelta delta : this) {
-            delta.buildAssert(diff);
-        }
-
-        final int assertMark = diff.size();
-        int backRefs[] = new int[size()];
-
-        int rawContactIndex = 0;
-
-        // Second pass builds actual operations
-        for (RawContactDelta delta : this) {
-            final int firstBatch = diff.size();
-            final boolean isInsert = delta.isContactInsert();
-            backRefs[rawContactIndex++] = isInsert ? firstBatch : -1;
-
-            delta.buildDiff(diff);
-
-            // If the user chose to join with some other existing raw contact(s) at save time,
-            // add aggregation exceptions for all those raw contacts.
-            if (mJoinWithRawContactIds != null) {
-                for (Long joinedRawContactId : mJoinWithRawContactIds) {
-                    final Builder builder = beginKeepTogether();
-                    builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, joinedRawContactId);
-                    if (rawContactId != -1) {
-                        builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, rawContactId);
-                    } else {
-                        builder.withValueBackReference(
-                                AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
-                    }
-                    diff.add(builder.build());
-                }
-            }
-
-            // Only create rules for inserts
-            if (!isInsert) continue;
-
-            // If we are going to split all contacts, there is no point in first combining them
-            if (mSplitRawContacts) continue;
-
-            if (rawContactId != -1) {
-                // Has existing contact, so bind to it strongly
-                final Builder builder = beginKeepTogether();
-                builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, rawContactId);
-                builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
-                diff.add(builder.build());
-
-            } else if (firstInsertRow == -1) {
-                // First insert case, so record row
-                firstInsertRow = firstBatch;
-
-            } else {
-                // Additional insert case, so point at first insert
-                final Builder builder = beginKeepTogether();
-                builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID1,
-                        firstInsertRow);
-                builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
-                diff.add(builder.build());
-            }
-        }
-
-        if (mSplitRawContacts) {
-            buildSplitContactDiff(diff, backRefs);
-        }
-
-        // No real changes if only left with asserts
-        if (diff.size() == assertMark) {
-            diff.clear();
-        }
-        if (VERBOSE_LOGGING) {
-            Log.v(TAG, "buildDiff: ops=" + diffToString(diff));
-        }
-        return diff;
-    }
-
-    /**
-     * For compatibility purpose, this method is copied from {@link #buildDiff} and returns an
-     * ArrayList of CPOWrapper.
-     */
-    public ArrayList<CPOWrapper> buildDiffWrapper() {
-        if (VERBOSE_LOGGING) {
-            Log.v(TAG, "buildDiffWrapper: list=" + toString());
-        }
-        final ArrayList<CPOWrapper> diffWrapper = Lists.newArrayList();
-
-        final long rawContactId = this.findRawContactId();
-        int firstInsertRow = -1;
-
-        // First pass enforces versions remain consistent
-        for (RawContactDelta delta : this) {
-            delta.buildAssertWrapper(diffWrapper);
-        }
-
-        final int assertMark = diffWrapper.size();
-        int backRefs[] = new int[size()];
-
-        int rawContactIndex = 0;
-
-        // Second pass builds actual operations
-        for (RawContactDelta delta : this) {
-            final int firstBatch = diffWrapper.size();
-            final boolean isInsert = delta.isContactInsert();
-            backRefs[rawContactIndex++] = isInsert ? firstBatch : -1;
-
-            delta.buildDiffWrapper(diffWrapper);
-
-            // If the user chose to join with some other existing raw contact(s) at save time,
-            // add aggregation exceptions for all those raw contacts.
-            if (mJoinWithRawContactIds != null) {
-                for (Long joinedRawContactId : mJoinWithRawContactIds) {
-                    final Builder builder = beginKeepTogether();
-                    builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, joinedRawContactId);
-                    if (rawContactId != -1) {
-                        builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, rawContactId);
-                    } else {
-                        builder.withValueBackReference(
-                                AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
-                    }
-                    diffWrapper.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
-                }
-            }
-
-            // Only create rules for inserts
-            if (!isInsert) continue;
-
-            // If we are going to split all contacts, there is no point in first combining them
-            if (mSplitRawContacts) continue;
-
-            if (rawContactId != -1) {
-                // Has existing contact, so bind to it strongly
-                final Builder builder = beginKeepTogether();
-                builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, rawContactId);
-                builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
-                diffWrapper.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
-
-            } else if (firstInsertRow == -1) {
-                // First insert case, so record row
-                firstInsertRow = firstBatch;
-
-            } else {
-                // Additional insert case, so point at first insert
-                final Builder builder = beginKeepTogether();
-                builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID1,
-                        firstInsertRow);
-                builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
-                diffWrapper.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
-            }
-        }
-
-        if (mSplitRawContacts) {
-            buildSplitContactDiffWrapper(diffWrapper, backRefs);
-        }
-
-        // No real changes if only left with asserts
-        if (diffWrapper.size() == assertMark) {
-            diffWrapper.clear();
-        }
-        if (VERBOSE_LOGGING) {
-            Log.v(TAG, "buildDiff: ops=" + diffToStringWrapper(diffWrapper));
-        }
-        return diffWrapper;
-    }
-
-    private static String diffToString(ArrayList<ContentProviderOperation> ops) {
-        final StringBuilder sb = new StringBuilder();
-        sb.append("[\n");
-        for (ContentProviderOperation op : ops) {
-            sb.append(op.toString());
-            sb.append(",\n");
-        }
-        sb.append("]\n");
-        return sb.toString();
-    }
-
-    /**
-     * For compatibility purpose.
-     */
-    private static String diffToStringWrapper(ArrayList<CPOWrapper> cpoWrappers) {
-        ArrayList<ContentProviderOperation> ops = Lists.newArrayList();
-        for (CPOWrapper cpoWrapper : cpoWrappers) {
-            ops.add(cpoWrapper.getOperation());
-        }
-        return diffToString(ops);
-    }
-
-    /**
-     * Start building a {@link ContentProviderOperation} that will keep two
-     * {@link RawContacts} together.
-     */
-    protected Builder beginKeepTogether() {
-        final Builder builder = ContentProviderOperation
-                .newUpdate(AggregationExceptions.CONTENT_URI);
-        builder.withValue(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_TOGETHER);
-        return builder;
-    }
-
-    /**
-     * Builds {@link AggregationExceptions} to split all constituent raw contacts into
-     * separate contacts.
-     */
-    private void buildSplitContactDiff(final ArrayList<ContentProviderOperation> diff,
-            int[] backRefs) {
-        final int count = size();
-        for (int i = 0; i < count; i++) {
-            for (int j = 0; j < count; j++) {
-                if (i == j) {
-                    continue;
-                }
-                final Builder builder = buildSplitContactDiffHelper(i, j, backRefs);
-                if (builder != null) {
-                    diff.add(builder.build());
-                }
-            }
-        }
-    }
-
-    /**
-     * For compatibility purpose, this method is copied from {@link #buildSplitContactDiff} and
-     * takes an ArrayList of CPOWrapper as parameter.
-     */
-    private void buildSplitContactDiffWrapper(final ArrayList<CPOWrapper> diff, int[] backRefs) {
-        final int count = size();
-        for (int i = 0; i < count; i++) {
-            for (int j = 0; j < count; j++) {
-                if (i == j) {
-                    continue;
-                }
-                final Builder builder = buildSplitContactDiffHelper(i, j, backRefs);
-                if (builder != null) {
-                    diff.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
-                }
-            }
-        }
-    }
-
-    private Builder buildSplitContactDiffHelper(int index1, int index2, int[] backRefs) {
-        final Builder builder =
-                ContentProviderOperation.newUpdate(AggregationExceptions.CONTENT_URI);
-        builder.withValue(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_SEPARATE);
-
-        Long rawContactId1 = get(index1).getValues().getAsLong(RawContacts._ID);
-        int backRef1 = backRefs[index1];
-        if (rawContactId1 != null && rawContactId1 >= 0) {
-            builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, rawContactId1);
-        } else if (backRef1 >= 0) {
-            builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID1, backRef1);
-        } else {
-            return null;
-        }
-
-        Long rawContactId2 = get(index2).getValues().getAsLong(RawContacts._ID);
-        int backRef2 = backRefs[index2];
-        if (rawContactId2 != null && rawContactId2 >= 0) {
-            builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, rawContactId2);
-        } else if (backRef2 >= 0) {
-            builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, backRef2);
-        } else {
-            return null;
-        }
-        return builder;
-    }
-
-    /**
-     * Search all contained {@link RawContactDelta} for the first one with an
-     * existing {@link RawContacts#_ID} value. Usually used when creating
-     * {@link AggregationExceptions} during an update.
-     */
-    public long findRawContactId() {
-        for (RawContactDelta delta : this) {
-            final Long rawContactId = delta.getValues().getAsLong(RawContacts._ID);
-            if (rawContactId != null && rawContactId >= 0) {
-                return rawContactId;
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * Find {@link RawContacts#_ID} of the requested {@link RawContactDelta}.
-     */
-    public Long getRawContactId(int index) {
-        if (index >= 0 && index < this.size()) {
-            final RawContactDelta delta = this.get(index);
-            final ValuesDelta values = delta.getValues();
-            if (values.isVisible()) {
-                return values.getAsLong(RawContacts._ID);
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Find the raw-contact (an {@link RawContactDelta}) with the specified ID.
-     */
-    public RawContactDelta getByRawContactId(Long rawContactId) {
-        final int index = this.indexOfRawContactId(rawContactId);
-        return (index == -1) ? null : this.get(index);
-    }
-
-    /**
-     * Find index of given {@link RawContacts#_ID} when present.
-     */
-    public int indexOfRawContactId(Long rawContactId) {
-        if (rawContactId == null) return -1;
-        final int size = this.size();
-        for (int i = 0; i < size; i++) {
-            final Long currentId = getRawContactId(i);
-            if (rawContactId.equals(currentId)) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * Return the index of the first RawContactDelta corresponding to a writable raw-contact, or -1.
-     * */
-    public int indexOfFirstWritableRawContact(Context context) {
-        // Find the first writable entity.
-        int entityIndex = 0;
-        for (RawContactDelta delta : this) {
-            if (delta.getRawContactAccountType(context).areContactsWritable()) return entityIndex;
-            entityIndex++;
-        }
-        return -1;
-    }
-
-    /**  Return the first RawContactDelta corresponding to a writable raw-contact, or null. */
-    public RawContactDelta getFirstWritableRawContact(Context context) {
-        final int index = indexOfFirstWritableRawContact(context);
-        return (index == -1) ? null : get(index);
-    }
-
-    public ValuesDelta getSuperPrimaryEntry(final String mimeType) {
-        ValuesDelta primary = null;
-        ValuesDelta randomEntry = null;
-        for (RawContactDelta delta : this) {
-            final ArrayList<ValuesDelta> mimeEntries = delta.getMimeEntries(mimeType);
-            if (mimeEntries == null) return null;
-
-            for (ValuesDelta entry : mimeEntries) {
-                if (entry.isSuperPrimary()) {
-                    return entry;
-                } else if (primary == null && entry.isPrimary()) {
-                    primary = entry;
-                } else if (randomEntry == null) {
-                    randomEntry = entry;
-                }
-            }
-        }
-        // When no direct super primary, return something
-        if (primary != null) {
-            return primary;
-        }
-        return randomEntry;
-    }
-
-    /**
-     * Sets a flag that will split ("explode") the raw_contacts into seperate contacts
-     */
-    public void markRawContactsForSplitting() {
-        mSplitRawContacts = true;
-    }
-
-    public boolean isMarkedForSplitting() {
-        return mSplitRawContacts;
-    }
-
-    public void setJoinWithRawContacts(long[] rawContactIds) {
-        mJoinWithRawContactIds = rawContactIds;
-    }
-
-    public boolean isMarkedForJoining() {
-        return mJoinWithRawContactIds != null && mJoinWithRawContactIds.length > 0;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public int describeContents() {
-        // Nothing special about this parcel
-        return 0;
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        final int size = this.size();
-        dest.writeInt(size);
-        for (RawContactDelta delta : this) {
-            dest.writeParcelable(delta, flags);
-        }
-        dest.writeLongArray(mJoinWithRawContactIds);
-        dest.writeInt(mSplitRawContacts ? 1 : 0);
-    }
-
-    @SuppressWarnings("unchecked")
-    public void readFromParcel(Parcel source) {
-        final ClassLoader loader = getClass().getClassLoader();
-        final int size = source.readInt();
-        for (int i = 0; i < size; i++) {
-            this.add(source.<RawContactDelta> readParcelable(loader));
-        }
-        mJoinWithRawContactIds = source.createLongArray();
-        mSplitRawContacts = source.readInt() != 0;
-    }
-
-    public static final Parcelable.Creator<RawContactDeltaList> CREATOR =
-            new Parcelable.Creator<RawContactDeltaList>() {
-        @Override
-        public RawContactDeltaList createFromParcel(Parcel in) {
-            final RawContactDeltaList state = new RawContactDeltaList();
-            state.readFromParcel(in);
-            return state;
-        }
-
-        @Override
-        public RawContactDeltaList[] newArray(int size) {
-            return new RawContactDeltaList[size];
-        }
-    };
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append("(");
-        sb.append("Split=");
-        sb.append(mSplitRawContacts);
-        sb.append(", Join=[");
-        sb.append(Arrays.toString(mJoinWithRawContactIds));
-        sb.append("], Values=");
-        sb.append(super.toString());
-        sb.append(")");
-        return sb.toString();
-    }
-}
diff --git a/src/com/android/contacts/common/model/RawContactModifier.java b/src/com/android/contacts/common/model/RawContactModifier.java
deleted file mode 100644
index b24f877..0000000
--- a/src/com/android/contacts/common/model/RawContactModifier.java
+++ /dev/null
@@ -1,1398 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.BaseTypes;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.provider.ContactsContract.CommonDataKinds.Nickname;
-import android.provider.ContactsContract.CommonDataKinds.Note;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.Relation;
-import android.provider.ContactsContract.CommonDataKinds.SipAddress;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.CommonDataKinds.Website;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Intents;
-import android.provider.ContactsContract.Intents.Insert;
-import android.provider.ContactsContract.RawContacts;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.SparseArray;
-import android.util.SparseIntArray;
-
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountType.EditField;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.account.AccountType.EventEditType;
-import com.android.contacts.common.model.account.GoogleAccountType;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.dataitem.PhoneDataItem;
-import com.android.contacts.common.model.dataitem.StructuredNameDataItem;
-import com.android.contacts.common.util.CommonDateUtils;
-import com.android.contacts.common.util.DateUtils;
-import com.android.contacts.common.util.NameConverter;
-
-import java.text.ParsePosition;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-
-/**
- * Helper methods for modifying an {@link RawContactDelta}, such as inserting
- * new rows, or enforcing {@link AccountType}.
- */
-public class RawContactModifier {
-    private static final String TAG = RawContactModifier.class.getSimpleName();
-
-    /** Set to true in order to view logs on entity operations */
-    private static final boolean DEBUG = false;
-
-    /**
-     * For the given {@link RawContactDelta}, determine if the given
-     * {@link DataKind} could be inserted under specific
-     * {@link AccountType}.
-     */
-    public static boolean canInsert(RawContactDelta state, DataKind kind) {
-        // Insert possible when have valid types and under overall maximum
-        final int visibleCount = state.getMimeEntriesCount(kind.mimeType, true);
-        final boolean validTypes = hasValidTypes(state, kind);
-        final boolean validOverall = (kind.typeOverallMax == -1)
-                || (visibleCount < kind.typeOverallMax);
-        return (validTypes && validOverall);
-    }
-
-    public static boolean hasValidTypes(RawContactDelta state, DataKind kind) {
-        if (RawContactModifier.hasEditTypes(kind)) {
-            return (getValidTypes(state, kind, null, true, null, true).size() > 0);
-        } else {
-            return true;
-        }
-    }
-
-    /**
-     * Ensure that at least one of the given {@link DataKind} exists in the
-     * given {@link RawContactDelta} state, and try creating one if none exist.
-     * @return The child (either newly created or the first existing one), or null if the
-     *     account doesn't support this {@link DataKind}.
-     */
-    public static ValuesDelta ensureKindExists(
-            RawContactDelta state, AccountType accountType, String mimeType) {
-        final DataKind kind = accountType.getKindForMimetype(mimeType);
-        final boolean hasChild = state.getMimeEntriesCount(mimeType, true) > 0;
-
-        if (kind != null) {
-            if (hasChild) {
-                // Return the first entry.
-                return state.getMimeEntries(mimeType).get(0);
-            } else {
-                // Create child when none exists and valid kind
-                final ValuesDelta child = insertChild(state, kind);
-                if (kind.mimeType.equals(Photo.CONTENT_ITEM_TYPE)) {
-                    child.setFromTemplate(true);
-                }
-                return child;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * For the given {@link RawContactDelta} and {@link DataKind}, return the
-     * list possible {@link EditType} options available based on
-     * {@link AccountType}.
-     *
-     * @param forceInclude Always include this {@link EditType} in the returned
-     *            list, even when an otherwise-invalid choice. This is useful
-     *            when showing a dialog that includes the current type.
-     * @param includeSecondary If true, include any valid types marked as
-     *            {@link EditType#secondary}.
-     * @param typeCount When provided, will be used for the frequency count of
-     *            each {@link EditType}, otherwise built using
-     *            {@link #getTypeFrequencies(RawContactDelta, DataKind)}.
-     * @param checkOverall If true, check if the overall number of types is under limit.
-     */
-    public static ArrayList<EditType> getValidTypes(RawContactDelta state, DataKind kind,
-            EditType forceInclude, boolean includeSecondary, SparseIntArray typeCount,
-            boolean checkOverall) {
-        final ArrayList<EditType> validTypes = new ArrayList<EditType>();
-
-        // Bail early if no types provided
-        if (!hasEditTypes(kind)) return validTypes;
-
-        if (typeCount == null) {
-            // Build frequency counts if not provided
-            typeCount = getTypeFrequencies(state, kind);
-        }
-
-        // Build list of valid types
-        boolean validOverall = true;
-        if (checkOverall) {
-            final int overallCount = typeCount.get(FREQUENCY_TOTAL);
-            validOverall = (kind.typeOverallMax == -1 ? true
-                    : overallCount < kind.typeOverallMax);
-        }
-
-        for (EditType type : kind.typeList) {
-            final boolean validSpecific = (type.specificMax == -1 ? true : typeCount
-                    .get(type.rawValue) < type.specificMax);
-            final boolean validSecondary = (includeSecondary ? true : !type.secondary);
-            final boolean forcedInclude = type.equals(forceInclude);
-            if (forcedInclude || (validOverall && validSpecific && validSecondary)) {
-                // Type is valid when no limit, under limit, or forced include
-                validTypes.add(type);
-            }
-        }
-
-        return validTypes;
-    }
-
-    private static final int FREQUENCY_TOTAL = Integer.MIN_VALUE;
-
-    /**
-     * Count up the frequency that each {@link EditType} appears in the given
-     * {@link RawContactDelta}. The returned {@link SparseIntArray} maps from
-     * {@link EditType#rawValue} to counts, with the total overall count stored
-     * as {@link #FREQUENCY_TOTAL}.
-     */
-    private static SparseIntArray getTypeFrequencies(RawContactDelta state, DataKind kind) {
-        final SparseIntArray typeCount = new SparseIntArray();
-
-        // Find all entries for this kind, bailing early if none found
-        final List<ValuesDelta> mimeEntries = state.getMimeEntries(kind.mimeType);
-        if (mimeEntries == null) return typeCount;
-
-        int totalCount = 0;
-        for (ValuesDelta entry : mimeEntries) {
-            // Only count visible entries
-            if (!entry.isVisible()) continue;
-            totalCount++;
-
-            final EditType type = getCurrentType(entry, kind);
-            if (type != null) {
-                final int count = typeCount.get(type.rawValue);
-                typeCount.put(type.rawValue, count + 1);
-            }
-        }
-        typeCount.put(FREQUENCY_TOTAL, totalCount);
-        return typeCount;
-    }
-
-    /**
-     * Check if the given {@link DataKind} has multiple types that should be
-     * displayed for users to pick.
-     */
-    public static boolean hasEditTypes(DataKind kind) {
-        return kind != null && kind.typeList != null && kind.typeList.size() > 0;
-    }
-
-    /**
-     * Find the {@link EditType} that describes the given
-     * {@link ValuesDelta} row, assuming the given {@link DataKind} dictates
-     * the possible types.
-     */
-    public static EditType getCurrentType(ValuesDelta entry, DataKind kind) {
-        final Long rawValue = entry.getAsLong(kind.typeColumn);
-        if (rawValue == null) return null;
-        return getType(kind, rawValue.intValue());
-    }
-
-    /**
-     * Find the {@link EditType} that describes the given {@link ContentValues} row,
-     * assuming the given {@link DataKind} dictates the possible types.
-     */
-    public static EditType getCurrentType(ContentValues entry, DataKind kind) {
-        if (kind.typeColumn == null) return null;
-        final Integer rawValue = entry.getAsInteger(kind.typeColumn);
-        if (rawValue == null) return null;
-        return getType(kind, rawValue);
-    }
-
-    /**
-     * Find the {@link EditType} that describes the given {@link Cursor} row,
-     * assuming the given {@link DataKind} dictates the possible types.
-     */
-    public static EditType getCurrentType(Cursor cursor, DataKind kind) {
-        if (kind.typeColumn == null) return null;
-        final int index = cursor.getColumnIndex(kind.typeColumn);
-        if (index == -1) return null;
-        final int rawValue = cursor.getInt(index);
-        return getType(kind, rawValue);
-    }
-
-    /**
-     * Find the {@link EditType} with the given {@link EditType#rawValue}.
-     */
-    public static EditType getType(DataKind kind, int rawValue) {
-        for (EditType type : kind.typeList) {
-            if (type.rawValue == rawValue) {
-                return type;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Return the precedence for the the given {@link EditType#rawValue}, where
-     * lower numbers are higher precedence.
-     */
-    public static int getTypePrecedence(DataKind kind, int rawValue) {
-        for (int i = 0; i < kind.typeList.size(); i++) {
-            final EditType type = kind.typeList.get(i);
-            if (type.rawValue == rawValue) {
-                return i;
-            }
-        }
-        return Integer.MAX_VALUE;
-    }
-
-    /**
-     * Find the best {@link EditType} for a potential insert. The "best" is the
-     * first primary type that doesn't already exist. When all valid types
-     * exist, we pick the last valid option.
-     */
-    public static EditType getBestValidType(RawContactDelta state, DataKind kind,
-            boolean includeSecondary, int exactValue) {
-        // Shortcut when no types
-        if (kind == null || kind.typeColumn == null) return null;
-
-        // Find type counts and valid primary types, bail if none
-        final SparseIntArray typeCount = getTypeFrequencies(state, kind);
-        final ArrayList<EditType> validTypes = getValidTypes(state, kind, null, includeSecondary,
-                typeCount, /*checkOverall=*/ true);
-        if (validTypes.size() == 0) return null;
-
-        // Keep track of the last valid type
-        final EditType lastType = validTypes.get(validTypes.size() - 1);
-
-        // Remove any types that already exist
-        Iterator<EditType> iterator = validTypes.iterator();
-        while (iterator.hasNext()) {
-            final EditType type = iterator.next();
-            final int count = typeCount.get(type.rawValue);
-
-            if (exactValue == type.rawValue) {
-                // Found exact value match
-                return type;
-            }
-
-            if (count > 0) {
-                // Type already appears, so don't consider
-                iterator.remove();
-            }
-        }
-
-        // Use the best remaining, otherwise the last valid
-        if (validTypes.size() > 0) {
-            return validTypes.get(0);
-        } else {
-            return lastType;
-        }
-    }
-
-    /**
-     * Insert a new child of kind {@link DataKind} into the given
-     * {@link RawContactDelta}. Tries using the best {@link EditType} found using
-     * {@link #getBestValidType(RawContactDelta, DataKind, boolean, int)}.
-     */
-    public static ValuesDelta insertChild(RawContactDelta state, DataKind kind) {
-        // Bail early if invalid kind
-        if (kind == null) return null;
-        // First try finding a valid primary
-        EditType bestType = getBestValidType(state, kind, false, Integer.MIN_VALUE);
-        if (bestType == null) {
-            // No valid primary found, so expand search to secondary
-            bestType = getBestValidType(state, kind, true, Integer.MIN_VALUE);
-        }
-        return insertChild(state, kind, bestType);
-    }
-
-    /**
-     * Insert a new child of kind {@link DataKind} into the given
-     * {@link RawContactDelta}, marked with the given {@link EditType}.
-     */
-    public static ValuesDelta insertChild(RawContactDelta state, DataKind kind, EditType type) {
-        // Bail early if invalid kind
-        if (kind == null) return null;
-        final ContentValues after = new ContentValues();
-
-        // Our parent CONTACT_ID is provided later
-        after.put(Data.MIMETYPE, kind.mimeType);
-
-        // Fill-in with any requested default values
-        if (kind.defaultValues != null) {
-            after.putAll(kind.defaultValues);
-        }
-
-        if (kind.typeColumn != null && type != null) {
-            // Set type, if provided
-            after.put(kind.typeColumn, type.rawValue);
-        }
-
-        final ValuesDelta child = ValuesDelta.fromAfter(after);
-        state.addEntry(child);
-        return child;
-    }
-
-    /**
-     * Processing to trim any empty {@link ValuesDelta} and {@link RawContactDelta}
-     * from the given {@link RawContactDeltaList}, assuming the given {@link AccountTypeManager}
-     * dictates the structure for various fields. This method ignores rows not
-     * described by the {@link AccountType}.
-     */
-    public static void trimEmpty(RawContactDeltaList set, AccountTypeManager accountTypes) {
-        for (RawContactDelta state : set) {
-            ValuesDelta values = state.getValues();
-            final String accountType = values.getAsString(RawContacts.ACCOUNT_TYPE);
-            final String dataSet = values.getAsString(RawContacts.DATA_SET);
-            final AccountType type = accountTypes.getAccountType(accountType, dataSet);
-            trimEmpty(state, type);
-        }
-    }
-
-    public static boolean hasChanges(RawContactDeltaList set, AccountTypeManager accountTypes) {
-        return hasChanges(set, accountTypes, /* excludedMimeTypes =*/ null);
-    }
-
-    public static boolean hasChanges(RawContactDeltaList set, AccountTypeManager accountTypes,
-            Set<String> excludedMimeTypes) {
-        if (set.isMarkedForSplitting() || set.isMarkedForJoining()) {
-            return true;
-        }
-
-        for (RawContactDelta state : set) {
-            ValuesDelta values = state.getValues();
-            final String accountType = values.getAsString(RawContacts.ACCOUNT_TYPE);
-            final String dataSet = values.getAsString(RawContacts.DATA_SET);
-            final AccountType type = accountTypes.getAccountType(accountType, dataSet);
-            if (hasChanges(state, type, excludedMimeTypes)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Processing to trim any empty {@link ValuesDelta} rows from the given
-     * {@link RawContactDelta}, assuming the given {@link AccountType} dictates
-     * the structure for various fields. This method ignores rows not described
-     * by the {@link AccountType}.
-     */
-    public static void trimEmpty(RawContactDelta state, AccountType accountType) {
-        boolean hasValues = false;
-
-        // Walk through entries for each well-known kind
-        for (DataKind kind : accountType.getSortedDataKinds()) {
-            final String mimeType = kind.mimeType;
-            final ArrayList<ValuesDelta> entries = state.getMimeEntries(mimeType);
-            if (entries == null) continue;
-
-            for (ValuesDelta entry : entries) {
-                // Skip any values that haven't been touched
-                final boolean touched = entry.isInsert() || entry.isUpdate();
-                if (!touched) {
-                    hasValues = true;
-                    continue;
-                }
-
-                // Test and remove this row if empty and it isn't a photo from google
-                final boolean isGoogleAccount = TextUtils.equals(GoogleAccountType.ACCOUNT_TYPE,
-                        state.getValues().getAsString(RawContacts.ACCOUNT_TYPE));
-                final boolean isPhoto = TextUtils.equals(Photo.CONTENT_ITEM_TYPE, kind.mimeType);
-                final boolean isGooglePhoto = isPhoto && isGoogleAccount;
-
-                if (RawContactModifier.isEmpty(entry, kind) && !isGooglePhoto) {
-                    if (DEBUG) {
-                        Log.v(TAG, "Trimming: " + entry.toString());
-                    }
-                    entry.markDeleted();
-                } else if (!entry.isFromTemplate()) {
-                    hasValues = true;
-                }
-            }
-        }
-        if (!hasValues) {
-            // Trim overall entity if no children exist
-            state.markDeleted();
-        }
-    }
-
-    private static boolean hasChanges(RawContactDelta state, AccountType accountType,
-            Set<String> excludedMimeTypes) {
-        for (DataKind kind : accountType.getSortedDataKinds()) {
-            final String mimeType = kind.mimeType;
-            if (excludedMimeTypes != null && excludedMimeTypes.contains(mimeType)) continue;
-            final ArrayList<ValuesDelta> entries = state.getMimeEntries(mimeType);
-            if (entries == null) continue;
-
-            for (ValuesDelta entry : entries) {
-                // An empty Insert must be ignored, because it won't save anything (an example
-                // is an empty name that stays empty)
-                final boolean isRealInsert = entry.isInsert() && !isEmpty(entry, kind);
-                if (isRealInsert || entry.isUpdate() || entry.isDelete()) {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Test if the given {@link ValuesDelta} would be considered "empty" in
-     * terms of {@link DataKind#fieldList}.
-     */
-    public static boolean isEmpty(ValuesDelta values, DataKind kind) {
-        if (Photo.CONTENT_ITEM_TYPE.equals(kind.mimeType)) {
-            return values.isInsert() && values.getAsByteArray(Photo.PHOTO) == null;
-        }
-
-        // No defined fields mean this row is always empty
-        if (kind.fieldList == null) return true;
-
-        for (EditField field : kind.fieldList) {
-            // If any field has values, we're not empty
-            final String value = values.getAsString(field.column);
-            if (ContactsUtils.isGraphic(value)) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Compares corresponding fields in values1 and values2. Only the fields
-     * declared by the DataKind are taken into consideration.
-     */
-    protected static boolean areEqual(ValuesDelta values1, ContentValues values2, DataKind kind) {
-        if (kind.fieldList == null) return false;
-
-        for (EditField field : kind.fieldList) {
-            final String value1 = values1.getAsString(field.column);
-            final String value2 = values2.getAsString(field.column);
-            if (!TextUtils.equals(value1, value2)) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Parse the given {@link Bundle} into the given {@link RawContactDelta} state,
-     * assuming the extras defined through {@link Intents}.
-     */
-    public static void parseExtras(Context context, AccountType accountType, RawContactDelta state,
-            Bundle extras) {
-        if (extras == null || extras.size() == 0) {
-            // Bail early if no useful data
-            return;
-        }
-
-        parseStructuredNameExtra(context, accountType, state, extras);
-        parseStructuredPostalExtra(accountType, state, extras);
-
-        {
-            // Phone
-            final DataKind kind = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-            parseExtras(state, kind, extras, Insert.PHONE_TYPE, Insert.PHONE, Phone.NUMBER);
-            parseExtras(state, kind, extras, Insert.SECONDARY_PHONE_TYPE, Insert.SECONDARY_PHONE,
-                    Phone.NUMBER);
-            parseExtras(state, kind, extras, Insert.TERTIARY_PHONE_TYPE, Insert.TERTIARY_PHONE,
-                    Phone.NUMBER);
-        }
-
-        {
-            // Email
-            final DataKind kind = accountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE);
-            parseExtras(state, kind, extras, Insert.EMAIL_TYPE, Insert.EMAIL, Email.DATA);
-            parseExtras(state, kind, extras, Insert.SECONDARY_EMAIL_TYPE, Insert.SECONDARY_EMAIL,
-                    Email.DATA);
-            parseExtras(state, kind, extras, Insert.TERTIARY_EMAIL_TYPE, Insert.TERTIARY_EMAIL,
-                    Email.DATA);
-        }
-
-        {
-            // Im
-            final DataKind kind = accountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE);
-            fixupLegacyImType(extras);
-            parseExtras(state, kind, extras, Insert.IM_PROTOCOL, Insert.IM_HANDLE, Im.DATA);
-        }
-
-        // Organization
-        final boolean hasOrg = extras.containsKey(Insert.COMPANY)
-                || extras.containsKey(Insert.JOB_TITLE);
-        final DataKind kindOrg = accountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
-        if (hasOrg && RawContactModifier.canInsert(state, kindOrg)) {
-            final ValuesDelta child = RawContactModifier.insertChild(state, kindOrg);
-
-            final String company = extras.getString(Insert.COMPANY);
-            if (ContactsUtils.isGraphic(company)) {
-                child.put(Organization.COMPANY, company);
-            }
-
-            final String title = extras.getString(Insert.JOB_TITLE);
-            if (ContactsUtils.isGraphic(title)) {
-                child.put(Organization.TITLE, title);
-            }
-        }
-
-        // Notes
-        final boolean hasNotes = extras.containsKey(Insert.NOTES);
-        final DataKind kindNotes = accountType.getKindForMimetype(Note.CONTENT_ITEM_TYPE);
-        if (hasNotes && RawContactModifier.canInsert(state, kindNotes)) {
-            final ValuesDelta child = RawContactModifier.insertChild(state, kindNotes);
-
-            final String notes = extras.getString(Insert.NOTES);
-            if (ContactsUtils.isGraphic(notes)) {
-                child.put(Note.NOTE, notes);
-            }
-        }
-
-        // Arbitrary additional data
-        ArrayList<ContentValues> values = extras.getParcelableArrayList(Insert.DATA);
-        if (values != null) {
-            parseValues(state, accountType, values);
-        }
-    }
-
-    private static void parseStructuredNameExtra(
-            Context context, AccountType accountType, RawContactDelta state, Bundle extras) {
-        // StructuredName
-        RawContactModifier.ensureKindExists(state, accountType, StructuredName.CONTENT_ITEM_TYPE);
-        final ValuesDelta child = state.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
-
-        final String name = extras.getString(Insert.NAME);
-        if (ContactsUtils.isGraphic(name)) {
-            final DataKind kind = accountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
-            boolean supportsDisplayName = false;
-            if (kind.fieldList != null) {
-                for (EditField field : kind.fieldList) {
-                    if (StructuredName.DISPLAY_NAME.equals(field.column)) {
-                        supportsDisplayName = true;
-                        break;
-                    }
-                }
-            }
-
-            if (supportsDisplayName) {
-                child.put(StructuredName.DISPLAY_NAME, name);
-            } else {
-                Uri uri = ContactsContract.AUTHORITY_URI.buildUpon()
-                        .appendPath("complete_name")
-                        .appendQueryParameter(StructuredName.DISPLAY_NAME, name)
-                        .build();
-                Cursor cursor = context.getContentResolver().query(uri,
-                        new String[]{
-                                StructuredName.PREFIX,
-                                StructuredName.GIVEN_NAME,
-                                StructuredName.MIDDLE_NAME,
-                                StructuredName.FAMILY_NAME,
-                                StructuredName.SUFFIX,
-                        }, null, null, null);
-
-                if (cursor != null) {
-                    try {
-                        if (cursor.moveToFirst()) {
-                            child.put(StructuredName.PREFIX, cursor.getString(0));
-                            child.put(StructuredName.GIVEN_NAME, cursor.getString(1));
-                            child.put(StructuredName.MIDDLE_NAME, cursor.getString(2));
-                            child.put(StructuredName.FAMILY_NAME, cursor.getString(3));
-                            child.put(StructuredName.SUFFIX, cursor.getString(4));
-                        }
-                    } finally {
-                        cursor.close();
-                    }
-                }
-            }
-        }
-
-        final String phoneticName = extras.getString(Insert.PHONETIC_NAME);
-        if (ContactsUtils.isGraphic(phoneticName)) {
-            StructuredNameDataItem dataItem = NameConverter.parsePhoneticName(phoneticName, null);
-            child.put(StructuredName.PHONETIC_FAMILY_NAME, dataItem.getPhoneticFamilyName());
-            child.put(StructuredName.PHONETIC_MIDDLE_NAME, dataItem.getPhoneticMiddleName());
-            child.put(StructuredName.PHONETIC_GIVEN_NAME, dataItem.getPhoneticGivenName());
-        }
-    }
-
-    private static void parseStructuredPostalExtra(
-            AccountType accountType, RawContactDelta state, Bundle extras) {
-        // StructuredPostal
-        final DataKind kind = accountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
-        final ValuesDelta child = parseExtras(state, kind, extras, Insert.POSTAL_TYPE,
-                Insert.POSTAL, StructuredPostal.FORMATTED_ADDRESS);
-        String address = child == null ? null
-                : child.getAsString(StructuredPostal.FORMATTED_ADDRESS);
-        if (!TextUtils.isEmpty(address)) {
-            boolean supportsFormatted = false;
-            if (kind.fieldList != null) {
-                for (EditField field : kind.fieldList) {
-                    if (StructuredPostal.FORMATTED_ADDRESS.equals(field.column)) {
-                        supportsFormatted = true;
-                        break;
-                    }
-                }
-            }
-
-            if (!supportsFormatted) {
-                child.put(StructuredPostal.STREET, address);
-                child.putNull(StructuredPostal.FORMATTED_ADDRESS);
-            }
-        }
-    }
-
-    private static void parseValues(
-            RawContactDelta state, AccountType accountType,
-            ArrayList<ContentValues> dataValueList) {
-        for (ContentValues values : dataValueList) {
-            String mimeType = values.getAsString(Data.MIMETYPE);
-            if (TextUtils.isEmpty(mimeType)) {
-                Log.e(TAG, "Mimetype is required. Ignoring: " + values);
-                continue;
-            }
-
-            // Won't override the contact name
-            if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                continue;
-            } else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                values.remove(PhoneDataItem.KEY_FORMATTED_PHONE_NUMBER);
-                final Integer type = values.getAsInteger(Phone.TYPE);
-                // If the provided phone number provides a custom phone type but not a label,
-                // replace it with mobile (by default) to avoid the "Enter custom label" from
-                // popping up immediately upon entering the ContactEditorFragment
-                if (type != null && type == Phone.TYPE_CUSTOM &&
-                        TextUtils.isEmpty(values.getAsString(Phone.LABEL))) {
-                    values.put(Phone.TYPE, Phone.TYPE_MOBILE);
-                }
-            }
-
-            DataKind kind = accountType.getKindForMimetype(mimeType);
-            if (kind == null) {
-                Log.e(TAG, "Mimetype not supported for account type "
-                        + accountType.getAccountTypeAndDataSet() + ". Ignoring: " + values);
-                continue;
-            }
-
-            ValuesDelta entry = ValuesDelta.fromAfter(values);
-            if (isEmpty(entry, kind)) {
-                continue;
-            }
-
-            ArrayList<ValuesDelta> entries = state.getMimeEntries(mimeType);
-
-            if ((kind.typeOverallMax != 1) || GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                // Check for duplicates
-                boolean addEntry = true;
-                int count = 0;
-                if (entries != null && entries.size() > 0) {
-                    for (ValuesDelta delta : entries) {
-                        if (!delta.isDelete()) {
-                            if (areEqual(delta, values, kind)) {
-                                addEntry = false;
-                                break;
-                            }
-                            count++;
-                        }
-                    }
-                }
-
-                if (kind.typeOverallMax != -1 && count >= kind.typeOverallMax) {
-                    Log.e(TAG, "Mimetype allows at most " + kind.typeOverallMax
-                            + " entries. Ignoring: " + values);
-                    addEntry = false;
-                }
-
-                if (addEntry) {
-                    addEntry = adjustType(entry, entries, kind);
-                }
-
-                if (addEntry) {
-                    state.addEntry(entry);
-                }
-            } else {
-                // Non-list entries should not be overridden
-                boolean addEntry = true;
-                if (entries != null && entries.size() > 0) {
-                    for (ValuesDelta delta : entries) {
-                        if (!delta.isDelete() && !isEmpty(delta, kind)) {
-                            addEntry = false;
-                            break;
-                        }
-                    }
-                    if (addEntry) {
-                        for (ValuesDelta delta : entries) {
-                            delta.markDeleted();
-                        }
-                    }
-                }
-
-                if (addEntry) {
-                    addEntry = adjustType(entry, entries, kind);
-                }
-
-                if (addEntry) {
-                    state.addEntry(entry);
-                } else if (Note.CONTENT_ITEM_TYPE.equals(mimeType)){
-                    // Note is most likely to contain large amounts of text
-                    // that we don't want to drop on the ground.
-                    for (ValuesDelta delta : entries) {
-                        if (!isEmpty(delta, kind)) {
-                            delta.put(Note.NOTE, delta.getAsString(Note.NOTE) + "\n"
-                                    + values.getAsString(Note.NOTE));
-                            break;
-                        }
-                    }
-                } else {
-                    Log.e(TAG, "Will not override mimetype " + mimeType + ". Ignoring: "
-                            + values);
-                }
-            }
-        }
-    }
-
-    /**
-     * Checks if the data kind allows addition of another entry (e.g. Exchange only
-     * supports two "work" phone numbers).  If not, tries to switch to one of the
-     * unused types.  If successful, returns true.
-     */
-    private static boolean adjustType(
-            ValuesDelta entry, ArrayList<ValuesDelta> entries, DataKind kind) {
-        if (kind.typeColumn == null || kind.typeList == null || kind.typeList.size() == 0) {
-            return true;
-        }
-
-        Integer typeInteger = entry.getAsInteger(kind.typeColumn);
-        int type = typeInteger != null ? typeInteger : kind.typeList.get(0).rawValue;
-
-        if (isTypeAllowed(type, entries, kind)) {
-            entry.put(kind.typeColumn, type);
-            return true;
-        }
-
-        // Specified type is not allowed - choose the first available type that is allowed
-        int size = kind.typeList.size();
-        for (int i = 0; i < size; i++) {
-            EditType editType = kind.typeList.get(i);
-            if (isTypeAllowed(editType.rawValue, entries, kind)) {
-                entry.put(kind.typeColumn, editType.rawValue);
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Checks if a new entry of the specified type can be added to the raw
-     * contact. For example, Exchange only supports two "work" phone numbers, so
-     * addition of a third would not be allowed.
-     */
-    private static boolean isTypeAllowed(int type, ArrayList<ValuesDelta> entries, DataKind kind) {
-        int max = 0;
-        int size = kind.typeList.size();
-        for (int i = 0; i < size; i++) {
-            EditType editType = kind.typeList.get(i);
-            if (editType.rawValue == type) {
-                max = editType.specificMax;
-                break;
-            }
-        }
-
-        if (max == 0) {
-            // This type is not allowed at all
-            return false;
-        }
-
-        if (max == -1) {
-            // Unlimited instances of this type are allowed
-            return true;
-        }
-
-        return getEntryCountByType(entries, kind.typeColumn, type) < max;
-    }
-
-    /**
-     * Counts occurrences of the specified type in the supplied entry list.
-     *
-     * @return The count of occurrences of the type in the entry list. 0 if entries is
-     * {@literal null}
-     */
-    private static int getEntryCountByType(ArrayList<ValuesDelta> entries, String typeColumn,
-            int type) {
-        int count = 0;
-        if (entries != null) {
-            for (ValuesDelta entry : entries) {
-                Integer typeInteger = entry.getAsInteger(typeColumn);
-                if (typeInteger != null && typeInteger == type) {
-                    count++;
-                }
-            }
-        }
-        return count;
-    }
-
-    /**
-     * Attempt to parse legacy {@link Insert#IM_PROTOCOL} values, replacing them
-     * with updated values.
-     */
-    @SuppressWarnings("deprecation")
-    private static void fixupLegacyImType(Bundle bundle) {
-        final String encodedString = bundle.getString(Insert.IM_PROTOCOL);
-        if (encodedString == null) return;
-
-        try {
-            final Object protocol = android.provider.Contacts.ContactMethods
-                    .decodeImProtocol(encodedString);
-            if (protocol instanceof Integer) {
-                bundle.putInt(Insert.IM_PROTOCOL, (Integer)protocol);
-            } else {
-                bundle.putString(Insert.IM_PROTOCOL, (String)protocol);
-            }
-        } catch (IllegalArgumentException e) {
-            // Ignore exception when legacy parser fails
-        }
-    }
-
-    /**
-     * Parse a specific entry from the given {@link Bundle} and insert into the
-     * given {@link RawContactDelta}. Silently skips the insert when missing value
-     * or no valid {@link EditType} found.
-     *
-     * @param typeExtra {@link Bundle} key that holds the incoming
-     *            {@link EditType#rawValue} value.
-     * @param valueExtra {@link Bundle} key that holds the incoming value.
-     * @param valueColumn Column to write value into {@link ValuesDelta}.
-     */
-    public static ValuesDelta parseExtras(RawContactDelta state, DataKind kind, Bundle extras,
-            String typeExtra, String valueExtra, String valueColumn) {
-        final CharSequence value = extras.getCharSequence(valueExtra);
-
-        // Bail early if account type doesn't handle this MIME type
-        if (kind == null) return null;
-
-        // Bail when can't insert type, or value missing
-        final boolean canInsert = RawContactModifier.canInsert(state, kind);
-        final boolean validValue = (value != null && TextUtils.isGraphic(value));
-        if (!validValue || !canInsert) return null;
-
-        // Find exact type when requested, otherwise best available type
-        final boolean hasType = extras.containsKey(typeExtra);
-        final int typeValue = extras.getInt(typeExtra, hasType ? BaseTypes.TYPE_CUSTOM
-                : Integer.MIN_VALUE);
-        final EditType editType = RawContactModifier.getBestValidType(state, kind, true, typeValue);
-
-        // Create data row and fill with value
-        final ValuesDelta child = RawContactModifier.insertChild(state, kind, editType);
-        child.put(valueColumn, value.toString());
-
-        if (editType != null && editType.customColumn != null) {
-            // Write down label when custom type picked
-            final String customType = extras.getString(typeExtra);
-            child.put(editType.customColumn, customType);
-        }
-
-        return child;
-    }
-
-    /**
-     * Generic mime types with type support (e.g. TYPE_HOME).
-     * Here, "type support" means if the data kind has CommonColumns#TYPE or not. Data kinds which
-     * have their own migrate methods aren't listed here.
-     */
-    private static final Set<String> sGenericMimeTypesWithTypeSupport = new HashSet<String>(
-            Arrays.asList(Phone.CONTENT_ITEM_TYPE,
-                    Email.CONTENT_ITEM_TYPE,
-                    Im.CONTENT_ITEM_TYPE,
-                    Nickname.CONTENT_ITEM_TYPE,
-                    Website.CONTENT_ITEM_TYPE,
-                    Relation.CONTENT_ITEM_TYPE,
-                    SipAddress.CONTENT_ITEM_TYPE));
-    private static final Set<String> sGenericMimeTypesWithoutTypeSupport = new HashSet<String>(
-            Arrays.asList(Organization.CONTENT_ITEM_TYPE,
-                    Note.CONTENT_ITEM_TYPE,
-                    Photo.CONTENT_ITEM_TYPE,
-                    GroupMembership.CONTENT_ITEM_TYPE));
-    // CommonColumns.TYPE cannot be accessed as it is protected interface, so use
-    // Phone.TYPE instead.
-    private static final String COLUMN_FOR_TYPE  = Phone.TYPE;
-    private static final String COLUMN_FOR_LABEL  = Phone.LABEL;
-    private static final int TYPE_CUSTOM = Phone.TYPE_CUSTOM;
-
-    /**
-     * Migrates old RawContactDelta to newly created one with a new restriction supplied from
-     * newAccountType.
-     *
-     * This is only for account switch during account creation (which must be insert operation).
-     */
-    public static void migrateStateForNewContact(Context context,
-            RawContactDelta oldState, RawContactDelta newState,
-            AccountType oldAccountType, AccountType newAccountType) {
-        if (newAccountType == oldAccountType) {
-            // Just copying all data in oldState isn't enough, but we can still rely on a lot of
-            // shortcuts.
-            for (DataKind kind : newAccountType.getSortedDataKinds()) {
-                final String mimeType = kind.mimeType;
-                // The fields with short/long form capability must be treated properly.
-                if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                    migrateStructuredName(context, oldState, newState, kind);
-                } else {
-                    List<ValuesDelta> entryList = oldState.getMimeEntries(mimeType);
-                    if (entryList != null && !entryList.isEmpty()) {
-                        for (ValuesDelta entry : entryList) {
-                            ContentValues values = entry.getAfter();
-                            if (values != null) {
-                                newState.addEntry(ValuesDelta.fromAfter(values));
-                            }
-                        }
-                    }
-                }
-            }
-        } else {
-            // Migrate data supported by the new account type.
-            // All the other data inside oldState are silently dropped.
-            for (DataKind kind : newAccountType.getSortedDataKinds()) {
-                if (!kind.editable) continue;
-                final String mimeType = kind.mimeType;
-                if (DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME.equals(mimeType) ||
-                        DataKind.PSEUDO_MIME_TYPE_NAME.equals(mimeType)) {
-                    // Ignore pseudo data.
-                    continue;
-                } else if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                    migrateStructuredName(context, oldState, newState, kind);
-                } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                    migratePostal(oldState, newState, kind);
-                } else if (Event.CONTENT_ITEM_TYPE.equals(mimeType)) {
-                    migrateEvent(oldState, newState, kind, null /* default Year */);
-                } else if (sGenericMimeTypesWithoutTypeSupport.contains(mimeType)) {
-                    migrateGenericWithoutTypeColumn(oldState, newState, kind);
-                } else if (sGenericMimeTypesWithTypeSupport.contains(mimeType)) {
-                    migrateGenericWithTypeColumn(oldState, newState, kind);
-                } else {
-                    throw new IllegalStateException("Unexpected editable mime-type: " + mimeType);
-                }
-            }
-        }
-    }
-
-    /**
-     * Checks {@link DataKind#isList} and {@link DataKind#typeOverallMax}, and restricts
-     * the number of entries (ValuesDelta) inside newState.
-     */
-    private static ArrayList<ValuesDelta> ensureEntryMaxSize(RawContactDelta newState,
-            DataKind kind, ArrayList<ValuesDelta> mimeEntries) {
-        if (mimeEntries == null) {
-            return null;
-        }
-
-        final int typeOverallMax = kind.typeOverallMax;
-        if (typeOverallMax >= 0 && (mimeEntries.size() > typeOverallMax)) {
-            ArrayList<ValuesDelta> newMimeEntries = new ArrayList<ValuesDelta>(typeOverallMax);
-            for (int i = 0; i < typeOverallMax; i++) {
-                newMimeEntries.add(mimeEntries.get(i));
-            }
-            mimeEntries = newMimeEntries;
-        }
-        return mimeEntries;
-    }
-
-    /** @hide Public only for testing. */
-    public static void migrateStructuredName(
-            Context context, RawContactDelta oldState, RawContactDelta newState,
-            DataKind newDataKind) {
-        final ContentValues values =
-                oldState.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE).getAfter();
-        if (values == null) {
-            return;
-        }
-
-        boolean supportPhoneticFullName = false;
-        boolean supportPhoneticFamilyName = false;
-        boolean supportPhoneticMiddleName = false;
-        boolean supportPhoneticGivenName = false;
-        for (EditField editField : newDataKind.fieldList) {
-            if (DataKind.PSEUDO_COLUMN_PHONETIC_NAME.equals(editField.column)) {
-                supportPhoneticFullName = true;
-            }
-            if (StructuredName.PHONETIC_FAMILY_NAME.equals(editField.column)) {
-                supportPhoneticFamilyName = true;
-            }
-            if (StructuredName.PHONETIC_MIDDLE_NAME.equals(editField.column)) {
-                supportPhoneticMiddleName = true;
-            }
-            if (StructuredName.PHONETIC_GIVEN_NAME.equals(editField.column)) {
-                supportPhoneticGivenName = true;
-            }
-        }
-
-
-        // Phonetic (full) name <-> PHONETIC_FAMILY_NAME, PHONETIC_MIDDLE_NAME, PHONETIC_GIVEN_NAME
-        final String phoneticFullName = values.getAsString(DataKind.PSEUDO_COLUMN_PHONETIC_NAME);
-        if (!TextUtils.isEmpty(phoneticFullName)) {
-            if (!supportPhoneticFullName) {
-                // Old data has a phonetic (full) name, while the new account doesn't allow it.
-                final StructuredNameDataItem tmpItem =
-                        NameConverter.parsePhoneticName(phoneticFullName, null);
-                values.remove(DataKind.PSEUDO_COLUMN_PHONETIC_NAME);
-                if (supportPhoneticFamilyName) {
-                    values.put(StructuredName.PHONETIC_FAMILY_NAME,
-                            tmpItem.getPhoneticFamilyName());
-                } else {
-                    values.remove(StructuredName.PHONETIC_FAMILY_NAME);
-                }
-                if (supportPhoneticMiddleName) {
-                    values.put(StructuredName.PHONETIC_MIDDLE_NAME,
-                            tmpItem.getPhoneticMiddleName());
-                } else {
-                    values.remove(StructuredName.PHONETIC_MIDDLE_NAME);
-                }
-                if (supportPhoneticGivenName) {
-                    values.put(StructuredName.PHONETIC_GIVEN_NAME,
-                            tmpItem.getPhoneticGivenName());
-                } else {
-                    values.remove(StructuredName.PHONETIC_GIVEN_NAME);
-                }
-            }
-        } else {
-            if (supportPhoneticFullName) {
-                // Old data does not have a phonetic (full) name, while the new account requires it.
-                values.put(DataKind.PSEUDO_COLUMN_PHONETIC_NAME,
-                        NameConverter.buildPhoneticName(
-                                values.getAsString(StructuredName.PHONETIC_FAMILY_NAME),
-                                values.getAsString(StructuredName.PHONETIC_MIDDLE_NAME),
-                                values.getAsString(StructuredName.PHONETIC_GIVEN_NAME)));
-            }
-            if (!supportPhoneticFamilyName) {
-                values.remove(StructuredName.PHONETIC_FAMILY_NAME);
-            }
-            if (!supportPhoneticMiddleName) {
-                values.remove(StructuredName.PHONETIC_MIDDLE_NAME);
-            }
-            if (!supportPhoneticGivenName) {
-                values.remove(StructuredName.PHONETIC_GIVEN_NAME);
-            }
-        }
-
-        newState.addEntry(ValuesDelta.fromAfter(values));
-    }
-
-    /** @hide Public only for testing. */
-    public static void migratePostal(RawContactDelta oldState, RawContactDelta newState,
-            DataKind newDataKind) {
-        final ArrayList<ValuesDelta> mimeEntries = ensureEntryMaxSize(newState, newDataKind,
-                oldState.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE));
-        if (mimeEntries == null || mimeEntries.isEmpty()) {
-            return;
-        }
-
-        boolean supportFormattedAddress = false;
-        boolean supportStreet = false;
-        final String firstColumn = newDataKind.fieldList.get(0).column;
-        for (EditField editField : newDataKind.fieldList) {
-            if (StructuredPostal.FORMATTED_ADDRESS.equals(editField.column)) {
-                supportFormattedAddress = true;
-            }
-            if (StructuredPostal.STREET.equals(editField.column)) {
-                supportStreet = true;
-            }
-        }
-
-        final Set<Integer> supportedTypes = new HashSet<Integer>();
-        if (newDataKind.typeList != null && !newDataKind.typeList.isEmpty()) {
-            for (EditType editType : newDataKind.typeList) {
-                supportedTypes.add(editType.rawValue);
-            }
-        }
-
-        for (ValuesDelta entry : mimeEntries) {
-            final ContentValues values = entry.getAfter();
-            if (values == null) {
-                continue;
-            }
-            final Integer oldType = values.getAsInteger(StructuredPostal.TYPE);
-            if (!supportedTypes.contains(oldType)) {
-                int defaultType;
-                if (newDataKind.defaultValues != null) {
-                    defaultType = newDataKind.defaultValues.getAsInteger(StructuredPostal.TYPE);
-                } else {
-                    defaultType = newDataKind.typeList.get(0).rawValue;
-                }
-                values.put(StructuredPostal.TYPE, defaultType);
-                if (oldType != null && oldType == StructuredPostal.TYPE_CUSTOM) {
-                    values.remove(StructuredPostal.LABEL);
-                }
-            }
-
-            final String formattedAddress = values.getAsString(StructuredPostal.FORMATTED_ADDRESS);
-            if (!TextUtils.isEmpty(formattedAddress)) {
-                if (!supportFormattedAddress) {
-                    // Old data has a formatted address, while the new account doesn't allow it.
-                    values.remove(StructuredPostal.FORMATTED_ADDRESS);
-
-                    // Unlike StructuredName we don't have logic to split it, so first
-                    // try to use street field and. If the new account doesn't have one,
-                    // then select first one anyway.
-                    if (supportStreet) {
-                        values.put(StructuredPostal.STREET, formattedAddress);
-                    } else {
-                        values.put(firstColumn, formattedAddress);
-                    }
-                }
-            } else {
-                if (supportFormattedAddress) {
-                    // Old data does not have formatted address, while the new account requires it.
-                    // Unlike StructuredName we don't have logic to join multiple address values.
-                    // Use poor join heuristics for now.
-                    String[] structuredData;
-                    final boolean useJapaneseOrder =
-                            Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
-                    if (useJapaneseOrder) {
-                        structuredData = new String[] {
-                                values.getAsString(StructuredPostal.COUNTRY),
-                                values.getAsString(StructuredPostal.POSTCODE),
-                                values.getAsString(StructuredPostal.REGION),
-                                values.getAsString(StructuredPostal.CITY),
-                                values.getAsString(StructuredPostal.NEIGHBORHOOD),
-                                values.getAsString(StructuredPostal.STREET),
-                                values.getAsString(StructuredPostal.POBOX) };
-                    } else {
-                        structuredData = new String[] {
-                                values.getAsString(StructuredPostal.POBOX),
-                                values.getAsString(StructuredPostal.STREET),
-                                values.getAsString(StructuredPostal.NEIGHBORHOOD),
-                                values.getAsString(StructuredPostal.CITY),
-                                values.getAsString(StructuredPostal.REGION),
-                                values.getAsString(StructuredPostal.POSTCODE),
-                                values.getAsString(StructuredPostal.COUNTRY) };
-                    }
-                    final StringBuilder builder = new StringBuilder();
-                    for (String elem : structuredData) {
-                        if (!TextUtils.isEmpty(elem)) {
-                            builder.append(elem + "\n");
-                        }
-                    }
-                    values.put(StructuredPostal.FORMATTED_ADDRESS, builder.toString());
-
-                    values.remove(StructuredPostal.POBOX);
-                    values.remove(StructuredPostal.STREET);
-                    values.remove(StructuredPostal.NEIGHBORHOOD);
-                    values.remove(StructuredPostal.CITY);
-                    values.remove(StructuredPostal.REGION);
-                    values.remove(StructuredPostal.POSTCODE);
-                    values.remove(StructuredPostal.COUNTRY);
-                }
-            }
-
-            newState.addEntry(ValuesDelta.fromAfter(values));
-        }
-    }
-
-    /** @hide Public only for testing. */
-    public static void migrateEvent(RawContactDelta oldState, RawContactDelta newState,
-            DataKind newDataKind, Integer defaultYear) {
-        final ArrayList<ValuesDelta> mimeEntries = ensureEntryMaxSize(newState, newDataKind,
-                oldState.getMimeEntries(Event.CONTENT_ITEM_TYPE));
-        if (mimeEntries == null || mimeEntries.isEmpty()) {
-            return;
-        }
-
-        final SparseArray<EventEditType> allowedTypes = new SparseArray<EventEditType>();
-        for (EditType editType : newDataKind.typeList) {
-            allowedTypes.put(editType.rawValue, (EventEditType) editType);
-        }
-        for (ValuesDelta entry : mimeEntries) {
-            final ContentValues values = entry.getAfter();
-            if (values == null) {
-                continue;
-            }
-            final String dateString = values.getAsString(Event.START_DATE);
-            final Integer type = values.getAsInteger(Event.TYPE);
-            if (type != null && (allowedTypes.indexOfKey(type) >= 0)
-                    && !TextUtils.isEmpty(dateString)) {
-                EventEditType suitableType = allowedTypes.get(type);
-
-                final ParsePosition position = new ParsePosition(0);
-                boolean yearOptional = false;
-                Date date = CommonDateUtils.DATE_AND_TIME_FORMAT.parse(dateString, position);
-                if (date == null) {
-                    yearOptional = true;
-                    date = CommonDateUtils.NO_YEAR_DATE_FORMAT.parse(dateString, position);
-                }
-                if (date != null) {
-                    if (yearOptional && !suitableType.isYearOptional()) {
-                        // The new EditType doesn't allow optional year. Supply default.
-                        final Calendar calendar = Calendar.getInstance(DateUtils.UTC_TIMEZONE,
-                                Locale.US);
-                        if (defaultYear == null) {
-                            defaultYear = calendar.get(Calendar.YEAR);
-                        }
-                        calendar.setTime(date);
-                        final int month = calendar.get(Calendar.MONTH);
-                        final int day = calendar.get(Calendar.DAY_OF_MONTH);
-                        // Exchange requires 8:00 for birthdays
-                        calendar.set(defaultYear, month, day,
-                                CommonDateUtils.DEFAULT_HOUR, 0, 0);
-                        values.put(Event.START_DATE,
-                                CommonDateUtils.FULL_DATE_FORMAT.format(calendar.getTime()));
-                    }
-                }
-                newState.addEntry(ValuesDelta.fromAfter(values));
-            } else {
-                // Just drop it.
-            }
-        }
-    }
-
-    /** @hide Public only for testing. */
-    public static void migrateGenericWithoutTypeColumn(
-            RawContactDelta oldState, RawContactDelta newState, DataKind newDataKind) {
-        final ArrayList<ValuesDelta> mimeEntries = ensureEntryMaxSize(newState, newDataKind,
-                oldState.getMimeEntries(newDataKind.mimeType));
-        if (mimeEntries == null || mimeEntries.isEmpty()) {
-            return;
-        }
-
-        for (ValuesDelta entry : mimeEntries) {
-            ContentValues values = entry.getAfter();
-            if (values != null) {
-                newState.addEntry(ValuesDelta.fromAfter(values));
-            }
-        }
-    }
-
-    /** @hide Public only for testing. */
-    public static void migrateGenericWithTypeColumn(
-            RawContactDelta oldState, RawContactDelta newState, DataKind newDataKind) {
-        final ArrayList<ValuesDelta> mimeEntries = oldState.getMimeEntries(newDataKind.mimeType);
-        if (mimeEntries == null || mimeEntries.isEmpty()) {
-            return;
-        }
-
-        // Note that type specified with the old account may be invalid with the new account, while
-        // we want to preserve its data as much as possible. e.g. if a user typed a phone number
-        // with a type which is valid with an old account but not with a new account, the user
-        // probably wants to have the number with default type, rather than seeing complete data
-        // loss.
-        //
-        // Specifically, this method works as follows:
-        // 1. detect defaultType
-        // 2. prepare constants & variables for iteration
-        // 3. iterate over mimeEntries:
-        // 3.1 stop iteration if total number of mimeEntries reached typeOverallMax specified in
-        //     DataKind
-        // 3.2 replace unallowed types with defaultType
-        // 3.3 check if the number of entries is below specificMax specified in AccountType
-
-        // Here, defaultType can be supplied in two ways
-        // - via kind.defaultValues
-        // - via kind.typeList.get(0).rawValue
-        Integer defaultType = null;
-        if (newDataKind.defaultValues != null) {
-            defaultType = newDataKind.defaultValues.getAsInteger(COLUMN_FOR_TYPE);
-        }
-        final Set<Integer> allowedTypes = new HashSet<Integer>();
-        // key: type, value: the number of entries allowed for the type (specificMax)
-        final SparseIntArray typeSpecificMaxMap = new SparseIntArray();
-        if (defaultType != null) {
-            allowedTypes.add(defaultType);
-            typeSpecificMaxMap.put(defaultType, -1);
-        }
-        // Note: typeList may be used in different purposes when defaultValues are specified.
-        // Especially in IM, typeList contains available protocols (e.g. PROTOCOL_GOOGLE_TALK)
-        // instead of "types" which we want to treate here (e.g. TYPE_HOME). So we don't add
-        // anything other than defaultType into allowedTypes and typeSpecificMapMax.
-        if (!Im.CONTENT_ITEM_TYPE.equals(newDataKind.mimeType) &&
-                newDataKind.typeList != null && !newDataKind.typeList.isEmpty()) {
-            for (EditType editType : newDataKind.typeList) {
-                allowedTypes.add(editType.rawValue);
-                typeSpecificMaxMap.put(editType.rawValue, editType.specificMax);
-            }
-            if (defaultType == null) {
-                defaultType = newDataKind.typeList.get(0).rawValue;
-            }
-        }
-
-        if (defaultType == null) {
-            Log.w(TAG, "Default type isn't available for mimetype " + newDataKind.mimeType);
-        }
-
-        final int typeOverallMax = newDataKind.typeOverallMax;
-
-        // key: type, value: the number of current entries.
-        final SparseIntArray currentEntryCount = new SparseIntArray();
-        int totalCount = 0;
-
-        for (ValuesDelta entry : mimeEntries) {
-            if (typeOverallMax != -1 && totalCount >= typeOverallMax) {
-                break;
-            }
-
-            final ContentValues values = entry.getAfter();
-            if (values == null) {
-                continue;
-            }
-
-            final Integer oldType = entry.getAsInteger(COLUMN_FOR_TYPE);
-            final Integer typeForNewAccount;
-            if (!allowedTypes.contains(oldType)) {
-                // The new account doesn't support the type.
-                if (defaultType != null) {
-                    typeForNewAccount = defaultType.intValue();
-                    values.put(COLUMN_FOR_TYPE, defaultType.intValue());
-                    if (oldType != null && oldType == TYPE_CUSTOM) {
-                        values.remove(COLUMN_FOR_LABEL);
-                    }
-                } else {
-                    typeForNewAccount = null;
-                    values.remove(COLUMN_FOR_TYPE);
-                }
-            } else {
-                typeForNewAccount = oldType;
-            }
-            if (typeForNewAccount != null) {
-                final int specificMax = typeSpecificMaxMap.get(typeForNewAccount, 0);
-                if (specificMax >= 0) {
-                    final int currentCount = currentEntryCount.get(typeForNewAccount, 0);
-                    if (currentCount >= specificMax) {
-                        continue;
-                    }
-                    currentEntryCount.put(typeForNewAccount, currentCount + 1);
-                }
-            }
-            newState.addEntry(ValuesDelta.fromAfter(values));
-            totalCount++;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/model/SimCard.java b/src/com/android/contacts/common/model/SimCard.java
deleted file mode 100644
index 7b13096..0000000
--- a/src/com/android/contacts/common/model/SimCard.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.model;
-
-import android.os.Build;
-import android.support.annotation.RequiresApi;
-import android.telephony.PhoneNumberUtils;
-import android.telephony.SubscriptionInfo;
-import android.telephony.TelephonyManager;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Locale;
-import java.util.Objects;
-
-/**
- * Holds data for a SIM card in the device.
- */
-public class SimCard {
-
-    private static final String TAG = "SimCard";
-
-    public static final int NO_SUBSCRIPTION_ID = -1;
-
-    // This state is created from the info we get from the system
-    private final String mSimId;
-    private final int mSubscriptionId;
-    private final CharSequence mCarrierName;
-    private final CharSequence mDisplayName;
-    private final String mPhoneNumber;
-    private final String mCountryCode;
-
-    // This is our own state that we associate with SIM cards. Currently these are only used
-    // in the GoogleContacts app.
-    // Note: these are logically immutable but are not final to reduce required constructor
-    // parameters
-    private boolean mDismissed = false;
-    private boolean mImported = false;
-
-    private List<SimContact> mContacts;
-
-    public SimCard(SimCard other) {
-        mSimId = other.mSimId;
-        mSubscriptionId = other.mSubscriptionId;
-        mCarrierName = other.mCarrierName;
-        mDisplayName = other.mDisplayName;
-        mPhoneNumber = other.mPhoneNumber;
-        mCountryCode = other.mCountryCode;
-        mDismissed = other.mDismissed;
-        mImported = other.mImported;
-        if (other.mContacts != null) {
-            mContacts = new ArrayList<>(other.mContacts);
-        }
-    }
-
-    public SimCard(String simId, int subscriptionId, CharSequence carrierName,
-            CharSequence displayName, String phoneNumber, String countryCode) {
-        mSimId = simId;
-        mSubscriptionId = subscriptionId;
-        mCarrierName = carrierName;
-        mDisplayName = displayName;
-        mPhoneNumber = phoneNumber;
-        mCountryCode = countryCode != null ? countryCode.toUpperCase(Locale.US) : null;
-    }
-
-    public SimCard(String simId, CharSequence carrierName,
-            CharSequence displayName, String phoneNumber, String countryCode) {
-        this(simId, NO_SUBSCRIPTION_ID, carrierName, displayName, phoneNumber, countryCode);
-    }
-
-    public String getSimId() {
-        return mSimId;
-    }
-
-    public int getSubscriptionId() {
-        return mSubscriptionId;
-    }
-
-    public boolean hasValidSubscriptionId() {
-        return mSubscriptionId != NO_SUBSCRIPTION_ID;
-    }
-
-    public CharSequence getDisplayName() {
-        return mDisplayName;
-    }
-
-    public String getPhone() {
-        return mPhoneNumber;
-    }
-
-    public CharSequence getFormattedPhone() {
-        if (mPhoneNumber == null) {
-            return null;
-        }
-        return PhoneNumberUtils.formatNumber(mPhoneNumber, mCountryCode);
-    }
-
-    public boolean hasPhone() {
-        return mPhoneNumber != null;
-    }
-
-    public String getCountryCode() {
-        return mCountryCode;
-    }
-
-    /**
-     * Returns whether the contacts for this SIM card have been initialized.
-     */
-    public boolean areContactsAvailable() {
-        return mContacts != null;
-    }
-
-    /**
-     * Returns whether this SIM card has any SIM contacts.
-     *
-     * A precondition of this method is that the contacts have been initialized.
-     */
-    public boolean hasContacts() {
-        if (mContacts == null) {
-            throw new IllegalStateException("Contacts not loaded.");
-        }
-        return !mContacts.isEmpty();
-    }
-
-    /**
-     * Returns the number of contacts stored on this SIM card.
-     *
-     * A precondition of this method is that the contacts have been initialized.
-     */
-    public int getContactCount() {
-        if (mContacts == null) {
-            throw new IllegalStateException("Contacts not loaded.");
-        }
-        return mContacts.size();
-    }
-
-    public boolean isDismissed() {
-        return mDismissed;
-    }
-
-    public boolean isImported() {
-        return mImported;
-    }
-
-    public boolean isImportable() {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "isImportable: isDismissed? " + isDismissed() +
-                    " isImported? " + isImported() + " contacts=" + mContacts);
-        }
-        return !isDismissed() && !isImported() && hasContacts();
-    }
-
-    /**
-     * Returns the contacts for this SIM card or null if the contacts have not been initialized.
-     */
-    public List<SimContact> getContacts() {
-        return mContacts;
-    }
-
-    public SimCard withImportAndDismissStates(boolean imported, boolean dismissed) {
-        SimCard copy = new SimCard(this);
-        copy.mImported = imported;
-        copy.mDismissed = dismissed;
-        return copy;
-    }
-
-    public SimCard withImportedState(boolean imported) {
-        return withImportAndDismissStates(imported, mDismissed);
-    }
-
-    public SimCard withDismissedState(boolean dismissed) {
-        return withImportAndDismissStates(mImported, dismissed);
-    }
-
-    public SimCard withContacts(List<SimContact> contacts) {
-        final SimCard copy = new SimCard(this);
-        copy.mContacts = contacts;
-        return copy;
-    }
-
-    public SimCard withContacts(SimContact... contacts) {
-        final SimCard copy = new SimCard(this);
-        copy.mContacts = Arrays.asList(contacts);
-        return copy;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        SimCard simCard = (SimCard) o;
-
-        return mSubscriptionId == simCard.mSubscriptionId && mDismissed == simCard.mDismissed &&
-                mImported == simCard.mImported && Objects.equals(mSimId, simCard.mSimId) &&
-                Objects.equals(mPhoneNumber, simCard.mPhoneNumber) &&
-                Objects.equals(mCountryCode, simCard.mCountryCode);
-    }
-
-    @Override
-    public int hashCode() {
-        int result = Objects.hash(mSimId, mPhoneNumber, mCountryCode);
-        result = 31 * result + mSubscriptionId;
-        result = 31 * result + (mDismissed ? 1 : 0);
-        result = 31 * result + (mImported ? 1 : 0);
-        return result;
-    }
-
-
-    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
-    public static SimCard create(SubscriptionInfo info) {
-        return new SimCard(info.getIccId(), info.getSubscriptionId(),
-                info.getCarrierName(), info.getDisplayName(), info.getNumber(),
-                info.getCountryIso());
-    }
-
-    public static SimCard create(TelephonyManager telephony, String displayLabel) {
-        if (telephony.getSimState() == TelephonyManager.SIM_STATE_READY) {
-            return new SimCard(telephony.getSimSerialNumber(),
-                    telephony.getSimOperatorName(), displayLabel, telephony.getLine1Number(),
-                    telephony.getSimCountryIso());
-        } else {
-            // This should never happen but in case it does just fallback to an "empty" instance
-            return new SimCard(/* SIM id */ "", /* operator name */ null, displayLabel,
-                    /* phone number */ "", /* Country code */ null);
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/model/SimContact.java b/src/com/android/contacts/common/model/SimContact.java
deleted file mode 100644
index 2d26029..0000000
--- a/src/com/android/contacts/common/model/SimContact.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.model;
-
-import android.content.ContentProviderOperation;
-import android.database.MatrixCursor;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.google.common.collect.ComparisonChain;
-import com.google.common.collect.Ordering;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * Holds data for contacts loaded from the SIM card.
- */
-public class SimContact implements Parcelable {
-    private final long mId;
-    private final String mName;
-    private final String mPhone;
-    private final String[] mEmails;
-
-    public SimContact(long id, String name, String phone, String[] emails) {
-        mId = id;
-        mName = name;
-        mPhone = phone == null ? "" : phone.trim();
-        mEmails = emails;
-    }
-
-    public long getId() {
-        return mId;
-    }
-
-    public String getName() {
-        return mName;
-    }
-
-    public String getPhone() {
-        return mPhone;
-    }
-
-    public String[] getEmails() {
-        return mEmails;
-    }
-
-    public void appendCreateContactOperations(List<ContentProviderOperation> ops,
-            AccountWithDataSet targetAccount) {
-        // There is nothing to save so skip it.
-        if (!hasName() && !hasPhone() && !hasEmails()) return;
-
-        final int rawContactOpIndex = ops.size();
-        ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
-                .withYieldAllowed(true)
-                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, targetAccount.name)
-                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, targetAccount.type)
-                .withValue(ContactsContract.RawContacts.DATA_SET, targetAccount.dataSet)
-                .build());
-        if (mName != null) {
-            ops.add(createInsertOp(rawContactOpIndex, StructuredName.CONTENT_ITEM_TYPE,
-                    StructuredName.DISPLAY_NAME, mName));
-        }
-        if (!mPhone.isEmpty()) {
-            ops.add(createInsertOp(rawContactOpIndex, Phone.CONTENT_ITEM_TYPE,
-                    Phone.NUMBER, mPhone));
-        }
-        if (mEmails != null) {
-            for (String email : mEmails) {
-                ops.add(createInsertOp(rawContactOpIndex, Email.CONTENT_ITEM_TYPE,
-                        Email.ADDRESS, email));
-            }
-        }
-    }
-
-    private ContentProviderOperation createInsertOp(int rawContactOpIndex, String mimeType,
-            String column, String value) {
-        return ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
-                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactOpIndex)
-                .withValue(ContactsContract.Data.MIMETYPE, mimeType)
-                .withValue(column, value)
-                .build();
-    }
-
-    public void appendAsContactRow(MatrixCursor cursor) {
-        cursor.newRow().add(ContactsContract.Contacts._ID, mId)
-                .add(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY, mName)
-                .add(ContactsContract.Contacts.LOOKUP_KEY, getLookupKey());
-    }
-
-    public boolean hasName() {
-        return mName != null;
-    }
-
-    public boolean hasPhone() {
-        return !mPhone.isEmpty();
-    }
-
-    public boolean hasEmails() {
-        return mEmails != null && mEmails.length > 0;
-    }
-
-    /**
-     * Generate a "fake" lookup key. This is needed because
-     * {@link com.android.contacts.common.ContactPhotoManager} will only generate a letter avatar
-     * if the contact has a lookup key.
-     */
-    private String getLookupKey() {
-        if (mName != null) {
-            return "sim-n-" + Uri.encode(mName);
-        } else if (mPhone != null) {
-            return "sim-p-" + Uri.encode(mPhone);
-        } else {
-            return null;
-        }
-    }
-
-    @Override
-    public String toString() {
-        return "SimContact{" +
-                "mId=" + mId +
-                ", mName='" + mName + '\'' +
-                ", mPhone='" + mPhone + '\'' +
-                ", mEmails=" + Arrays.toString(mEmails) +
-                '}';
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null || getClass() != o.getClass()) return false;
-
-        final SimContact that = (SimContact) o;
-
-        return mId == that.mId && Objects.equals(mName, that.mName) &&
-                Objects.equals(mPhone, that.mPhone) && Arrays.equals(mEmails, that.mEmails);
-    }
-
-    @Override
-    public int hashCode() {
-        int result = (int) (mId ^ (mId >>> 32));
-        result = 31 * result + (mName != null ? mName.hashCode() : 0);
-        result = 31 * result + (mPhone != null ? mPhone.hashCode() : 0);
-        result = 31 * result + Arrays.hashCode(mEmails);
-        return result;
-    }
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeLong(mId);
-        dest.writeString(mName);
-        dest.writeString(mPhone);
-        dest.writeStringArray(mEmails);
-    }
-
-    public static final Creator<SimContact> CREATOR = new Creator<SimContact>() {
-        @Override
-        public SimContact createFromParcel(Parcel source) {
-            final long id = source.readLong();
-            final String name = source.readString();
-            final String phone = source.readString();
-            final String[] emails = source.createStringArray();
-            return new SimContact(id, name, phone, emails);
-        }
-
-        @Override
-        public SimContact[] newArray(int size) {
-            return new SimContact[size];
-        }
-    };
-
-    /**
-     * Convert a collection of SIM contacts to a Cursor matching a query from
-     * {@link android.provider.ContactsContract.Contacts#CONTENT_URI} with the provided projection.
-     *
-     * This allows a collection of SIM contacts to be displayed using the existing adapters for
-     * contacts.
-     */
-    public static final MatrixCursor convertToContactsCursor(Collection<SimContact> contacts,
-            String[] projection) {
-        final MatrixCursor result = new MatrixCursor(projection);
-        for (SimContact contact : contacts) {
-            contact.appendAsContactRow(result);
-        }
-        return result;
-    }
-
-    /**
-     * Returns the index of a contact with a matching name and phone
-     * @param contacts list to search. Should be sorted using
-     * {@link SimContact#compareByPhoneThenName()}
-     * @param phone the phone to search for
-     * @param name the name to search for
-     */
-    public static int findByPhoneAndName(List<SimContact> contacts, String phone, String name) {
-        return Collections.binarySearch(contacts, new SimContact(-1, name, phone, null),
-                compareByPhoneThenName());
-    }
-
-    public static final Comparator<SimContact> compareByPhoneThenName() {
-        return new Comparator<SimContact>() {
-            @Override
-            public int compare(SimContact lhs, SimContact rhs) {
-                return ComparisonChain.start()
-                        .compare(lhs.mPhone, rhs.mPhone)
-                        .compare(lhs.mName, rhs.mName, Ordering.<String>natural().nullsFirst())
-                        .result();
-            }
-        };
-    }
-
-    public static final Comparator<SimContact> compareById() {
-        return new Comparator<SimContact>() {
-            @Override
-            public int compare(SimContact lhs, SimContact rhs) {
-                // We assume ids are unique.
-                return Long.compare(lhs.mId, rhs.mId);
-            }
-        };
-    }
-}
diff --git a/src/com/android/contacts/common/model/ValuesDelta.java b/src/com/android/contacts/common/model/ValuesDelta.java
deleted file mode 100644
index d6e08a8..0000000
--- a/src/com/android/contacts/common/model/ValuesDelta.java
+++ /dev/null
@@ -1,601 +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.common.model;
-
-import android.content.ContentProviderOperation;
-import android.content.ContentValues;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.BaseColumns;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.text.TextUtils;
-
-import com.android.contacts.common.compat.CompatUtils;
-
-import com.google.common.collect.Sets;
-
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Type of {@link android.content.ContentValues} that maintains both an original state and a
- * modified version of that state. This allows us to build insert, update,
- * or delete operations based on a "before" {@link Entity} snapshot.
- */
-public class ValuesDelta implements Parcelable {
-    protected ContentValues mBefore;
-    protected ContentValues mAfter;
-    protected String mIdColumn = BaseColumns._ID;
-    private boolean mFromTemplate;
-
-    /**
-     * Next value to assign to {@link #mIdColumn} when building an insert
-     * operation through {@link #fromAfter(android.content.ContentValues)}. This is used so
-     * we can concretely reference this {@link ValuesDelta} before it has
-     * been persisted.
-     */
-    protected static int sNextInsertId = -1;
-
-    protected ValuesDelta() {
-    }
-
-    /**
-     * Create {@link ValuesDelta}, using the given object as the
-     * "before" state, usually from an {@link Entity}.
-     */
-    public static ValuesDelta fromBefore(ContentValues before) {
-        final ValuesDelta entry = new ValuesDelta();
-        entry.mBefore = before;
-        entry.mAfter = new ContentValues();
-        return entry;
-    }
-
-    /**
-     * Create {@link ValuesDelta}, using the given object as the "after"
-     * state, usually when we are inserting a row instead of updating.
-     */
-    public static ValuesDelta fromAfter(ContentValues after) {
-        final ValuesDelta entry = new ValuesDelta();
-        entry.mBefore = null;
-        entry.mAfter = after;
-
-        // Assign temporary id which is dropped before insert.
-        entry.mAfter.put(entry.mIdColumn, sNextInsertId--);
-        return entry;
-    }
-
-    public ContentValues getAfter() {
-        return mAfter;
-    }
-
-    public ContentValues getBefore() {
-        return mBefore;
-    }
-
-    public boolean containsKey(String key) {
-        return ((mAfter != null && mAfter.containsKey(key)) ||
-                (mBefore != null && mBefore.containsKey(key)));
-    }
-
-    public String getAsString(String key) {
-        if (mAfter != null && mAfter.containsKey(key)) {
-            return mAfter.getAsString(key);
-        } else if (mBefore != null && mBefore.containsKey(key)) {
-            return mBefore.getAsString(key);
-        } else {
-            return null;
-        }
-    }
-
-    public byte[] getAsByteArray(String key) {
-        if (mAfter != null && mAfter.containsKey(key)) {
-            return mAfter.getAsByteArray(key);
-        } else if (mBefore != null && mBefore.containsKey(key)) {
-            return mBefore.getAsByteArray(key);
-        } else {
-            return null;
-        }
-    }
-
-    public Long getAsLong(String key) {
-        if (mAfter != null && mAfter.containsKey(key)) {
-            return mAfter.getAsLong(key);
-        } else if (mBefore != null && mBefore.containsKey(key)) {
-            return mBefore.getAsLong(key);
-        } else {
-            return null;
-        }
-    }
-
-    public Integer getAsInteger(String key) {
-        return getAsInteger(key, null);
-    }
-
-    public Integer getAsInteger(String key, Integer defaultValue) {
-        if (mAfter != null && mAfter.containsKey(key)) {
-            return mAfter.getAsInteger(key);
-        } else if (mBefore != null && mBefore.containsKey(key)) {
-            return mBefore.getAsInteger(key);
-        } else {
-            return defaultValue;
-        }
-    }
-
-    public boolean isChanged(String key) {
-        if (mAfter == null || !mAfter.containsKey(key)) {
-            return false;
-        }
-
-        Object newValue = mAfter.get(key);
-        Object oldValue = mBefore.get(key);
-
-        if (oldValue == null) {
-            return newValue != null;
-        }
-
-        return !oldValue.equals(newValue);
-    }
-
-    public String getMimetype() {
-        return getAsString(ContactsContract.Data.MIMETYPE);
-    }
-
-    public Long getId() {
-        return getAsLong(mIdColumn);
-    }
-
-    public void setIdColumn(String idColumn) {
-        mIdColumn = idColumn;
-    }
-
-    public boolean isPrimary() {
-        final Long isPrimary = getAsLong(ContactsContract.Data.IS_PRIMARY);
-        return isPrimary == null ? false : isPrimary != 0;
-    }
-
-    public void setFromTemplate(boolean isFromTemplate) {
-        mFromTemplate = isFromTemplate;
-    }
-
-    public boolean isFromTemplate() {
-        return mFromTemplate;
-    }
-
-    public boolean isSuperPrimary() {
-        final Long isSuperPrimary = getAsLong(ContactsContract.Data.IS_SUPER_PRIMARY);
-        return isSuperPrimary == null ? false : isSuperPrimary != 0;
-    }
-
-    public boolean beforeExists() {
-        return (mBefore != null && mBefore.containsKey(mIdColumn));
-    }
-
-    /**
-     * When "after" is present, then visible
-     */
-    public boolean isVisible() {
-        return (mAfter != null);
-    }
-
-    /**
-     * When "after" is wiped, action is "delete"
-     */
-    public boolean isDelete() {
-        return beforeExists() && (mAfter == null);
-    }
-
-    /**
-     * When no "before" or "after", is transient
-     */
-    public boolean isTransient() {
-        return (mBefore == null) && (mAfter == null);
-    }
-
-    /**
-     * When "after" has some changes, action is "update"
-     */
-    public boolean isUpdate() {
-        if (!beforeExists() || mAfter == null || mAfter.size() == 0) {
-            return false;
-        }
-        for (String key : mAfter.keySet()) {
-            Object newValue = mAfter.get(key);
-            Object oldValue = mBefore.get(key);
-            if (oldValue == null) {
-                if (newValue != null) {
-                    return true;
-                }
-            } else if (!oldValue.equals(newValue)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * When "after" has no changes, action is no-op
-     */
-    public boolean isNoop() {
-        return beforeExists() && (mAfter != null && mAfter.size() == 0);
-    }
-
-    /**
-     * When no "before" id, and has "after", action is "insert"
-     */
-    public boolean isInsert() {
-        return !beforeExists() && (mAfter != null);
-    }
-
-    public void markDeleted() {
-        mAfter = null;
-    }
-
-    /**
-     * Ensure that our internal structure is ready for storing updates.
-     */
-    private void ensureUpdate() {
-        if (mAfter == null) {
-            mAfter = new ContentValues();
-        }
-    }
-
-    public void put(String key, String value) {
-        ensureUpdate();
-        mAfter.put(key, value);
-    }
-
-    public void put(String key, byte[] value) {
-        ensureUpdate();
-        mAfter.put(key, value);
-    }
-
-    public void put(String key, int value) {
-        ensureUpdate();
-        mAfter.put(key, value);
-    }
-
-    public void put(String key, long value) {
-        ensureUpdate();
-        mAfter.put(key, value);
-    }
-
-    public void putNull(String key) {
-        ensureUpdate();
-        mAfter.putNull(key);
-    }
-
-    public void copyStringFrom(ValuesDelta from, String key) {
-        ensureUpdate();
-        if (containsKey(key) || from.containsKey(key)) {
-            put(key, from.getAsString(key));
-        }
-    }
-
-    /**
-     * Return set of all keys defined through this object.
-     */
-    public Set<String> keySet() {
-        final HashSet<String> keys = Sets.newHashSet();
-
-        if (mBefore != null) {
-            for (Map.Entry<String, Object> entry : mBefore.valueSet()) {
-                keys.add(entry.getKey());
-            }
-        }
-
-        if (mAfter != null) {
-            for (Map.Entry<String, Object> entry : mAfter.valueSet()) {
-                keys.add(entry.getKey());
-            }
-        }
-
-        return keys;
-    }
-
-    /**
-     * Return complete set of "before" and "after" values mixed together,
-     * giving full state regardless of edits.
-     */
-    public ContentValues getCompleteValues() {
-        final ContentValues values = new ContentValues();
-        if (mBefore != null) {
-            values.putAll(mBefore);
-        }
-        if (mAfter != null) {
-            values.putAll(mAfter);
-        }
-        if (values.containsKey(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID)) {
-            // Clear to avoid double-definitions, and prefer rows
-            values.remove(ContactsContract.CommonDataKinds.GroupMembership.GROUP_SOURCE_ID);
-        }
-
-        return values;
-    }
-
-    /**
-     * Merge the "after" values from the given {@link ValuesDelta},
-     * discarding any existing "after" state. This is typically used when
-     * re-parenting changes onto an updated {@link Entity}.
-     */
-    public static ValuesDelta mergeAfter(ValuesDelta local, ValuesDelta remote) {
-        // Bail early if trying to merge delete with missing local
-        if (local == null && (remote.isDelete() || remote.isTransient())) return null;
-
-        // Create local version if none exists yet
-        if (local == null) local = new ValuesDelta();
-
-        if (!local.beforeExists()) {
-            // Any "before" record is missing, so take all values as "insert"
-            local.mAfter = remote.getCompleteValues();
-        } else {
-            // Existing "update" with only "after" values
-            local.mAfter = remote.mAfter;
-        }
-
-        return local;
-    }
-
-    @Override
-    public boolean equals(Object object) {
-        if (object instanceof ValuesDelta) {
-            // Only exactly equal with both are identical subsets
-            final ValuesDelta other = (ValuesDelta)object;
-            return this.subsetEquals(other) && other.subsetEquals(this);
-        }
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder builder = new StringBuilder();
-        toString(builder);
-        return builder.toString();
-    }
-
-    /**
-     * Helper for building string representation, leveraging the given
-     * {@link StringBuilder} to minimize allocations.
-     */
-    public void toString(StringBuilder builder) {
-        builder.append("{ ");
-        builder.append("IdColumn=");
-        builder.append(mIdColumn);
-        builder.append(", FromTemplate=");
-        builder.append(mFromTemplate);
-        builder.append(", ");
-        for (String key : this.keySet()) {
-            builder.append(key);
-            builder.append("=");
-            builder.append(this.getAsString(key));
-            builder.append(", ");
-        }
-        builder.append("}");
-    }
-
-    /**
-     * Check if the given {@link ValuesDelta} is both a subset of this
-     * object, and any defined keys have equal values.
-     */
-    public boolean subsetEquals(ValuesDelta other) {
-        for (String key : this.keySet()) {
-            final String ourValue = this.getAsString(key);
-            final String theirValue = other.getAsString(key);
-            if (ourValue == null) {
-                // If they have value when we're null, no match
-                if (theirValue != null) return false;
-            } else {
-                // If both values defined and aren't equal, no match
-                if (!ourValue.equals(theirValue)) return false;
-            }
-        }
-        // All values compared and matched
-        return true;
-    }
-
-    /**
-     * Build a {@link android.content.ContentProviderOperation} that will transform our
-     * "before" state into our "after" state, using insert, update, or
-     * delete as needed.
-     */
-    public ContentProviderOperation.Builder buildDiff(Uri targetUri) {
-        return buildDiffHelper(targetUri);
-    }
-
-    /**
-     * For compatibility purpose.
-     */
-    public BuilderWrapper buildDiffWrapper(Uri targetUri) {
-        final ContentProviderOperation.Builder builder = buildDiffHelper(targetUri);
-        BuilderWrapper bw = null;
-        if (isInsert()) {
-            bw = new BuilderWrapper(builder, CompatUtils.TYPE_INSERT);
-        } else if (isDelete()) {
-            bw = new BuilderWrapper(builder, CompatUtils.TYPE_DELETE);
-        } else if (isUpdate()) {
-            bw = new BuilderWrapper(builder, CompatUtils.TYPE_UPDATE);
-        }
-        return bw;
-    }
-
-    private ContentProviderOperation.Builder buildDiffHelper(Uri targetUri) {
-        ContentProviderOperation.Builder builder = null;
-        if (isInsert()) {
-            // Changed values are "insert" back-referenced to Contact
-            mAfter.remove(mIdColumn);
-            builder = ContentProviderOperation.newInsert(targetUri);
-            builder.withValues(mAfter);
-        } else if (isDelete()) {
-            // When marked for deletion and "before" exists, then "delete"
-            builder = ContentProviderOperation.newDelete(targetUri);
-            builder.withSelection(mIdColumn + "=" + getId(), null);
-        } else if (isUpdate()) {
-            // When has changes and "before" exists, then "update"
-            builder = ContentProviderOperation.newUpdate(targetUri);
-            builder.withSelection(mIdColumn + "=" + getId(), null);
-            builder.withValues(mAfter);
-        }
-        return builder;
-    }
-
-    /** {@inheritDoc} */
-    public int describeContents() {
-        // Nothing special about this parcel
-        return 0;
-    }
-
-    /** {@inheritDoc} */
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeParcelable(mBefore, flags);
-        dest.writeParcelable(mAfter, flags);
-        dest.writeString(mIdColumn);
-    }
-
-    public void readFromParcel(Parcel source) {
-        final ClassLoader loader = getClass().getClassLoader();
-        mBefore = source.<ContentValues> readParcelable(loader);
-        mAfter = source.<ContentValues> readParcelable(loader);
-        mIdColumn = source.readString();
-    }
-
-    public static final Creator<ValuesDelta> CREATOR = new Creator<ValuesDelta>() {
-        public ValuesDelta createFromParcel(Parcel in) {
-            final ValuesDelta values = new ValuesDelta();
-            values.readFromParcel(in);
-            return values;
-        }
-
-        public ValuesDelta[] newArray(int size) {
-            return new ValuesDelta[size];
-        }
-    };
-
-    public void setGroupRowId(long groupId) {
-        put(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, groupId);
-    }
-
-    public Long getGroupRowId() {
-        return getAsLong(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID);
-    }
-
-    public void setPhoto(byte[] value) {
-        put(ContactsContract.CommonDataKinds.Photo.PHOTO, value);
-    }
-
-    public byte[] getPhoto() {
-        return getAsByteArray(ContactsContract.CommonDataKinds.Photo.PHOTO);
-    }
-
-    public void setSuperPrimary(boolean val) {
-        if (val) {
-            put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
-        } else {
-            put(ContactsContract.Data.IS_SUPER_PRIMARY, 0);
-        }
-    }
-
-    public void setPhoneticFamilyName(String value) {
-        put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME, value);
-    }
-
-    public void setPhoneticMiddleName(String value) {
-        put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_MIDDLE_NAME, value);
-    }
-
-    public void setPhoneticGivenName(String value) {
-        put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_GIVEN_NAME, value);
-    }
-
-    public String getPhoneticFamilyName() {
-        return getAsString(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME);
-    }
-
-    public String getPhoneticMiddleName() {
-        return getAsString(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_MIDDLE_NAME);
-    }
-
-    public String getPhoneticGivenName() {
-        return getAsString(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_GIVEN_NAME);
-    }
-
-    public String getDisplayName() {
-        return getAsString(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
-    }
-
-    public void setDisplayName(String name) {
-        if (name == null) {
-            putNull(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
-        } else {
-            put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name);
-        }
-    }
-
-    public void copyStructuredNameFieldsFrom(ValuesDelta name) {
-        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
-
-        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME);
-        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME);
-        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.PREFIX);
-        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME);
-        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.SUFFIX);
-
-        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.PHONETIC_GIVEN_NAME);
-        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.PHONETIC_MIDDLE_NAME);
-        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME);
-
-        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.FULL_NAME_STYLE);
-        copyStringFrom(name, ContactsContract.Data.DATA11);
-    }
-
-    public String getPhoneNumber() {
-        return getAsString(ContactsContract.CommonDataKinds.Phone.NUMBER);
-    }
-
-    public String getPhoneNormalizedNumber() {
-        return getAsString(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER);
-    }
-
-    public boolean hasPhoneType() {
-        return getPhoneType() != null;
-    }
-
-    public Integer getPhoneType() {
-        return getAsInteger(ContactsContract.CommonDataKinds.Phone.TYPE);
-    }
-
-    public String getPhoneLabel() {
-        return getAsString(ContactsContract.CommonDataKinds.Phone.LABEL);
-    }
-
-    public String getEmailData() {
-        return getAsString(ContactsContract.CommonDataKinds.Email.DATA);
-    }
-
-    public boolean hasEmailType() {
-        return getEmailType() != null;
-    }
-
-    public Integer getEmailType() {
-        return getAsInteger(ContactsContract.CommonDataKinds.Email.TYPE);
-    }
-
-    public String getEmailLabel() {
-        return getAsString(ContactsContract.CommonDataKinds.Email.LABEL);
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/AccountDisplayInfo.java b/src/com/android/contacts/common/model/account/AccountDisplayInfo.java
deleted file mode 100644
index f68fdd5..0000000
--- a/src/com/android/contacts/common/model/account/AccountDisplayInfo.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.model.account;
-
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.support.annotation.StringRes;
-import android.text.TextUtils;
-
-/**
- * Wrapper around AccountWithDataSet that contains user-friendly labels and an icon.
- *
- * The raw values for name and type in AccountWithDataSet are not always (or even usually)
- * appropriate for direct display to the user.
- */
-public class AccountDisplayInfo {
-    private final AccountWithDataSet mSource;
-
-    private final CharSequence mName;
-    private final CharSequence mType;
-    private final Drawable mIcon;
-
-    private final boolean mIsDeviceAccount;
-
-    public AccountDisplayInfo(AccountWithDataSet account, CharSequence name, CharSequence type,
-            Drawable icon, boolean isDeviceAccount) {
-        mSource = account;
-        mName = name;
-        mType = type;
-        mIcon = icon;
-        mIsDeviceAccount = isDeviceAccount;
-    }
-
-    public AccountWithDataSet getSource() {
-        return mSource;
-    }
-
-    public CharSequence getNameLabel() {
-        return mName;
-    }
-
-    public CharSequence getTypeLabel() {
-        return mType;
-    }
-
-    public Drawable getIcon() {
-        return mIcon;
-    }
-
-    public boolean hasGoogleAccountType() {
-        return GoogleAccountType.ACCOUNT_TYPE.equals(mSource.type);
-    }
-
-    public boolean isGoogleAccount() {
-        return GoogleAccountType.ACCOUNT_TYPE.equals(mSource.type) && mSource.dataSet == null;
-    }
-
-    public boolean isDeviceAccount() {
-        return mIsDeviceAccount;
-    }
-
-    public boolean hasDistinctName() {
-        return !TextUtils.equals(mName, mType);
-    }
-
-    public AccountDisplayInfo withName(CharSequence name) {
-        return withNameAndType(name, mType);
-    }
-
-    public AccountDisplayInfo withType(CharSequence type) {
-        return withNameAndType(mName, type);
-    }
-
-    public AccountDisplayInfo withNameAndType(CharSequence name, CharSequence type) {
-        return new AccountDisplayInfo(mSource, name, type, mIcon, mIsDeviceAccount);
-    }
-
-    public AccountDisplayInfo formatted(Context context, @StringRes int nameFormat,
-            @StringRes int typeFormat) {
-        return new AccountDisplayInfo(mSource, context.getString(nameFormat, mName),
-                context.getString(typeFormat, mType), mIcon, mIsDeviceAccount);
-    }
-
-    public AccountDisplayInfo withFormattedName(Context context, @StringRes int nameFormat) {
-        return withName(context.getString(nameFormat, mName));
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/AccountDisplayInfoFactory.java b/src/com/android/contacts/common/model/account/AccountDisplayInfoFactory.java
deleted file mode 100644
index aad1689..0000000
--- a/src/com/android/contacts/common/model/account/AccountDisplayInfoFactory.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.model.account;
-
-import android.content.Context;
-
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.util.DeviceLocalAccountTypeFactory;
-import com.android.contactsbind.ObjectFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Provides methods to get AccountDisplayInfo instances for available accounts.
- *
- * For most accounts the account name will be used for the label but device accounts and
- * SIM accounts have friendly names associated with them unless there is more than one of these
- * types of accounts present in the list.
- */
-public class AccountDisplayInfoFactory {
-
-    private final Context mContext;
-    private final AccountTypeManager mAccountTypeManager;
-
-    private final DeviceLocalAccountTypeFactory mDeviceAccountTypeFactory;
-
-    private final int mDeviceAccountCount;
-    private final int mSimAccountCount;
-
-    public AccountDisplayInfoFactory(Context context, List<AccountWithDataSet> accounts) {
-        this(context, AccountTypeManager.getInstance(context),
-                ObjectFactory.getDeviceLocalAccountTypeFactory(context), accounts);
-    }
-
-    public AccountDisplayInfoFactory(Context context, AccountTypeManager accountTypeManager,
-            DeviceLocalAccountTypeFactory deviceAccountTypeFactory,
-            List<AccountWithDataSet> accounts) {
-        mContext = context;
-        mAccountTypeManager = accountTypeManager;
-        mDeviceAccountTypeFactory = deviceAccountTypeFactory;
-
-        mSimAccountCount = countOfType(DeviceLocalAccountTypeFactory.TYPE_SIM, accounts);
-        mDeviceAccountCount = countOfType(DeviceLocalAccountTypeFactory.TYPE_DEVICE, accounts);
-    }
-
-    public AccountDisplayInfo getAccountDisplayInfo(AccountWithDataSet account) {
-        final AccountType type = mAccountTypeManager.getAccountTypeForAccount(account);
-        final CharSequence name = shouldUseTypeLabelForName(account)
-                ? type.getDisplayLabel(mContext)
-                : account.name;
-        return new AccountDisplayInfo(account, name, type.getDisplayLabel(mContext),
-                type.getDisplayIcon(mContext),
-                DeviceLocalAccountTypeFactory.Util.isLocalAccountType(mDeviceAccountTypeFactory,
-                        type.accountType));
-    }
-
-    public AccountDisplayInfo getAccountDisplayInfoFor(ContactListFilter filter) {
-        return getAccountDisplayInfo(filter.toAccountWithDataSet());
-    }
-
-    public AccountDisplayInfo getAccountDisplayInfoFor(RawContactDelta delta) {
-        final AccountWithDataSet account = new AccountWithDataSet(delta.getAccountName(),
-                delta.getAccountType(), delta.getDataSet());
-        return getAccountDisplayInfo(account);
-    }
-
-    public static AccountDisplayInfoFactory fromListFilters(Context context,
-            List<ContactListFilter> filters) {
-        final List<AccountWithDataSet> accounts = new ArrayList<>(filters.size());
-        for (ContactListFilter filter : filters) {
-            accounts.add(filter.toAccountWithDataSet());
-        }
-        return new AccountDisplayInfoFactory(context, accounts);
-    }
-
-    public static AccountDisplayInfoFactory forAllAccounts(Context context) {
-        final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(context);
-        final List<AccountWithDataSet> accounts = accountTypeManager.getAccounts(false);
-        return new AccountDisplayInfoFactory(context, accounts);
-    }
-
-    public static AccountDisplayInfoFactory forWritableAccounts(Context context) {
-        final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(context);
-        final List<AccountWithDataSet> accounts = accountTypeManager.getAccounts(true);
-        return new AccountDisplayInfoFactory(context, accounts);
-    }
-
-    private boolean shouldUseTypeLabelForName(AccountWithDataSet account) {
-        final int type = mDeviceAccountTypeFactory.classifyAccount(account.type);
-        return (type == DeviceLocalAccountTypeFactory.TYPE_SIM && mSimAccountCount == 1)
-                || (type == DeviceLocalAccountTypeFactory.TYPE_DEVICE && mDeviceAccountCount == 1)
-                || account.name == null;
-
-    }
-
-    private int countOfType(@DeviceLocalAccountTypeFactory.LocalAccountType int type,
-            List<AccountWithDataSet> accounts) {
-        int count = 0;
-        for (AccountWithDataSet account : accounts) {
-            if (mDeviceAccountTypeFactory.classifyAccount(account.type) == type) {
-                count++;
-            }
-        }
-        return count;
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/AccountType.java b/src/com/android/contacts/common/model/account/AccountType.java
deleted file mode 100644
index 80fb4aa..0000000
--- a/src/com/android/contacts/common/model/account/AccountType.java
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model.account;
-
-import android.accounts.AuthenticatorDescription;
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.graphics.drawable.Drawable;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.RawContacts;
-import android.view.inputmethod.EditorInfo;
-import android.widget.EditText;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-import java.text.Collator;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-
-/**
- * Internal structure that represents constraints and styles for a specific data
- * source, such as the various data types they support, including details on how
- * those types should be rendered and edited.
- * <p>
- * In the future this may be inflated from XML defined by a data source.
- */
-public abstract class AccountType {
-    private static final String TAG = "AccountType";
-
-    /**
-     * The {@link RawContacts#ACCOUNT_TYPE} these constraints apply to.
-     */
-    public String accountType = null;
-
-    /**
-     * The {@link RawContacts#DATA_SET} these constraints apply to.
-     */
-    public String dataSet = null;
-
-    /**
-     * Package that resources should be loaded from.  Will be null for embedded types, in which
-     * case resources are stored in this package itself.
-     *
-     * TODO Clean up {@link #resourcePackageName}, {@link #syncAdapterPackageName} and
-     * {@link #getViewContactNotifyServicePackageName()}.
-     *
-     * There's the following invariants:
-     * - {@link #syncAdapterPackageName} is always set to the actual sync adapter package name.
-     * - {@link #resourcePackageName} too is set to the same value, unless {@link #isEmbedded()},
-     *   in which case it'll be null.
-     * There's an unfortunate exception of {@link FallbackAccountType}.  Even though it
-     * {@link #isEmbedded()}, but we set non-null to {@link #resourcePackageName} for unit tests.
-     */
-    public String resourcePackageName;
-    /**
-     * The package name for the authenticator (for the embedded types, i.e. Google and Exchange)
-     * or the sync adapter (for external type, including extensions).
-     */
-    public String syncAdapterPackageName;
-
-    public int titleRes;
-    public int iconRes;
-
-    /**
-     * Set of {@link DataKind} supported by this source.
-     */
-    private ArrayList<DataKind> mKinds = Lists.newArrayList();
-
-    /**
-     * Lookup map of {@link #mKinds} on {@link DataKind#mimeType}.
-     */
-    private HashMap<String, DataKind> mMimeKinds = Maps.newHashMap();
-
-    protected boolean mIsInitialized;
-
-    protected static class DefinitionException extends Exception {
-        public DefinitionException(String message) {
-            super(message);
-        }
-
-        public DefinitionException(String message, Exception inner) {
-            super(message, inner);
-        }
-    }
-
-    /**
-     * Whether this account type was able to be fully initialized.  This may be false if
-     * (for example) the package name associated with the account type could not be found.
-     */
-    public final boolean isInitialized() {
-        return mIsInitialized;
-    }
-
-    /**
-     * @return Whether this type is an "embedded" type.  i.e. any of {@link FallbackAccountType},
-     * {@link GoogleAccountType} or {@link ExternalAccountType}.
-     *
-     * If an embedded type cannot be initialized (i.e. if {@link #isInitialized()} returns
-     * {@code false}) it's considered critical, and the application will crash.  On the other
-     * hand if it's not an embedded type, we just skip loading the type.
-     */
-    public boolean isEmbedded() {
-        return true;
-    }
-
-    public boolean isExtension() {
-        return false;
-    }
-
-    /**
-     * @return True if contacts can be created and edited using this app. If false,
-     * there could still be an external editor as provided by
-     * {@link #getEditContactActivityClassName()} or {@link #getCreateContactActivityClassName()}
-     */
-    public abstract boolean areContactsWritable();
-
-    /**
-     * Returns an optional custom invite contact activity.
-     *
-     * Only makes sense for non-embedded account types.
-     * The activity class should reside in the sync adapter package as determined by
-     * {@link #syncAdapterPackageName}.
-     */
-    public String getInviteContactActivityClassName() {
-        return null;
-    }
-
-    /**
-     * Returns an optional service that can be launched whenever a contact is being looked at.
-     * This allows the sync adapter to provide more up-to-date information.
-     *
-     * The service class should reside in the sync adapter package as determined by
-     * {@link #getViewContactNotifyServicePackageName()}.
-     */
-    public String getViewContactNotifyServiceClassName() {
-        return null;
-    }
-
-    /**
-     * TODO This is way too hacky should be removed.
-     *
-     * This is introduced for {@link GoogleAccountType} where {@link #syncAdapterPackageName}
-     * is the authenticator package name but the notification service is in the sync adapter
-     * package.  See {@link #resourcePackageName} -- we should clean up those.
-     */
-    public String getViewContactNotifyServicePackageName() {
-        return syncAdapterPackageName;
-    }
-
-    /** Returns an optional Activity string that can be used to view the group. */
-    public String getViewGroupActivity() {
-        return null;
-    }
-
-    public CharSequence getDisplayLabel(Context context) {
-        // Note this resource is defined in the sync adapter package, not resourcePackageName.
-        return getResourceText(context, syncAdapterPackageName, titleRes, accountType);
-    }
-
-    /**
-     * @return resource ID for the "invite contact" action label, or -1 if not defined.
-     */
-    protected int getInviteContactActionResId() {
-        return -1;
-    }
-
-    /**
-     * @return resource ID for the "view group" label, or -1 if not defined.
-     */
-    protected int getViewGroupLabelResId() {
-        return -1;
-    }
-
-    /**
-     * Returns {@link AccountTypeWithDataSet} for this type.
-     */
-    public AccountTypeWithDataSet getAccountTypeAndDataSet() {
-        return AccountTypeWithDataSet.get(accountType, dataSet);
-    }
-
-    /**
-     * Returns a list of additional package names that should be inspected as additional
-     * external account types.  This allows for a primary account type to indicate other packages
-     * that may not be sync adapters but which still provide contact data, perhaps under a
-     * separate data set within the account.
-     */
-    public List<String> getExtensionPackageNames() {
-        return new ArrayList<String>();
-    }
-
-    /**
-     * Returns an optional custom label for the "invite contact" action, which will be shown on
-     * the contact card.  (If not defined, returns null.)
-     */
-    public CharSequence getInviteContactActionLabel(Context context) {
-        // Note this resource is defined in the sync adapter package, not resourcePackageName.
-        return getResourceText(context, syncAdapterPackageName, getInviteContactActionResId(), "");
-    }
-
-    /**
-     * Returns a label for the "view group" action. If not defined, this falls back to our
-     * own "View Updates" string
-     */
-    public CharSequence getViewGroupLabel(Context context) {
-        // Note this resource is defined in the sync adapter package, not resourcePackageName.
-        final CharSequence customTitle =
-                getResourceText(context, syncAdapterPackageName, getViewGroupLabelResId(), null);
-
-        return customTitle == null
-                ? context.getText(R.string.view_updates_from_group)
-                : customTitle;
-    }
-
-    /**
-     * Return a string resource loaded from the given package (or the current package
-     * if {@code packageName} is null), unless {@code resId} is -1, in which case it returns
-     * {@code defaultValue}.
-     *
-     * (The behavior is undefined if the resource or package doesn't exist.)
-     */
-    @VisibleForTesting
-    static CharSequence getResourceText(Context context, String packageName, int resId,
-            String defaultValue) {
-        if (resId != -1 && packageName != null) {
-            final PackageManager pm = context.getPackageManager();
-            return pm.getText(packageName, resId, null);
-        } else if (resId != -1) {
-            return context.getText(resId);
-        } else {
-            return defaultValue;
-        }
-    }
-
-    public Drawable getDisplayIcon(Context context) {
-        return getDisplayIcon(context, titleRes, iconRes, syncAdapterPackageName);
-    }
-
-    public static Drawable getDisplayIcon(Context context, int titleRes, int iconRes,
-            String syncAdapterPackageName) {
-        if (titleRes != -1 && syncAdapterPackageName != null) {
-            final PackageManager pm = context.getPackageManager();
-            return pm.getDrawable(syncAdapterPackageName, iconRes, null);
-        } else if (titleRes != -1) {
-            return context.getResources().getDrawable(iconRes);
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Whether or not groups created under this account type have editable membership lists.
-     */
-    abstract public boolean isGroupMembershipEditable();
-
-    /**
-     * {@link Comparator} to sort by {@link DataKind#weight}.
-     */
-    private static Comparator<DataKind> sWeightComparator = new Comparator<DataKind>() {
-        @Override
-        public int compare(DataKind object1, DataKind object2) {
-            return object1.weight - object2.weight;
-        }
-    };
-
-    /**
-     * Return list of {@link DataKind} supported, sorted by
-     * {@link DataKind#weight}.
-     */
-    public ArrayList<DataKind> getSortedDataKinds() {
-        // TODO: optimize by marking if already sorted
-        Collections.sort(mKinds, sWeightComparator);
-        return mKinds;
-    }
-
-    /**
-     * Find the {@link DataKind} for a specific MIME-type, if it's handled by
-     * this data source.
-     */
-    public DataKind getKindForMimetype(String mimeType) {
-        return this.mMimeKinds.get(mimeType);
-    }
-
-    public void initializeFieldsFromAuthenticator(AuthenticatorDescription authenticator) {
-        accountType = authenticator.type;
-        titleRes = authenticator.labelId;
-        iconRes = authenticator.iconId;
-    }
-
-    /**
-     * Add given {@link DataKind} to list of those provided by this source.
-     */
-    public DataKind addKind(DataKind kind) throws DefinitionException {
-        if (kind.mimeType == null) {
-            throw new DefinitionException("null is not a valid mime type");
-        }
-        if (mMimeKinds.get(kind.mimeType) != null) {
-            throw new DefinitionException(
-                    "mime type '" + kind.mimeType + "' is already registered");
-        }
-
-        kind.resourcePackageName = this.resourcePackageName;
-        this.mKinds.add(kind);
-        this.mMimeKinds.put(kind.mimeType, kind);
-        return kind;
-    }
-
-    /**
-     * Description of a specific "type" or "label" of a {@link DataKind} row,
-     * such as {@link Phone#TYPE_WORK}. Includes constraints on total number of
-     * rows a {@link Contacts} may have of this type, and details on how
-     * user-defined labels are stored.
-     */
-    public static class EditType {
-        public int rawValue;
-        public int labelRes;
-        public boolean secondary;
-        /**
-         * The number of entries allowed for the type. -1 if not specified.
-         * @see DataKind#typeOverallMax
-         */
-        public int specificMax;
-        public String customColumn;
-
-        public EditType(int rawValue, int labelRes) {
-            this.rawValue = rawValue;
-            this.labelRes = labelRes;
-            this.specificMax = -1;
-        }
-
-        public EditType setSecondary(boolean secondary) {
-            this.secondary = secondary;
-            return this;
-        }
-
-        public EditType setSpecificMax(int specificMax) {
-            this.specificMax = specificMax;
-            return this;
-        }
-
-        public EditType setCustomColumn(String customColumn) {
-            this.customColumn = customColumn;
-            return this;
-        }
-
-        @Override
-        public boolean equals(Object object) {
-            if (object instanceof EditType) {
-                final EditType other = (EditType)object;
-                return other.rawValue == rawValue;
-            }
-            return false;
-        }
-
-        @Override
-        public int hashCode() {
-            return rawValue;
-        }
-
-        @Override
-        public String toString() {
-            return this.getClass().getSimpleName()
-                    + " rawValue=" + rawValue
-                    + " labelRes=" + labelRes
-                    + " secondary=" + secondary
-                    + " specificMax=" + specificMax
-                    + " customColumn=" + customColumn;
-        }
-    }
-
-    public static class EventEditType extends EditType {
-        private boolean mYearOptional;
-
-        public EventEditType(int rawValue, int labelRes) {
-            super(rawValue, labelRes);
-        }
-
-        public boolean isYearOptional() {
-            return mYearOptional;
-        }
-
-        public EventEditType setYearOptional(boolean yearOptional) {
-            mYearOptional = yearOptional;
-            return this;
-        }
-
-        @Override
-        public String toString() {
-            return super.toString() + " mYearOptional=" + mYearOptional;
-        }
-    }
-
-    /**
-     * Description of a user-editable field on a {@link DataKind} row, such as
-     * {@link Phone#NUMBER}. Includes flags to apply to an {@link EditText}, and
-     * the column where this field is stored.
-     */
-    public static final class EditField {
-        public String column;
-        public int titleRes;
-        public int inputType;
-        public int minLines;
-        public boolean optional;
-        public boolean shortForm;
-        public boolean longForm;
-
-        public EditField(String column, int titleRes) {
-            this.column = column;
-            this.titleRes = titleRes;
-        }
-
-        public EditField(String column, int titleRes, int inputType) {
-            this(column, titleRes);
-            this.inputType = inputType;
-        }
-
-        public EditField setOptional(boolean optional) {
-            this.optional = optional;
-            return this;
-        }
-
-        public EditField setShortForm(boolean shortForm) {
-            this.shortForm = shortForm;
-            return this;
-        }
-
-        public EditField setLongForm(boolean longForm) {
-            this.longForm = longForm;
-            return this;
-        }
-
-        public EditField setMinLines(int minLines) {
-            this.minLines = minLines;
-            return this;
-        }
-
-        public boolean isMultiLine() {
-            return (inputType & EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE) != 0;
-        }
-
-
-        @Override
-        public String toString() {
-            return this.getClass().getSimpleName() + ":"
-                    + " column=" + column
-                    + " titleRes=" + titleRes
-                    + " inputType=" + inputType
-                    + " minLines=" + minLines
-                    + " optional=" + optional
-                    + " shortForm=" + shortForm
-                    + " longForm=" + longForm;
-        }
-    }
-
-    /**
-     * Generic method of inflating a given {@link ContentValues} into a user-readable
-     * {@link CharSequence}. For example, an inflater could combine the multiple
-     * columns of {@link StructuredPostal} together using a string resource
-     * before presenting to the user.
-     */
-    public interface StringInflater {
-        public CharSequence inflateUsing(Context context, ContentValues values);
-    }
-
-    /**
-     * Compare two {@link AccountType} by their {@link AccountType#getDisplayLabel} with the
-     * current locale.
-     */
-    public static class DisplayLabelComparator implements Comparator<AccountType> {
-        private final Context mContext;
-        /** {@link Comparator} for the current locale. */
-        private final Collator mCollator = Collator.getInstance();
-
-        public DisplayLabelComparator(Context context) {
-            mContext = context;
-        }
-
-        private String getDisplayLabel(AccountType type) {
-            CharSequence label = type.getDisplayLabel(mContext);
-            return (label == null) ? "" : label.toString();
-        }
-
-        @Override
-        public int compare(AccountType lhs, AccountType rhs) {
-            return mCollator.compare(getDisplayLabel(lhs), getDisplayLabel(rhs));
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/AccountTypeWithDataSet.java b/src/com/android/contacts/common/model/account/AccountTypeWithDataSet.java
deleted file mode 100644
index f6bcf24..0000000
--- a/src/com/android/contacts/common/model/account/AccountTypeWithDataSet.java
+++ /dev/null
@@ -1,99 +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.common.model.account;
-
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.BaseColumns;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.RawContacts;
-import android.text.TextUtils;
-
-import com.google.common.base.Objects;
-
-
-/**
- * Encapsulates an "account type" string and a "data set" string.
- */
-public class AccountTypeWithDataSet {
-
-    private static final String[] ID_PROJECTION = new String[] {BaseColumns._ID};
-    private static final Uri RAW_CONTACTS_URI_LIMIT_1 = RawContacts.CONTENT_URI.buildUpon()
-            .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY, "1").build();
-
-    /** account type.  Can be null for fallback type. */
-    public final String accountType;
-
-    /** dataSet may be null, but never be "". */
-    public final String dataSet;
-
-    private AccountTypeWithDataSet(String accountType, String dataSet) {
-        this.accountType = TextUtils.isEmpty(accountType) ? null : accountType;
-        this.dataSet = TextUtils.isEmpty(dataSet) ? null : dataSet;
-    }
-
-    public static AccountTypeWithDataSet get(String accountType, String dataSet) {
-        return new AccountTypeWithDataSet(accountType, dataSet);
-    }
-
-    /**
-     * Return true if there are any contacts in the database with this account type and data set.
-     * Touches DB. Don't use in the UI thread.
-     */
-    public boolean hasData(Context context) {
-        final String BASE_SELECTION = RawContacts.ACCOUNT_TYPE + " = ?";
-        final String selection;
-        final String[] args;
-        if (TextUtils.isEmpty(dataSet)) {
-            selection = BASE_SELECTION + " AND " + RawContacts.DATA_SET + " IS NULL";
-            args = new String[] {accountType};
-        } else {
-            selection = BASE_SELECTION + " AND " + RawContacts.DATA_SET + " = ?";
-            args = new String[] {accountType, dataSet};
-        }
-
-        final Cursor c = context.getContentResolver().query(RAW_CONTACTS_URI_LIMIT_1,
-                ID_PROJECTION, selection, args, null);
-        if (c == null) return false;
-        try {
-            return c.moveToFirst();
-        } finally {
-            c.close();
-        }
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (!(o instanceof AccountTypeWithDataSet)) return false;
-
-        AccountTypeWithDataSet other = (AccountTypeWithDataSet) o;
-        return Objects.equal(accountType, other.accountType)
-                && Objects.equal(dataSet, other.dataSet);
-    }
-
-    @Override
-    public int hashCode() {
-        return (accountType == null ? 0 : accountType.hashCode())
-                ^ (dataSet == null ? 0 : dataSet.hashCode());
-    }
-
-    @Override
-    public String toString() {
-        return "[" + accountType + "/" + dataSet + "]";
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/AccountWithDataSet.java b/src/com/android/contacts/common/model/account/AccountWithDataSet.java
deleted file mode 100644
index 3ee0aab..0000000
--- a/src/com/android/contacts/common/model/account/AccountWithDataSet.java
+++ /dev/null
@@ -1,267 +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.common.model.account;
-
-import android.accounts.Account;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.provider.BaseColumns;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.RawContacts;
-import android.text.TextUtils;
-
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.preference.ContactsPreferences;
-import com.google.common.base.Objects;
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Pattern;
-
-/**
- * Wrapper for an account that includes a data set (which may be null).
- */
-public class AccountWithDataSet implements Parcelable {
-    private static final String STRINGIFY_SEPARATOR = "\u0001";
-    private static final String ARRAY_STRINGIFY_SEPARATOR = "\u0002";
-
-    private static final Pattern STRINGIFY_SEPARATOR_PAT =
-            Pattern.compile(Pattern.quote(STRINGIFY_SEPARATOR));
-    private static final Pattern ARRAY_STRINGIFY_SEPARATOR_PAT =
-            Pattern.compile(Pattern.quote(ARRAY_STRINGIFY_SEPARATOR));
-
-    public final String name;
-    public final String type;
-    public final String dataSet;
-    private final AccountTypeWithDataSet mAccountTypeWithDataSet;
-
-    private static final String[] ID_PROJECTION = new String[] {BaseColumns._ID};
-    private static final Uri RAW_CONTACTS_URI_LIMIT_1 = RawContacts.CONTENT_URI.buildUpon()
-            .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY, "1").build();
-
-    public static final String LOCAL_ACCOUNT_SELECTION = RawContacts.ACCOUNT_TYPE + " IS NULL AND "
-            + RawContacts.ACCOUNT_NAME + " IS NULL AND "
-            + RawContacts.DATA_SET + " IS NULL";
-
-    public AccountWithDataSet(String name, String type, String dataSet) {
-        this.name = emptyToNull(name);
-        this.type = emptyToNull(type);
-        this.dataSet = emptyToNull(dataSet);
-        mAccountTypeWithDataSet = AccountTypeWithDataSet.get(type, dataSet);
-    }
-
-    private static final String emptyToNull(String text) {
-        return TextUtils.isEmpty(text) ? null : text;
-    }
-
-    public AccountWithDataSet(Parcel in) {
-        this.name = in.readString();
-        this.type = in.readString();
-        this.dataSet = in.readString();
-        mAccountTypeWithDataSet = AccountTypeWithDataSet.get(type, dataSet);
-    }
-
-    public boolean isNullAccount() {
-        return name == null && type == null && dataSet == null;
-    }
-
-    public static AccountWithDataSet getNullAccount() {
-        return new AccountWithDataSet(null, null, null);
-    }
-
-    public Account getAccountOrNull() {
-        if (name != null && type != null) {
-            return new Account(name, type);
-        }
-        return null;
-    }
-
-    public int describeContents() {
-        return 0;
-    }
-
-    public void writeToParcel(Parcel dest, int flags) {
-        dest.writeString(name);
-        dest.writeString(type);
-        dest.writeString(dataSet);
-    }
-
-    // For Parcelable
-    public static final Creator<AccountWithDataSet> CREATOR = new Creator<AccountWithDataSet>() {
-        public AccountWithDataSet createFromParcel(Parcel source) {
-            return new AccountWithDataSet(source);
-        }
-
-        public AccountWithDataSet[] newArray(int size) {
-            return new AccountWithDataSet[size];
-        }
-    };
-
-    public AccountTypeWithDataSet getAccountTypeWithDataSet() {
-        return mAccountTypeWithDataSet;
-    }
-
-    /**
-     * Return {@code true} if this account has any contacts in the database.
-     * Touches DB.  Don't use in the UI thread.
-     */
-    public boolean hasData(Context context) {
-        String selection;
-        String[] args = null;
-        if (isNullAccount()) {
-            selection = LOCAL_ACCOUNT_SELECTION;
-        } else {
-            final String BASE_SELECTION =
-                    RawContacts.ACCOUNT_TYPE + " = ?" + " AND " + RawContacts.ACCOUNT_NAME + " = ?";
-            if (TextUtils.isEmpty(dataSet)) {
-                selection = BASE_SELECTION + " AND " + RawContacts.DATA_SET + " IS NULL";
-                args = new String[] {type, name};
-            } else {
-                selection = BASE_SELECTION + " AND " + RawContacts.DATA_SET + " = ?";
-                args = new String[] {type, name, dataSet};
-            }
-        }
-        selection += " AND " + RawContacts.DELETED + "=0";
-
-        final Cursor c = context.getContentResolver().query(RAW_CONTACTS_URI_LIMIT_1,
-                ID_PROJECTION, selection, args, null);
-        if (c == null) return false;
-        try {
-            return c.moveToFirst();
-        } finally {
-            c.close();
-        }
-    }
-
-    public boolean equals(Object obj) {
-        if (obj instanceof AccountWithDataSet) {
-            AccountWithDataSet other = (AccountWithDataSet) obj;
-            return Objects.equal(name, other.name)
-                    && Objects.equal(type, other.type)
-                    && Objects.equal(dataSet, other.dataSet);
-        }
-        return false;
-    }
-
-    public int hashCode() {
-        int result = 17;
-        result = 31 * result + (name != null ? name.hashCode() : 0);
-        result = 31 * result + (type != null ? type.hashCode() : 0);
-        result = 31 * result + (dataSet != null ? dataSet.hashCode() : 0);
-        return result;
-    }
-
-    public String toString() {
-        return "AccountWithDataSet {name=" + name + ", type=" + type + ", dataSet=" + dataSet + "}";
-    }
-
-    private static StringBuilder addStringified(StringBuilder sb, AccountWithDataSet account) {
-        if (!TextUtils.isEmpty(account.name)) sb.append(account.name);
-        sb.append(STRINGIFY_SEPARATOR);
-        if (!TextUtils.isEmpty(account.type)) sb.append(account.type);
-        sb.append(STRINGIFY_SEPARATOR);
-        if (!TextUtils.isEmpty(account.dataSet)) sb.append(account.dataSet);
-
-        return sb;
-    }
-
-    /**
-     * Pack the instance into a string.
-     */
-    public String stringify() {
-        return addStringified(new StringBuilder(), this).toString();
-    }
-
-    /**
-     * Unpack a string created by {@link #stringify}.
-     *
-     * @throws IllegalArgumentException if it's an invalid string.
-     */
-    public static AccountWithDataSet unstringify(String s) {
-        final String[] array = STRINGIFY_SEPARATOR_PAT.split(s, 3);
-        if (array.length < 3) {
-            throw new IllegalArgumentException("Invalid string " + s);
-        }
-        return new AccountWithDataSet(array[0], array[1],
-                TextUtils.isEmpty(array[2]) ? null : array[2]);
-    }
-
-    /**
-     * Pack a list of {@link AccountWithDataSet} into a string.
-     */
-    public static String stringifyList(List<AccountWithDataSet> accounts) {
-        final StringBuilder sb = new StringBuilder();
-
-        for (AccountWithDataSet account : accounts) {
-            if (sb.length() > 0) {
-                sb.append(ARRAY_STRINGIFY_SEPARATOR);
-            }
-            addStringified(sb, account);
-        }
-
-        return sb.toString();
-    }
-
-    /**
-     * Unpack a list of {@link AccountWithDataSet} into a string.
-     *
-     * @throws IllegalArgumentException if it's an invalid string.
-     */
-    public static List<AccountWithDataSet> unstringifyList(String s) {
-        final ArrayList<AccountWithDataSet> ret = Lists.newArrayList();
-        if (TextUtils.isEmpty(s)) {
-            return ret;
-        }
-
-        final String[] array = ARRAY_STRINGIFY_SEPARATOR_PAT.split(s);
-
-        for (int i = 0; i < array.length; i++) {
-            ret.add(unstringify(array[i]));
-        }
-
-        return ret;
-    }
-
-    public static AccountWithDataSet getDefaultOrBestFallback(ContactsPreferences preferences,
-            AccountTypeManager accountTypeManager) {
-        if (preferences.isDefaultAccountSet()) {
-            final AccountWithDataSet account = preferences.getDefaultAccount();
-            if (accountTypeManager.contains(account, true)) {
-                return account;
-            }
-        }
-        final List<AccountWithDataSet> accounts = accountTypeManager
-                .getAccounts(/* writableOnly */ true);
-
-        if (accounts.isEmpty()) {
-            return AccountWithDataSet.getNullAccount();
-        }
-
-        // Return the first google account
-        for (AccountWithDataSet account : accounts) {
-            if (GoogleAccountType.ACCOUNT_TYPE.equals(account) && account.dataSet == null) {
-                return account;
-            }
-        }
-        // Arbitrarily return the first writable account
-        return accounts.get(0);
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/BaseAccountType.java b/src/com/android/contacts/common/model/account/BaseAccountType.java
deleted file mode 100644
index 400b0e9..0000000
--- a/src/com/android/contacts/common/model/account/BaseAccountType.java
+++ /dev/null
@@ -1,1471 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model.account;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.content.res.Resources;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.CommonDataKinds.BaseTypes;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.provider.ContactsContract.CommonDataKinds.Nickname;
-import android.provider.ContactsContract.CommonDataKinds.Note;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.Relation;
-import android.provider.ContactsContract.CommonDataKinds.SipAddress;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.CommonDataKinds.Website;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.inputmethod.EditorInfo;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.dataitem.CustomDataItem;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.CommonDateUtils;
-import com.android.contacts.common.util.ContactDisplayUtils;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-public abstract class BaseAccountType extends AccountType {
-    private static final String TAG = "BaseAccountType";
-
-    protected static final int FLAGS_PHONE = EditorInfo.TYPE_CLASS_PHONE;
-    protected static final int FLAGS_EMAIL = EditorInfo.TYPE_CLASS_TEXT
-            | EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
-    protected static final int FLAGS_PERSON_NAME = EditorInfo.TYPE_CLASS_TEXT
-            | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS | EditorInfo.TYPE_TEXT_VARIATION_PERSON_NAME;
-    protected static final int FLAGS_PHONETIC = EditorInfo.TYPE_CLASS_TEXT
-            | EditorInfo.TYPE_TEXT_VARIATION_PHONETIC;
-    protected static final int FLAGS_GENERIC_NAME = EditorInfo.TYPE_CLASS_TEXT
-            | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS;
-    protected static final int FLAGS_NOTE = EditorInfo.TYPE_CLASS_TEXT
-            | EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE;
-    protected static final int FLAGS_EVENT = EditorInfo.TYPE_CLASS_TEXT;
-    protected static final int FLAGS_WEBSITE = EditorInfo.TYPE_CLASS_TEXT
-            | EditorInfo.TYPE_TEXT_VARIATION_URI;
-    protected static final int FLAGS_POSTAL = EditorInfo.TYPE_CLASS_TEXT
-            | EditorInfo.TYPE_TEXT_VARIATION_POSTAL_ADDRESS | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS
-            | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE;
-    protected static final int FLAGS_SIP_ADDRESS = EditorInfo.TYPE_CLASS_TEXT
-            | EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;  // since SIP addresses have the same
-                                                             // basic format as email addresses
-    protected static final int FLAGS_RELATION = EditorInfo.TYPE_CLASS_TEXT
-            | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS | EditorInfo.TYPE_TEXT_VARIATION_PERSON_NAME;
-
-    // Specify the maximum number of lines that can be used to display various field types.  If no
-    // value is specified for a particular type, we use the default value from {@link DataKind}.
-    protected static final int MAX_LINES_FOR_POSTAL_ADDRESS = 10;
-    protected static final int MAX_LINES_FOR_GROUP = 10;
-    protected static final int MAX_LINES_FOR_NOTE = 100;
-
-    private interface Tag {
-        static final String DATA_KIND = "DataKind";
-        static final String TYPE = "Type";
-    }
-
-    private interface Attr {
-        static final String MAX_OCCURRENCE = "maxOccurs";
-        static final String DATE_WITH_TIME = "dateWithTime";
-        static final String YEAR_OPTIONAL = "yearOptional";
-        static final String KIND = "kind";
-        static final String TYPE = "type";
-    }
-
-    protected interface Weight {
-        static final int NONE = -1;
-        static final int PHONE = 10;
-        static final int EMAIL = 15;
-        static final int STRUCTURED_POSTAL = 25;
-        static final int NICKNAME = 111;
-        static final int EVENT = 120;
-        static final int ORGANIZATION = 125;
-        static final int NOTE = 130;
-        static final int IM = 140;
-        static final int SIP_ADDRESS = 145;
-        static final int GROUP_MEMBERSHIP = 150;
-        static final int WEBSITE = 160;
-        static final int RELATIONSHIP = 999;
-    }
-
-    public BaseAccountType() {
-        this.accountType = null;
-        this.dataSet = null;
-        this.titleRes = R.string.account_phone;
-        this.iconRes = R.mipmap.ic_contacts_launcher;
-    }
-
-    protected static EditType buildPhoneType(int type) {
-        return new EditType(type, Phone.getTypeLabelResource(type));
-    }
-
-    protected static EditType buildEmailType(int type) {
-        return new EditType(type, Email.getTypeLabelResource(type));
-    }
-
-    protected static EditType buildPostalType(int type) {
-        return new EditType(type, StructuredPostal.getTypeLabelResource(type));
-    }
-
-    protected static EditType buildImType(int type) {
-        return new EditType(type, Im.getProtocolLabelResource(type));
-    }
-
-    protected static EditType buildEventType(int type, boolean yearOptional) {
-        return new EventEditType(type, Event.getTypeResource(type)).setYearOptional(yearOptional);
-    }
-
-    protected static EditType buildRelationType(int type) {
-        return new EditType(type, Relation.getTypeLabelResource(type));
-    }
-
-    protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
-        final DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
-                R.string.nameLabelsGroup, Weight.NONE, true));
-        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
-        kind.actionBody = new SimpleInflater(Nickname.NAME);
-        kind.typeOverallMax = 1;
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
-                FLAGS_PERSON_NAME).setLongForm(true));
-        kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
-                FLAGS_PERSON_NAME));
-        kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
-                FLAGS_PERSON_NAME).setLongForm(true));
-        kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
-                FLAGS_PERSON_NAME));
-        kind.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
-                FLAGS_PERSON_NAME).setLongForm(true));
-        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
-                R.string.name_phonetic_family, FLAGS_PHONETIC));
-        kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
-                R.string.name_phonetic_middle, FLAGS_PHONETIC));
-        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
-                R.string.name_phonetic_given, FLAGS_PHONETIC));
-
-        return kind;
-    }
-
-    protected DataKind addDataKindName(Context context) throws DefinitionException {
-        final DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_NAME,
-                R.string.nameLabelsGroup, Weight.NONE, true));
-        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
-        kind.actionBody = new SimpleInflater(Nickname.NAME);
-        kind.typeOverallMax = 1;
-
-        kind.fieldList = Lists.newArrayList();
-        final boolean displayOrderPrimary =
-                context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
-
-        kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
-                FLAGS_PERSON_NAME).setOptional(true));
-        if (!displayOrderPrimary) {
-            kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
-                    FLAGS_PERSON_NAME));
-            kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
-                    FLAGS_PERSON_NAME).setOptional(true));
-            kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
-                    FLAGS_PERSON_NAME));
-        } else {
-            kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
-                    FLAGS_PERSON_NAME));
-            kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
-                    FLAGS_PERSON_NAME).setOptional(true));
-            kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
-                    FLAGS_PERSON_NAME));
-        }
-        kind.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
-                FLAGS_PERSON_NAME).setOptional(true));
-
-        return kind;
-    }
-
-    protected DataKind addDataKindPhoneticName(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
-                R.string.name_phonetic, Weight.NONE, true));
-        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
-        kind.actionBody = new SimpleInflater(Nickname.NAME);
-        kind.typeOverallMax = 1;
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(DataKind.PSEUDO_COLUMN_PHONETIC_NAME,
-                R.string.name_phonetic, FLAGS_PHONETIC).setShortForm(true));
-        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
-                R.string.name_phonetic_family, FLAGS_PHONETIC).setLongForm(true));
-        kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
-                R.string.name_phonetic_middle, FLAGS_PHONETIC).setLongForm(true));
-        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
-                R.string.name_phonetic_given, FLAGS_PHONETIC).setLongForm(true));
-
-        return kind;
-    }
-
-    protected DataKind addDataKindNickname(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Nickname.CONTENT_ITEM_TYPE,
-                    R.string.nicknameLabelsGroup, Weight.NICKNAME, true));
-        kind.typeOverallMax = 1;
-        kind.actionHeader = new SimpleInflater(R.string.nicknameLabelsGroup);
-        kind.actionBody = new SimpleInflater(Nickname.NAME);
-        kind.defaultValues = new ContentValues();
-        kind.defaultValues.put(Nickname.TYPE, Nickname.TYPE_DEFAULT);
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
-                FLAGS_PERSON_NAME));
-
-        return kind;
-    }
-
-    protected DataKind addDataKindPhone(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Phone.CONTENT_ITEM_TYPE, R.string.phoneLabelsGroup,
-                Weight.PHONE, true));
-        kind.iconAltRes = R.drawable.ic_message_24dp_mirrored;
-        kind.iconAltDescriptionRes = R.string.sms;
-        kind.actionHeader = new PhoneActionInflater();
-        kind.actionAltHeader = new PhoneActionAltInflater();
-        kind.actionBody = new SimpleInflater(Phone.NUMBER);
-        kind.typeColumn = Phone.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER));
-        kind.typeList.add(
-                buildPhoneType(Phone.TYPE_CUSTOM).setSecondary(true).setCustomColumn(Phone.LABEL));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_CALLBACK).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_CAR).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_COMPANY_MAIN).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_ISDN).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_MAIN).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER_FAX).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_RADIO).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_TELEX).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_TTY_TDD).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK_MOBILE).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK_PAGER).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_ASSISTANT).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_MMS).setSecondary(true));
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
-
-        return kind;
-    }
-
-    protected DataKind addDataKindEmail(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Email.CONTENT_ITEM_TYPE, R.string.emailLabelsGroup,
-                Weight.EMAIL, true));
-        kind.actionHeader = new EmailActionInflater();
-        kind.actionBody = new SimpleInflater(Email.DATA);
-        kind.typeColumn = Email.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildEmailType(Email.TYPE_HOME));
-        kind.typeList.add(buildEmailType(Email.TYPE_WORK));
-        kind.typeList.add(buildEmailType(Email.TYPE_OTHER));
-        kind.typeList.add(buildEmailType(Email.TYPE_MOBILE));
-        kind.typeList.add(
-                buildEmailType(Email.TYPE_CUSTOM).setSecondary(true).setCustomColumn(Email.LABEL));
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
-
-        return kind;
-    }
-
-    protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(StructuredPostal.CONTENT_ITEM_TYPE,
-                R.string.postalLabelsGroup, Weight.STRUCTURED_POSTAL, true));
-        kind.actionHeader = new PostalActionInflater();
-        kind.actionBody = new SimpleInflater(StructuredPostal.FORMATTED_ADDRESS);
-        kind.typeColumn = StructuredPostal.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME));
-        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_WORK));
-        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER));
-        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_CUSTOM).setSecondary(true)
-                .setCustomColumn(StructuredPostal.LABEL));
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(
-                new EditField(StructuredPostal.FORMATTED_ADDRESS, R.string.postal_address,
-                        FLAGS_POSTAL));
-
-        kind.maxLinesForDisplay = MAX_LINES_FOR_POSTAL_ADDRESS;
-
-        return kind;
-    }
-
-    protected DataKind addDataKindIm(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Im.CONTENT_ITEM_TYPE, R.string.imLabelsGroup,
-                Weight.IM, true));
-        kind.actionHeader = new ImActionInflater();
-        kind.actionBody = new SimpleInflater(Im.DATA);
-
-        // NOTE: even though a traditional "type" exists, for editing
-        // purposes we're using the protocol to pick labels
-
-        kind.defaultValues = new ContentValues();
-        kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
-
-        kind.typeColumn = Im.PROTOCOL;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildImType(Im.PROTOCOL_AIM));
-        kind.typeList.add(buildImType(Im.PROTOCOL_MSN));
-        kind.typeList.add(buildImType(Im.PROTOCOL_YAHOO));
-        kind.typeList.add(buildImType(Im.PROTOCOL_SKYPE));
-        kind.typeList.add(buildImType(Im.PROTOCOL_QQ));
-        kind.typeList.add(buildImType(Im.PROTOCOL_GOOGLE_TALK));
-        kind.typeList.add(buildImType(Im.PROTOCOL_ICQ));
-        kind.typeList.add(buildImType(Im.PROTOCOL_JABBER));
-        kind.typeList.add(buildImType(Im.PROTOCOL_CUSTOM).setSecondary(true).setCustomColumn(
-                Im.CUSTOM_PROTOCOL));
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
-
-        return kind;
-    }
-
-    protected DataKind addDataKindOrganization(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Organization.CONTENT_ITEM_TYPE,
-                    R.string.organizationLabelsGroup, Weight.ORGANIZATION, true));
-        kind.actionHeader = new SimpleInflater(R.string.organizationLabelsGroup);
-        kind.actionBody = ORGANIZATION_BODY_INFLATER;
-        kind.typeOverallMax = 1;
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
-                FLAGS_GENERIC_NAME));
-        kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
-                FLAGS_GENERIC_NAME));
-
-        return kind;
-    }
-
-    protected DataKind addDataKindPhoto(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Photo.CONTENT_ITEM_TYPE, -1, Weight.NONE, true));
-        kind.typeOverallMax = 1;
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
-        return kind;
-    }
-
-    protected DataKind addDataKindNote(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Note.CONTENT_ITEM_TYPE, R.string.label_notes,
-                Weight.NOTE, true));
-        kind.typeOverallMax = 1;
-        kind.actionHeader = new SimpleInflater(R.string.label_notes);
-        kind.actionBody = new SimpleInflater(Note.NOTE);
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
-
-        kind.maxLinesForDisplay = MAX_LINES_FOR_NOTE;
-
-        return kind;
-    }
-
-    protected DataKind addDataKindWebsite(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Website.CONTENT_ITEM_TYPE,
-                R.string.websiteLabelsGroup, Weight.WEBSITE, true));
-        kind.actionHeader = new SimpleInflater(R.string.websiteLabelsGroup);
-        kind.actionBody = new SimpleInflater(Website.URL);
-        kind.defaultValues = new ContentValues();
-        kind.defaultValues.put(Website.TYPE, Website.TYPE_OTHER);
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup, FLAGS_WEBSITE));
-
-        return kind;
-    }
-
-    protected DataKind addDataKindSipAddress(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(SipAddress.CONTENT_ITEM_TYPE,
-                    R.string.label_sip_address, Weight.SIP_ADDRESS, true));
-
-        kind.actionHeader = new SimpleInflater(R.string.label_sip_address);
-        kind.actionBody = new SimpleInflater(SipAddress.SIP_ADDRESS);
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(SipAddress.SIP_ADDRESS,
-                                         R.string.label_sip_address, FLAGS_SIP_ADDRESS));
-        kind.typeOverallMax = 1;
-
-        return kind;
-    }
-
-    protected DataKind addDataKindGroupMembership(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(GroupMembership.CONTENT_ITEM_TYPE,
-                R.string.groupsLabel, Weight.GROUP_MEMBERSHIP, true));
-
-        kind.typeOverallMax = 1;
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(GroupMembership.GROUP_ROW_ID, -1, -1));
-
-        kind.maxLinesForDisplay = MAX_LINES_FOR_GROUP;
-
-        return kind;
-    }
-
-    protected DataKind addDataKindCustomField(Context context) throws DefinitionException {
-        final DataKind kind = addKind(new DataKind(CustomDataItem.MIMETYPE_CUSTOM_FIELD,
-                R.string.label_custom_field, Weight.NONE, /* editable */ false));
-        kind.actionBody = new SimpleInflater(Data.DATA2);
-        return kind;
-    }
-
-    /**
-     * Simple inflater that assumes a string resource has a "%s" that will be
-     * filled from the given column.
-     */
-    public static class SimpleInflater implements StringInflater {
-        private final int mStringRes;
-        private final String mColumnName;
-
-        public SimpleInflater(int stringRes) {
-            this(stringRes, null);
-        }
-
-        public SimpleInflater(String columnName) {
-            this(-1, columnName);
-        }
-
-        public SimpleInflater(int stringRes, String columnName) {
-            mStringRes = stringRes;
-            mColumnName = columnName;
-        }
-
-        @Override
-        public CharSequence inflateUsing(Context context, ContentValues values) {
-            final boolean validColumn = values.containsKey(mColumnName);
-            final boolean validString = mStringRes > 0;
-
-            final CharSequence stringValue = validString ? context.getText(mStringRes) : null;
-            final CharSequence columnValue = validColumn ? values.getAsString(mColumnName) : null;
-
-            if (validString && validColumn) {
-                return String.format(stringValue.toString(), columnValue);
-            } else if (validString) {
-                return stringValue;
-            } else if (validColumn) {
-                return columnValue;
-            } else {
-                return null;
-            }
-        }
-
-        @Override
-        public String toString() {
-            return this.getClass().getSimpleName()
-                    + " mStringRes=" + mStringRes
-                    + " mColumnName" + mColumnName;
-        }
-
-        public String getColumnNameForTest() {
-            return mColumnName;
-        }
-    }
-
-    public static abstract class CommonInflater implements StringInflater {
-        protected abstract int getTypeLabelResource(Integer type);
-
-        protected boolean isCustom(Integer type) {
-            return type == BaseTypes.TYPE_CUSTOM;
-        }
-
-        protected String getTypeColumn() {
-            return Phone.TYPE;
-        }
-
-        protected String getLabelColumn() {
-            return Phone.LABEL;
-        }
-
-        protected CharSequence getTypeLabel(Resources res, Integer type, CharSequence label) {
-            final int labelRes = getTypeLabelResource(type);
-            if (type == null) {
-                return res.getText(labelRes);
-            } else if (isCustom(type)) {
-                return res.getString(labelRes, label == null ? "" : label);
-            } else {
-                return res.getText(labelRes);
-            }
-        }
-
-        @Override
-        public CharSequence inflateUsing(Context context, ContentValues values) {
-            final Integer type = values.getAsInteger(getTypeColumn());
-            final String label = values.getAsString(getLabelColumn());
-            return getTypeLabel(context.getResources(), type, label);
-        }
-
-        @Override
-        public String toString() {
-            return this.getClass().getSimpleName();
-        }
-    }
-
-    public static class PhoneActionInflater extends CommonInflater {
-        @Override
-        protected boolean isCustom(Integer type) {
-            return ContactDisplayUtils.isCustomPhoneType(type);
-        }
-
-        @Override
-        protected int getTypeLabelResource(Integer type) {
-            return ContactDisplayUtils.getPhoneLabelResourceId(type);
-        }
-    }
-
-    public static class PhoneActionAltInflater extends CommonInflater {
-        @Override
-        protected boolean isCustom(Integer type) {
-            return ContactDisplayUtils.isCustomPhoneType(type);
-        }
-
-        @Override
-        protected int getTypeLabelResource(Integer type) {
-            return ContactDisplayUtils.getSmsLabelResourceId(type);
-        }
-    }
-
-    public static class EmailActionInflater extends CommonInflater {
-        @Override
-        protected int getTypeLabelResource(Integer type) {
-            if (type == null) return R.string.email;
-            switch (type) {
-                case Email.TYPE_HOME: return R.string.email_home;
-                case Email.TYPE_WORK: return R.string.email_work;
-                case Email.TYPE_OTHER: return R.string.email_other;
-                case Email.TYPE_MOBILE: return R.string.email_mobile;
-                default: return R.string.email_custom;
-            }
-        }
-    }
-
-    public static class EventActionInflater extends CommonInflater {
-        @Override
-        protected int getTypeLabelResource(Integer type) {
-            return Event.getTypeResource(type);
-        }
-    }
-
-    public static class RelationActionInflater extends CommonInflater {
-        @Override
-        protected int getTypeLabelResource(Integer type) {
-            return Relation.getTypeLabelResource(type == null ? Relation.TYPE_CUSTOM : type);
-        }
-    }
-
-    public static class PostalActionInflater extends CommonInflater {
-        @Override
-        protected int getTypeLabelResource(Integer type) {
-            if (type == null) return R.string.map_other;
-            switch (type) {
-                case StructuredPostal.TYPE_HOME: return R.string.map_home;
-                case StructuredPostal.TYPE_WORK: return R.string.map_work;
-                case StructuredPostal.TYPE_OTHER: return R.string.map_other;
-                default: return R.string.map_custom;
-            }
-        }
-    }
-
-    public static class ImActionInflater extends CommonInflater {
-        @Override
-        protected String getTypeColumn() {
-            return Im.PROTOCOL;
-        }
-
-        @Override
-        protected String getLabelColumn() {
-            return Im.CUSTOM_PROTOCOL;
-        }
-
-        @Override
-        protected int getTypeLabelResource(Integer type) {
-            if (type == null) return R.string.chat;
-            switch (type) {
-                case Im.PROTOCOL_AIM: return R.string.chat_aim;
-                case Im.PROTOCOL_MSN: return R.string.chat_msn;
-                case Im.PROTOCOL_YAHOO: return R.string.chat_yahoo;
-                case Im.PROTOCOL_SKYPE: return R.string.chat_skype;
-                case Im.PROTOCOL_QQ: return R.string.chat_qq;
-                case Im.PROTOCOL_GOOGLE_TALK: return R.string.chat_gtalk;
-                case Im.PROTOCOL_ICQ: return R.string.chat_icq;
-                case Im.PROTOCOL_JABBER: return R.string.chat_jabber;
-                case Im.PROTOCOL_NETMEETING: return R.string.chat;
-                default: return R.string.chat;
-            }
-        }
-    }
-
-    public static final StringInflater ORGANIZATION_BODY_INFLATER = new StringInflater() {
-        @Override
-        public CharSequence inflateUsing(Context context, ContentValues values) {
-            final CharSequence companyValue = values.containsKey(Organization.COMPANY) ?
-                    values.getAsString(Organization.COMPANY) : null;
-            final CharSequence titleValue = values.containsKey(Organization.TITLE) ?
-                    values.getAsString(Organization.TITLE) : null;
-
-            if (companyValue != null && titleValue != null) {
-                return companyValue +  ": " + titleValue;
-            } else if (companyValue == null) {
-                return titleValue;
-            } else {
-                return companyValue;
-            }
-        }
-    };
-
-    @Override
-    public boolean isGroupMembershipEditable() {
-        return false;
-    }
-
-    /**
-     * Parses the content of the EditSchema tag in contacts.xml.
-     */
-    protected final void parseEditSchema(Context context, XmlPullParser parser, AttributeSet attrs)
-            throws XmlPullParserException, IOException, DefinitionException {
-
-        final int outerDepth = parser.getDepth();
-        int type;
-        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
-            final int depth = parser.getDepth();
-            if (type != XmlPullParser.START_TAG || depth != outerDepth + 1) {
-                continue; // Not direct child tag
-            }
-
-            final String tag = parser.getName();
-
-            if (Tag.DATA_KIND.equals(tag)) {
-                for (DataKind kind : KindParser.INSTANCE.parseDataKindTag(context, parser, attrs)) {
-                    addKind(kind);
-                }
-            } else {
-                Log.w(TAG, "Skipping unknown tag " + tag);
-            }
-        }
-    }
-
-    // Utility methods to keep code shorter.
-    private static boolean getAttr(AttributeSet attrs, String attribute, boolean defaultValue) {
-        return attrs.getAttributeBooleanValue(null, attribute, defaultValue);
-    }
-
-    private static int getAttr(AttributeSet attrs, String attribute, int defaultValue) {
-        return attrs.getAttributeIntValue(null, attribute, defaultValue);
-    }
-
-    private static String getAttr(AttributeSet attrs, String attribute) {
-        return attrs.getAttributeValue(null, attribute);
-    }
-
-    // TODO Extract it to its own class, and move all KindBuilders to it as well.
-    private static class KindParser {
-        public static final KindParser INSTANCE = new KindParser();
-
-        private final Map<String, KindBuilder> mBuilders = Maps.newHashMap();
-
-        private KindParser() {
-            addBuilder(new NameKindBuilder());
-            addBuilder(new NicknameKindBuilder());
-            addBuilder(new PhoneKindBuilder());
-            addBuilder(new EmailKindBuilder());
-            addBuilder(new StructuredPostalKindBuilder());
-            addBuilder(new ImKindBuilder());
-            addBuilder(new OrganizationKindBuilder());
-            addBuilder(new PhotoKindBuilder());
-            addBuilder(new NoteKindBuilder());
-            addBuilder(new WebsiteKindBuilder());
-            addBuilder(new SipAddressKindBuilder());
-            addBuilder(new GroupMembershipKindBuilder());
-            addBuilder(new EventKindBuilder());
-            addBuilder(new RelationshipKindBuilder());
-        }
-
-        private void addBuilder(KindBuilder builder) {
-            mBuilders.put(builder.getTagName(), builder);
-        }
-
-        /**
-         * Takes a {@link XmlPullParser} at the start of a DataKind tag, parses it and returns
-         * {@link DataKind}s.  (Usually just one, but there are three for the "name" kind.)
-         *
-         * This method returns a list, because we need to add 3 kinds for the name data kind.
-         * (structured, display and phonetic)
-         */
-        public List<DataKind> parseDataKindTag(Context context, XmlPullParser parser,
-                AttributeSet attrs)
-                throws DefinitionException, XmlPullParserException, IOException {
-            final String kind = getAttr(attrs, Attr.KIND);
-            final KindBuilder builder = mBuilders.get(kind);
-            if (builder != null) {
-                return builder.parseDataKind(context, parser, attrs);
-            } else {
-                throw new DefinitionException("Undefined data kind '" + kind + "'");
-            }
-        }
-    }
-
-    private static abstract class KindBuilder {
-
-        public abstract String getTagName();
-
-        /**
-         * DataKind tag parser specific to each kind.  Subclasses must implement it.
-         */
-        public abstract List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException, IOException;
-
-        /**
-         * Creates a new {@link DataKind}, and also parses the child Type tags in the DataKind
-         * tag.
-         */
-        protected final DataKind newDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs, boolean isPseudo, String mimeType, String typeColumn,
-                int titleRes, int weight, StringInflater actionHeader, StringInflater actionBody)
-                throws DefinitionException, XmlPullParserException, IOException {
-
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, "Adding DataKind: " + mimeType);
-            }
-
-            final DataKind kind = new DataKind(mimeType, titleRes, weight, true);
-            kind.typeColumn = typeColumn;
-            kind.actionHeader = actionHeader;
-            kind.actionBody = actionBody;
-            kind.fieldList = Lists.newArrayList();
-
-            // Get more information from the tag...
-            // A pseudo data kind doesn't have corresponding tag the XML, so we skip this.
-            if (!isPseudo) {
-                kind.typeOverallMax = getAttr(attrs, Attr.MAX_OCCURRENCE, -1);
-
-                // Process "Type" tags.
-                // If a kind has the type column, contacts.xml must have at least one type
-                // definition.  Otherwise, it mustn't have a type definition.
-                if (kind.typeColumn != null) {
-                    // Parse and add types.
-                    kind.typeList = Lists.newArrayList();
-                    parseTypes(context, parser, attrs, kind, true);
-                    if (kind.typeList.size() == 0) {
-                        throw new DefinitionException(
-                                "Kind " + kind.mimeType + " must have at least one type");
-                    }
-                } else {
-                    // Make sure it has no types.
-                    parseTypes(context, parser, attrs, kind, false /* can't have types */);
-                }
-            }
-
-            return kind;
-        }
-
-        /**
-         * Parses Type elements in a DataKind element, and if {@code canHaveTypes} is true adds
-         * them to the given {@link DataKind}. Otherwise the {@link DataKind} can't have a type,
-         * so throws {@link DefinitionException}.
-         */
-        private void parseTypes(Context context, XmlPullParser parser, AttributeSet attrs,
-                DataKind kind, boolean canHaveTypes)
-                throws DefinitionException, XmlPullParserException, IOException {
-            final int outerDepth = parser.getDepth();
-            int type;
-            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
-                    && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
-                final int depth = parser.getDepth();
-                if (type != XmlPullParser.START_TAG || depth != outerDepth + 1) {
-                    continue; // Not direct child tag
-                }
-
-                final String tag = parser.getName();
-                if (Tag.TYPE.equals(tag)) {
-                    if (canHaveTypes) {
-                        kind.typeList.add(parseTypeTag(parser, attrs, kind));
-                    } else {
-                        throw new DefinitionException(
-                                "Kind " + kind.mimeType + " can't have types");
-                    }
-                } else {
-                    throw new DefinitionException("Unknown tag: " + tag);
-                }
-            }
-        }
-
-        /**
-         * Parses a single Type element and returns an {@link EditType} built from it.  Uses
-         * {@link #buildEditTypeForTypeTag} defined in subclasses to actually build an
-         * {@link EditType}.
-         */
-        private EditType parseTypeTag(XmlPullParser parser, AttributeSet attrs, DataKind kind)
-                throws DefinitionException {
-
-            final String typeName = getAttr(attrs, Attr.TYPE);
-
-            final EditType et = buildEditTypeForTypeTag(attrs, typeName);
-            if (et == null) {
-                throw new DefinitionException(
-                        "Undefined type '" + typeName + "' for data kind '" + kind.mimeType + "'");
-            }
-            et.specificMax = getAttr(attrs, Attr.MAX_OCCURRENCE, -1);
-
-            return et;
-        }
-
-        /**
-         * Returns an {@link EditType} for the given "type".  Subclasses may optionally use
-         * the attributes in the tag to set optional values.
-         * (e.g. "yearOptional" for the event kind)
-         */
-        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
-            return null;
-        }
-
-        protected final void throwIfList(DataKind kind) throws DefinitionException {
-            if (kind.typeOverallMax != 1) {
-                throw new DefinitionException(
-                        "Kind " + kind.mimeType + " must have 'overallMax=\"1\"'");
-            }
-        }
-    }
-
-    /**
-     * DataKind parser for Name. (structured, display, phonetic)
-     */
-    private static class NameKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "name";
-        }
-
-        private static void checkAttributeTrue(boolean value, String attrName)
-                throws DefinitionException {
-            if (!value) {
-                throw new DefinitionException(attrName + " must be true");
-            }
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-
-            // Build 3 data kinds:
-            // - StructuredName.CONTENT_ITEM_TYPE
-            // - DataKind.PSEUDO_MIME_TYPE_NAME
-            // - DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME
-
-            final boolean displayOrderPrimary =
-                    context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
-
-            final boolean supportsPrefix = getAttr(attrs, "supportsPrefix", false);
-            final boolean supportsMiddleName = getAttr(attrs, "supportsMiddleName", false);
-            final boolean supportsSuffix = getAttr(attrs, "supportsSuffix", false);
-            final boolean supportsPhoneticFamilyName =
-                    getAttr(attrs, "supportsPhoneticFamilyName", false);
-            final boolean supportsPhoneticMiddleName =
-                    getAttr(attrs, "supportsPhoneticMiddleName", false);
-            final boolean supportsPhoneticGivenName =
-                    getAttr(attrs, "supportsPhoneticGivenName", false);
-
-            // For now, every thing must be supported.
-            checkAttributeTrue(supportsPrefix, "supportsPrefix");
-            checkAttributeTrue(supportsMiddleName, "supportsMiddleName");
-            checkAttributeTrue(supportsSuffix, "supportsSuffix");
-            checkAttributeTrue(supportsPhoneticFamilyName, "supportsPhoneticFamilyName");
-            checkAttributeTrue(supportsPhoneticMiddleName, "supportsPhoneticMiddleName");
-            checkAttributeTrue(supportsPhoneticGivenName, "supportsPhoneticGivenName");
-
-            final List<DataKind> kinds = Lists.newArrayList();
-
-            // Structured name
-            final DataKind ks = newDataKind(context, parser, attrs, false,
-                    StructuredName.CONTENT_ITEM_TYPE, null, R.string.nameLabelsGroup, Weight.NONE,
-                    new SimpleInflater(R.string.nameLabelsGroup),
-                    new SimpleInflater(Nickname.NAME));
-
-            ks.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
-                    FLAGS_PERSON_NAME).setLongForm(true));
-            ks.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
-                    FLAGS_PERSON_NAME));
-            ks.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
-                    FLAGS_PERSON_NAME).setLongForm(true));
-            ks.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
-                    FLAGS_PERSON_NAME));
-            ks.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
-                    FLAGS_PERSON_NAME).setLongForm(true));
-            ks.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
-                    R.string.name_phonetic_family, FLAGS_PHONETIC));
-            ks.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
-                    R.string.name_phonetic_middle, FLAGS_PHONETIC));
-            ks.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
-                    R.string.name_phonetic_given, FLAGS_PHONETIC));
-
-            throwIfList(ks);
-            kinds.add(ks);
-
-            // Name
-            final DataKind kn = newDataKind(context, parser, attrs, true,
-                    DataKind.PSEUDO_MIME_TYPE_NAME, null,
-                    R.string.nameLabelsGroup, Weight.NONE,
-                    new SimpleInflater(R.string.nameLabelsGroup),
-                    new SimpleInflater(Nickname.NAME));
-            kn.typeOverallMax = 1;
-            throwIfList(kn);
-            kinds.add(kn);
-
-            kn.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
-                    FLAGS_PERSON_NAME).setOptional(true));
-            if (!displayOrderPrimary) {
-                kn.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
-                        FLAGS_PERSON_NAME));
-                kn.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
-                        FLAGS_PERSON_NAME).setOptional(true));
-                kn.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
-                        FLAGS_PERSON_NAME));
-            } else {
-                kn.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
-                        FLAGS_PERSON_NAME));
-                kn.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
-                        FLAGS_PERSON_NAME).setOptional(true));
-                kn.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
-                        FLAGS_PERSON_NAME));
-            }
-            kn.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
-                    FLAGS_PERSON_NAME).setOptional(true));
-
-            // Phonetic name
-            final DataKind kp = newDataKind(context, parser, attrs, true,
-                    DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME, null,
-                    R.string.name_phonetic, Weight.NONE,
-                    new SimpleInflater(R.string.nameLabelsGroup),
-                    new SimpleInflater(Nickname.NAME));
-            kp.typeOverallMax = 1;
-            kinds.add(kp);
-
-            // We may want to change the order depending on displayOrderPrimary too.
-            kp.fieldList.add(new EditField(DataKind.PSEUDO_COLUMN_PHONETIC_NAME,
-                    R.string.name_phonetic, FLAGS_PHONETIC).setShortForm(true));
-            kp.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
-                    R.string.name_phonetic_family, FLAGS_PHONETIC).setLongForm(true));
-            kp.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
-                    R.string.name_phonetic_middle, FLAGS_PHONETIC).setLongForm(true));
-            kp.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
-                    R.string.name_phonetic_given, FLAGS_PHONETIC).setLongForm(true));
-            return kinds;
-        }
-    }
-
-    private static class NicknameKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "nickname";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    Nickname.CONTENT_ITEM_TYPE, null, R.string.nicknameLabelsGroup, Weight.NICKNAME,
-                    new SimpleInflater(R.string.nicknameLabelsGroup),
-                    new SimpleInflater(Nickname.NAME));
-
-            kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
-                    FLAGS_PERSON_NAME));
-
-            kind.defaultValues = new ContentValues();
-            kind.defaultValues.put(Nickname.TYPE, Nickname.TYPE_DEFAULT);
-
-            throwIfList(kind);
-            return Lists.newArrayList(kind);
-        }
-    }
-
-    private static class PhoneKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "phone";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    Phone.CONTENT_ITEM_TYPE, Phone.TYPE, R.string.phoneLabelsGroup, Weight.PHONE,
-                    new PhoneActionInflater(), new SimpleInflater(Phone.NUMBER));
-
-            kind.iconAltRes = R.drawable.ic_message_24dp_mirrored;
-            kind.iconAltDescriptionRes = R.string.sms;
-            kind.actionAltHeader = new PhoneActionAltInflater();
-
-            kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
-
-            return Lists.newArrayList(kind);
-        }
-
-        /** Just to avoid line-wrapping... */
-        protected static EditType build(int type, boolean secondary) {
-            return new EditType(type, Phone.getTypeLabelResource(type)).setSecondary(secondary);
-        }
-
-        @Override
-        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
-            if ("home".equals(type)) return build(Phone.TYPE_HOME, false);
-            if ("mobile".equals(type)) return build(Phone.TYPE_MOBILE, false);
-            if ("work".equals(type)) return build(Phone.TYPE_WORK, false);
-            if ("fax_work".equals(type)) return build(Phone.TYPE_FAX_WORK, true);
-            if ("fax_home".equals(type)) return build(Phone.TYPE_FAX_HOME, true);
-            if ("pager".equals(type)) return build(Phone.TYPE_PAGER, true);
-            if ("other".equals(type)) return build(Phone.TYPE_OTHER, false);
-            if ("callback".equals(type)) return build(Phone.TYPE_CALLBACK, true);
-            if ("car".equals(type)) return build(Phone.TYPE_CAR, true);
-            if ("company_main".equals(type)) return build(Phone.TYPE_COMPANY_MAIN, true);
-            if ("isdn".equals(type)) return build(Phone.TYPE_ISDN, true);
-            if ("main".equals(type)) return build(Phone.TYPE_MAIN, true);
-            if ("other_fax".equals(type)) return build(Phone.TYPE_OTHER_FAX, true);
-            if ("radio".equals(type)) return build(Phone.TYPE_RADIO, true);
-            if ("telex".equals(type)) return build(Phone.TYPE_TELEX, true);
-            if ("tty_tdd".equals(type)) return build(Phone.TYPE_TTY_TDD, true);
-            if ("work_mobile".equals(type)) return build(Phone.TYPE_WORK_MOBILE, true);
-            if ("work_pager".equals(type)) return build(Phone.TYPE_WORK_PAGER, true);
-
-            // Note "assistant" used to be a custom column for the fallback type, but not anymore.
-            if ("assistant".equals(type)) return build(Phone.TYPE_ASSISTANT, true);
-            if ("mms".equals(type)) return build(Phone.TYPE_MMS, true);
-            if ("custom".equals(type)) {
-                return build(Phone.TYPE_CUSTOM, true).setCustomColumn(Phone.LABEL);
-            }
-            return null;
-        }
-    }
-
-    private static class EmailKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "email";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    Email.CONTENT_ITEM_TYPE, Email.TYPE, R.string.emailLabelsGroup, Weight.EMAIL,
-                    new EmailActionInflater(), new SimpleInflater(Email.DATA));
-            kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
-
-            return Lists.newArrayList(kind);
-        }
-
-        @Override
-        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
-            // EditType is mutable, so we need to create a new instance every time.
-            if ("home".equals(type)) return buildEmailType(Email.TYPE_HOME);
-            if ("work".equals(type)) return buildEmailType(Email.TYPE_WORK);
-            if ("other".equals(type)) return buildEmailType(Email.TYPE_OTHER);
-            if ("mobile".equals(type)) return buildEmailType(Email.TYPE_MOBILE);
-            if ("custom".equals(type)) {
-                return buildEmailType(Email.TYPE_CUSTOM)
-                        .setSecondary(true).setCustomColumn(Email.LABEL);
-            }
-            return null;
-        }
-    }
-
-    private static class StructuredPostalKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "postal";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    StructuredPostal.CONTENT_ITEM_TYPE, StructuredPostal.TYPE,
-                    R.string.postalLabelsGroup, Weight.STRUCTURED_POSTAL,
-                    new PostalActionInflater(),
-                    new SimpleInflater(StructuredPostal.FORMATTED_ADDRESS));
-
-            if (getAttr(attrs, "needsStructured", false)) {
-                if (Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage())) {
-                    // Japanese order
-                    kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
-                            R.string.postal_country, FLAGS_POSTAL).setOptional(true));
-                    kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
-                            R.string.postal_postcode, FLAGS_POSTAL));
-                    kind.fieldList.add(new EditField(StructuredPostal.REGION,
-                            R.string.postal_region, FLAGS_POSTAL));
-                    kind.fieldList.add(new EditField(StructuredPostal.CITY,
-                            R.string.postal_city,FLAGS_POSTAL));
-                    kind.fieldList.add(new EditField(StructuredPostal.STREET,
-                            R.string.postal_street, FLAGS_POSTAL));
-                } else {
-                    // Generic order
-                    kind.fieldList.add(new EditField(StructuredPostal.STREET,
-                            R.string.postal_street, FLAGS_POSTAL));
-                    kind.fieldList.add(new EditField(StructuredPostal.CITY,
-                            R.string.postal_city,FLAGS_POSTAL));
-                    kind.fieldList.add(new EditField(StructuredPostal.REGION,
-                            R.string.postal_region, FLAGS_POSTAL));
-                    kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
-                            R.string.postal_postcode, FLAGS_POSTAL));
-                    kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
-                            R.string.postal_country, FLAGS_POSTAL).setOptional(true));
-                }
-            } else {
-                kind.maxLinesForDisplay= MAX_LINES_FOR_POSTAL_ADDRESS;
-                kind.fieldList.add(
-                        new EditField(StructuredPostal.FORMATTED_ADDRESS, R.string.postal_address,
-                                FLAGS_POSTAL));
-            }
-
-            return Lists.newArrayList(kind);
-        }
-
-        @Override
-        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
-            // EditType is mutable, so we need to create a new instance every time.
-            if ("home".equals(type)) return buildPostalType(StructuredPostal.TYPE_HOME);
-            if ("work".equals(type)) return buildPostalType(StructuredPostal.TYPE_WORK);
-            if ("other".equals(type)) return buildPostalType(StructuredPostal.TYPE_OTHER);
-            if ("custom".equals(type)) {
-                return buildPostalType(StructuredPostal.TYPE_CUSTOM)
-                        .setSecondary(true).setCustomColumn(Email.LABEL);
-            }
-            return null;
-        }
-    }
-
-    private static class ImKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "im";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-
-            // IM is special:
-            // - It uses "protocol" as the custom label field
-            // - Its TYPE is fixed to TYPE_OTHER
-
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    Im.CONTENT_ITEM_TYPE, Im.PROTOCOL, R.string.imLabelsGroup, Weight.IM,
-                    new ImActionInflater(), new SimpleInflater(Im.DATA) // header / action
-                    );
-            kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
-
-            kind.defaultValues = new ContentValues();
-            kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
-
-            return Lists.newArrayList(kind);
-        }
-
-        @Override
-        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
-            if ("aim".equals(type)) return buildImType(Im.PROTOCOL_AIM);
-            if ("msn".equals(type)) return buildImType(Im.PROTOCOL_MSN);
-            if ("yahoo".equals(type)) return buildImType(Im.PROTOCOL_YAHOO);
-            if ("skype".equals(type)) return buildImType(Im.PROTOCOL_SKYPE);
-            if ("qq".equals(type)) return buildImType(Im.PROTOCOL_QQ);
-            if ("google_talk".equals(type)) return buildImType(Im.PROTOCOL_GOOGLE_TALK);
-            if ("icq".equals(type)) return buildImType(Im.PROTOCOL_ICQ);
-            if ("jabber".equals(type)) return buildImType(Im.PROTOCOL_JABBER);
-            if ("custom".equals(type)) {
-                return buildImType(Im.PROTOCOL_CUSTOM).setSecondary(true)
-                        .setCustomColumn(Im.CUSTOM_PROTOCOL);
-            }
-            return null;
-        }
-    }
-
-    private static class OrganizationKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "organization";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    Organization.CONTENT_ITEM_TYPE, null, R.string.organizationLabelsGroup,
-                    Weight.ORGANIZATION,
-                    new SimpleInflater(R.string.organizationLabelsGroup),
-                    ORGANIZATION_BODY_INFLATER);
-
-            kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
-                    FLAGS_GENERIC_NAME));
-            kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
-                    FLAGS_GENERIC_NAME));
-
-            throwIfList(kind);
-
-            return Lists.newArrayList(kind);
-        }
-    }
-
-    private static class PhotoKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "photo";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    Photo.CONTENT_ITEM_TYPE, null /* no type */, Weight.NONE, -1,
-                    null, null // no header, no body
-                    );
-
-            kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
-
-            throwIfList(kind);
-
-            return Lists.newArrayList(kind);
-        }
-    }
-
-    private static class NoteKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "note";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    Note.CONTENT_ITEM_TYPE, null, R.string.label_notes, Weight.NOTE,
-                    new SimpleInflater(R.string.label_notes), new SimpleInflater(Note.NOTE));
-
-            kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
-            kind.maxLinesForDisplay = MAX_LINES_FOR_NOTE;
-
-            throwIfList(kind);
-
-            return Lists.newArrayList(kind);
-        }
-    }
-
-    private static class WebsiteKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "website";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    Website.CONTENT_ITEM_TYPE, null, R.string.websiteLabelsGroup, Weight.WEBSITE,
-                    new SimpleInflater(R.string.websiteLabelsGroup),
-                    new SimpleInflater(Website.URL));
-
-            kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup,
-                    FLAGS_WEBSITE));
-
-            kind.defaultValues = new ContentValues();
-            kind.defaultValues.put(Website.TYPE, Website.TYPE_OTHER);
-
-            return Lists.newArrayList(kind);
-        }
-    }
-
-    private static class SipAddressKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "sip_address";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    SipAddress.CONTENT_ITEM_TYPE, null, R.string.label_sip_address,
-                    Weight.SIP_ADDRESS,
-                    new SimpleInflater(R.string.label_sip_address),
-                    new SimpleInflater(SipAddress.SIP_ADDRESS));
-
-            kind.fieldList.add(new EditField(SipAddress.SIP_ADDRESS,
-                    R.string.label_sip_address, FLAGS_SIP_ADDRESS));
-
-            throwIfList(kind);
-
-            return Lists.newArrayList(kind);
-        }
-    }
-
-    private static class GroupMembershipKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "group_membership";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    GroupMembership.CONTENT_ITEM_TYPE, null,
-                    R.string.groupsLabel, Weight.GROUP_MEMBERSHIP, null, null);
-
-            kind.fieldList.add(new EditField(GroupMembership.GROUP_ROW_ID, -1, -1));
-            kind.maxLinesForDisplay = MAX_LINES_FOR_GROUP;
-
-            throwIfList(kind);
-
-            return Lists.newArrayList(kind);
-        }
-    }
-
-    /**
-     * Event DataKind parser.
-     *
-     * Event DataKind is used only for Google/Exchange types, so this parser is not used for now.
-     */
-    private static class EventKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "event";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    Event.CONTENT_ITEM_TYPE, Event.TYPE, R.string.eventLabelsGroup, Weight.EVENT,
-                    new EventActionInflater(), new SimpleInflater(Event.START_DATE));
-
-            kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
-
-            if (getAttr(attrs, Attr.DATE_WITH_TIME, false)) {
-                kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_AND_TIME_FORMAT;
-                kind.dateFormatWithYear = CommonDateUtils.DATE_AND_TIME_FORMAT;
-            } else {
-                kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_FORMAT;
-                kind.dateFormatWithYear = CommonDateUtils.FULL_DATE_FORMAT;
-            }
-
-            return Lists.newArrayList(kind);
-        }
-
-        @Override
-        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
-            final boolean yo = getAttr(attrs, Attr.YEAR_OPTIONAL, false);
-
-            if ("birthday".equals(type)) {
-                return buildEventType(Event.TYPE_BIRTHDAY, yo).setSpecificMax(1);
-            }
-            if ("anniversary".equals(type)) return buildEventType(Event.TYPE_ANNIVERSARY, yo);
-            if ("other".equals(type)) return buildEventType(Event.TYPE_OTHER, yo);
-            if ("custom".equals(type)) {
-                return buildEventType(Event.TYPE_CUSTOM, yo)
-                        .setSecondary(true).setCustomColumn(Event.LABEL);
-            }
-            return null;
-        }
-    }
-
-    /**
-     * Relationship DataKind parser.
-     *
-     * Relationship DataKind is used only for Google/Exchange types, so this parser is not used for
-     * now.
-     */
-    private static class RelationshipKindBuilder extends KindBuilder {
-        @Override
-        public String getTagName() {
-            return "relationship";
-        }
-
-        @Override
-        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
-                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
-                IOException {
-            final DataKind kind = newDataKind(context, parser, attrs, false,
-                    Relation.CONTENT_ITEM_TYPE, Relation.TYPE,
-                    R.string.relationLabelsGroup, Weight.RELATIONSHIP,
-                    new RelationActionInflater(), new SimpleInflater(Relation.NAME));
-
-            kind.fieldList.add(new EditField(Relation.DATA, R.string.relationLabelsGroup,
-                    FLAGS_RELATION));
-
-            kind.defaultValues = new ContentValues();
-            kind.defaultValues.put(Relation.TYPE, Relation.TYPE_SPOUSE);
-
-            return Lists.newArrayList(kind);
-        }
-
-        @Override
-        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
-            // EditType is mutable, so we need to create a new instance every time.
-            if ("assistant".equals(type)) return buildRelationType(Relation.TYPE_ASSISTANT);
-            if ("brother".equals(type)) return buildRelationType(Relation.TYPE_BROTHER);
-            if ("child".equals(type)) return buildRelationType(Relation.TYPE_CHILD);
-            if ("domestic_partner".equals(type)) {
-                    return buildRelationType(Relation.TYPE_DOMESTIC_PARTNER);
-            }
-            if ("father".equals(type)) return buildRelationType(Relation.TYPE_FATHER);
-            if ("friend".equals(type)) return buildRelationType(Relation.TYPE_FRIEND);
-            if ("manager".equals(type)) return buildRelationType(Relation.TYPE_MANAGER);
-            if ("mother".equals(type)) return buildRelationType(Relation.TYPE_MOTHER);
-            if ("parent".equals(type)) return buildRelationType(Relation.TYPE_PARENT);
-            if ("partner".equals(type)) return buildRelationType(Relation.TYPE_PARTNER);
-            if ("referred_by".equals(type)) return buildRelationType(Relation.TYPE_REFERRED_BY);
-            if ("relative".equals(type)) return buildRelationType(Relation.TYPE_RELATIVE);
-            if ("sister".equals(type)) return buildRelationType(Relation.TYPE_SISTER);
-            if ("spouse".equals(type)) return buildRelationType(Relation.TYPE_SPOUSE);
-            if ("custom".equals(type)) {
-                return buildRelationType(Relation.TYPE_CUSTOM).setSecondary(true)
-                        .setCustomColumn(Relation.LABEL);
-            }
-            return null;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/DeviceLocalAccountType.java b/src/com/android/contacts/common/model/account/DeviceLocalAccountType.java
deleted file mode 100644
index 31452e6..0000000
--- a/src/com/android/contacts/common/model/account/DeviceLocalAccountType.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.model.account;
-
-import android.content.Context;
-
-public class DeviceLocalAccountType extends FallbackAccountType {
-
-    private final boolean mGroupsEditable;
-
-    public DeviceLocalAccountType(Context context, boolean groupsEditable) {
-        super(context);
-        mGroupsEditable = groupsEditable;
-    }
-
-    public DeviceLocalAccountType(Context context) {
-        this(context, false);
-    }
-
-    @Override
-    public boolean isGroupMembershipEditable() {
-        return mGroupsEditable;
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/ExchangeAccountType.java b/src/com/android/contacts/common/model/account/ExchangeAccountType.java
deleted file mode 100644
index 4106c6d..0000000
--- a/src/com/android/contacts/common/model/account/ExchangeAccountType.java
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model.account;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.provider.ContactsContract.CommonDataKinds.Nickname;
-import android.provider.ContactsContract.CommonDataKinds.Note;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.CommonDataKinds.Website;
-import android.util.Log;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.CommonDateUtils;
-import com.android.contactsbind.FeedbackHelper;
-
-import com.google.common.collect.Lists;
-
-import java.util.Locale;
-
-public class ExchangeAccountType extends BaseAccountType {
-    private static final String TAG = "ExchangeAccountType";
-
-    private static final String ACCOUNT_TYPE_AOSP = "com.android.exchange";
-    private static final String ACCOUNT_TYPE_GOOGLE_1 = "com.google.android.exchange";
-    private static final String ACCOUNT_TYPE_GOOGLE_2 = "com.google.android.gm.exchange";
-
-    public ExchangeAccountType(Context context, String authenticatorPackageName, String type) {
-        this.accountType = type;
-        this.resourcePackageName = null;
-        this.syncAdapterPackageName = authenticatorPackageName;
-
-        try {
-            addDataKindStructuredName(context);
-            addDataKindName(context);
-            addDataKindPhoneticName(context);
-            addDataKindNickname(context);
-            addDataKindPhone(context);
-            addDataKindEmail(context);
-            addDataKindStructuredPostal(context);
-            addDataKindIm(context);
-            addDataKindOrganization(context);
-            addDataKindPhoto(context);
-            addDataKindNote(context);
-            addDataKindEvent(context);
-            addDataKindWebsite(context);
-            addDataKindGroupMembership(context);
-
-            mIsInitialized = true;
-        } catch (DefinitionException e) {
-            // TODO: Change this to fail fast if there are no feedback reports
-            FeedbackHelper.sendFeedback(context, TAG, "Failed to build exchange account type", e);
-        }
-    }
-
-    public static boolean isExchangeType(String type) {
-        return ACCOUNT_TYPE_AOSP.equals(type) || ACCOUNT_TYPE_GOOGLE_1.equals(type)
-                || ACCOUNT_TYPE_GOOGLE_2.equals(type);
-    }
-
-    @Override
-    protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
-                R.string.nameLabelsGroup, Weight.NONE, true));
-        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
-        kind.actionBody = new SimpleInflater(Nickname.NAME);
-
-        kind.typeOverallMax = 1;
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
-                FLAGS_PERSON_NAME).setOptional(true));
-        kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME,
-                R.string.name_family, FLAGS_PERSON_NAME));
-        kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME,
-                R.string.name_middle, FLAGS_PERSON_NAME));
-        kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME,
-                R.string.name_given, FLAGS_PERSON_NAME));
-        kind.fieldList.add(new EditField(StructuredName.SUFFIX,
-                R.string.name_suffix, FLAGS_PERSON_NAME));
-
-        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
-                R.string.name_phonetic_family, FLAGS_PHONETIC));
-        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
-                R.string.name_phonetic_given, FLAGS_PHONETIC));
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindPhoneticName(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
-                R.string.name_phonetic, Weight.NONE, true));
-        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
-        kind.actionBody = new SimpleInflater(Nickname.NAME);
-
-        kind.typeOverallMax = 1;
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
-                R.string.name_phonetic_family, FLAGS_PHONETIC));
-        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
-                R.string.name_phonetic_given, FLAGS_PHONETIC));
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindNickname(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindNickname(context);
-
-        kind.typeOverallMax = 1;
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
-                FLAGS_PERSON_NAME));
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindPhone(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindPhone(context);
-
-        kind.typeColumn = Phone.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE).setSpecificMax(1));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_HOME).setSpecificMax(2));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK).setSpecificMax(2));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true)
-                .setSpecificMax(1));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true)
-                .setSpecificMax(1));
-        kind.typeList
-                .add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true).setSpecificMax(1));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_CAR).setSecondary(true).setSpecificMax(1));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_COMPANY_MAIN).setSecondary(true)
-                .setSpecificMax(1));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_MMS).setSecondary(true).setSpecificMax(1));
-        kind.typeList
-                .add(buildPhoneType(Phone.TYPE_RADIO).setSecondary(true).setSpecificMax(1));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_ASSISTANT).setSecondary(true)
-                .setSpecificMax(1));
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindEmail(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindEmail(context);
-
-        kind.typeOverallMax = 3;
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindStructuredPostal(context);
-
-        final boolean useJapaneseOrder =
-            Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
-        kind.typeColumn = StructuredPostal.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_WORK).setSpecificMax(1));
-        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME).setSpecificMax(1));
-        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER).setSpecificMax(1));
-
-        kind.fieldList = Lists.newArrayList();
-        if (useJapaneseOrder) {
-            kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
-                    R.string.postal_country, FLAGS_POSTAL).setOptional(true));
-            kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
-                    R.string.postal_postcode, FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.REGION,
-                    R.string.postal_region, FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.CITY,
-                    R.string.postal_city,FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.STREET,
-                    R.string.postal_street, FLAGS_POSTAL));
-        } else {
-            kind.fieldList.add(new EditField(StructuredPostal.STREET,
-                    R.string.postal_street, FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.CITY,
-                    R.string.postal_city,FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.REGION,
-                    R.string.postal_region, FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
-                    R.string.postal_postcode, FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
-                    R.string.postal_country, FLAGS_POSTAL).setOptional(true));
-        }
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindIm(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindIm(context);
-
-        // Types are not supported for IM. There can be 3 IMs, but OWA only shows only the first
-        kind.typeOverallMax = 3;
-
-        kind.defaultValues = new ContentValues();
-        kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindOrganization(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindOrganization(context);
-
-        kind.typeOverallMax = 1;
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
-                FLAGS_GENERIC_NAME));
-        kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
-                FLAGS_GENERIC_NAME));
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindPhoto(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindPhoto(context);
-
-        kind.typeOverallMax = 1;
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindNote(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindNote(context);
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
-
-        return kind;
-    }
-
-    protected DataKind addDataKindEvent(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE, R.string.eventLabelsGroup,
-                Weight.EVENT, true));
-        kind.actionHeader = new EventActionInflater();
-        kind.actionBody = new SimpleInflater(Event.START_DATE);
-
-        kind.typeOverallMax = 1;
-
-        kind.typeColumn = Event.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, false).setSpecificMax(1));
-
-        kind.dateFormatWithYear = CommonDateUtils.DATE_AND_TIME_FORMAT;
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindWebsite(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindWebsite(context);
-
-        kind.typeOverallMax = 1;
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup, FLAGS_WEBSITE));
-
-        return kind;
-    }
-
-    @Override
-    public boolean isGroupMembershipEditable() {
-        return true;
-    }
-
-    @Override
-    public boolean areContactsWritable() {
-        return true;
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/ExternalAccountType.java b/src/com/android/contacts/common/model/account/ExternalAccountType.java
deleted file mode 100644
index 5c5a26a..0000000
--- a/src/com/android/contacts/common/model/account/ExternalAccountType.java
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model.account;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.ResolveInfo;
-import android.content.pm.ServiceInfo;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.content.res.XmlResourceParser;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-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.util.Xml;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contactsbind.FeedbackHelper;
-
-import com.google.common.annotations.VisibleForTesting;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A general contacts account type descriptor.
- */
-public class ExternalAccountType extends BaseAccountType {
-    private static final String TAG = "ExternalAccountType";
-
-    private static final String SYNC_META_DATA = "android.content.SyncAdapter";
-
-    /**
-     * The metadata name for so-called "contacts.xml".
-     *
-     * On LMP and later, we also accept the "alternate" name.
-     * This is to allow sync adapters to have a contacts.xml without making it visible on older
-     * platforms. If you modify this also update the corresponding list in
-     * ContactsProvider/PhotoPriorityResolver
-     */
-    private static final String[] METADATA_CONTACTS_NAMES = new String[] {
-            "android.provider.ALTERNATE_CONTACTS_STRUCTURE",
-            "android.provider.CONTACTS_STRUCTURE"
-    };
-
-    private static final String TAG_CONTACTS_SOURCE_LEGACY = "ContactsSource";
-    private static final String TAG_CONTACTS_ACCOUNT_TYPE = "ContactsAccountType";
-    private static final String TAG_CONTACTS_DATA_KIND = "ContactsDataKind";
-    private static final String TAG_EDIT_SCHEMA = "EditSchema";
-
-    private static final String ATTR_INVITE_CONTACT_ACTIVITY = "inviteContactActivity";
-    private static final String ATTR_INVITE_CONTACT_ACTION_LABEL = "inviteContactActionLabel";
-    private static final String ATTR_VIEW_CONTACT_NOTIFY_SERVICE = "viewContactNotifyService";
-    private static final String ATTR_VIEW_GROUP_ACTIVITY = "viewGroupActivity";
-    private static final String ATTR_VIEW_GROUP_ACTION_LABEL = "viewGroupActionLabel";
-    private static final String ATTR_DATA_SET = "dataSet";
-    private static final String ATTR_EXTENSION_PACKAGE_NAMES = "extensionPackageNames";
-
-    // The following attributes should only be set in non-sync-adapter account types.  They allow
-    // for the account type and resource IDs to be specified without an associated authenticator.
-    private static final String ATTR_ACCOUNT_TYPE = "accountType";
-    private static final String ATTR_ACCOUNT_LABEL = "accountTypeLabel";
-    private static final String ATTR_ACCOUNT_ICON = "accountTypeIcon";
-
-    private final boolean mIsExtension;
-
-    private String mInviteContactActivity;
-    private String mInviteActionLabelAttribute;
-    private int mInviteActionLabelResId;
-    private String mViewContactNotifyService;
-    private String mViewGroupActivity;
-    private String mViewGroupLabelAttribute;
-    private int mViewGroupLabelResId;
-    private List<String> mExtensionPackageNames;
-    private String mAccountTypeLabelAttribute;
-    private String mAccountTypeIconAttribute;
-    private boolean mHasContactsMetadata;
-    private boolean mHasEditSchema;
-    private boolean mGroupMembershipEditable;
-
-    public ExternalAccountType(Context context, String resPackageName, boolean isExtension) {
-        this(context, resPackageName, isExtension, null);
-    }
-
-    /**
-     * Constructor used for testing to initialize with any arbitrary XML.
-     *
-     * @param injectedMetadata If non-null, it'll be used to initialize the type.  Only set by
-     *     tests.  If null, the metadata is loaded from the specified package.
-     */
-    ExternalAccountType(Context context, String packageName, boolean isExtension,
-            XmlResourceParser injectedMetadata) {
-        this.mIsExtension = isExtension;
-        this.resourcePackageName = packageName;
-        this.syncAdapterPackageName = packageName;
-
-        final XmlResourceParser parser;
-        if (injectedMetadata == null) {
-            parser = loadContactsXml(context, packageName);
-        } else {
-            parser = injectedMetadata;
-        }
-        boolean needLineNumberInErrorLog = true;
-        try {
-            if (parser != null) {
-                inflate(context, parser);
-            }
-
-            // Done parsing; line number no longer needed in error log.
-            needLineNumberInErrorLog = false;
-            if (mHasEditSchema) {
-                checkKindExists(StructuredName.CONTENT_ITEM_TYPE);
-                checkKindExists(DataKind.PSEUDO_MIME_TYPE_NAME);
-                checkKindExists(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME);
-                checkKindExists(Photo.CONTENT_ITEM_TYPE);
-            } else {
-                // Bring in name and photo from fallback source, which are non-optional
-                addDataKindStructuredName(context);
-                addDataKindName(context);
-                addDataKindPhoneticName(context);
-                addDataKindPhoto(context);
-            }
-        } catch (DefinitionException e) {
-            final StringBuilder error = new StringBuilder();
-            error.append("Problem reading XML");
-            if (needLineNumberInErrorLog && (parser != null)) {
-                error.append(" in line ");
-                error.append(parser.getLineNumber());
-            }
-            error.append(" for external package ");
-            error.append(packageName);
-            // Only send feedback if not from tests. There are tests that expect failures so no need
-            // to report those.
-            if (injectedMetadata == null) {
-                FeedbackHelper.sendFeedback(context, TAG, "Failed to build external account type",
-                        e);
-            }
-            return;
-        } finally {
-            if (parser != null) {
-                parser.close();
-            }
-        }
-
-        mExtensionPackageNames = new ArrayList<String>();
-        mInviteActionLabelResId = resolveExternalResId(context, mInviteActionLabelAttribute,
-                syncAdapterPackageName, ATTR_INVITE_CONTACT_ACTION_LABEL);
-        mViewGroupLabelResId = resolveExternalResId(context, mViewGroupLabelAttribute,
-                syncAdapterPackageName, ATTR_VIEW_GROUP_ACTION_LABEL);
-        titleRes = resolveExternalResId(context, mAccountTypeLabelAttribute,
-                syncAdapterPackageName, ATTR_ACCOUNT_LABEL);
-        iconRes = resolveExternalResId(context, mAccountTypeIconAttribute,
-                syncAdapterPackageName, ATTR_ACCOUNT_ICON);
-
-        final DataKind dataKind = getKindForMimetype(GroupMembership.CONTENT_ITEM_TYPE);
-        mGroupMembershipEditable = dataKind != null && dataKind.editable;
-
-        // If we reach this point, the account type has been successfully initialized.
-        mIsInitialized = true;
-    }
-
-    /**
-     * Returns the CONTACTS_STRUCTURE metadata (aka "contacts.xml") in the given apk package.
-     *
-     * This method looks through all services in the package that handle sync adapter
-     * intents for the first one that contains CONTACTS_STRUCTURE metadata. We have to look
-     * through all sync adapters in the package in case there are contacts and other sync
-     * adapters (eg, calendar) in the same package.
-     *
-     * Returns {@code null} if the package has no CONTACTS_STRUCTURE metadata.  In this case
-     * the account type *will* be initialized with minimal configuration.
-     */
-    public static XmlResourceParser loadContactsXml(Context context, String resPackageName) {
-        final PackageManager pm = context.getPackageManager();
-        final Intent intent = new Intent(SYNC_META_DATA).setPackage(resPackageName);
-        final List<ResolveInfo> intentServices = pm.queryIntentServices(intent,
-                PackageManager.GET_SERVICES | PackageManager.GET_META_DATA);
-
-        if (intentServices != null) {
-            for (final ResolveInfo resolveInfo : intentServices) {
-                final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
-                if (serviceInfo == null) {
-                    continue;
-                }
-                for (String metadataName : METADATA_CONTACTS_NAMES) {
-                    final XmlResourceParser parser = serviceInfo.loadXmlMetaData(
-                            pm, metadataName);
-                    if (parser != null) {
-                        if (Log.isLoggable(TAG, Log.DEBUG)) {
-                            Log.d(TAG, String.format("Metadata loaded from: %s, %s, %s",
-                                    serviceInfo.packageName, serviceInfo.name,
-                                    metadataName));
-                        }
-                        return parser;
-                    }
-                }
-            }
-        }
-
-        // Package was found, but that doesn't contain the CONTACTS_STRUCTURE metadata.
-        return null;
-    }
-
-    /**
-     * Returns {@code TRUE} if the package contains CONTACTS_STRUCTURE metadata.
-     */
-    public static boolean hasContactsXml(Context context, String resPackageName) {
-        return loadContactsXml(context, resPackageName) != null;
-    }
-
-    private void checkKindExists(String mimeType) throws DefinitionException {
-        if (getKindForMimetype(mimeType) == null) {
-            throw new DefinitionException(mimeType + " must be supported");
-        }
-    }
-
-    @Override
-    public boolean isEmbedded() {
-        return false;
-    }
-
-    @Override
-    public boolean isExtension() {
-        return mIsExtension;
-    }
-
-    @Override
-    public boolean areContactsWritable() {
-        return mHasEditSchema;
-    }
-
-    /**
-     * Whether this account type has the android.provider.CONTACTS_STRUCTURE metadata xml.
-     */
-    public boolean hasContactsMetadata() {
-        return mHasContactsMetadata;
-    }
-
-    @Override
-    public String getInviteContactActivityClassName() {
-        return mInviteContactActivity;
-    }
-
-    @Override
-    protected int getInviteContactActionResId() {
-        return mInviteActionLabelResId;
-    }
-
-    @Override
-    public String getViewContactNotifyServiceClassName() {
-        return mViewContactNotifyService;
-    }
-
-    @Override
-    public String getViewGroupActivity() {
-        return mViewGroupActivity;
-    }
-
-    @Override
-    protected int getViewGroupLabelResId() {
-        return mViewGroupLabelResId;
-    }
-
-    @Override
-    public List<String> getExtensionPackageNames() {
-        return mExtensionPackageNames;
-    }
-
-    @Override
-    public boolean isGroupMembershipEditable() {
-        return mGroupMembershipEditable;
-    }
-
-    /**
-     * Inflate this {@link AccountType} from the given parser. This may only
-     * load details matching the publicly-defined schema.
-     */
-    protected void inflate(Context context, XmlPullParser parser) throws DefinitionException {
-        final AttributeSet attrs = Xml.asAttributeSet(parser);
-
-        try {
-            int type;
-            while ((type = parser.next()) != XmlPullParser.START_TAG
-                    && type != XmlPullParser.END_DOCUMENT) {
-                // Drain comments and whitespace
-            }
-
-            if (type != XmlPullParser.START_TAG) {
-                throw new IllegalStateException("No start tag found");
-            }
-
-            String rootTag = parser.getName();
-            if (!TAG_CONTACTS_ACCOUNT_TYPE.equals(rootTag) &&
-                    !TAG_CONTACTS_SOURCE_LEGACY.equals(rootTag)) {
-                throw new IllegalStateException("Top level element must be "
-                        + TAG_CONTACTS_ACCOUNT_TYPE + ", not " + rootTag);
-            }
-
-            mHasContactsMetadata = true;
-
-            int attributeCount = parser.getAttributeCount();
-            for (int i = 0; i < attributeCount; i++) {
-                String attr = parser.getAttributeName(i);
-                String value = parser.getAttributeValue(i);
-                if (Log.isLoggable(TAG, Log.DEBUG)) {
-                    Log.d(TAG, attr + "=" + value);
-                }
-                if (ATTR_INVITE_CONTACT_ACTIVITY.equals(attr)) {
-                    mInviteContactActivity = value;
-                } else if (ATTR_INVITE_CONTACT_ACTION_LABEL.equals(attr)) {
-                    mInviteActionLabelAttribute = value;
-                } else if (ATTR_VIEW_CONTACT_NOTIFY_SERVICE.equals(attr)) {
-                    mViewContactNotifyService = value;
-                } else if (ATTR_VIEW_GROUP_ACTIVITY.equals(attr)) {
-                    mViewGroupActivity = value;
-                } else if (ATTR_VIEW_GROUP_ACTION_LABEL.equals(attr)) {
-                    mViewGroupLabelAttribute = value;
-                } else if (ATTR_DATA_SET.equals(attr)) {
-                    dataSet = value;
-                } else if (ATTR_EXTENSION_PACKAGE_NAMES.equals(attr)) {
-                    mExtensionPackageNames.add(value);
-                } else if (ATTR_ACCOUNT_TYPE.equals(attr)) {
-                    accountType = value;
-                } else if (ATTR_ACCOUNT_LABEL.equals(attr)) {
-                    mAccountTypeLabelAttribute = value;
-                } else if (ATTR_ACCOUNT_ICON.equals(attr)) {
-                    mAccountTypeIconAttribute = value;
-                } else if (Log.isLoggable(TAG, Log.WARN)) {
-                    Log.w(TAG, "Unsupported attribute " + attr);
-                }
-            }
-
-            // Parse all children kinds
-            final int startDepth = parser.getDepth();
-            while (((type = parser.next()) != XmlPullParser.END_TAG
-                        || parser.getDepth() > startDepth)
-                    && type != XmlPullParser.END_DOCUMENT) {
-
-                if (type != XmlPullParser.START_TAG || parser.getDepth() != startDepth + 1) {
-                    continue; // Not a direct child tag
-                }
-
-                String tag = parser.getName();
-                if (TAG_EDIT_SCHEMA.equals(tag)) {
-                    mHasEditSchema = true;
-                    parseEditSchema(context, parser, attrs);
-                } else if (TAG_CONTACTS_DATA_KIND.equals(tag)) {
-                    final TypedArray a = context.obtainStyledAttributes(attrs,
-                            R.styleable.ContactsDataKind);
-                    final DataKind kind = new DataKind();
-
-                    kind.mimeType = a
-                            .getString(R.styleable.ContactsDataKind_android_mimeType);
-                    final String summaryColumn = a.getString(
-                            R.styleable.ContactsDataKind_android_summaryColumn);
-                    if (summaryColumn != null) {
-                        // Inflate a specific column as summary when requested
-                        kind.actionHeader = new SimpleInflater(summaryColumn);
-                    }
-                    final String detailColumn = a.getString(
-                            R.styleable.ContactsDataKind_android_detailColumn);
-                    if (detailColumn != null) {
-                        // Inflate specific column as summary
-                        kind.actionBody = new SimpleInflater(detailColumn);
-                    }
-
-                    a.recycle();
-
-                    addKind(kind);
-                }
-            }
-        } catch (XmlPullParserException e) {
-            throw new DefinitionException("Problem reading XML", e);
-        } catch (IOException e) {
-            throw new DefinitionException("Problem reading XML", e);
-        }
-    }
-
-    /**
-     * Takes a string in the "@xxx/yyy" format and return the resource ID for the resource in
-     * the resource package.
-     *
-     * If the argument is in the invalid format or isn't a resource name, it returns -1.
-     *
-     * @param context context
-     * @param resourceName Resource name in the "@xxx/yyy" format, e.g. "@string/invite_lavbel"
-     * @param packageName name of the package containing the resource.
-     * @param xmlAttributeName attribute name which the resource came from.  Used for logging.
-     */
-    @VisibleForTesting
-    static int resolveExternalResId(Context context, String resourceName,
-            String packageName, String xmlAttributeName) {
-        if (TextUtils.isEmpty(resourceName)) {
-            return -1; // Empty text is okay.
-        }
-        if (resourceName.charAt(0) != '@') {
-            if (Log.isLoggable(TAG, Log.WARN) && !isFromTestApp(packageName)) {
-                Log.w(TAG, xmlAttributeName + " must be a resource name beginnig with '@'");
-            }
-            return -1;
-        }
-        final String name = resourceName.substring(1);
-        final Resources res;
-        try {
-             res = context.getPackageManager().getResourcesForApplication(packageName);
-        } catch (NameNotFoundException e) {
-            if (Log.isLoggable(TAG, Log.WARN) && !isFromTestApp(packageName)) {
-                Log.w(TAG, "Unable to load package " + packageName);
-            }
-            return -1;
-        }
-        final int resId = res.getIdentifier(name, null, packageName);
-        if (resId == 0) {
-            if (Log.isLoggable(TAG, Log.WARN) && !isFromTestApp(packageName)) {
-                Log.w(TAG, "Unable to load " + resourceName + " from package " + packageName);
-            }
-            return -1;
-        }
-        return resId;
-    }
-
-    @VisibleForTesting
-    static boolean isFromTestApp(String packageName) {
-        return TextUtils.equals(packageName, "com.google.android.contacts.tests");
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/FallbackAccountType.java b/src/com/android/contacts/common/model/account/FallbackAccountType.java
deleted file mode 100644
index 39f767d..0000000
--- a/src/com/android/contacts/common/model/account/FallbackAccountType.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model.account;
-
-import android.accounts.AuthenticatorDescription;
-import android.content.Context;
-import android.util.Log;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contactsbind.FeedbackHelper;
-
-public class FallbackAccountType extends BaseAccountType {
-    private static final String TAG = "FallbackAccountType";
-
-    private FallbackAccountType(Context context, String resPackageName) {
-        this.accountType = null;
-        this.dataSet = null;
-        this.titleRes = R.string.account_phone;
-        this.iconRes = R.drawable.ic_device;
-
-        // Note those are only set for unit tests.
-        this.resourcePackageName = resPackageName;
-        this.syncAdapterPackageName = resPackageName;
-
-        try {
-            addDataKindStructuredName(context);
-            addDataKindName(context);
-            addDataKindPhoneticName(context);
-            addDataKindNickname(context);
-            addDataKindPhone(context);
-            addDataKindEmail(context);
-            addDataKindStructuredPostal(context);
-            addDataKindIm(context);
-            addDataKindOrganization(context);
-            addDataKindPhoto(context);
-            addDataKindNote(context);
-            addDataKindWebsite(context);
-            addDataKindSipAddress(context);
-            addDataKindGroupMembership(context);
-
-            mIsInitialized = true;
-        } catch (DefinitionException e) {
-            FeedbackHelper.sendFeedback(context, TAG, "Failed to build fallback account type", e);
-        }
-    }
-
-    public FallbackAccountType(Context context) {
-        this(context, null);
-    }
-
-    /**
-     * Used to compare with an {@link ExternalAccountType} built from a test contacts.xml.
-     * In order to build {@link DataKind}s with the same resource package name,
-     * {@code resPackageName} is injectable.
-     */
-    static AccountType createWithPackageNameForTest(Context context, String resPackageName) {
-        return new FallbackAccountType(context, resPackageName);
-    }
-
-    @Override
-    public void initializeFieldsFromAuthenticator(AuthenticatorDescription authenticator) {
-        // Do nothing. For "Device" accounts we want to just display them using our own strings
-        // and icons.
-    }
-
-    @Override
-    public boolean areContactsWritable() {
-        return true;
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/GoogleAccountType.java b/src/com/android/contacts/common/model/account/GoogleAccountType.java
deleted file mode 100644
index 9e089f7..0000000
--- a/src/com/android/contacts/common/model/account/GoogleAccountType.java
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model.account;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Relation;
-import android.util.Log;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.CommonDateUtils;
-import com.android.contactsbind.FeedbackHelper;
-
-import com.google.common.collect.Lists;
-
-import java.util.List;
-
-public class GoogleAccountType extends BaseAccountType {
-    private static final String TAG = "GoogleAccountType";
-
-    /**
-     * The package name that we should load contacts.xml from and rely on to handle
-     * G+ account actions. Even though this points to gms, in some cases gms will still hand
-     * off responsibility to the G+ app.
-     */
-    public static final String PLUS_EXTENSION_PACKAGE_NAME = "com.google.android.gms";
-
-    public static final String ACCOUNT_TYPE = "com.google";
-
-    private static final List<String> mExtensionPackages =
-            Lists.newArrayList(PLUS_EXTENSION_PACKAGE_NAME);
-
-    public GoogleAccountType(Context context, String authenticatorPackageName) {
-        this.accountType = ACCOUNT_TYPE;
-        this.resourcePackageName = null;
-        this.syncAdapterPackageName = authenticatorPackageName;
-
-        try {
-            addDataKindStructuredName(context);
-            addDataKindName(context);
-            addDataKindPhoneticName(context);
-            addDataKindNickname(context);
-            addDataKindPhone(context);
-            addDataKindEmail(context);
-            addDataKindStructuredPostal(context);
-            addDataKindIm(context);
-            addDataKindOrganization(context);
-            addDataKindPhoto(context);
-            addDataKindNote(context);
-            addDataKindWebsite(context);
-            addDataKindSipAddress(context);
-            addDataKindGroupMembership(context);
-            addDataKindRelation(context);
-            addDataKindEvent(context);
-            addDataKindCustomField(context);
-
-            mIsInitialized = true;
-        } catch (DefinitionException e) {
-            FeedbackHelper.sendFeedback(context, TAG, "Failed to build google account type", e);
-        }
-    }
-
-    @Override
-    public List<String> getExtensionPackageNames() {
-        return mExtensionPackages;
-    }
-
-    @Override
-    protected DataKind addDataKindPhone(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindPhone(context);
-
-        kind.typeColumn = Phone.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_MAIN));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_CUSTOM).setSecondary(true)
-                .setCustomColumn(Phone.LABEL));
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindEmail(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindEmail(context);
-
-        kind.typeColumn = Email.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildEmailType(Email.TYPE_HOME));
-        kind.typeList.add(buildEmailType(Email.TYPE_WORK));
-        kind.typeList.add(buildEmailType(Email.TYPE_OTHER));
-        kind.typeList.add(buildEmailType(Email.TYPE_CUSTOM).setSecondary(true).setCustomColumn(
-                Email.LABEL));
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
-
-        return kind;
-    }
-
-    private DataKind addDataKindRelation(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Relation.CONTENT_ITEM_TYPE,
-                R.string.relationLabelsGroup, Weight.RELATIONSHIP, true));
-        kind.actionHeader = new RelationActionInflater();
-        kind.actionBody = new SimpleInflater(Relation.NAME);
-
-        kind.typeColumn = Relation.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildRelationType(Relation.TYPE_ASSISTANT));
-        kind.typeList.add(buildRelationType(Relation.TYPE_BROTHER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_CHILD));
-        kind.typeList.add(buildRelationType(Relation.TYPE_DOMESTIC_PARTNER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_FATHER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_FRIEND));
-        kind.typeList.add(buildRelationType(Relation.TYPE_MANAGER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_MOTHER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_PARENT));
-        kind.typeList.add(buildRelationType(Relation.TYPE_PARTNER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_REFERRED_BY));
-        kind.typeList.add(buildRelationType(Relation.TYPE_RELATIVE));
-        kind.typeList.add(buildRelationType(Relation.TYPE_SISTER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_SPOUSE));
-        kind.typeList.add(buildRelationType(Relation.TYPE_CUSTOM).setSecondary(true)
-                .setCustomColumn(Relation.LABEL));
-
-        kind.defaultValues = new ContentValues();
-        kind.defaultValues.put(Relation.TYPE, Relation.TYPE_SPOUSE);
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Relation.DATA, R.string.relationLabelsGroup,
-                FLAGS_RELATION));
-
-        return kind;
-    }
-
-    private DataKind addDataKindEvent(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE,
-                    R.string.eventLabelsGroup, Weight.EVENT, true));
-        kind.actionHeader = new EventActionInflater();
-        kind.actionBody = new SimpleInflater(Event.START_DATE);
-
-        kind.typeColumn = Event.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_FORMAT;
-        kind.dateFormatWithYear = CommonDateUtils.FULL_DATE_FORMAT;
-        kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, true).setSpecificMax(1));
-        kind.typeList.add(buildEventType(Event.TYPE_ANNIVERSARY, false));
-        kind.typeList.add(buildEventType(Event.TYPE_OTHER, false));
-        kind.typeList.add(buildEventType(Event.TYPE_CUSTOM, false).setSecondary(true)
-                .setCustomColumn(Event.LABEL));
-
-        kind.defaultValues = new ContentValues();
-        kind.defaultValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
-
-        return kind;
-    }
-
-    @Override
-    public boolean isGroupMembershipEditable() {
-        return true;
-    }
-
-    @Override
-    public boolean areContactsWritable() {
-        return true;
-    }
-
-    @Override
-    public String getViewContactNotifyServiceClassName() {
-        return "com.google.android.syncadapters.contacts." +
-                "SyncHighResPhotoIntentService";
-    }
-
-    @Override
-    public String getViewContactNotifyServicePackageName() {
-        return "com.google.android.syncadapters.contacts";
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/SamsungAccountType.java b/src/com/android/contacts/common/model/account/SamsungAccountType.java
deleted file mode 100644
index efb4400..0000000
--- a/src/com/android/contacts/common/model/account/SamsungAccountType.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.model.account;
-
-import com.google.common.collect.Lists;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.CommonDateUtils;
-import com.android.contactsbind.FeedbackHelper;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Relation;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.util.Log;
-
-import java.util.Locale;
-
-/**
- * A writable account type that can be used to support samsung contacts. This may not perfectly
- * match Samsung's latest intended account schema.
- *
- * This is only used to partially support Samsung accounts. The DataKind labels & fields are
- * setup to support the values used by Samsung. But, not everything in the Samsung account type is
- * supported. The Samsung account type includes a "Message Type" mimetype that we have no intention
- * of showing inside the Contact editor. Similarly, we don't handle the "Ringtone" mimetype here
- * since managing ringtones is handled in a different flow.
- */
-public class SamsungAccountType extends BaseAccountType {
-    private static final String TAG = "KnownExternalAccountType";
-    private static final String ACCOUNT_TYPE_SAMSUNG = "com.osp.app.signin";
-
-    public SamsungAccountType(Context context, String authenticatorPackageName, String type) {
-        this.accountType = type;
-        this.resourcePackageName = null;
-        this.syncAdapterPackageName = authenticatorPackageName;
-
-        try {
-            addDataKindStructuredName(context);
-            addDataKindName(context);
-            addDataKindPhoneticName(context);
-            addDataKindNickname(context);
-            addDataKindPhone(context);
-            addDataKindEmail(context);
-            addDataKindStructuredPostal(context);
-            addDataKindIm(context);
-            addDataKindOrganization(context);
-            addDataKindPhoto(context);
-            addDataKindNote(context);
-            addDataKindWebsite(context);
-            addDataKindGroupMembership(context);
-            addDataKindRelation(context);
-            addDataKindEvent(context);
-
-            mIsInitialized = true;
-        } catch (DefinitionException e) {
-            FeedbackHelper.sendFeedback(context, TAG, "Failed to build samsung account type", e);
-        }
-    }
-
-    /**
-     * Returns {@code TRUE} if this is samsung's account type and Samsung hasn't bothered to
-     * define a contacts.xml to provide a more accurate definition than ours.
-     */
-    public static boolean isSamsungAccountType(Context context, String type,
-            String packageName) {
-        return ACCOUNT_TYPE_SAMSUNG.equals(type)
-                && !ExternalAccountType.hasContactsXml(context, packageName);
-    }
-
-    @Override
-    protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindStructuredPostal(context);
-
-        final boolean useJapaneseOrder =
-                Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
-        kind.typeColumn = StructuredPostal.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_WORK).setSpecificMax(1));
-        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME).setSpecificMax(1));
-        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER).setSpecificMax(1));
-
-        kind.fieldList = Lists.newArrayList();
-        if (useJapaneseOrder) {
-            kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
-                    R.string.postal_country, FLAGS_POSTAL).setOptional(true));
-            kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
-                    R.string.postal_postcode, FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.REGION,
-                    R.string.postal_region, FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.CITY,
-                    R.string.postal_city,FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.STREET,
-                    R.string.postal_street, FLAGS_POSTAL));
-        } else {
-            kind.fieldList.add(new EditField(StructuredPostal.STREET,
-                    R.string.postal_street, FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.CITY,
-                    R.string.postal_city,FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.REGION,
-                    R.string.postal_region, FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
-                    R.string.postal_postcode, FLAGS_POSTAL));
-            kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
-                    R.string.postal_country, FLAGS_POSTAL).setOptional(true));
-        }
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindPhone(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindPhone(context);
-
-        kind.typeColumn = Phone.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_MAIN));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_RADIO).setSecondary(true));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER));
-        kind.typeList.add(buildPhoneType(Phone.TYPE_CUSTOM).setSecondary(true)
-                .setCustomColumn(Phone.LABEL));
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindEmail(Context context) throws DefinitionException {
-        final DataKind kind = super.addDataKindEmail(context);
-
-        kind.typeColumn = Email.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildEmailType(Email.TYPE_HOME));
-        kind.typeList.add(buildEmailType(Email.TYPE_WORK));
-        kind.typeList.add(buildEmailType(Email.TYPE_OTHER));
-        kind.typeList.add(buildEmailType(Email.TYPE_CUSTOM).setSecondary(true).setCustomColumn(
-                Email.LABEL));
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
-
-        return kind;
-    }
-
-    private DataKind addDataKindRelation(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Relation.CONTENT_ITEM_TYPE,
-                R.string.relationLabelsGroup, 160, true));
-        kind.actionHeader = new RelationActionInflater();
-        kind.actionBody = new SimpleInflater(Relation.NAME);
-
-        kind.typeColumn = Relation.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.typeList.add(buildRelationType(Relation.TYPE_ASSISTANT));
-        kind.typeList.add(buildRelationType(Relation.TYPE_BROTHER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_CHILD));
-        kind.typeList.add(buildRelationType(Relation.TYPE_DOMESTIC_PARTNER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_FATHER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_FRIEND));
-        kind.typeList.add(buildRelationType(Relation.TYPE_MANAGER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_MOTHER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_PARENT));
-        kind.typeList.add(buildRelationType(Relation.TYPE_PARTNER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_REFERRED_BY));
-        kind.typeList.add(buildRelationType(Relation.TYPE_RELATIVE));
-        kind.typeList.add(buildRelationType(Relation.TYPE_SISTER));
-        kind.typeList.add(buildRelationType(Relation.TYPE_SPOUSE));
-        kind.typeList.add(buildRelationType(Relation.TYPE_CUSTOM).setSecondary(true)
-                .setCustomColumn(Relation.LABEL));
-
-        kind.defaultValues = new ContentValues();
-        kind.defaultValues.put(Relation.TYPE, Relation.TYPE_SPOUSE);
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Relation.DATA, R.string.relationLabelsGroup,
-                FLAGS_RELATION));
-
-        return kind;
-    }
-
-    private DataKind addDataKindEvent(Context context) throws DefinitionException {
-        DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE,
-                R.string.eventLabelsGroup, 150, true));
-        kind.actionHeader = new EventActionInflater();
-        kind.actionBody = new SimpleInflater(Event.START_DATE);
-
-        kind.typeColumn = Event.TYPE;
-        kind.typeList = Lists.newArrayList();
-        kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_FORMAT;
-        kind.dateFormatWithYear = CommonDateUtils.FULL_DATE_FORMAT;
-        kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, true).setSpecificMax(1));
-        kind.typeList.add(buildEventType(Event.TYPE_ANNIVERSARY, false));
-        kind.typeList.add(buildEventType(Event.TYPE_OTHER, false));
-        kind.typeList.add(buildEventType(Event.TYPE_CUSTOM, false).setSecondary(true)
-                .setCustomColumn(Event.LABEL));
-
-        kind.defaultValues = new ContentValues();
-        kind.defaultValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
-
-        return kind;
-    }
-
-    @Override
-    public boolean isGroupMembershipEditable() {
-        return true;
-    }
-
-    @Override
-    public boolean areContactsWritable() {
-        return true;
-    }
-}
diff --git a/src/com/android/contacts/common/model/account/SimAccountType.java b/src/com/android/contacts/common/model/account/SimAccountType.java
deleted file mode 100644
index cecc9c7..0000000
--- a/src/com/android/contacts/common/model/account/SimAccountType.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.model.account;
-
-import android.accounts.AuthenticatorDescription;
-import android.content.Context;
-import android.provider.ContactsContract.CommonDataKinds.Nickname;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.dataitem.DataKind;
-
-import com.google.common.collect.Lists;
-
-import java.util.Collections;
-
-/**
- * Account type for SIM card contacts
- */
-public class SimAccountType extends BaseAccountType {
-
-    public SimAccountType(Context context) {
-        this.titleRes = R.string.account_sim;
-        this.iconRes = R.drawable.ic_sim_card_tinted_24dp;
-
-        try {
-            addDataKindStructuredName(context);
-            addDataKindName(context);
-            final DataKind phoneKind = addDataKindPhone(context);
-            phoneKind.typeOverallMax = 1;
-            // SIM card contacts don't necessarily support separate types (based on data exposed
-            // in Samsung and LG Contacts Apps.
-            phoneKind.typeList = Collections.emptyList();
-
-            mIsInitialized = true;
-        } catch (DefinitionException e) {
-            // Just fail fast. Because we're explicitly adding the fields in this class this
-            // exception should only happen in case of a bug.
-            throw new IllegalStateException(e);
-        }
-    }
-
-    @Override
-    public boolean areContactsWritable() {
-        return true;
-    }
-
-    @Override
-    public boolean isGroupMembershipEditable() {
-        return false;
-    }
-
-    @Override
-    public void initializeFieldsFromAuthenticator(AuthenticatorDescription authenticator) {
-        // Do nothing. We want to use our local icon and title
-    }
-
-    @Override
-    protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
-        final DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
-                R.string.nameLabelsGroup, Weight.NONE, true));
-        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
-        kind.actionBody = new SimpleInflater(Nickname.NAME);
-        kind.typeOverallMax = 1;
-
-
-        kind.fieldList = Lists.newArrayList();
-        kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
-                FLAGS_PERSON_NAME));
-        kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
-                FLAGS_PERSON_NAME));
-
-        return kind;
-    }
-
-    @Override
-    protected DataKind addDataKindName(Context context) throws DefinitionException {
-        final DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_NAME,
-                R.string.nameLabelsGroup, Weight.NONE, true));
-        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
-        kind.actionBody = new SimpleInflater(Nickname.NAME);
-        kind.typeOverallMax = 1;
-
-        final boolean displayOrderPrimary =
-                context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
-
-        kind.fieldList = Lists.newArrayList();
-        if (!displayOrderPrimary) {
-            kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
-                    FLAGS_PERSON_NAME));
-            kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
-                    FLAGS_PERSON_NAME));
-        } else {
-            kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
-                    FLAGS_PERSON_NAME));
-            kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
-                    FLAGS_PERSON_NAME));
-        }
-
-        return kind;
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/CustomDataItem.java b/src/com/android/contacts/common/model/dataitem/CustomDataItem.java
deleted file mode 100644
index 589d88e..0000000
--- a/src/com/android/contacts/common/model/dataitem/CustomDataItem.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.contacts.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract.Data;
-
-/**
- * Represents a custom field data item.
- */
-public class CustomDataItem extends DataItem {
-
-    /**
-     * MIME type for custom field data defined in Contact Provider.
-     */
-    public static final String MIMETYPE_CUSTOM_FIELD =
-            "vnd.com.google.cursor.item/contact_user_defined_field";
-
-    CustomDataItem(ContentValues values) {super(values);}
-
-    public String getSummary() {
-        return getContentValues().getAsString(Data.DATA1);
-    }
-
-    public String getContent() {
-        return getContentValues().getAsString(Data.DATA2);
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/DataItem.java b/src/com/android/contacts/common/model/dataitem/DataItem.java
deleted file mode 100644
index 44ceeda..0000000
--- a/src/com/android/contacts/common/model/dataitem/DataItem.java
+++ /dev/null
@@ -1,248 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-import android.provider.ContactsContract.CommonDataKinds.Identity;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.provider.ContactsContract.CommonDataKinds.Nickname;
-import android.provider.ContactsContract.CommonDataKinds.Note;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.Relation;
-import android.provider.ContactsContract.CommonDataKinds.SipAddress;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.CommonDataKinds.Website;
-import android.provider.ContactsContract.Contacts.Data;
-import android.provider.ContactsContract.Contacts.Entity;
-
-import com.android.contacts.common.Collapser;
-import com.android.contacts.common.MoreContactUtils;
-import com.android.contacts.common.model.RawContactModifier;
-
-/**
- * This is the base class for data items, which represents a row from the Data table.
- */
-public class DataItem implements Collapser.Collapsible<DataItem> {
-
-    private final ContentValues mContentValues;
-    protected DataKind mKind;
-
-    protected DataItem(ContentValues values) {
-        mContentValues = values;
-    }
-
-    /**
-     * Factory for creating subclasses of DataItem objects based on the mimetype in the
-     * content values.  Raw contact is the raw contact that this data item is associated with.
-     */
-    public static DataItem createFrom(ContentValues values) {
-        final String mimeType = values.getAsString(Data.MIMETYPE);
-        if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new GroupMembershipDataItem(values);
-        } else if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new StructuredNameDataItem(values);
-        } else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new PhoneDataItem(values);
-        } else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new EmailDataItem(values);
-        } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new StructuredPostalDataItem(values);
-        } else if (Im.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new ImDataItem(values);
-        } else if (Organization.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new OrganizationDataItem(values);
-        } else if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new NicknameDataItem(values);
-        } else if (Note.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new NoteDataItem(values);
-        } else if (Website.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new WebsiteDataItem(values);
-        } else if (SipAddress.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new SipAddressDataItem(values);
-        } else if (Event.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new EventDataItem(values);
-        } else if (Relation.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new RelationDataItem(values);
-        } else if (Identity.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new IdentityDataItem(values);
-        } else if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
-            return new PhotoDataItem(values);
-        } else if (CustomDataItem.MIMETYPE_CUSTOM_FIELD.equals(mimeType)) {
-            return new CustomDataItem(values);
-        }
-
-        // generic
-        return new DataItem(values);
-    }
-
-    public ContentValues getContentValues() {
-        return mContentValues;
-    }
-
-    public void setRawContactId(long rawContactId) {
-        mContentValues.put(Data.RAW_CONTACT_ID, rawContactId);
-    }
-
-    public Long getRawContactId() {
-        return mContentValues.getAsLong(Data.RAW_CONTACT_ID);
-    }
-
-    /**
-     * Returns the data id.
-     */
-    public long getId() {
-        return mContentValues.getAsLong(Data._ID);
-    }
-
-    /**
-     * Returns the mimetype of the data.
-     */
-    public String getMimeType() {
-        return mContentValues.getAsString(Data.MIMETYPE);
-    }
-
-    public void setMimeType(String mimeType) {
-        mContentValues.put(Data.MIMETYPE, mimeType);
-    }
-
-    public boolean isPrimary() {
-        Integer primary = mContentValues.getAsInteger(Data.IS_PRIMARY);
-        return primary != null && primary != 0;
-    }
-
-    public boolean isSuperPrimary() {
-        Integer superPrimary = mContentValues.getAsInteger(Data.IS_SUPER_PRIMARY);
-        return superPrimary != null && superPrimary != 0;
-    }
-
-    public boolean hasKindTypeColumn(DataKind kind) {
-        final String key = kind.typeColumn;
-        return key != null && mContentValues.containsKey(key) &&
-            mContentValues.getAsInteger(key) != null;
-    }
-
-    public int getKindTypeColumn(DataKind kind) {
-        final String key = kind.typeColumn;
-        return mContentValues.getAsInteger(key);
-    }
-
-    /**
-     * Indicates the carrier presence value for the current {@link DataItem}.
-     *
-     * @return {@link Data#CARRIER_PRESENCE_VT_CAPABLE} if the {@link DataItem} supports carrier
-     *      video calling, {@code 0} otherwise.
-     */
-    public int getCarrierPresence() {
-        final Integer value = mContentValues.getAsInteger(Data.CARRIER_PRESENCE);
-        return value != null ? value.intValue() : 0;
-    }
-
-    /**
-     * This builds the data string depending on the type of data item by using the generic
-     * DataKind object underneath.
-     */
-    public String buildDataString(Context context, DataKind kind) {
-        if (kind.actionBody == null) {
-            return null;
-        }
-        CharSequence actionBody = kind.actionBody.inflateUsing(context, mContentValues);
-        return actionBody == null ? null : actionBody.toString();
-    }
-
-    /**
-     * This builds the data string(intended for display) depending on the type of data item. It
-     * returns the same value as {@link #buildDataString} by default, but certain data items can
-     * override it to provide their version of formatted data strings.
-     *
-     * @return Data string representing the data item, possibly formatted for display
-     */
-    public String buildDataStringForDisplay(Context context, DataKind kind) {
-        return buildDataString(context, kind);
-    }
-
-    public void setDataKind(DataKind kind) {
-        mKind = kind;
-    }
-
-    public DataKind getDataKind() {
-        return mKind;
-    }
-
-    public Integer getTimesUsed() {
-        return mContentValues.getAsInteger(Entity.TIMES_USED);
-    }
-
-    public Long getLastTimeUsed() {
-        return mContentValues.getAsLong(Entity.LAST_TIME_USED);
-    }
-
-    @Override
-    public void collapseWith(DataItem that) {
-        DataKind thisKind = getDataKind();
-        DataKind thatKind = that.getDataKind();
-        // If this does not have a type and that does, or if that's type is higher precedence,
-        // use that's type
-        if ((!hasKindTypeColumn(thisKind) && that.hasKindTypeColumn(thatKind)) ||
-                that.hasKindTypeColumn(thatKind) &&
-                RawContactModifier.getTypePrecedence(thisKind, getKindTypeColumn(thisKind))
-                >
-                RawContactModifier.getTypePrecedence(thatKind, that.getKindTypeColumn(thatKind))) {
-            mContentValues.put(thatKind.typeColumn, that.getKindTypeColumn(thatKind));
-            mKind = thatKind;
-        }
-
-        // Choose the max of the maxLines and maxLabelLines values.
-        mKind.maxLinesForDisplay = Math.max(thisKind.maxLinesForDisplay,
-                thatKind.maxLinesForDisplay);
-
-        // If any of the collapsed entries are super primary make the whole thing super primary.
-        if (isSuperPrimary() || that.isSuperPrimary()) {
-            mContentValues.put(Data.IS_SUPER_PRIMARY, 1);
-            mContentValues.put(Data.IS_PRIMARY, 1);
-        }
-
-        // If any of the collapsed entries are primary make the whole thing primary.
-        if (isPrimary() || that.isPrimary()) {
-            mContentValues.put(Data.IS_PRIMARY, 1);
-        }
-
-        // Add up the times used
-        mContentValues.put(Entity.TIMES_USED, (getTimesUsed() == null ? 0 : getTimesUsed()) +
-                (that.getTimesUsed() == null ? 0 : that.getTimesUsed()));
-
-        // Use the most recent time
-        mContentValues.put(Entity.LAST_TIME_USED,
-                Math.max(getLastTimeUsed() == null ? 0 : getLastTimeUsed(),
-                        that.getLastTimeUsed() == null ? 0 : that.getLastTimeUsed()));
-    }
-
-    @Override
-    public boolean shouldCollapseWith(DataItem t, Context context) {
-        if (mKind == null || t.getDataKind() == null) {
-            return false;
-        }
-        return MoreContactUtils.shouldCollapse(getMimeType(), buildDataString(context, mKind),
-                t.getMimeType(), t.buildDataString(context, t.getDataKind()));
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/DataKind.java b/src/com/android/contacts/common/model/dataitem/DataKind.java
deleted file mode 100644
index 98ad40a..0000000
--- a/src/com/android/contacts/common/model/dataitem/DataKind.java
+++ /dev/null
@@ -1,140 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.provider.ContactsContract.Data;
-
-import com.android.contacts.common.model.account.AccountType.EditField;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.account.AccountType.StringInflater;
-import com.google.common.collect.Iterators;
-
-import java.text.SimpleDateFormat;
-import java.util.List;
-
-/**
- * Description of a specific data type, usually marked by a unique
- * {@link Data#MIMETYPE}. Includes details about how to view and edit
- * {@link Data} rows of this kind, including the possible {@link EditType}
- * labels and editable {@link EditField}.
- */
-public final class DataKind {
-
-    public static final String PSEUDO_MIME_TYPE_NAME = "#name";
-    public static final String PSEUDO_MIME_TYPE_PHONETIC_NAME = "#phoneticName";
-    public static final String PSEUDO_COLUMN_PHONETIC_NAME = "#phoneticName";
-
-    public String resourcePackageName;
-    public String mimeType;
-    public int titleRes;
-    public int iconAltRes;
-    public int iconAltDescriptionRes;
-    public int weight;
-    public boolean editable;
-
-    public StringInflater actionHeader;
-    public StringInflater actionAltHeader;
-    public StringInflater actionBody;
-
-    public String typeColumn;
-
-    /**
-     * Maximum number of values allowed in the list. -1 represents infinity.
-     */
-    public int typeOverallMax;
-
-    public List<EditType> typeList;
-    public List<EditField> fieldList;
-
-    public ContentValues defaultValues;
-
-    /**
-     * If this is a date field, this specifies the format of the date when saving. The
-     * date includes year, month and day. If this is not a date field or the date field is not
-     * editable, this value should be ignored.
-     */
-    public SimpleDateFormat dateFormatWithoutYear;
-
-    /**
-     * If this is a date field, this specifies the format of the date when saving. The
-     * date includes month and day. If this is not a date field, the field is not editable or
-     * dates without year are not supported, this value should be ignored.
-     */
-    public SimpleDateFormat dateFormatWithYear;
-
-    /**
-     * The number of lines available for displaying this kind of data.
-     * Defaults to 1.
-     */
-    public int maxLinesForDisplay;
-
-    public DataKind() {
-        maxLinesForDisplay = 1;
-    }
-
-    public DataKind(String mimeType, int titleRes, int weight, boolean editable) {
-        this.mimeType = mimeType;
-        this.titleRes = titleRes;
-        this.weight = weight;
-        this.editable = editable;
-        this.typeOverallMax = -1;
-        maxLinesForDisplay = 1;
-    }
-
-    public String getKindString(Context context) {
-        return (titleRes == -1 || titleRes == 0) ? "" : context.getString(titleRes);
-    }
-
-    @Override
-    public String toString() {
-        final StringBuilder sb = new StringBuilder();
-        sb.append("DataKind:");
-        sb.append(" resPackageName=").append(resourcePackageName);
-        sb.append(" mimeType=").append(mimeType);
-        sb.append(" titleRes=").append(titleRes);
-        sb.append(" iconAltRes=").append(iconAltRes);
-        sb.append(" iconAltDescriptionRes=").append(iconAltDescriptionRes);
-        sb.append(" weight=").append(weight);
-        sb.append(" editable=").append(editable);
-        sb.append(" actionHeader=").append(actionHeader);
-        sb.append(" actionAltHeader=").append(actionAltHeader);
-        sb.append(" actionBody=").append(actionBody);
-        sb.append(" typeColumn=").append(typeColumn);
-        sb.append(" typeOverallMax=").append(typeOverallMax);
-        sb.append(" typeList=").append(toString(typeList));
-        sb.append(" fieldList=").append(toString(fieldList));
-        sb.append(" defaultValues=").append(defaultValues);
-        sb.append(" dateFormatWithoutYear=").append(toString(dateFormatWithoutYear));
-        sb.append(" dateFormatWithYear=").append(toString(dateFormatWithYear));
-
-        return sb.toString();
-    }
-
-    public static String toString(SimpleDateFormat format) {
-        return format == null ? "(null)" : format.toPattern();
-    }
-
-    public static String toString(Iterable<?> list) {
-        if (list == null) {
-            return "(null)";
-        } else {
-            return Iterators.toString(list.iterator());
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/EmailDataItem.java b/src/com/android/contacts/common/model/dataitem/EmailDataItem.java
deleted file mode 100644
index 23efb01..0000000
--- a/src/com/android/contacts/common/model/dataitem/EmailDataItem.java
+++ /dev/null
@@ -1,48 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-
-/**
- * Represents an email data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.Email}.
- */
-public class EmailDataItem extends DataItem {
-
-    /* package */ EmailDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public String getAddress() {
-        return getContentValues().getAsString(Email.ADDRESS);
-    }
-
-    public String getDisplayName() {
-        return getContentValues().getAsString(Email.DISPLAY_NAME);
-    }
-
-    public String getData() {
-        return getContentValues().getAsString(Email.DATA);
-    }
-
-    public String getLabel() {
-        return getContentValues().getAsString(Email.LABEL);
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/EventDataItem.java b/src/com/android/contacts/common/model/dataitem/EventDataItem.java
deleted file mode 100644
index 5096fea..0000000
--- a/src/com/android/contacts/common/model/dataitem/EventDataItem.java
+++ /dev/null
@@ -1,63 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.text.TextUtils;
-
-/**
- * Represents an event data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.Event}.
- */
-public class EventDataItem extends DataItem {
-
-    /* package */ EventDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public String getStartDate() {
-        return getContentValues().getAsString(Event.START_DATE);
-    }
-
-    public String getLabel() {
-        return getContentValues().getAsString(Event.LABEL);
-    }
-
-    @Override
-    public boolean shouldCollapseWith(DataItem t, Context context) {
-        if (!(t instanceof EventDataItem) || mKind == null || t.getDataKind() == null) {
-            return false;
-        }
-        final EventDataItem that = (EventDataItem) t;
-        // Events can be different (anniversary, birthday) but have the same start date
-        if (!TextUtils.equals(getStartDate(), that.getStartDate())) {
-            return false;
-        } else if (!hasKindTypeColumn(mKind) || !that.hasKindTypeColumn(that.getDataKind())) {
-            return hasKindTypeColumn(mKind) == that.hasKindTypeColumn(that.getDataKind());
-        } else if (getKindTypeColumn(mKind) != that.getKindTypeColumn(that.getDataKind())) {
-            return false;
-        } else if (getKindTypeColumn(mKind) == Event.TYPE_CUSTOM &&
-                !TextUtils.equals(getLabel(), that.getLabel())) {
-            // Check if custom types are not the same
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/GroupMembershipDataItem.java b/src/com/android/contacts/common/model/dataitem/GroupMembershipDataItem.java
deleted file mode 100644
index 41f19e6..0000000
--- a/src/com/android/contacts/common/model/dataitem/GroupMembershipDataItem.java
+++ /dev/null
@@ -1,40 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-
-/**
- * Represents a group memebership data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.GroupMembership}.
- */
-public class GroupMembershipDataItem extends DataItem {
-
-    /* package */ GroupMembershipDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public Long getGroupRowId() {
-        return getContentValues().getAsLong(GroupMembership.GROUP_ROW_ID);
-    }
-
-    public String getGroupSourceId() {
-        return getContentValues().getAsString(GroupMembership.GROUP_SOURCE_ID);
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/IdentityDataItem.java b/src/com/android/contacts/common/model/dataitem/IdentityDataItem.java
deleted file mode 100644
index 29e9a40..0000000
--- a/src/com/android/contacts/common/model/dataitem/IdentityDataItem.java
+++ /dev/null
@@ -1,40 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Identity;
-
-/**
- * Represents an identity data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.Identity}.
- */
-public class IdentityDataItem extends DataItem {
-
-    /* package */ IdentityDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public String getIdentity() {
-        return getContentValues().getAsString(Identity.IDENTITY);
-    }
-
-    public String getNamespace() {
-        return getContentValues().getAsString(Identity.NAMESPACE);
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/ImDataItem.java b/src/com/android/contacts/common/model/dataitem/ImDataItem.java
deleted file mode 100644
index f89e5c6..0000000
--- a/src/com/android/contacts/common/model/dataitem/ImDataItem.java
+++ /dev/null
@@ -1,113 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.text.TextUtils;
-
-/**
- * Represents an IM data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.Im}.
- */
-public class ImDataItem extends DataItem {
-
-    private final boolean mCreatedFromEmail;
-
-    /* package */ ImDataItem(ContentValues values) {
-        super(values);
-        mCreatedFromEmail = false;
-    }
-
-    private ImDataItem(ContentValues values, boolean createdFromEmail) {
-        super(values);
-        mCreatedFromEmail = createdFromEmail;
-    }
-
-    public static ImDataItem createFromEmail(EmailDataItem item) {
-        final ImDataItem im = new ImDataItem(new ContentValues(item.getContentValues()), true);
-        im.setMimeType(Im.CONTENT_ITEM_TYPE);
-        return im;
-    }
-
-    public String getData() {
-        if (mCreatedFromEmail) {
-            return getContentValues().getAsString(Email.DATA);
-        } else {
-            return getContentValues().getAsString(Im.DATA);
-        }
-    }
-
-    public String getLabel() {
-        return getContentValues().getAsString(Im.LABEL);
-    }
-
-    /**
-     * Values are one of Im.PROTOCOL_
-     */
-    public Integer getProtocol() {
-        return getContentValues().getAsInteger(Im.PROTOCOL);
-    }
-
-    public boolean isProtocolValid() {
-        return getProtocol() != null;
-    }
-
-    public String getCustomProtocol() {
-        return getContentValues().getAsString(Im.CUSTOM_PROTOCOL);
-    }
-
-    public int getChatCapability() {
-        Integer result = getContentValues().getAsInteger(Im.CHAT_CAPABILITY);
-        return result == null ? 0 : result;
-    }
-
-    public boolean isCreatedFromEmail() {
-        return mCreatedFromEmail;
-    }
-
-    @Override
-    public boolean shouldCollapseWith(DataItem t, Context context) {
-        if (!(t instanceof ImDataItem) || mKind == null || t.getDataKind() == null) {
-            return false;
-        }
-        final ImDataItem that = (ImDataItem) t;
-        // IM can have the same data put different protocol. These should not collapse.
-        if (!getData().equals(that.getData())) {
-            return false;
-        } else if (!isProtocolValid() || !that.isProtocolValid()) {
-            // Deal with invalid protocol as if it was custom. If either has a non valid
-            // protocol, check to see if the other has a valid that is not custom
-            if (isProtocolValid()) {
-                return getProtocol() == Im.PROTOCOL_CUSTOM;
-            } else if (that.isProtocolValid()) {
-                return that.getProtocol() == Im.PROTOCOL_CUSTOM;
-            }
-            return true;
-        } else if (getProtocol() != that.getProtocol()) {
-            return false;
-        } else if (getProtocol() == Im.PROTOCOL_CUSTOM &&
-                !TextUtils.equals(getCustomProtocol(), that.getCustomProtocol())) {
-            // Check if custom protocols are not the same
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/NicknameDataItem.java b/src/com/android/contacts/common/model/dataitem/NicknameDataItem.java
deleted file mode 100644
index e7f9d4a..0000000
--- a/src/com/android/contacts/common/model/dataitem/NicknameDataItem.java
+++ /dev/null
@@ -1,40 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Nickname;
-
-/**
- * Represents a nickname data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.Nickname}.
- */
-public class NicknameDataItem extends DataItem {
-
-    public NicknameDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public String getName() {
-        return getContentValues().getAsString(Nickname.NAME);
-    }
-
-    public String getLabel() {
-        return getContentValues().getAsString(Nickname.LABEL);
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/NoteDataItem.java b/src/com/android/contacts/common/model/dataitem/NoteDataItem.java
deleted file mode 100644
index 3d71167..0000000
--- a/src/com/android/contacts/common/model/dataitem/NoteDataItem.java
+++ /dev/null
@@ -1,36 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Note;
-
-/**
- * Represents a note data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.Note}.
- */
-public class NoteDataItem extends DataItem {
-
-    /* package */ NoteDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public String getNote() {
-        return getContentValues().getAsString(Note.NOTE);
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/OrganizationDataItem.java b/src/com/android/contacts/common/model/dataitem/OrganizationDataItem.java
deleted file mode 100644
index 37cd852..0000000
--- a/src/com/android/contacts/common/model/dataitem/OrganizationDataItem.java
+++ /dev/null
@@ -1,64 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-
-/**
- * Represents an organization data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.Organization}.
- */
-public class OrganizationDataItem extends DataItem {
-
-    /* package */ OrganizationDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public String getCompany() {
-        return getContentValues().getAsString(Organization.COMPANY);
-    }
-
-    public String getLabel() {
-        return getContentValues().getAsString(Organization.LABEL);
-    }
-
-    public String getTitle() {
-        return getContentValues().getAsString(Organization.TITLE);
-    }
-
-    public String getDepartment() {
-        return getContentValues().getAsString(Organization.DEPARTMENT);
-    }
-
-    public String getJobDescription() {
-        return getContentValues().getAsString(Organization.JOB_DESCRIPTION);
-    }
-
-    public String getSymbol() {
-        return getContentValues().getAsString(Organization.SYMBOL);
-    }
-
-    public String getPhoneticName() {
-        return getContentValues().getAsString(Organization.PHONETIC_NAME);
-    }
-
-    public String getOfficeLocation() {
-        return getContentValues().getAsString(Organization.OFFICE_LOCATION);
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/PhoneDataItem.java b/src/com/android/contacts/common/model/dataitem/PhoneDataItem.java
deleted file mode 100644
index d6aa2a9..0000000
--- a/src/com/android/contacts/common/model/dataitem/PhoneDataItem.java
+++ /dev/null
@@ -1,80 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.model.dataitem.DataKind;
-
-/**
- * Represents a phone data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.Phone}.
- */
-public class PhoneDataItem extends DataItem {
-
-    public static final String KEY_FORMATTED_PHONE_NUMBER = "formattedPhoneNumber";
-
-    /* package */ PhoneDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public String getNumber() {
-        return getContentValues().getAsString(Phone.NUMBER);
-    }
-
-    /**
-     * Returns the normalized phone number in E164 format.
-     */
-    public String getNormalizedNumber() {
-        return getContentValues().getAsString(Phone.NORMALIZED_NUMBER);
-    }
-
-    public String getFormattedPhoneNumber() {
-        return getContentValues().getAsString(KEY_FORMATTED_PHONE_NUMBER);
-    }
-
-    public String getLabel() {
-        return getContentValues().getAsString(Phone.LABEL);
-    }
-
-    public void computeFormattedPhoneNumber(String defaultCountryIso) {
-        final String phoneNumber = getNumber();
-        if (phoneNumber != null) {
-            final String formattedPhoneNumber = PhoneNumberUtilsCompat.formatNumber(phoneNumber,
-                    getNormalizedNumber(), defaultCountryIso);
-            getContentValues().put(KEY_FORMATTED_PHONE_NUMBER, formattedPhoneNumber);
-        }
-    }
-
-    /**
-     * Returns the formatted phone number (if already computed using {@link
-     * #computeFormattedPhoneNumber}). Otherwise this method returns the unformatted phone number.
-     */
-    @Override
-    public String buildDataStringForDisplay(Context context, DataKind kind) {
-        final String formatted = getFormattedPhoneNumber();
-        if (formatted != null) {
-            return formatted;
-        } else {
-            return getNumber();
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/PhotoDataItem.java b/src/com/android/contacts/common/model/dataitem/PhotoDataItem.java
deleted file mode 100644
index a61218b..0000000
--- a/src/com/android/contacts/common/model/dataitem/PhotoDataItem.java
+++ /dev/null
@@ -1,40 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.Contacts.Photo;
-
-/**
- * Represents a photo data item, wrapping the columns in
- * {@link ContactsContract.Contacts.Photo}.
- */
-public class PhotoDataItem extends DataItem {
-
-    /* package */ PhotoDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public Long getPhotoFileId() {
-        return getContentValues().getAsLong(Photo.PHOTO_FILE_ID);
-    }
-
-    public byte[] getPhoto() {
-        return getContentValues().getAsByteArray(Photo.PHOTO);
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/RelationDataItem.java b/src/com/android/contacts/common/model/dataitem/RelationDataItem.java
deleted file mode 100644
index 9e883fe..0000000
--- a/src/com/android/contacts/common/model/dataitem/RelationDataItem.java
+++ /dev/null
@@ -1,63 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Relation;
-import android.text.TextUtils;
-
-/**
- * Represents a relation data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.Relation}.
- */
-public class RelationDataItem extends DataItem {
-
-    /* package */ RelationDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public String getName() {
-        return getContentValues().getAsString(Relation.NAME);
-    }
-
-    public String getLabel() {
-        return getContentValues().getAsString(Relation.LABEL);
-    }
-
-    @Override
-    public boolean shouldCollapseWith(DataItem t, Context context) {
-        if (!(t instanceof RelationDataItem) || mKind == null || t.getDataKind() == null) {
-            return false;
-        }
-        final RelationDataItem that = (RelationDataItem) t;
-        // Relations can have different types (assistant, father) but have the same name
-        if (!TextUtils.equals(getName(), that.getName())) {
-            return false;
-        } else if (!hasKindTypeColumn(mKind) || !that.hasKindTypeColumn(that.getDataKind())) {
-            return hasKindTypeColumn(mKind) == that.hasKindTypeColumn(that.getDataKind());
-        } else if (getKindTypeColumn(mKind) != that.getKindTypeColumn(that.getDataKind())) {
-            return false;
-        } else if (getKindTypeColumn(mKind) == Relation.TYPE_CUSTOM &&
-                !TextUtils.equals(getLabel(), that.getLabel())) {
-            // Check if custom types are not the same
-            return false;
-        }
-        return true;
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/SipAddressDataItem.java b/src/com/android/contacts/common/model/dataitem/SipAddressDataItem.java
deleted file mode 100644
index ec704fc..0000000
--- a/src/com/android/contacts/common/model/dataitem/SipAddressDataItem.java
+++ /dev/null
@@ -1,40 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.SipAddress;
-
-/**
- * Represents a sip address data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.SipAddress}.
- */
-public class SipAddressDataItem extends DataItem {
-
-    /* package */ SipAddressDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public String getSipAddress() {
-        return getContentValues().getAsString(SipAddress.SIP_ADDRESS);
-    }
-
-    public String getLabel() {
-        return getContentValues().getAsString(SipAddress.LABEL);
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/StructuredNameDataItem.java b/src/com/android/contacts/common/model/dataitem/StructuredNameDataItem.java
deleted file mode 100644
index 4d463da..0000000
--- a/src/com/android/contacts/common/model/dataitem/StructuredNameDataItem.java
+++ /dev/null
@@ -1,100 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.Contacts.Data;
-
-/**
- * Represents a structured name data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.StructuredName}.
- */
-public class StructuredNameDataItem extends DataItem {
-
-    public StructuredNameDataItem() {
-        super(new ContentValues());
-        getContentValues().put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
-    }
-
-    /* package */ StructuredNameDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public String getDisplayName() {
-        return getContentValues().getAsString(StructuredName.DISPLAY_NAME);
-    }
-
-    public void setDisplayName(String name) {
-        getContentValues().put(StructuredName.DISPLAY_NAME, name);
-    }
-
-    public String getGivenName() {
-        return getContentValues().getAsString(StructuredName.GIVEN_NAME);
-    }
-
-    public String getFamilyName() {
-        return getContentValues().getAsString(StructuredName.FAMILY_NAME);
-    }
-
-    public String getPrefix() {
-        return getContentValues().getAsString(StructuredName.PREFIX);
-    }
-
-    public String getMiddleName() {
-        return getContentValues().getAsString(StructuredName.MIDDLE_NAME);
-    }
-
-    public String getSuffix() {
-        return getContentValues().getAsString(StructuredName.SUFFIX);
-    }
-
-    public String getPhoneticGivenName() {
-        return getContentValues().getAsString(StructuredName.PHONETIC_GIVEN_NAME);
-    }
-
-    public String getPhoneticMiddleName() {
-        return getContentValues().getAsString(StructuredName.PHONETIC_MIDDLE_NAME);
-    }
-
-    public String getPhoneticFamilyName() {
-        return getContentValues().getAsString(StructuredName.PHONETIC_FAMILY_NAME);
-    }
-
-    public String getFullNameStyle() {
-        return getContentValues().getAsString(StructuredName.FULL_NAME_STYLE);
-    }
-
-    public void setPhoneticFamilyName(String name) {
-        getContentValues().put(StructuredName.PHONETIC_FAMILY_NAME, name);
-    }
-
-    public void setPhoneticMiddleName(String name) {
-        getContentValues().put(StructuredName.PHONETIC_MIDDLE_NAME, name);
-    }
-
-    public void setPhoneticGivenName(String name) {
-        getContentValues().put(StructuredName.PHONETIC_GIVEN_NAME, name);
-    }
-
-    public boolean isSuperPrimary() {
-        final ContentValues contentValues = getContentValues();
-        return contentValues == null || !contentValues.containsKey(StructuredName.IS_SUPER_PRIMARY)
-                ? false : contentValues.getAsBoolean(StructuredName.IS_SUPER_PRIMARY);
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/StructuredPostalDataItem.java b/src/com/android/contacts/common/model/dataitem/StructuredPostalDataItem.java
deleted file mode 100644
index 6cfc0c1..0000000
--- a/src/com/android/contacts/common/model/dataitem/StructuredPostalDataItem.java
+++ /dev/null
@@ -1,68 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-
-/**
- * Represents a structured postal data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.StructuredPostal}.
- */
-public class StructuredPostalDataItem extends DataItem {
-
-    /* package */ StructuredPostalDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public String getFormattedAddress() {
-        return getContentValues().getAsString(StructuredPostal.FORMATTED_ADDRESS);
-    }
-
-    public String getLabel() {
-        return getContentValues().getAsString(StructuredPostal.LABEL);
-    }
-
-    public String getStreet() {
-        return getContentValues().getAsString(StructuredPostal.STREET);
-    }
-
-    public String getPOBox() {
-        return getContentValues().getAsString(StructuredPostal.POBOX);
-    }
-
-    public String getNeighborhood() {
-        return getContentValues().getAsString(StructuredPostal.NEIGHBORHOOD);
-    }
-
-    public String getCity() {
-        return getContentValues().getAsString(StructuredPostal.CITY);
-    }
-
-    public String getRegion() {
-        return getContentValues().getAsString(StructuredPostal.REGION);
-    }
-
-    public String getPostcode() {
-        return getContentValues().getAsString(StructuredPostal.POSTCODE);
-    }
-
-    public String getCountry() {
-        return getContentValues().getAsString(StructuredPostal.COUNTRY);
-    }
-}
diff --git a/src/com/android/contacts/common/model/dataitem/WebsiteDataItem.java b/src/com/android/contacts/common/model/dataitem/WebsiteDataItem.java
deleted file mode 100644
index 0939421..0000000
--- a/src/com/android/contacts/common/model/dataitem/WebsiteDataItem.java
+++ /dev/null
@@ -1,40 +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.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Website;
-
-/**
- * Represents a website data item, wrapping the columns in
- * {@link ContactsContract.CommonDataKinds.Website}.
- */
-public class WebsiteDataItem extends DataItem {
-
-    /* package */ WebsiteDataItem(ContentValues values) {
-        super(values);
-    }
-
-    public String getUrl() {
-        return getContentValues().getAsString(Website.URL);
-    }
-
-    public String getLabel() {
-        return getContentValues().getAsString(Website.LABEL);
-    }
-}
diff --git a/src/com/android/contacts/common/preference/AboutPreferenceFragment.java b/src/com/android/contacts/common/preference/AboutPreferenceFragment.java
deleted file mode 100644
index d8426ba..0000000
--- a/src/com/android/contacts/common/preference/AboutPreferenceFragment.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.preference;
-
-import android.content.ActivityNotFoundException;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.net.Uri;
-import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.PreferenceFragment;
-import android.widget.Toast;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.activity.LicenseActivity;
-
-/**
- * This fragment shows the preferences for "about".
- */
-public class AboutPreferenceFragment extends PreferenceFragment {
-
-    public static final String PRIVACY_POLICY_URL = "http://www.google.com/policies/privacy";
-    public static final String TERMS_OF_SERVICE_URL = "http://www.google.com/policies/terms";
-
-    public static AboutPreferenceFragment newInstance() {
-        return new AboutPreferenceFragment();
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        // Load the preferences from an XML resource
-        addPreferencesFromResource(R.xml.preference_about);
-
-        // Set build version of Contacts App.
-        final PackageManager manager = getActivity().getPackageManager();
-        try {
-            final PackageInfo info = manager.getPackageInfo(getActivity().getPackageName(), 0);
-            final Preference versionPreference = findPreference(
-                    getString(R.string.pref_build_version_key));
-            versionPreference.setSummary(info.versionName);
-        } catch (PackageManager.NameNotFoundException e) {
-            // Nothing
-        }
-
-        final Preference licensePreference = findPreference(
-                getString(R.string.pref_open_source_licenses_key));
-        licensePreference.setIntent(new Intent(getActivity(), LicenseActivity.class));
-
-        final Preference privacyPolicyPreference = findPreference("pref_privacy_policy");
-        final Preference termsOfServicePreference = findPreference("pref_terms_of_service");
-
-        final Preference.OnPreferenceClickListener listener =
-                new Preference.OnPreferenceClickListener() {
-            @Override
-            public boolean onPreferenceClick(Preference preference) {
-                try {
-                    if (preference == privacyPolicyPreference) {
-                        startActivityForUrl(PRIVACY_POLICY_URL);
-                    } else if (preference == termsOfServicePreference) {
-                        startActivityForUrl(TERMS_OF_SERVICE_URL);
-                    }
-                } catch (ActivityNotFoundException ex) {
-                    Toast.makeText(getContext(), getString(R.string.url_open_error_toast),
-                            Toast.LENGTH_SHORT).show();
-                }
-                return true;
-            }
-        };
-
-        privacyPolicyPreference.setOnPreferenceClickListener(listener);
-        termsOfServicePreference.setOnPreferenceClickListener(listener);
-    }
-
-    @Override
-    public Context getContext() {
-        return getActivity();
-    }
-
-    private void startActivityForUrl(String urlString) {
-        final Intent intent = new Intent();
-        intent.setAction(Intent.ACTION_VIEW);
-        intent.setData(Uri.parse(urlString));
-        startActivity(intent);
-    }
-}
-
diff --git a/src/com/android/contacts/common/preference/ContactsPreferenceActivity.java b/src/com/android/contacts/common/preference/ContactsPreferenceActivity.java
deleted file mode 100644
index 4bdb12f..0000000
--- a/src/com/android/contacts/common/preference/ContactsPreferenceActivity.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.preference;
-
-import android.content.res.Configuration;
-import android.database.Cursor;
-import android.os.Bundle;
-import android.preference.PreferenceActivity;
-import android.provider.ContactsContract.ProviderStatus;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.StringRes;
-import android.support.v7.app.ActionBar;
-import android.support.v7.app.AppCompatDelegate;
-import android.support.v7.widget.Toolbar;
-import android.text.TextUtils;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.interactions.ImportDialogFragment;
-import com.android.contacts.common.list.ProviderStatusWatcher;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.preference.DisplayOptionsPreferenceFragment.ProfileListener;
-import com.android.contacts.common.preference.DisplayOptionsPreferenceFragment.ProfileQuery;
-import com.android.contacts.common.util.AccountSelectionUtil;
-import com.android.contacts.editor.SelectAccountDialogFragment;
-
-/**
- * Contacts settings.
- */
-public final class ContactsPreferenceActivity extends PreferenceActivity
-        implements ProfileListener, SelectAccountDialogFragment.Listener {
-
-    private static final String TAG_ABOUT = "about_contacts";
-    private static final String TAG_DISPLAY_OPTIONS = "display_options";
-
-    private String mNewLocalProfileExtra;
-    private boolean mAreContactsAvailable;
-
-    private ProviderStatusWatcher mProviderStatusWatcher;
-
-    private AppCompatDelegate mCompatDelegate;
-
-    public static final String EXTRA_NEW_LOCAL_PROFILE = "newLocalProfile";
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        mCompatDelegate = AppCompatDelegate.create(this, null);
-
-        super.onCreate(savedInstanceState);
-        mCompatDelegate.onCreate(savedInstanceState);
-
-
-        final ActionBar actionBar = mCompatDelegate.getSupportActionBar();
-        if (actionBar != null) {
-            actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
-        }
-
-        mProviderStatusWatcher = ProviderStatusWatcher.getInstance(this);
-
-        mNewLocalProfileExtra = getIntent().getStringExtra(EXTRA_NEW_LOCAL_PROFILE);
-        final int providerStatus = mProviderStatusWatcher.getProviderStatus();
-        mAreContactsAvailable = providerStatus == ProviderStatus.STATUS_NORMAL;
-
-        if (savedInstanceState == null) {
-            final DisplayOptionsPreferenceFragment fragment = DisplayOptionsPreferenceFragment
-                    .newInstance(mNewLocalProfileExtra, mAreContactsAvailable);
-            getFragmentManager().beginTransaction()
-                    .replace(android.R.id.content, fragment, TAG_DISPLAY_OPTIONS)
-                    .commit();
-            setActivityTitle(R.string.activity_title_settings);
-        } else {
-            final AboutPreferenceFragment aboutFragment = (AboutPreferenceFragment)
-                    getFragmentManager().findFragmentByTag(TAG_ABOUT);
-
-            if (aboutFragment != null) {
-                setActivityTitle(R.string.setting_about);
-            } else {
-                setActivityTitle(R.string.activity_title_settings);
-            }
-        }
-    }
-
-    @Override
-    protected void onPostCreate(Bundle savedInstanceState) {
-        super.onPostCreate(savedInstanceState);
-        mCompatDelegate.onPostCreate(savedInstanceState);
-    }
-
-    public void setSupportActionBar(Toolbar toolbar) {
-        mCompatDelegate.setSupportActionBar(toolbar);
-    }
-
-    @NonNull
-    @Override
-    public MenuInflater getMenuInflater() {
-        return mCompatDelegate.getMenuInflater();
-    }
-
-    @Override
-    public void setContentView(@LayoutRes int layoutRes) {
-        mCompatDelegate.setContentView(layoutRes);
-    }
-
-    @Override
-    public void setContentView(View view) {
-        mCompatDelegate.setContentView(view);
-    }
-
-    @Override
-    public void setContentView(View view, ViewGroup.LayoutParams params) {
-        mCompatDelegate.setContentView(view, params);
-    }
-
-    @Override
-    public void addContentView(View view, ViewGroup.LayoutParams params) {
-        mCompatDelegate.addContentView(view, params);
-    }
-
-    @Override
-    protected void onPostResume() {
-        super.onPostResume();
-        mCompatDelegate.onPostResume();
-    }
-
-    @Override
-    protected void onTitleChanged(CharSequence title, int color) {
-        super.onTitleChanged(title, color);
-        mCompatDelegate.setTitle(title);
-    }
-
-    @Override
-    public void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-        mCompatDelegate.onConfigurationChanged(newConfig);
-    }
-
-    @Override
-    protected void onDestroy() {
-        super.onDestroy();
-        mCompatDelegate.onDestroy();
-    }
-
-    @Override
-    public void invalidateOptionsMenu() {
-        mCompatDelegate.invalidateOptionsMenu();
-    }
-
-    protected void showAboutFragment() {
-        getFragmentManager().beginTransaction()
-                .replace(android.R.id.content, AboutPreferenceFragment.newInstance(), TAG_ABOUT)
-                .addToBackStack(null)
-                .commit();
-        setActivityTitle(R.string.setting_about);
-    }
-
-    @Override
-    public boolean onOptionsItemSelected(MenuItem item) {
-        if (item.getItemId() == android.R.id.home) {
-            onBackPressed();
-            return true;
-        }
-        return false;
-    }
-
-    @Override
-    public void onBackPressed() {
-        if (getFragmentManager().getBackStackEntryCount() > 0) {
-            setActivityTitle(R.string.activity_title_settings);
-            getFragmentManager().popBackStack();
-        } else {
-            super.onBackPressed();
-        }
-    }
-
-    private void setActivityTitle(@StringRes int res) {
-        final ActionBar actionBar = mCompatDelegate.getSupportActionBar();
-        if (actionBar != null) {
-            actionBar.setTitle(res);
-        }
-    }
-
-    @Override
-    public void onProfileLoaded(Cursor cursor) {
-        boolean hasProfile = false;
-        String displayName = null;
-        long contactId = -1;
-        if (cursor != null && cursor.moveToFirst()) {
-            hasProfile = cursor.getInt(ProfileQuery.CONTACT_IS_USER_PROFILE) == 1;
-            displayName = cursor.getString(ProfileQuery.CONTACT_DISPLAY_NAME);
-            contactId = cursor.getLong(ProfileQuery.CONTACT_ID);
-        }
-        if (hasProfile && TextUtils.isEmpty(displayName)) {
-            displayName = getString(R.string.missing_name);
-        }
-        final DisplayOptionsPreferenceFragment fragment = (DisplayOptionsPreferenceFragment)
-                getFragmentManager().findFragmentByTag(TAG_DISPLAY_OPTIONS);
-        fragment.updateMyInfoPreference(hasProfile, displayName, contactId);
-    }
-
-    @Override
-    public void onAccountChosen(AccountWithDataSet account, Bundle extraArgs) {
-        AccountSelectionUtil.doImport(this, extraArgs.getInt(ImportDialogFragment
-                .KEY_RES_ID), account, extraArgs.getInt(ImportDialogFragment.KEY_SUBSCRIPTION_ID));
-    }
-
-    @Override
-    public void onAccountSelectorCancelled() {
-    }
-}
diff --git a/src/com/android/contacts/common/preference/ContactsPreferences.java b/src/com/android/contacts/common/preference/ContactsPreferences.java
deleted file mode 100644
index ac7b0e0..0000000
--- a/src/com/android/contacts/common/preference/ContactsPreferences.java
+++ /dev/null
@@ -1,334 +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.common.preference;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.os.Handler;
-import android.os.Looper;
-import android.preference.PreferenceManager;
-import android.provider.Settings;
-import android.provider.Settings.SettingNotFoundException;
-import android.support.annotation.NonNull;
-import android.support.annotation.VisibleForTesting;
-import android.text.TextUtils;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-
-import java.util.List;
-
-/**
- * Manages user preferences for contacts.
- */
-public class ContactsPreferences implements OnSharedPreferenceChangeListener {
-
-    /**
-     * The value for the DISPLAY_ORDER key to show the given name first.
-     */
-    public static final int DISPLAY_ORDER_PRIMARY = 1;
-
-    /**
-     * The value for the DISPLAY_ORDER key to show the family name first.
-     */
-    public static final int DISPLAY_ORDER_ALTERNATIVE = 2;
-
-    public static final String DISPLAY_ORDER_KEY = "android.contacts.DISPLAY_ORDER";
-
-    /**
-     * The value for the SORT_ORDER key corresponding to sort by given name first.
-     */
-    public static final int SORT_ORDER_PRIMARY = 1;
-
-    public static final String SORT_ORDER_KEY = "android.contacts.SORT_ORDER";
-
-    /**
-     * The value for the SORT_ORDER key corresponding to sort by family name first.
-     */
-    public static final int SORT_ORDER_ALTERNATIVE = 2;
-
-    public static final String PREF_DISPLAY_ONLY_PHONES = "only_phones";
-
-    public static final boolean PREF_DISPLAY_ONLY_PHONES_DEFAULT = false;
-
-    /**
-     * Value to use when a preference is unassigned and needs to be read from the shared preferences
-     */
-    private static final int PREFERENCE_UNASSIGNED = -1;
-
-    private final Context mContext;
-    private int mSortOrder = PREFERENCE_UNASSIGNED;
-    private int mDisplayOrder = PREFERENCE_UNASSIGNED;
-    private AccountWithDataSet mDefaultAccount = null;
-    private ChangeListener mListener = null;
-    private Handler mHandler;
-    private final SharedPreferences mPreferences;
-    private final boolean mIsDefaultAccountUserChangeable;
-    private String mDefaultAccountKey;
-
-    public ContactsPreferences(Context context) {
-        this(context,
-                context.getResources().getBoolean(R.bool.config_default_account_user_changeable));
-    }
-
-    @VisibleForTesting
-    ContactsPreferences(Context context, boolean isDefaultAccountUserChangeable) {
-        mContext = context;
-        mIsDefaultAccountUserChangeable = isDefaultAccountUserChangeable;
-
-        mHandler = new Handler(Looper.getMainLooper());
-        mPreferences = mContext.getSharedPreferences(context.getPackageName(),
-                Context.MODE_PRIVATE);
-        mDefaultAccountKey = mContext.getResources().getString(
-                R.string.contact_editor_default_account_key);
-        maybeMigrateSystemSettings();
-    }
-
-    public boolean isSortOrderUserChangeable() {
-        return mContext.getResources().getBoolean(R.bool.config_sort_order_user_changeable);
-    }
-
-    public int getDefaultSortOrder() {
-        if (mContext.getResources().getBoolean(R.bool.config_default_sort_order_primary)) {
-            return SORT_ORDER_PRIMARY;
-        } else {
-            return SORT_ORDER_ALTERNATIVE;
-        }
-    }
-
-    public int getSortOrder() {
-        if (!isSortOrderUserChangeable()) {
-            return getDefaultSortOrder();
-        }
-        if (mSortOrder == PREFERENCE_UNASSIGNED) {
-            mSortOrder = mPreferences.getInt(SORT_ORDER_KEY, getDefaultSortOrder());
-        }
-        return mSortOrder;
-    }
-
-    public void setSortOrder(int sortOrder) {
-        mSortOrder = sortOrder;
-        final Editor editor = mPreferences.edit();
-        editor.putInt(SORT_ORDER_KEY, sortOrder);
-        editor.commit();
-    }
-
-    public boolean isDisplayOrderUserChangeable() {
-        return mContext.getResources().getBoolean(R.bool.config_display_order_user_changeable);
-    }
-
-    public int getDefaultDisplayOrder() {
-        if (mContext.getResources().getBoolean(R.bool.config_default_display_order_primary)) {
-            return DISPLAY_ORDER_PRIMARY;
-        } else {
-            return DISPLAY_ORDER_ALTERNATIVE;
-        }
-    }
-
-    public int getDisplayOrder() {
-        if (!isDisplayOrderUserChangeable()) {
-            return getDefaultDisplayOrder();
-        }
-        if (mDisplayOrder == PREFERENCE_UNASSIGNED) {
-            mDisplayOrder = mPreferences.getInt(DISPLAY_ORDER_KEY, getDefaultDisplayOrder());
-        }
-        return mDisplayOrder;
-    }
-
-    public void setDisplayOrder(int displayOrder) {
-        mDisplayOrder = displayOrder;
-        final Editor editor = mPreferences.edit();
-        editor.putInt(DISPLAY_ORDER_KEY, displayOrder);
-        editor.commit();
-    }
-
-    public boolean isDefaultAccountUserChangeable() {
-        return mIsDefaultAccountUserChangeable;
-    }
-
-    public AccountWithDataSet getDefaultAccount() {
-        if (!isDefaultAccountUserChangeable()) {
-            return mDefaultAccount;
-        }
-        if (mDefaultAccount == null) {
-            final String accountString = mPreferences
-                    .getString(mDefaultAccountKey, null);
-            if (!TextUtils.isEmpty(accountString)) {
-                mDefaultAccount = AccountWithDataSet.unstringify(accountString);
-            }
-        }
-        return mDefaultAccount;
-    }
-
-    public void clearDefaultAccount() {
-        mDefaultAccount = null;
-        mPreferences.edit().remove(mDefaultAccountKey).commit();
-    }
-
-    public void setDefaultAccount(@NonNull AccountWithDataSet accountWithDataSet) {
-        if (accountWithDataSet == null) {
-            throw new IllegalArgumentException(
-                    "argument should not be null");
-        }
-        mDefaultAccount = accountWithDataSet;
-        mPreferences.edit().putString(mDefaultAccountKey, accountWithDataSet.stringify()).commit();
-    }
-
-    public boolean isDefaultAccountSet() {
-        return mDefaultAccount != null || mPreferences.contains(mDefaultAccountKey);
-    }
-
-    /**
-     * @return false if there is only one writable account or no requirement to return true is met.
-     *         true if the contact editor should show the "accounts changed" notification, that is:
-     *              - If it's the first launch.
-     *              - Or, if the default account has been removed.
-     *              (And some extra sanity check)
-     *
-     * Note if this method returns {@code false}, the caller can safely assume that
-     * {@link #getDefaultAccount} will return a valid account.  (Either an account which still
-     * exists, or {@code null} which should be interpreted as "local only".)
-     */
-    public boolean shouldShowAccountChangedNotification(List<AccountWithDataSet>
-            currentWritableAccounts) {
-        final AccountWithDataSet defaultAccount = getDefaultAccount();
-
-        // This shouldn't occur anymore because a "device" account is added in the case that there
-        // are no other accounts but if there are no writable accounts then the default has been
-        // initialized if it is "device"
-        if (currentWritableAccounts.isEmpty()) {
-            return defaultAccount == null || !defaultAccount.isNullAccount();
-        }
-
-        if (currentWritableAccounts.size() == 1
-                && !currentWritableAccounts.get(0).isNullAccount()) {
-            return false;
-        }
-
-        if (defaultAccount == null) {
-            return true;
-        }
-
-        if (!currentWritableAccounts.contains(defaultAccount)) {
-            return true;
-        }
-
-        // All good.
-        return false;
-    }
-
-    public void registerChangeListener(ChangeListener listener) {
-        if (mListener != null) unregisterChangeListener();
-
-        mListener = listener;
-
-        // Reset preferences to "unknown" because they may have changed while the
-        // listener was unregistered.
-        mDisplayOrder = PREFERENCE_UNASSIGNED;
-        mSortOrder = PREFERENCE_UNASSIGNED;
-        mDefaultAccount = null;
-
-        mPreferences.registerOnSharedPreferenceChangeListener(this);
-    }
-
-    public void unregisterChangeListener() {
-        if (mListener != null) {
-            mListener = null;
-        }
-
-        mPreferences.unregisterOnSharedPreferenceChangeListener(this);
-    }
-
-    @Override
-    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, final String key) {
-        // This notification is not sent on the Ui thread. Use the previously created Handler
-        // to switch to the Ui thread
-        mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                refreshValue(key);
-            }
-        });
-    }
-
-    /**
-     * Forces the value for the given key to be looked up from shared preferences and notifies
-     * the registered {@link ChangeListener}
-     *
-     * @param key the {@link SharedPreferences} key to look up
-     */
-    public void refreshValue(String key) {
-        if (DISPLAY_ORDER_KEY.equals(key)) {
-            mDisplayOrder = PREFERENCE_UNASSIGNED;
-            mDisplayOrder = getDisplayOrder();
-        } else if (SORT_ORDER_KEY.equals(key)) {
-            mSortOrder = PREFERENCE_UNASSIGNED;
-            mSortOrder = getSortOrder();
-        } else if (mDefaultAccountKey.equals(key)) {
-            mDefaultAccount = null;
-            mDefaultAccount = getDefaultAccount();
-        }
-        if (mListener != null) mListener.onChange();
-    }
-
-    public interface ChangeListener {
-        void onChange();
-    }
-
-    /**
-     * If there are currently no preferences (which means this is the first time we are run),
-     * For sort order and display order, check to see if there are any preferences stored in
-     * system settings (pre-L) which can be copied into our own SharedPreferences.
-     * For default account setting, check to see if there are any preferences stored in the previous
-     * SharedPreferences which can be copied into current SharedPreferences.
-     */
-    private void maybeMigrateSystemSettings() {
-        if (!mPreferences.contains(SORT_ORDER_KEY)) {
-            int sortOrder = getDefaultSortOrder();
-            try {
-                 sortOrder = Settings.System.getInt(mContext.getContentResolver(),
-                        SORT_ORDER_KEY);
-            } catch (SettingNotFoundException e) {
-            }
-            setSortOrder(sortOrder);
-        }
-
-        if (!mPreferences.contains(DISPLAY_ORDER_KEY)) {
-            int displayOrder = getDefaultDisplayOrder();
-            try {
-                displayOrder = Settings.System.getInt(mContext.getContentResolver(),
-                        DISPLAY_ORDER_KEY);
-            } catch (SettingNotFoundException e) {
-            }
-            setDisplayOrder(displayOrder);
-        }
-
-        if (!mPreferences.contains(mDefaultAccountKey)) {
-            final SharedPreferences previousPrefs =
-                    PreferenceManager.getDefaultSharedPreferences(mContext);
-            final String defaultAccount = previousPrefs.getString(mDefaultAccountKey, null);
-            if (!TextUtils.isEmpty(defaultAccount)) {
-                final AccountWithDataSet accountWithDataSet = AccountWithDataSet.unstringify(
-                        defaultAccount);
-                setDefaultAccount(accountWithDataSet);
-            }
-        }
-    }
-
-}
diff --git a/src/com/android/contacts/common/preference/DefaultAccountPreference.java b/src/com/android/contacts/common/preference/DefaultAccountPreference.java
deleted file mode 100644
index 0fcc8cb..0000000
--- a/src/com/android/contacts/common/preference/DefaultAccountPreference.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.contacts.common.preference;
-
-import android.app.AlertDialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.preference.DialogPreference;
-import android.util.AttributeSet;
-import android.view.View;
-
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.AccountsListAdapter;
-
-public class DefaultAccountPreference extends DialogPreference {
-    private ContactsPreferences mPreferences;
-    private AccountsListAdapter mListAdapter;
-    private AccountDisplayInfoFactory mAccountDisplayInfoFactory;
-    private AccountTypeManager mAccountTypeManager;
-    private int mChosenIndex = -1;
-
-    public DefaultAccountPreference(Context context) {
-        super(context);
-        prepare();
-    }
-
-    public DefaultAccountPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        prepare();
-    }
-
-    @Override
-    protected View onCreateDialogView() {
-        prepare();
-        return super.onCreateDialogView();
-    }
-
-    private void prepare() {
-        mPreferences = new ContactsPreferences(getContext());
-        mListAdapter = new AccountsListAdapter(getContext(),
-                AccountsListAdapter.AccountListFilter.ACCOUNTS_CONTACT_WRITABLE);
-        mAccountTypeManager = AccountTypeManager.getInstance(getContext());
-        mAccountDisplayInfoFactory = AccountDisplayInfoFactory.forWritableAccounts(getContext());
-    }
-
-    @Override
-    protected boolean shouldPersist() {
-        return false;   // This preference takes care of its own storage
-    }
-
-    @Override
-    public CharSequence getSummary() {
-        final AccountWithDataSet defaultAccount = mPreferences.getDefaultAccount();
-        if (defaultAccount == null ||
-                !mAccountTypeManager.getAccounts(/* writable */ true).contains(defaultAccount)) {
-            return null;
-        } else {
-            return mAccountDisplayInfoFactory.getAccountDisplayInfo(defaultAccount).getNameLabel();
-        }
-    }
-
-    @Override
-    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
-        super.onPrepareDialogBuilder(builder);
-        // UX recommendation is not to show buttons on such lists.
-        builder.setNegativeButton(null, null);
-        builder.setPositiveButton(null, null);
-        builder.setAdapter(mListAdapter, new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                mChosenIndex = which;
-            }
-        });
-    }
-
-    @Override
-    protected void onDialogClosed(boolean positiveResult) {
-        final AccountWithDataSet currentDefault = mPreferences.getDefaultAccount();
-
-        if (mChosenIndex != -1) {
-            final AccountWithDataSet chosenAccount = mListAdapter.getItem(mChosenIndex);
-            if (!chosenAccount.equals(currentDefault)) {
-                mPreferences.setDefaultAccount(chosenAccount);
-                notifyChanged();
-            }
-        } // else the user dismissed this dialog so leave the preference unchanged.
-    }
-}
diff --git a/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java b/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
deleted file mode 100644
index e2782f8..0000000
--- a/src/com/android/contacts/common/preference/DisplayOptionsPreferenceFragment.java
+++ /dev/null
@@ -1,424 +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.common.preference;
-
-import android.app.Activity;
-import android.app.LoaderManager;
-import android.content.BroadcastReceiver;
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.CursorLoader;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.Loader;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.PreferenceFragment;
-import android.provider.BlockedNumberContract;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Profile;
-import android.support.design.widget.Snackbar;
-import android.support.v4.content.LocalBroadcastManager;
-import android.telecom.TelecomManager;
-import android.telephony.TelephonyManager;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.R;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.compat.TelecomManagerUtil;
-import com.android.contacts.common.compat.TelephonyManagerCompat;
-import com.android.contacts.common.interactions.ExportDialogFragment;
-import com.android.contacts.common.interactions.ImportDialogFragment;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.ContactListFilterController;
-import com.android.contacts.common.logging.ScreenEvent.ScreenType;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.AccountFilterUtil;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contactsbind.HelpUtils;
-
-import java.util.List;
-
-/**
- * This fragment shows the preferences for "display options"
- */
-public class DisplayOptionsPreferenceFragment extends PreferenceFragment
-        implements Preference.OnPreferenceClickListener {
-
-    private static final int REQUEST_CODE_CUSTOM_CONTACTS_FILTER = 0;
-
-    private static final String ARG_CONTACTS_AVAILABLE = "are_contacts_available";
-    private static final String ARG_NEW_LOCAL_PROFILE = "new_local_profile";
-
-    private static final String KEY_ABOUT = "about";
-    private static final String KEY_ACCOUNTS = "accounts";
-    private static final String KEY_DEFAULT_ACCOUNT = "defaultAccount";
-    private static final String KEY_BLOCKED_NUMBERS = "blockedNumbers";
-    private static final String KEY_DISPLAY_ORDER = "displayOrder";
-    private static final String KEY_CUSTOM_CONTACTS_FILTER = "customContactsFilter";
-    private static final String KEY_IMPORT = "import";
-    private static final String KEY_EXPORT = "export";
-    private static final String KEY_MY_INFO = "myInfo";
-    private static final String KEY_SORT_ORDER = "sortOrder";
-
-    private static final int LOADER_PROFILE = 0;
-
-    /**
-     * Callbacks for hosts of the {@link DisplayOptionsPreferenceFragment}.
-     */
-    public interface ProfileListener  {
-        /**
-         * Invoked after profile has been loaded.
-         */
-        void onProfileLoaded(Cursor data);
-    }
-
-    /**
-     * The projections that are used to obtain user profile
-     */
-    public static class ProfileQuery {
-        /**
-         * Not instantiable.
-         */
-        private ProfileQuery() {}
-
-        private static final String[] PROFILE_PROJECTION_PRIMARY = new String[] {
-                Contacts._ID,                           // 0
-                Contacts.DISPLAY_NAME_PRIMARY,          // 1
-                Contacts.IS_USER_PROFILE,               // 2
-        };
-
-        private static final String[] PROFILE_PROJECTION_ALTERNATIVE = new String[] {
-                Contacts._ID,                           // 0
-                Contacts.DISPLAY_NAME_ALTERNATIVE,      // 1
-                Contacts.IS_USER_PROFILE,               // 2
-        };
-
-        public static final int CONTACT_ID               = 0;
-        public static final int CONTACT_DISPLAY_NAME     = 1;
-        public static final int CONTACT_IS_USER_PROFILE  = 2;
-    }
-
-    private String mNewLocalProfileExtra;
-    private boolean mAreContactsAvailable;
-
-    private boolean mHasProfile;
-    private long mProfileContactId;
-
-    private Preference mMyInfoPreference;
-
-    private ProfileListener mListener;
-
-    private ViewGroup mRootView;
-    private SaveServiceResultListener mSaveServiceListener;
-
-    private final LoaderManager.LoaderCallbacks<Cursor> mProfileLoaderListener =
-            new LoaderManager.LoaderCallbacks<Cursor>() {
-
-        @Override
-        public CursorLoader onCreateLoader(int id, Bundle args) {
-            final CursorLoader loader = createCursorLoader(getContext());
-            loader.setUri(Profile.CONTENT_URI);
-            loader.setProjection(getProjection(getContext()));
-            return loader;
-        }
-
-        @Override
-        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
-            if (mListener != null) {
-                mListener.onProfileLoaded(data);
-            }
-        }
-
-        public void onLoaderReset(Loader<Cursor> loader) {
-        }
-    };
-
-    public static DisplayOptionsPreferenceFragment newInstance(String newLocalProfileExtra,
-            boolean areContactsAvailable) {
-        final DisplayOptionsPreferenceFragment fragment = new DisplayOptionsPreferenceFragment();
-        final Bundle args = new Bundle();
-        args.putString(ARG_NEW_LOCAL_PROFILE, newLocalProfileExtra);
-        args.putBoolean(ARG_CONTACTS_AVAILABLE, areContactsAvailable);
-        fragment.setArguments(args);
-        return fragment;
-    }
-
-    @Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-        try {
-            mListener = (ProfileListener) activity;
-        } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString() + " must implement ProfileListener");
-        }
-    }
-
-    @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
-        // Wrap the preference view in a FrameLayout so we can show a snackbar
-        mRootView = new FrameLayout(getActivity());
-        final View list = super.onCreateView(inflater, mRootView, savedInstanceState);
-        mRootView.addView(list);
-        return mRootView;
-    }
-
-    @Override
-    public void onViewCreated(View view, Bundle savedInstanceState) {
-        super.onViewCreated(view, savedInstanceState);
-
-        mSaveServiceListener = new SaveServiceResultListener();
-        LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
-                mSaveServiceListener,
-                new IntentFilter(ContactSaveService.BROADCAST_SIM_IMPORT_COMPLETE));
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        // Load the preferences from an XML resource
-        addPreferencesFromResource(R.xml.preference_display_options);
-
-        final Bundle args = getArguments();
-        mNewLocalProfileExtra = args.getString(ARG_NEW_LOCAL_PROFILE);
-        mAreContactsAvailable = args.getBoolean(ARG_CONTACTS_AVAILABLE);
-
-        removeUnsupportedPreferences();
-
-        mMyInfoPreference = findPreference(KEY_MY_INFO);
-
-        final Preference accountsPreference = findPreference(KEY_ACCOUNTS);
-        accountsPreference.setOnPreferenceClickListener(this);
-
-        final Preference importPreference = findPreference(KEY_IMPORT);
-        importPreference.setOnPreferenceClickListener(this);
-
-        final Preference exportPreference = findPreference(KEY_EXPORT);
-        if (exportPreference != null) {
-            exportPreference.setOnPreferenceClickListener(this);
-        }
-
-        final Preference blockedNumbersPreference = findPreference(KEY_BLOCKED_NUMBERS);
-        if (blockedNumbersPreference != null) {
-            blockedNumbersPreference.setOnPreferenceClickListener(this);
-        }
-
-        final Preference aboutPreference = findPreference(KEY_ABOUT);
-        if (aboutPreference != null) {
-            aboutPreference.setOnPreferenceClickListener(this);
-        }
-
-        final Preference customFilterPreference = findPreference(KEY_CUSTOM_CONTACTS_FILTER);
-        if (customFilterPreference != null) {
-            customFilterPreference.setOnPreferenceClickListener(this);
-            setCustomContactsFilterSummary();
-        }
-    }
-
-    @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-        getLoaderManager().restartLoader(LOADER_PROFILE, null, mProfileLoaderListener);
-    }
-
-    @Override
-    public void onDestroyView() {
-        super.onDestroyView();
-        LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mSaveServiceListener);
-        mRootView = null;
-    }
-
-    public void updateMyInfoPreference(boolean hasProfile, String displayName, long contactId) {
-        final CharSequence summary = hasProfile ? displayName : getString(R.string.set_up_profile);
-        mMyInfoPreference.setSummary(summary);
-        mHasProfile = hasProfile;
-        mProfileContactId = contactId;
-        mMyInfoPreference.setOnPreferenceClickListener(this);
-    }
-
-    private void removeUnsupportedPreferences() {
-        // Disable sort order for CJK locales where it is not supported
-        final Resources resources = getResources();
-        if (!resources.getBoolean(R.bool.config_sort_order_user_changeable)) {
-            getPreferenceScreen().removePreference(findPreference(KEY_SORT_ORDER));
-        }
-
-        if (HelpUtils.isHelpAndFeedbackAvailable()) {
-            getPreferenceScreen().removePreference(findPreference(KEY_ABOUT));
-        }
-
-        // Disable display order for CJK locales as well
-        if (!resources.getBoolean(R.bool.config_display_order_user_changeable)) {
-            getPreferenceScreen().removePreference(findPreference(KEY_DISPLAY_ORDER));
-        }
-
-        // Remove the default account and custom view settings there aren't any writable accounts
-        final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(getContext());
-        final List<AccountWithDataSet> accounts = accountTypeManager.getAccounts(
-                /* contactWritableOnly */ true);
-        if (accounts.isEmpty()) {
-            getPreferenceScreen().removePreference(findPreference(KEY_DEFAULT_ACCOUNT));
-            getPreferenceScreen().removePreference(findPreference(KEY_CUSTOM_CONTACTS_FILTER));
-        }
-
-        final boolean isPhone = TelephonyManagerCompat.isVoiceCapable(
-                (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE));
-        final boolean showBlockedNumbers = isPhone && ContactsUtils.FLAG_N_FEATURE
-                && BlockedNumberContract.canCurrentUserBlockNumbers(getContext());
-        if (!showBlockedNumbers) {
-            getPreferenceScreen().removePreference(findPreference(KEY_BLOCKED_NUMBERS));
-        }
-
-        if (!mAreContactsAvailable) {
-            getPreferenceScreen().removePreference(findPreference(KEY_EXPORT));
-        }
-    }
-
-    @Override
-    public Context getContext() {
-        return getActivity();
-    }
-
-    private CursorLoader createCursorLoader(Context context) {
-        return new CursorLoader(context) {
-            @Override
-            protected Cursor onLoadInBackground() {
-                try {
-                    return super.onLoadInBackground();
-                } catch (RuntimeException e) {
-                    return null;
-                }
-            }
-        };
-    }
-
-    private String[] getProjection(Context context) {
-        final ContactsPreferences contactsPrefs = new ContactsPreferences(context);
-        final int displayOrder = contactsPrefs.getDisplayOrder();
-        if (displayOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
-            return ProfileQuery.PROFILE_PROJECTION_PRIMARY;
-        }
-        return ProfileQuery.PROFILE_PROJECTION_ALTERNATIVE;
-    }
-
-    @Override
-    public boolean onPreferenceClick(Preference p) {
-        final String prefKey = p.getKey();
-
-        if (KEY_ABOUT.equals(prefKey)) {
-            ((ContactsPreferenceActivity) getActivity()).showAboutFragment();
-            return true;
-        } else if (KEY_IMPORT.equals(prefKey)) {
-            ImportDialogFragment.show(getFragmentManager());
-            return true;
-        } else if (KEY_EXPORT.equals(prefKey)) {
-            ExportDialogFragment.show(getFragmentManager(), ContactsPreferenceActivity.class,
-                    ExportDialogFragment.EXPORT_MODE_ALL_CONTACTS);
-            return true;
-        } else if (KEY_MY_INFO.equals(prefKey)) {
-            if (mHasProfile) {
-                final Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, mProfileContactId);
-                ImplicitIntentsUtil.startQuickContact(getActivity(), uri, ScreenType.ME_CONTACT);
-            } else {
-                final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
-                intent.putExtra(mNewLocalProfileExtra, true);
-                ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
-            }
-            return true;
-        } else if (KEY_ACCOUNTS.equals(prefKey)) {
-            ImplicitIntentsUtil.startActivityOutsideApp(getContext(),
-                    ImplicitIntentsUtil.getIntentForAddingAccount());
-            return true;
-        } else if (KEY_BLOCKED_NUMBERS.equals(prefKey)) {
-            final Intent intent = TelecomManagerUtil.createManageBlockedNumbersIntent(
-                    (TelecomManager) getContext().getSystemService(Context.TELECOM_SERVICE));
-            startActivity(intent);
-            return true;
-        } else if (KEY_CUSTOM_CONTACTS_FILTER.equals(prefKey)) {
-            final ContactListFilter filter =
-                    ContactListFilterController.getInstance(getContext()).getFilter();
-            AccountFilterUtil.startAccountFilterActivityForResult(
-                    this, REQUEST_CODE_CUSTOM_CONTACTS_FILTER, filter);
-        }
-        return false;
-    }
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == REQUEST_CODE_CUSTOM_CONTACTS_FILTER
-                && resultCode == Activity.RESULT_OK) {
-            AccountFilterUtil.handleAccountFilterResult(
-                    ContactListFilterController.getInstance(getContext()), resultCode, data);
-            setCustomContactsFilterSummary();
-        } else {
-            super.onActivityResult(requestCode, resultCode, data);
-        }
-    }
-
-    private void setCustomContactsFilterSummary() {
-        final Preference customFilterPreference = findPreference(KEY_CUSTOM_CONTACTS_FILTER);
-        if (customFilterPreference != null) {
-            final ContactListFilter filter =
-                    ContactListFilterController.getInstance(getContext()).getPersistedFilter();
-            if (filter != null) {
-                if (filter.filterType == ContactListFilter.FILTER_TYPE_DEFAULT ||
-                        filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
-                    customFilterPreference.setSummary(R.string.list_filter_all_accounts);
-                } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
-                    customFilterPreference.setSummary(R.string.listCustomView);
-                } else {
-                    customFilterPreference.setSummary(null);
-                }
-            }
-        }
-    }
-
-    private class SaveServiceResultListener extends BroadcastReceiver {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            final long now = System.currentTimeMillis();
-            final long opStart = intent.getLongExtra(
-                    ContactSaveService.EXTRA_OPERATION_REQUESTED_AT_TIME, now);
-
-            // If it's been over 30 seconds the user is likely in a different context so suppress
-            // the toast message.
-            if (now - opStart > 30*1000) return;
-
-            final int code = intent.getIntExtra(ContactSaveService.EXTRA_RESULT_CODE,
-                    ContactSaveService.RESULT_UNKNOWN);
-            final int count = intent.getIntExtra(ContactSaveService.EXTRA_RESULT_COUNT, -1);
-            if (code == ContactSaveService.RESULT_SUCCESS && count > 0) {
-                Snackbar.make(mRootView, getResources().getQuantityString(
-                        R.plurals.sim_import_success_toast_fmt, count, count),
-                        Snackbar.LENGTH_LONG).show();
-            } else if (code == ContactSaveService.RESULT_FAILURE) {
-                Snackbar.make(mRootView, R.string.sim_import_failed_toast,
-                        Snackbar.LENGTH_LONG).show();
-            }
-        }
-    }
-}
-
diff --git a/src/com/android/contacts/common/preference/DisplayOrderPreference.java b/src/com/android/contacts/common/preference/DisplayOrderPreference.java
deleted file mode 100644
index 6a182c5..0000000
--- a/src/com/android/contacts/common/preference/DisplayOrderPreference.java
+++ /dev/null
@@ -1,92 +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.common.preference;
-
-import android.app.AlertDialog.Builder;
-import android.content.Context;
-import android.preference.ListPreference;
-import android.provider.ContactsContract;
-import android.util.AttributeSet;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.preference.ContactsPreferences;
-
-/**
- * Custom preference: view-name-as (first name first or last name first).
- */
-public final class DisplayOrderPreference extends ListPreference {
-
-    private ContactsPreferences mPreferences;
-    private Context mContext;
-
-    public DisplayOrderPreference(Context context) {
-        super(context);
-        prepare();
-    }
-
-    public DisplayOrderPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        prepare();
-    }
-
-    private void prepare() {
-        mContext = getContext();
-        mPreferences = new ContactsPreferences(mContext);
-        setEntries(new String[]{
-                mContext.getString(R.string.display_options_view_given_name_first),
-                mContext.getString(R.string.display_options_view_family_name_first),
-        });
-        setEntryValues(new String[]{
-                String.valueOf(ContactsPreferences.DISPLAY_ORDER_PRIMARY),
-                String.valueOf(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE),
-        });
-        setValue(String.valueOf(mPreferences.getDisplayOrder()));
-    }
-
-    @Override
-    protected boolean shouldPersist() {
-        return false;   // This preference takes care of its own storage
-    }
-
-    @Override
-    public CharSequence getSummary() {
-        switch (mPreferences.getDisplayOrder()) {
-            case ContactsPreferences.DISPLAY_ORDER_PRIMARY:
-                return mContext.getString(R.string.display_options_view_given_name_first);
-            case ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE:
-                return mContext.getString(R.string.display_options_view_family_name_first);
-        }
-        return null;
-    }
-
-    @Override
-    protected boolean persistString(String value) {
-        int newValue = Integer.parseInt(value);
-        if (newValue != mPreferences.getDisplayOrder()) {
-            mPreferences.setDisplayOrder(newValue);
-            notifyChanged();
-        }
-        return true;
-    }
-
-    @Override
-    // UX recommendation is not to show cancel button on such lists.
-    protected void onPrepareDialogBuilder(Builder builder) {
-        super.onPrepareDialogBuilder(builder);
-        builder.setNegativeButton(null, null);
-    }
-}
diff --git a/src/com/android/contacts/common/preference/SortOrderPreference.java b/src/com/android/contacts/common/preference/SortOrderPreference.java
deleted file mode 100644
index dfd9550..0000000
--- a/src/com/android/contacts/common/preference/SortOrderPreference.java
+++ /dev/null
@@ -1,91 +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.common.preference;
-
-import android.app.AlertDialog.Builder;
-import android.content.Context;
-import android.preference.ListPreference;
-import android.util.AttributeSet;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.preference.ContactsPreferences;
-
-/**
- * Custom preference: sort-by.
- */
-public final class SortOrderPreference extends ListPreference {
-
-    private ContactsPreferences mPreferences;
-    private Context mContext;
-
-    public SortOrderPreference(Context context) {
-        super(context);
-        prepare();
-    }
-
-    public SortOrderPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        prepare();
-    }
-
-    private void prepare() {
-        mContext = getContext();
-        mPreferences = new ContactsPreferences(mContext);
-        setEntries(new String[]{
-                mContext.getString(R.string.display_options_sort_by_given_name),
-                mContext.getString(R.string.display_options_sort_by_family_name),
-        });
-        setEntryValues(new String[]{
-                String.valueOf(ContactsPreferences.SORT_ORDER_PRIMARY),
-                String.valueOf(ContactsPreferences.SORT_ORDER_ALTERNATIVE),
-        });
-        setValue(String.valueOf(mPreferences.getSortOrder()));
-    }
-
-    @Override
-    protected boolean shouldPersist() {
-        return false;   // This preference takes care of its own storage
-    }
-
-    @Override
-    public CharSequence getSummary() {
-        switch (mPreferences.getSortOrder()) {
-            case ContactsPreferences.SORT_ORDER_PRIMARY:
-                return mContext.getString(R.string.display_options_sort_by_given_name);
-            case ContactsPreferences.SORT_ORDER_ALTERNATIVE:
-                return mContext.getString(R.string.display_options_sort_by_family_name);
-        }
-        return null;
-    }
-
-    @Override
-    protected boolean persistString(String value) {
-        int newValue = Integer.parseInt(value);
-        if (newValue != mPreferences.getSortOrder()) {
-            mPreferences.setSortOrder(newValue);
-            notifyChanged();
-        }
-        return true;
-    }
-
-    @Override
-    // UX recommendation is not to show cancel button on such lists.
-    protected void onPrepareDialogBuilder(Builder builder) {
-        super.onPrepareDialogBuilder(builder);
-        builder.setNegativeButton(null, null);
-    }
-}
diff --git a/src/com/android/contacts/common/testing/InjectedServices.java b/src/com/android/contacts/common/testing/InjectedServices.java
deleted file mode 100644
index 3b90676..0000000
--- a/src/com/android/contacts/common/testing/InjectedServices.java
+++ /dev/null
@@ -1,68 +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.common.testing;
-
-import android.content.ContentResolver;
-import android.content.SharedPreferences;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Maps;
-
-import java.util.HashMap;
-
-/**
- * A mechanism for providing alternative (mock) services to the application
- * while running tests. Activities, Services and the Application should check
- * with this class to see if a particular service has been overridden.
- */
-public class InjectedServices {
-
-    private ContentResolver mContentResolver;
-    private SharedPreferences mSharedPreferences;
-    private HashMap<String, Object> mSystemServices;
-
-    public void setContentResolver(ContentResolver contentResolver) {
-        this.mContentResolver = contentResolver;
-    }
-
-    public ContentResolver getContentResolver() {
-        return mContentResolver;
-    }
-
-    public void setSharedPreferences(SharedPreferences sharedPreferences) {
-        this.mSharedPreferences = sharedPreferences;
-    }
-
-    public SharedPreferences getSharedPreferences() {
-        return mSharedPreferences;
-    }
-
-    public void setSystemService(String name, Object service) {
-        if (mSystemServices == null) {
-            mSystemServices = Maps.newHashMap();
-        }
-
-        mSystemServices.put(name, service);
-    }
-
-    public Object getSystemService(String name) {
-        if (mSystemServices != null) {
-            return mSystemServices.get(name);
-        }
-        return null;
-    }
-}
diff --git a/src/com/android/contacts/common/util/AccountFilterUtil.java b/src/com/android/contacts/common/util/AccountFilterUtil.java
deleted file mode 100644
index 96c5113..0000000
--- a/src/com/android/contacts/common/util/AccountFilterUtil.java
+++ /dev/null
@@ -1,239 +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.common.util;
-
-import android.accounts.Account;
-import android.app.Activity;
-import android.app.Fragment;
-import android.content.ActivityNotFoundException;
-import android.content.AsyncTaskLoader;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.drawable.Drawable;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Intents;
-import android.text.TextUtils;
-import android.util.Log;
-import android.widget.Toast;
-
-import com.android.contacts.R;
-import com.android.contacts.activities.ContactEditorActivity;
-import com.android.contacts.common.list.AccountFilterActivity;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.ContactListFilterController;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contactsbind.ObjectFactory;
-
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Utility class for account filter manipulation.
- */
-public class AccountFilterUtil {
-    private static final String TAG = AccountFilterUtil.class.getSimpleName();
-
-     /**
-      * Launches account filter setting Activity using
-      * {@link Fragment#startActivityForResult(Intent, int)}.
-      *
-      * @param requestCode requestCode for {@link Activity#startActivityForResult(Intent, int)}
-      * @param currentFilter currently-selected filter, so that it can be displayed as activated.
-      */
-     public static void startAccountFilterActivityForResult(
-             Fragment fragment, int requestCode, ContactListFilter currentFilter) {
-         final Activity activity = fragment.getActivity();
-         if (activity != null) {
-             final Intent intent = new Intent(activity, AccountFilterActivity.class);
-             fragment.startActivityForResult(intent, requestCode);
-         } else {
-             Log.w(TAG, "getActivity() returned null. Ignored");
-         }
-     }
-
-    /**
-     * Useful method to handle onActivityResult() for
-     * {@link #startAccountFilterActivityForResult(Fragment, int, ContactListFilter)}.
-     *
-     * This will update filter via a given ContactListFilterController.
-     */
-    public static void handleAccountFilterResult(
-            ContactListFilterController filterController, int resultCode, Intent data) {
-        if (resultCode == Activity.RESULT_OK) {
-            final ContactListFilter filter = (ContactListFilter)
-                    data.getParcelableExtra(AccountFilterActivity.EXTRA_CONTACT_LIST_FILTER);
-            if (filter == null) {
-                return;
-            }
-            if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
-                filterController.selectCustomFilter();
-            } else {
-                filterController.setContactListFilter(filter, /* persistent */
-                        filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
-            }
-        }
-    }
-
-    /**
-     * Loads a list of contact list filters
-     */
-    public static class FilterLoader extends AsyncTaskLoader<List<ContactListFilter>> {
-        private Context mContext;
-        private DeviceLocalAccountTypeFactory mDeviceLocalFactory;
-
-        public FilterLoader(Context context) {
-            super(context);
-            mContext = context;
-            mDeviceLocalFactory = ObjectFactory.getDeviceLocalAccountTypeFactory(context);
-        }
-
-        @Override
-        public List<ContactListFilter> loadInBackground() {
-            return loadAccountFilters(mContext, mDeviceLocalFactory);
-        }
-
-        @Override
-        protected void onStartLoading() {
-            forceLoad();
-        }
-
-        @Override
-        protected void onStopLoading() {
-            cancelLoad();
-        }
-
-        @Override
-        protected void onReset() {
-            onStopLoading();
-        }
-    }
-
-    private static List<ContactListFilter> loadAccountFilters(Context context,
-            DeviceLocalAccountTypeFactory deviceAccountTypeFactory) {
-        final ArrayList<ContactListFilter> accountFilters = Lists.newArrayList();
-        final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(context);
-        final List<AccountWithDataSet> accounts = accountTypeManager.getSortedAccounts(
-                /* defaultAccount */ getDefaultAccount(context), /* contactWritableOnly */ true);
-
-        for (AccountWithDataSet account : accounts) {
-            final AccountType accountType =
-                    accountTypeManager.getAccountType(account.type, account.dataSet);
-            if ((accountType.isExtension() || DeviceLocalAccountTypeFactory.Util.isLocalAccountType(
-                    deviceAccountTypeFactory, account.type)) && !account.hasData(context)) {
-                // Hide extensions and device accounts with no raw_contacts.
-                continue;
-            }
-            final Drawable icon = accountType != null ? accountType.getDisplayIcon(context) : null;
-            if (DeviceLocalAccountTypeFactory.Util.isLocalAccountType(
-                    deviceAccountTypeFactory, account.type)) {
-                accountFilters.add(ContactListFilter.createDeviceContactsFilter(icon, account));
-            } else {
-                accountFilters.add(ContactListFilter.createAccountFilter(
-                        account.type, account.name, account.dataSet, icon));
-            }
-        }
-
-        final ArrayList<ContactListFilter> result = Lists.newArrayList();
-        result.addAll(accountFilters);
-        return result;
-    }
-
-    private static AccountWithDataSet getDefaultAccount(Context context) {
-        return new ContactsPreferences(context).getDefaultAccount();
-    }
-
-    /**
-     * Returns a {@link ContactListFilter} of type
-     * {@link ContactListFilter#FILTER_TYPE_ALL_ACCOUNTS}, or if a custom "Contacts to display"
-     * filter has been set, then one of type {@link ContactListFilter#FILTER_TYPE_CUSTOM}.
-     */
-    public static ContactListFilter createContactsFilter(Context context) {
-        final int filterType =
-                ContactListFilterController.getInstance(context).isCustomFilterPersisted()
-                        ? ContactListFilter.FILTER_TYPE_CUSTOM
-                        : ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
-        return ContactListFilter.createFilterWithType(filterType);
-    }
-
-    /**
-     * Start editor intent; and if filter is an account filter, we pass account info to editor so
-     * as to create a contact in that account.
-     */
-    public static void startEditorIntent(Context context, Intent src, ContactListFilter filter) {
-        final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
-        intent.putExtras(src);
-
-        // If we are in account view, we pass the account explicitly in order to
-        // create contact in the account. This will prevent the default account dialog
-        // from being displayed.
-        if (!isAllContactsFilter(filter) && filter.accountName != null
-                && filter.accountType != null) {
-            final Account account = new Account(filter.accountName, filter.accountType);
-            intent.putExtra(Intents.Insert.EXTRA_ACCOUNT, account);
-            intent.putExtra(Intents.Insert.EXTRA_DATA_SET, filter.dataSet);
-        } else if (isDeviceContactsFilter(filter)) {
-            // It's OK to add this even though it's an implicit intent. If a different app
-            // receives the intent it should just ignore the flag.
-            intent.putExtra(ContactEditorActivity.EXTRA_SAVE_TO_DEVICE_FLAG, true);
-        }
-
-        try {
-            ImplicitIntentsUtil.startActivityInApp(context, intent);
-        } catch (ActivityNotFoundException ex) {
-            Toast.makeText(context, R.string.missing_app, Toast.LENGTH_SHORT).show();
-        }
-    }
-
-    public static boolean isAllContactsFilter(ContactListFilter filter) {
-        return filter != null && filter.isContactsFilterType();
-    }
-
-    public static boolean isDeviceContactsFilter(ContactListFilter filter) {
-        return filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS;
-    }
-
-    /**
-     * Returns action bar title for filter and returns default title "Contacts" if filter is empty.
-     */
-    public static String getActionBarTitleForFilter(Context context, ContactListFilter filter) {
-        if (filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS) {
-            return context.getString(R.string.account_phone);
-        } else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT &&
-                !TextUtils.isEmpty(filter.accountName)) {
-            return getActionBarTitleForAccount(context, filter);
-        }
-        return context.getString(R.string.contactsList);
-    }
-
-    private static String getActionBarTitleForAccount(Context context, ContactListFilter filter) {
-        final AccountDisplayInfoFactory factory =
-                AccountDisplayInfoFactory.forAllAccounts(context);
-        final AccountDisplayInfo account = factory.getAccountDisplayInfoFor(filter);
-        if (account.hasGoogleAccountType()) {
-            return context.getString(R.string.title_from_google);
-        }
-        return account.withFormattedName(context, R.string.title_from_other_accounts)
-                .getNameLabel().toString();
-    }
-}
diff --git a/src/com/android/contacts/common/util/AccountSelectionUtil.java b/src/com/android/contacts/common/util/AccountSelectionUtil.java
deleted file mode 100644
index 9fca64d..0000000
--- a/src/com/android/contacts/common/util/AccountSelectionUtil.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.util;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.net.Uri;
-import android.util.Log;
-import android.view.ContextThemeWrapper;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.contacts.common.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.vcard.ImportVCardActivity;
-
-import java.util.List;
-
-/**
- * Utility class for selecting an Account for importing contact(s)
- */
-public class AccountSelectionUtil {
-    // TODO: maybe useful for EditContactActivity.java...
-    private static final String LOG_TAG = "AccountSelectionUtil";
-
-    public static boolean mVCardShare = false;
-
-    public static Uri mPath;
-
-    public static class AccountSelectedListener
-            implements DialogInterface.OnClickListener {
-
-        final private Activity mActivity;
-        final private int mResId;
-        final private int mSubscriptionId;
-
-        final protected List<AccountWithDataSet> mAccountList;
-
-        public AccountSelectedListener(Activity activity, List<AccountWithDataSet> accountList,
-                int resId, int subscriptionId) {
-            if (accountList == null || accountList.size() == 0) {
-                Log.e(LOG_TAG, "The size of Account list is 0.");
-            }
-            mActivity = activity;
-            mAccountList = accountList;
-            mResId = resId;
-            mSubscriptionId = subscriptionId;
-        }
-
-        public AccountSelectedListener(Activity activity, List<AccountWithDataSet> accountList,
-                int resId) {
-            // Subscription id is only needed for importing from SIM card. We can safely ignore
-            // its value for SD card importing.
-            this(activity, accountList, resId, /* subscriptionId = */ -1);
-        }
-
-        public void onClick(DialogInterface dialog, int which) {
-            dialog.dismiss();
-            doImport(mActivity, mResId, mAccountList.get(which), mSubscriptionId);
-        }
-    }
-
-    public static Dialog getSelectAccountDialog(Activity activity, int resId) {
-        return getSelectAccountDialog(activity, resId, null, null);
-    }
-
-    public static Dialog getSelectAccountDialog(Activity activity, int resId,
-            DialogInterface.OnClickListener onClickListener) {
-        return getSelectAccountDialog(activity, resId, onClickListener, null);
-    }
-
-    /**
-     * When OnClickListener or OnCancelListener is null, uses a default listener.
-     * The default OnCancelListener just closes itself with {@link Dialog#dismiss()}.
-     */
-    public static Dialog getSelectAccountDialog(Activity activity, int resId,
-            DialogInterface.OnClickListener onClickListener,
-            DialogInterface.OnCancelListener onCancelListener) {
-        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(activity);
-        final List<AccountWithDataSet> writableAccountList = accountTypes.getAccounts(true);
-
-        Log.i(LOG_TAG, "The number of available accounts: " + writableAccountList.size());
-
-        // Assume accountList.size() > 1
-
-        // Wrap our context to inflate list items using correct theme
-        final Context dialogContext = new ContextThemeWrapper(
-                activity, android.R.style.Theme_Light);
-        final LayoutInflater dialogInflater = (LayoutInflater)dialogContext
-                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        final ArrayAdapter<AccountWithDataSet> accountAdapter =
-            new ArrayAdapter<AccountWithDataSet>(
-                    activity, R.layout.account_selector_list_item_condensed, writableAccountList) {
-            @Override
-            public View getView(int position, View convertView, ViewGroup parent) {
-                if (convertView == null) {
-                    convertView = dialogInflater.inflate(
-                            R.layout.account_selector_list_item_condensed,
-                            parent, false);
-                }
-
-                final TextView text1 = (TextView) convertView.findViewById(android.R.id.text1);
-                final TextView text2 = (TextView) convertView.findViewById(android.R.id.text2);
-                final ImageView icon = (ImageView) convertView.findViewById(android.R.id.icon);
-
-                final AccountWithDataSet account = this.getItem(position);
-                final AccountType accountType = accountTypes.getAccountType(
-                        account.type, account.dataSet);
-                final Context context = getContext();
-
-                text1.setText(accountType.getDisplayLabel(context));
-                text2.setText(account.name);
-                icon.setImageDrawable(accountType.getDisplayIcon(getContext()));
-
-                return convertView;
-            }
-        };
-
-        if (onClickListener == null) {
-            AccountSelectedListener accountSelectedListener =
-                new AccountSelectedListener(activity, writableAccountList, resId);
-            onClickListener = accountSelectedListener;
-        }
-        if (onCancelListener == null) {
-            onCancelListener = new DialogInterface.OnCancelListener() {
-                public void onCancel(DialogInterface dialog) {
-                    dialog.dismiss();
-                }
-            };
-        }
-        final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
-        final TextView title = (TextView) View.inflate(activity, R.layout.dialog_title, null);
-        title.setText(R.string.dialog_new_contact_account);
-        builder.setCustomTitle(title);
-        builder.setSingleChoiceItems(accountAdapter, 0, onClickListener);
-        builder.setOnCancelListener(onCancelListener);
-        final AlertDialog result = builder.create();
-        return result;
-    }
-
-    public static void doImport(Activity activity, int resId, AccountWithDataSet account,
-            int subscriptionId) {
-        if (resId == R.string.import_from_sim) {
-            doImportFromSim(activity, account, subscriptionId);
-        } else if (resId == R.string.import_from_vcf_file) {
-            doImportFromVcfFile(activity, account);
-        }
-    }
-
-    public static void doImportFromSim(Context context, AccountWithDataSet account,
-            int subscriptionId) {
-        Intent importIntent = new Intent(Intent.ACTION_VIEW);
-        importIntent.setType("vnd.android.cursor.item/sim-contact");
-        if (account != null) {
-            importIntent.putExtra("account_name", account.name);
-            importIntent.putExtra("account_type", account.type);
-            importIntent.putExtra("data_set", account.dataSet);
-        }
-        importIntent.putExtra("subscription_id", (Integer) subscriptionId);
-        importIntent.setClassName("com.android.phone", "com.android.phone.SimContacts");
-        context.startActivity(importIntent);
-    }
-
-    public static void doImportFromVcfFile(Activity activity, AccountWithDataSet account) {
-        Intent importIntent = new Intent(activity, ImportVCardActivity.class);
-        if (account != null) {
-            importIntent.putExtra("account_name", account.name);
-            importIntent.putExtra("account_type", account.type);
-            importIntent.putExtra("data_set", account.dataSet);
-        }
-
-        if (mVCardShare) {
-            importIntent.setAction(Intent.ACTION_VIEW);
-            importIntent.setData(mPath);
-        }
-        mVCardShare = false;
-        mPath = null;
-        activity.startActivityForResult(importIntent, 0);
-    }
-}
diff --git a/src/com/android/contacts/common/util/AccountsListAdapter.java b/src/com/android/contacts/common/util/AccountsListAdapter.java
deleted file mode 100644
index a437929..0000000
--- a/src/com/android/contacts/common/util/AccountsListAdapter.java
+++ /dev/null
@@ -1,128 +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.common.util;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.ImageView;
-import android.widget.TextView;
-
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * List-Adapter for Account selection
- */
-public final class AccountsListAdapter extends BaseAdapter {
-    private final LayoutInflater mInflater;
-    private final List<AccountDisplayInfo> mAccountDisplayInfoList;
-    private final Context mContext;
-    private int mCustomLayout = -1;
-
-    /**
-     * Filters that affect the list of accounts that is displayed by this adapter.
-     */
-    public enum AccountListFilter {
-        ALL_ACCOUNTS,                   // All read-only and writable accounts
-        ACCOUNTS_CONTACT_WRITABLE,      // Only where the account type is contact writable
-        ACCOUNTS_GROUP_WRITABLE         // Only accounts where the account type is group writable
-    }
-
-    public AccountsListAdapter(Context context, AccountListFilter accountListFilter) {
-        this(context, accountListFilter, null);
-    }
-
-    /**
-     * @param currentAccount the Account currently selected by the user, which should come
-     * first in the list. Can be null.
-     */
-    public AccountsListAdapter(Context context, AccountListFilter accountListFilter,
-            AccountWithDataSet currentAccount) {
-        mContext = context;
-        final List<AccountWithDataSet> accounts = getAccounts(accountListFilter);
-        if (currentAccount != null
-                && !accounts.isEmpty()
-                && !accounts.get(0).equals(currentAccount)
-                && accounts.remove(currentAccount)) {
-            accounts.add(0, currentAccount);
-        }
-
-        final AccountDisplayInfoFactory factory = new AccountDisplayInfoFactory(context,
-                accounts);
-        mAccountDisplayInfoList = new ArrayList<>(accounts.size());
-        for (AccountWithDataSet account : accounts) {
-            mAccountDisplayInfoList.add(factory.getAccountDisplayInfo(account));
-        }
-        mInflater = LayoutInflater.from(context);
-    }
-
-    private List<AccountWithDataSet> getAccounts(AccountListFilter accountListFilter) {
-        final AccountTypeManager typeManager = AccountTypeManager.getInstance(mContext);
-        if (accountListFilter == AccountListFilter.ACCOUNTS_GROUP_WRITABLE) {
-            return new ArrayList<AccountWithDataSet>(typeManager.getGroupWritableAccounts());
-        }
-        return new ArrayList<AccountWithDataSet>(typeManager.getAccounts(
-                accountListFilter == AccountListFilter.ACCOUNTS_CONTACT_WRITABLE));
-    }
-
-    public void setCustomLayout(int customLayout) {
-        mCustomLayout = customLayout;
-    }
-
-    @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
-        final View resultView = convertView != null ? convertView :
-                mInflater.inflate(mCustomLayout > 0 ? mCustomLayout :
-                        R.layout.account_selector_list_item_condensed, parent, false);
-
-        final TextView text1 = (TextView) resultView.findViewById(android.R.id.text1);
-        final TextView text2 = (TextView) resultView.findViewById(android.R.id.text2);
-        final ImageView icon = (ImageView) resultView.findViewById(android.R.id.icon);
-
-        text1.setText(mAccountDisplayInfoList.get(position).getTypeLabel());
-        text2.setText(mAccountDisplayInfoList.get(position).getNameLabel());
-
-        icon.setImageDrawable(mAccountDisplayInfoList.get(position).getIcon());
-
-        return resultView;
-    }
-
-    @Override
-    public int getCount() {
-        return mAccountDisplayInfoList.size();
-    }
-
-    @Override
-    public AccountWithDataSet getItem(int position) {
-        return mAccountDisplayInfoList.get(position).getSource();
-    }
-
-    @Override
-    public long getItemId(int position) {
-        return position;
-    }
-}
-
diff --git a/src/com/android/contacts/common/util/BitmapUtil.java b/src/com/android/contacts/common/util/BitmapUtil.java
deleted file mode 100644
index 5cd856e..0000000
--- a/src/com/android/contacts/common/util/BitmapUtil.java
+++ /dev/null
@@ -1,164 +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.common.util;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.PorterDuff.Mode;
-import android.graphics.PorterDuffXfermode;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.BitmapDrawable;
-
-/**
- * Provides static functions to decode bitmaps at the optimal size
- */
-public class BitmapUtil {
-    private BitmapUtil() {}
-
-    /**
-     * Returns Width or Height of the picture, depending on which size is smaller. Doesn't actually
-     * decode the picture, so it is pretty efficient to run.
-     */
-    public static int getSmallerExtentFromBytes(byte[] bytes) {
-        final BitmapFactory.Options options = new BitmapFactory.Options();
-
-        // don't actually decode the picture, just return its bounds
-        options.inJustDecodeBounds = true;
-        BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
-
-        // test what the best sample size is
-        return Math.min(options.outWidth, options.outHeight);
-    }
-
-    /**
-     * Finds the optimal sampleSize for loading the picture
-     * @param originalSmallerExtent Width or height of the picture, whichever is smaller
-     * @param targetExtent Width or height of the target view, whichever is bigger.
-     *
-     * If either one of the parameters is 0 or smaller, no sampling is applied
-     */
-    public static int findOptimalSampleSize(int originalSmallerExtent, int targetExtent) {
-        // If we don't know sizes, we can't do sampling.
-        if (targetExtent < 1) return 1;
-        if (originalSmallerExtent < 1) return 1;
-
-        // Test what the best sample size is. To do that, we find the sample size that gives us
-        // the best trade-off between resulting image size and memory requirement. We allow
-        // the down-sampled image to be 20% smaller than the target size. That way we can get around
-        // unfortunate cases where e.g. a 720 picture is requested for 362 and not down-sampled at
-        // all. Why 20%? Why not. Prove me wrong.
-        int extent = originalSmallerExtent;
-        int sampleSize = 1;
-        while ((extent >> 1) >= targetExtent * 0.8f) {
-            sampleSize <<= 1;
-            extent >>= 1;
-        }
-
-        return sampleSize;
-    }
-
-    /**
-     * Decodes the bitmap with the given sample size
-     */
-    public static Bitmap decodeBitmapFromBytes(byte[] bytes, int sampleSize) {
-        final BitmapFactory.Options options;
-        if (sampleSize <= 1) {
-            options = null;
-        } else {
-            options = new BitmapFactory.Options();
-            options.inSampleSize = sampleSize;
-        }
-        return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
-    }
-
-    /**
-     * Retrieves a copy of the specified drawable resource, rotated by a specified angle.
-     *
-     * @param resources The current resources.
-     * @param resourceId The resource ID of the drawable to rotate.
-     * @param angle The angle of rotation.
-     * @return Rotated drawable.
-     */
-    public static Drawable getRotatedDrawable(
-            android.content.res.Resources resources, int resourceId, float angle) {
-
-        // Get the original drawable and make a copy which will be rotated.
-        Bitmap original = BitmapFactory.decodeResource(resources, resourceId);
-        Bitmap rotated = Bitmap.createBitmap(
-                original.getWidth(), original.getHeight(), Bitmap.Config.ARGB_8888);
-
-        // Perform the rotation.
-        Canvas tempCanvas = new Canvas(rotated);
-        tempCanvas.rotate(angle, original.getWidth()/2, original.getHeight()/2);
-        tempCanvas.drawBitmap(original, 0, 0, null);
-
-        return new BitmapDrawable(resources,rotated);
-    }
-
-    /**
-     * Given an input bitmap, scales it to the given width/height and makes it round.
-     *
-     * @param input {@link Bitmap} to scale and crop
-     * @param targetWidth desired output width
-     * @param targetHeight desired output height
-     * @return output bitmap scaled to the target width/height and cropped to an oval. The
-     *         cropping algorithm will try to fit as much of the input into the output as possible,
-     *         while preserving the target width/height ratio.
-     */
-    public static Bitmap getRoundedBitmap(Bitmap input, int targetWidth, int targetHeight) {
-        if (input == null) {
-            return null;
-        }
-        final Bitmap.Config inputConfig = input.getConfig();
-        final Bitmap result = Bitmap.createBitmap(targetWidth, targetHeight,
-                inputConfig != null ? inputConfig : Bitmap.Config.ARGB_8888);
-        final Canvas canvas = new Canvas(result);
-        final Paint paint = new Paint();
-        canvas.drawARGB(0, 0, 0, 0);
-        paint.setAntiAlias(true);
-        final RectF dst = new RectF(0, 0, targetWidth, targetHeight);
-        canvas.drawOval(dst, paint);
-
-        // Specifies that only pixels present in the destination (i.e. the drawn oval) should
-        // be overwritten with pixels from the input bitmap.
-        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
-
-        final int inputWidth = input.getWidth();
-        final int inputHeight = input.getHeight();
-
-        // Choose the largest scale factor that will fit inside the dimensions of the
-        // input bitmap.
-        final float scaleBy = Math.min((float) inputWidth / targetWidth,
-            (float) inputHeight / targetHeight);
-
-        final int xCropAmountHalved = (int) (scaleBy * targetWidth / 2);
-        final int yCropAmountHalved = (int) (scaleBy * targetHeight / 2);
-
-        final Rect src = new Rect(
-                inputWidth / 2 - xCropAmountHalved,
-                inputHeight / 2 - yCropAmountHalved,
-                inputWidth / 2 + xCropAmountHalved,
-                inputHeight / 2 + yCropAmountHalved);
-
-        canvas.drawBitmap(input, src, dst, paint);
-        return result;
-    }
-}
diff --git a/src/com/android/contacts/common/util/CommonDateUtils.java b/src/com/android/contacts/common/util/CommonDateUtils.java
deleted file mode 100644
index bba910a..0000000
--- a/src/com/android/contacts/common/util/CommonDateUtils.java
+++ /dev/null
@@ -1,41 +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.common.util;
-
-import java.text.SimpleDateFormat;
-import java.util.Locale;
-
-/**
- * Common date utilities.
- */
-public class CommonDateUtils {
-
-    // All the SimpleDateFormats in this class use the UTC timezone
-    public static final SimpleDateFormat NO_YEAR_DATE_FORMAT =
-            new SimpleDateFormat("--MM-dd", Locale.US);
-    public static final SimpleDateFormat FULL_DATE_FORMAT =
-            new SimpleDateFormat("yyyy-MM-dd", Locale.US);
-    public static final SimpleDateFormat DATE_AND_TIME_FORMAT =
-            new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
-    public static final SimpleDateFormat NO_YEAR_DATE_AND_TIME_FORMAT =
-            new SimpleDateFormat("--MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
-
-    /**
-     * Exchange requires 8:00 for birthdays
-     */
-    public final static int DEFAULT_HOUR = 8;
-}
diff --git a/src/com/android/contacts/common/util/Constants.java b/src/com/android/contacts/common/util/Constants.java
deleted file mode 100644
index c0d6755..0000000
--- a/src/com/android/contacts/common/util/Constants.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.util;
-
-public class Constants {
-
-    /**
-     * Log tag for performance measurement.
-     * To enable: adb shell setprop log.tag.ContactsPerf VERBOSE
-     */
-    public static final String PERFORMANCE_TAG = "ContactsPerf";
-
-    // Used for lookup URI that contains an encoded JSON string.
-    public static final String LOOKUP_URI_ENCODED = "encoded";
-}
diff --git a/src/com/android/contacts/common/util/ContactDisplayUtils.java b/src/com/android/contacts/common/util/ContactDisplayUtils.java
deleted file mode 100644
index 0a50748..0000000
--- a/src/com/android/contacts/common/util/ContactDisplayUtils.java
+++ /dev/null
@@ -1,297 +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.common.util;
-
-import static android.provider.ContactsContract.CommonDataKinds.Phone;
-
-import com.google.common.base.Preconditions;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.support.annotation.Nullable;
-import android.text.Spannable;
-import android.text.SpannableString;
-import android.text.TextUtils;
-import android.text.style.TtsSpan;
-import android.util.Log;
-import android.util.Patterns;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.preference.ContactsPreferences;
-
-/**
- * Methods for handling various contact data labels.
- */
-public class ContactDisplayUtils {
-
-    private static final String TAG = ContactDisplayUtils.class.getSimpleName();
-
-    public static final int INTERACTION_CALL = 1;
-    public static final int INTERACTION_SMS = 2;
-
-    /**
-     * Checks if the given data type is a custom type.
-     *
-     * @param type Phone data type.
-     * @return {@literal true} if the type is custom.  {@literal false} if not.
-     */
-    public static boolean isCustomPhoneType(Integer type) {
-        return type == Phone.TYPE_CUSTOM || type == Phone.TYPE_ASSISTANT;
-    }
-
-    /**
-     * Gets a display label for a given phone type.
-     *
-     * @param type The type of number.
-     * @param customLabel A custom label to use if the phone is determined to be of custom type
-     * determined by {@link #isCustomPhoneType(Integer))}
-     * @param interactionType whether this is a call or sms.  Either {@link #INTERACTION_CALL} or
-     * {@link #INTERACTION_SMS}.
-     * @param context The application context.
-     * @return An appropriate string label
-     */
-    public static CharSequence getLabelForCallOrSms(Integer type, CharSequence customLabel,
-            int interactionType, Context context) {
-        Preconditions.checkNotNull(context);
-
-        if (isCustomPhoneType(type)) {
-            return (customLabel == null) ? "" : customLabel;
-        } else {
-            int resId;
-            if (interactionType == INTERACTION_SMS) {
-                resId = getSmsLabelResourceId(type);
-            } else {
-                resId = getPhoneLabelResourceId(type);
-                if (interactionType != INTERACTION_CALL) {
-                    Log.e(TAG, "Un-recognized interaction type: " + interactionType +
-                            ". Defaulting to ContactDisplayUtils.INTERACTION_CALL.");
-                }
-            }
-
-            return context.getResources().getText(resId);
-        }
-    }
-
-    /**
-     * Find a label for calling.
-     *
-     * @param type The type of number.
-     * @return An appropriate string label.
-     */
-    public static int getPhoneLabelResourceId(Integer type) {
-        if (type == null) return R.string.call_other;
-        switch (type) {
-            case Phone.TYPE_HOME:
-                return R.string.call_home;
-            case Phone.TYPE_MOBILE:
-                return R.string.call_mobile;
-            case Phone.TYPE_WORK:
-                return R.string.call_work;
-            case Phone.TYPE_FAX_WORK:
-                return R.string.call_fax_work;
-            case Phone.TYPE_FAX_HOME:
-                return R.string.call_fax_home;
-            case Phone.TYPE_PAGER:
-                return R.string.call_pager;
-            case Phone.TYPE_OTHER:
-                return R.string.call_other;
-            case Phone.TYPE_CALLBACK:
-                return R.string.call_callback;
-            case Phone.TYPE_CAR:
-                return R.string.call_car;
-            case Phone.TYPE_COMPANY_MAIN:
-                return R.string.call_company_main;
-            case Phone.TYPE_ISDN:
-                return R.string.call_isdn;
-            case Phone.TYPE_MAIN:
-                return R.string.call_main;
-            case Phone.TYPE_OTHER_FAX:
-                return R.string.call_other_fax;
-            case Phone.TYPE_RADIO:
-                return R.string.call_radio;
-            case Phone.TYPE_TELEX:
-                return R.string.call_telex;
-            case Phone.TYPE_TTY_TDD:
-                return R.string.call_tty_tdd;
-            case Phone.TYPE_WORK_MOBILE:
-                return R.string.call_work_mobile;
-            case Phone.TYPE_WORK_PAGER:
-                return R.string.call_work_pager;
-            case Phone.TYPE_ASSISTANT:
-                return R.string.call_assistant;
-            case Phone.TYPE_MMS:
-                return R.string.call_mms;
-            default:
-                return R.string.call_custom;
-        }
-
-    }
-
-    /**
-     * Find a label for sending an sms.
-     *
-     * @param type The type of number.
-     * @return An appropriate string label.
-     */
-    public static int getSmsLabelResourceId(Integer type) {
-        if (type == null) return R.string.sms_other;
-        switch (type) {
-            case Phone.TYPE_HOME:
-                return R.string.sms_home;
-            case Phone.TYPE_MOBILE:
-                return R.string.sms_mobile;
-            case Phone.TYPE_WORK:
-                return R.string.sms_work;
-            case Phone.TYPE_FAX_WORK:
-                return R.string.sms_fax_work;
-            case Phone.TYPE_FAX_HOME:
-                return R.string.sms_fax_home;
-            case Phone.TYPE_PAGER:
-                return R.string.sms_pager;
-            case Phone.TYPE_OTHER:
-                return R.string.sms_other;
-            case Phone.TYPE_CALLBACK:
-                return R.string.sms_callback;
-            case Phone.TYPE_CAR:
-                return R.string.sms_car;
-            case Phone.TYPE_COMPANY_MAIN:
-                return R.string.sms_company_main;
-            case Phone.TYPE_ISDN:
-                return R.string.sms_isdn;
-            case Phone.TYPE_MAIN:
-                return R.string.sms_main;
-            case Phone.TYPE_OTHER_FAX:
-                return R.string.sms_other_fax;
-            case Phone.TYPE_RADIO:
-                return R.string.sms_radio;
-            case Phone.TYPE_TELEX:
-                return R.string.sms_telex;
-            case Phone.TYPE_TTY_TDD:
-                return R.string.sms_tty_tdd;
-            case Phone.TYPE_WORK_MOBILE:
-                return R.string.sms_work_mobile;
-            case Phone.TYPE_WORK_PAGER:
-                return R.string.sms_work_pager;
-            case Phone.TYPE_ASSISTANT:
-                return R.string.sms_assistant;
-            case Phone.TYPE_MMS:
-                return R.string.sms_mms;
-            default:
-                return R.string.sms_custom;
-        }
-    }
-
-    /**
-     * Whether the given text could be a phone number.
-     *
-     * Note this will miss many things that are legitimate phone numbers, for example,
-     * phone numbers with letters.
-     */
-    public static boolean isPossiblePhoneNumber(CharSequence text) {
-        return text == null ? false : Patterns.PHONE.matcher(text.toString()).matches();
-    }
-
-    /**
-     * Returns a Spannable for the given message with a telephone {@link TtsSpan} set for
-     * the given phone number text wherever it is found within the message.
-     */
-    public static Spannable getTelephoneTtsSpannable(String message, String phoneNumber) {
-        if (message == null) {
-            return null;
-        }
-        final Spannable spannable = new SpannableString(message);
-        int start = phoneNumber == null ? -1 : message.indexOf(phoneNumber);
-        while (start >= 0) {
-            final int end = start + phoneNumber.length();
-            final TtsSpan ttsSpan = PhoneNumberUtilsCompat.createTtsSpan(phoneNumber);
-            spannable.setSpan(ttsSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);             // this is consistenly done in a misleading way..
-            start = message.indexOf(phoneNumber, end);
-        }
-        return spannable;
-    }
-
-    /**
-     * Retrieves a string from a string template that takes 1 phone number as argument,
-     * span the number with a telephone {@link TtsSpan}, and return the spanned string.
-     *
-     * @param resources to retrieve the string from
-     * @param stringId ID of the string
-     * @param number to pass in the template
-     * @return CharSequence with the phone number wrapped in a TtsSpan
-     */
-    public static CharSequence getTtsSpannedPhoneNumber(Resources resources,
-            int stringId, String number){
-        String msg = resources.getString(stringId, number);
-        return ContactDisplayUtils.getTelephoneTtsSpannable(msg, number);
-    }
-
-    /**
-     * Returns either namePrimary or nameAlternative based on the {@link ContactsPreferences}.
-     * Defaults to the name that is non-null.
-     *
-     * @param namePrimary the primary name.
-     * @param nameAlternative the alternative name.
-     * @param contactsPreferences the ContactsPreferences used to determine the preferred
-     * display name.
-     * @return namePrimary or nameAlternative depending on the value of displayOrderPreference.
-     */
-    public static String getPreferredDisplayName(String namePrimary, String nameAlternative,
-            @Nullable ContactsPreferences contactsPreferences) {
-        if (contactsPreferences == null) {
-            return namePrimary != null ? namePrimary : nameAlternative;
-        }
-        if (contactsPreferences.getDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
-            return namePrimary;
-        }
-
-        if (contactsPreferences.getDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE
-                && !TextUtils.isEmpty(nameAlternative)) {
-            return nameAlternative;
-        }
-
-        return namePrimary;
-    }
-
-    /**
-     * Returns either namePrimary or nameAlternative based on the {@link ContactsPreferences}.
-     * Defaults to the name that is non-null.
-     *
-     * @param namePrimary the primary name.
-     * @param nameAlternative the alternative name.
-     * @param contactsPreferences the ContactsPreferences used to determine the preferred sort
-     * order.
-     * @return namePrimary or nameAlternative depending on the value of displayOrderPreference.
-     */
-    public static String getPreferredSortName(String namePrimary, String nameAlternative,
-            @Nullable ContactsPreferences contactsPreferences) {
-        if (contactsPreferences == null) {
-            return namePrimary != null ? namePrimary : nameAlternative;
-        }
-
-        if (contactsPreferences.getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
-            return namePrimary;
-        }
-
-        if (contactsPreferences.getSortOrder() == ContactsPreferences.SORT_ORDER_ALTERNATIVE &&
-                !TextUtils.isEmpty(nameAlternative)) {
-            return nameAlternative;
-        }
-
-        return namePrimary;
-    }
-}
diff --git a/src/com/android/contacts/common/util/ContactLoaderUtils.java b/src/com/android/contacts/common/util/ContactLoaderUtils.java
deleted file mode 100644
index 0ec8887..0000000
--- a/src/com/android/contacts/common/util/ContactLoaderUtils.java
+++ /dev/null
@@ -1,78 +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.common.util;
-
-import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.net.Uri;
-import android.provider.Contacts;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.RawContacts;
-
-/**
- * Utility methods for the {@link ContactLoader}.
- */
-public final class ContactLoaderUtils {
-
-    /** Static helper, not instantiable. */
-    private ContactLoaderUtils() {}
-
-    /**
-     * Transforms the given Uri and returns a Lookup-Uri that represents the contact.
-     * For legacy contacts, a raw-contact lookup is performed. An {@link IllegalArgumentException}
-     * can be thrown if the URI is null or the authority is not recognized.
-     *
-     * Do not call from the UI thread.
-     */
-    @SuppressWarnings("deprecation")
-    public static Uri ensureIsContactUri(final ContentResolver resolver, final Uri uri)
-            throws IllegalArgumentException {
-        if (uri == null) throw new IllegalArgumentException("uri must not be null");
-
-        final String authority = uri.getAuthority();
-
-        // Current Style Uri?
-        if (ContactsContract.AUTHORITY.equals(authority)) {
-            final String type = resolver.getType(uri);
-            // Contact-Uri? Good, return it
-            if (ContactsContract.Contacts.CONTENT_ITEM_TYPE.equals(type)) {
-                return uri;
-            }
-
-            // RawContact-Uri? Transform it to ContactUri
-            if (RawContacts.CONTENT_ITEM_TYPE.equals(type)) {
-                final long rawContactId = ContentUris.parseId(uri);
-                return RawContacts.getContactLookupUri(resolver,
-                        ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
-            }
-
-            // Anything else? We don't know what this is
-            throw new IllegalArgumentException("uri format is unknown");
-        }
-
-        // Legacy Style? Convert to RawContact
-        final String OBSOLETE_AUTHORITY = Contacts.AUTHORITY;
-        if (OBSOLETE_AUTHORITY.equals(authority)) {
-            // Legacy Format. Convert to RawContact-Uri and then lookup the contact
-            final long rawContactId = ContentUris.parseId(uri);
-            return RawContacts.getContactLookupUri(resolver,
-                    ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
-        }
-
-        throw new IllegalArgumentException("uri authority is unknown");
-    }
-}
diff --git a/src/com/android/contacts/common/util/DataStatus.java b/src/com/android/contacts/common/util/DataStatus.java
deleted file mode 100644
index 76f11b6..0000000
--- a/src/com/android/contacts/common/util/DataStatus.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.util;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.database.Cursor;
-import android.graphics.drawable.Drawable;
-import android.provider.ContactsContract.Data;
-import android.text.TextUtils;
-import android.text.format.DateUtils;
-
-import com.android.contacts.common.R;
-
-/**
- * Storage for a social status update. Holds a single update, but can use
- * {@link #possibleUpdate(Cursor)} to consider updating when a better status
- * exists. Statuses with timestamps, or with newer timestamps win.
- */
-public class DataStatus {
-    private int mPresence = -1;
-    private String mStatus = null;
-    private long mTimestamp = -1;
-
-    private String mResPackage = null;
-    private int mIconRes = -1;
-    private int mLabelRes = -1;
-
-    public DataStatus() {
-    }
-
-    public DataStatus(Cursor cursor) {
-        // When creating from cursor row, fill normally
-        fromCursor(cursor);
-    }
-
-    /**
-     * Attempt updating this {@link DataStatus} based on values at the
-     * current row of the given {@link Cursor}.
-     */
-    public void possibleUpdate(Cursor cursor) {
-        final boolean hasStatus = !isNull(cursor, Data.STATUS);
-        final boolean hasTimestamp = !isNull(cursor, Data.STATUS_TIMESTAMP);
-
-        // Bail early when not valid status, or when previous status was
-        // found and we can't compare this one.
-        if (!hasStatus) return;
-        if (isValid() && !hasTimestamp) return;
-
-        if (hasTimestamp) {
-            // Compare timestamps and bail if older status
-            final long newTimestamp = getLong(cursor, Data.STATUS_TIMESTAMP, -1);
-            if (newTimestamp < mTimestamp) return;
-
-            mTimestamp = newTimestamp;
-        }
-
-        // Fill in remaining details from cursor
-        fromCursor(cursor);
-    }
-
-    private void fromCursor(Cursor cursor) {
-        mPresence = getInt(cursor, Data.PRESENCE, -1);
-        mStatus = getString(cursor, Data.STATUS);
-        mTimestamp = getLong(cursor, Data.STATUS_TIMESTAMP, -1);
-        mResPackage = getString(cursor, Data.STATUS_RES_PACKAGE);
-        mIconRes = getInt(cursor, Data.STATUS_ICON, -1);
-        mLabelRes = getInt(cursor, Data.STATUS_LABEL, -1);
-    }
-
-    public boolean isValid() {
-        return !TextUtils.isEmpty(mStatus);
-    }
-
-    public int getPresence() {
-        return mPresence;
-    }
-
-    public CharSequence getStatus() {
-        return mStatus;
-    }
-
-    public long getTimestamp() {
-        return mTimestamp;
-    }
-
-    /**
-     * Build any timestamp and label into a single string.
-     */
-    public CharSequence getTimestampLabel(Context context) {
-        final PackageManager pm = context.getPackageManager();
-
-        // Use local package for resources when none requested
-        if (mResPackage == null) mResPackage = context.getPackageName();
-
-        final boolean validTimestamp = mTimestamp > 0;
-        final boolean validLabel = mResPackage != null && mLabelRes != -1;
-
-        final CharSequence timeClause = validTimestamp ? DateUtils.getRelativeTimeSpanString(
-                mTimestamp, System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS,
-                DateUtils.FORMAT_ABBREV_RELATIVE) : null;
-        final CharSequence labelClause = validLabel ? pm.getText(mResPackage, mLabelRes,
-                null) : null;
-
-        if (validTimestamp && validLabel) {
-            return context.getString(
-                    R.string.contact_status_update_attribution_with_date,
-                    timeClause, labelClause);
-        } else if (validLabel) {
-            return context.getString(
-                    R.string.contact_status_update_attribution,
-                    labelClause);
-        } else if (validTimestamp) {
-            return timeClause;
-        } else {
-            return null;
-        }
-    }
-
-    public Drawable getIcon(Context context) {
-        final PackageManager pm = context.getPackageManager();
-
-        // Use local package for resources when none requested
-        if (mResPackage == null) mResPackage = context.getPackageName();
-
-        final boolean validIcon = mResPackage != null && mIconRes != -1;
-        return validIcon ? pm.getDrawable(mResPackage, mIconRes, null) : null;
-    }
-
-    private static String getString(Cursor cursor, String columnName) {
-        return cursor.getString(cursor.getColumnIndex(columnName));
-    }
-
-    private static int getInt(Cursor cursor, String columnName) {
-        return cursor.getInt(cursor.getColumnIndex(columnName));
-    }
-
-    private static int getInt(Cursor cursor, String columnName, int missingValue) {
-        final int columnIndex = cursor.getColumnIndex(columnName);
-        return cursor.isNull(columnIndex) ? missingValue : cursor.getInt(columnIndex);
-    }
-
-    private static long getLong(Cursor cursor, String columnName, long missingValue) {
-        final int columnIndex = cursor.getColumnIndex(columnName);
-        return cursor.isNull(columnIndex) ? missingValue : cursor.getLong(columnIndex);
-    }
-
-    private static boolean isNull(Cursor cursor, String columnName) {
-        return cursor.isNull(cursor.getColumnIndex(columnName));
-    }
-}
diff --git a/src/com/android/contacts/common/util/DateUtils.java b/src/com/android/contacts/common/util/DateUtils.java
deleted file mode 100644
index 097230c..0000000
--- a/src/com/android/contacts/common/util/DateUtils.java
+++ /dev/null
@@ -1,270 +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.common.util;
-
-import android.content.Context;
-import android.text.format.DateFormat;
-
-import java.text.ParsePosition;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.Locale;
-import java.util.TimeZone;
-
-/**
- * Utility methods for processing dates.
- */
-public class DateUtils {
-    public static final TimeZone UTC_TIMEZONE = TimeZone.getTimeZone("UTC");
-
-    /**
-     * When parsing a date without a year, the system assumes 1970, which wasn't a leap-year.
-     * Let's add a one-off hack for that day of the year
-     */
-    public static final String NO_YEAR_DATE_FEB29TH = "--02-29";
-
-    // Variations of ISO 8601 date format.  Do not change the order - it does affect the
-    // result in ambiguous cases.
-    private static final SimpleDateFormat[] DATE_FORMATS = {
-        CommonDateUtils.FULL_DATE_FORMAT,
-        CommonDateUtils.DATE_AND_TIME_FORMAT,
-        new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'", Locale.US),
-        new SimpleDateFormat("yyyyMMdd", Locale.US),
-        new SimpleDateFormat("yyyyMMdd'T'HHmmssSSS'Z'", Locale.US),
-        new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'", Locale.US),
-        new SimpleDateFormat("yyyyMMdd'T'HHmm'Z'", Locale.US),
-    };
-
-    static {
-        for (SimpleDateFormat format : DATE_FORMATS) {
-            format.setLenient(true);
-            format.setTimeZone(UTC_TIMEZONE);
-        }
-        CommonDateUtils.NO_YEAR_DATE_FORMAT.setTimeZone(UTC_TIMEZONE);
-    }
-
-    /**
-     * Parses the supplied string to see if it looks like a date.
-     *
-     * @param string The string representation of the provided date
-     * @param mustContainYear If true, the string is parsed as a date containing a year. If false,
-     * the string is parsed into a valid date even if the year field is missing.
-     * @return A Calendar object corresponding to the date if the string is successfully parsed.
-     * If not, null is returned.
-     */
-    public static Calendar parseDate(String string, boolean mustContainYear) {
-        ParsePosition parsePosition = new ParsePosition(0);
-        Date date;
-        if (!mustContainYear) {
-            final boolean noYearParsed;
-            // Unfortunately, we can't parse Feb 29th correctly, so let's handle this day seperately
-            if (NO_YEAR_DATE_FEB29TH.equals(string)) {
-                return getUtcDate(0, Calendar.FEBRUARY, 29);
-            } else {
-                synchronized (CommonDateUtils.NO_YEAR_DATE_FORMAT) {
-                    date = CommonDateUtils.NO_YEAR_DATE_FORMAT.parse(string, parsePosition);
-                }
-                noYearParsed = parsePosition.getIndex() == string.length();
-            }
-
-            if (noYearParsed) {
-                return getUtcDate(date, true);
-            }
-        }
-        for (int i = 0; i < DATE_FORMATS.length; i++) {
-            SimpleDateFormat f = DATE_FORMATS[i];
-            synchronized (f) {
-                parsePosition.setIndex(0);
-                date = f.parse(string, parsePosition);
-                if (parsePosition.getIndex() == string.length()) {
-                    return getUtcDate(date, false);
-                }
-            }
-        }
-        return null;
-    }
-
-    private static final Calendar getUtcDate(Date date, boolean noYear) {
-        final Calendar calendar = Calendar.getInstance(UTC_TIMEZONE, Locale.US);
-        calendar.setTime(date);
-        if (noYear) {
-            calendar.set(Calendar.YEAR, 0);
-        }
-        return calendar;
-    }
-
-    private static final Calendar getUtcDate(int year, int month, int dayOfMonth) {
-        final Calendar calendar = Calendar.getInstance(UTC_TIMEZONE, Locale.US);
-        calendar.clear();
-        calendar.set(Calendar.YEAR, year);
-        calendar.set(Calendar.MONTH, month);
-        calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
-        return calendar;
-    }
-
-    public static boolean isYearSet(Calendar cal) {
-        // use the Calendar.YEAR field to track whether or not the year is set instead of
-        // Calendar.isSet() because doing Calendar.get() causes Calendar.isSet() to become
-        // true irregardless of what the previous value was
-        return cal.get(Calendar.YEAR) > 1;
-    }
-
-    /**
-     * Same as {@link #formatDate(Context context, String string, boolean longForm)}, with
-     * longForm set to {@code true} by default.
-     *
-     * @param context Valid context
-     * @param string String representation of a date to parse
-     * @return Returns the same date in a cleaned up format. If the supplied string does not look
-     * like a date, return it unchanged.
-     */
-
-    public static String formatDate(Context context, String string) {
-        return formatDate(context, string, true);
-    }
-
-    /**
-     * Parses the supplied string to see if it looks like a date.
-     *
-     * @param context Valid context
-     * @param string String representation of a date to parse
-     * @param longForm If true, return the date formatted into its long string representation.
-     * If false, return the date formatted using its short form representation (i.e. 12/11/2012)
-     * @return Returns the same date in a cleaned up format. If the supplied string does not look
-     * like a date, return it unchanged.
-     */
-    public static String formatDate(Context context, String string, boolean longForm) {
-        if (string == null) {
-            return null;
-        }
-
-        string = string.trim();
-        if (string.length() == 0) {
-            return string;
-        }
-        final Calendar cal = parseDate(string, false);
-
-        // we weren't able to parse the string successfully so just return it unchanged
-        if (cal == null) {
-            return string;
-        }
-
-        final boolean isYearSet = isYearSet(cal);
-        final java.text.DateFormat outFormat;
-        if (!isYearSet) {
-            outFormat = getLocalizedDateFormatWithoutYear(context);
-        } else {
-            outFormat =
-                    longForm ? DateFormat.getLongDateFormat(context) :
-                    DateFormat.getDateFormat(context);
-        }
-        synchronized (outFormat) {
-            outFormat.setTimeZone(UTC_TIMEZONE);
-            return outFormat.format(cal.getTime());
-        }
-    }
-
-    public static boolean isMonthBeforeDay(Context context) {
-        char[] dateFormatOrder = DateFormat.getDateFormatOrder(context);
-        for (int i = 0; i < dateFormatOrder.length; i++) {
-            if (dateFormatOrder[i] == 'd') {
-                return false;
-            }
-            if (dateFormatOrder[i] == 'M') {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns a SimpleDateFormat object without the year fields by using a regular expression
-     * to eliminate the year in the string pattern. In the rare occurence that the resulting
-     * pattern cannot be reconverted into a SimpleDateFormat, it uses the provided context to
-     * determine whether the month field should be displayed before the day field, and returns
-     * either "MMMM dd" or "dd MMMM" converted into a SimpleDateFormat.
-     */
-    public static java.text.DateFormat getLocalizedDateFormatWithoutYear(Context context) {
-        final String pattern = ((SimpleDateFormat) SimpleDateFormat.getDateInstance(
-                java.text.DateFormat.LONG)).toPattern();
-        // Determine the correct regex pattern for year.
-        // Special case handling for Spanish locale by checking for "de"
-        final String yearPattern = pattern.contains(
-                "de") ? "[^Mm]*[Yy]+[^Mm]*" : "[^DdMm]*[Yy]+[^DdMm]*";
-        try {
-         // Eliminate the substring in pattern that matches the format for that of year
-            return new SimpleDateFormat(pattern.replaceAll(yearPattern, ""));
-        } catch (IllegalArgumentException e) {
-            return new SimpleDateFormat(
-                    DateUtils.isMonthBeforeDay(context) ? "MMMM dd" : "dd MMMM");
-        }
-    }
-
-    /**
-     * Given a calendar (possibly containing only a day of the year), returns the earliest possible
-     * anniversary of the date that is equal to or after the current point in time if the date
-     * does not contain a year, or the date converted to the local time zone (if the date contains
-     * a year.
-     *
-     * @param target The date we wish to convert(in the UTC time zone).
-     * @return If date does not contain a year (year < 1900), returns the next earliest anniversary
-     * that is after the current point in time (in the local time zone). Otherwise, returns the
-     * adjusted Date in the local time zone.
-     */
-    public static Date getNextAnnualDate(Calendar target) {
-        final Calendar today = Calendar.getInstance();
-        today.setTime(new Date());
-
-        // Round the current time to the exact start of today so that when we compare
-        // today against the target date, both dates are set to exactly 0000H.
-        today.set(Calendar.HOUR_OF_DAY, 0);
-        today.set(Calendar.MINUTE, 0);
-        today.set(Calendar.SECOND, 0);
-        today.set(Calendar.MILLISECOND, 0);
-
-        final boolean isYearSet = isYearSet(target);
-        final int targetYear = target.get(Calendar.YEAR);
-        final int targetMonth = target.get(Calendar.MONTH);
-        final int targetDay = target.get(Calendar.DAY_OF_MONTH);
-        final boolean isFeb29 = (targetMonth == Calendar.FEBRUARY && targetDay == 29);
-        final GregorianCalendar anniversary = new GregorianCalendar();
-        // Convert from the UTC date to the local date. Set the year to today's year if the
-        // there is no provided year (targetYear < 1900)
-        anniversary.set(!isYearSet ? today.get(Calendar.YEAR) : targetYear,
-                targetMonth, targetDay);
-        // If the anniversary's date is before the start of today and there is no year set,
-        // increment the year by 1 so that the returned date is always equal to or greater than
-        // today. If the day is a leap year, keep going until we get the next leap year anniversary
-        // Otherwise if there is already a year set, simply return the exact date.
-        if (!isYearSet) {
-            int anniversaryYear = today.get(Calendar.YEAR);
-            if (anniversary.before(today) ||
-                    (isFeb29 && !anniversary.isLeapYear(anniversaryYear))) {
-                // If the target date is not Feb 29, then set the anniversary to the next year.
-                // Otherwise, keep going until we find the next leap year (this is not guaranteed
-                // to be in 4 years time).
-                do {
-                    anniversaryYear +=1;
-                } while (isFeb29 && !anniversary.isLeapYear(anniversaryYear));
-                anniversary.set(anniversaryYear, targetMonth, targetDay);
-            }
-        }
-        return anniversary.getTime();
-    }
-}
diff --git a/src/com/android/contacts/common/util/DeviceLocalAccountTypeFactory.java b/src/com/android/contacts/common/util/DeviceLocalAccountTypeFactory.java
deleted file mode 100644
index 040a6b4..0000000
--- a/src/com/android/contacts/common/util/DeviceLocalAccountTypeFactory.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.util;
-
-import android.content.Context;
-import android.support.annotation.IntDef;
-
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.DeviceLocalAccountType;
-import com.android.contacts.common.model.account.FallbackAccountType;
-
-import java.lang.annotation.Retention;
-
-import static java.lang.annotation.RetentionPolicy.SOURCE;
-
-/**
- * Reports whether a value from RawContacts.ACCOUNT_TYPE should be considered a "Device"
- * account
- */
-public interface DeviceLocalAccountTypeFactory {
-
-    @Retention(SOURCE)
-    @IntDef({TYPE_OTHER, TYPE_DEVICE, TYPE_SIM})
-    @interface LocalAccountType {}
-    static final int TYPE_OTHER = 0;
-    static final int TYPE_DEVICE = 1;
-    static final int TYPE_SIM = 2;
-
-    @DeviceLocalAccountTypeFactory.LocalAccountType int classifyAccount(String accountType);
-
-    AccountType getAccountType(String accountType);
-
-    class Util {
-        private Util() { }
-
-        public static boolean isLocalAccountType(@LocalAccountType int type) {
-            return type == TYPE_SIM || type == TYPE_DEVICE;
-        }
-
-        public static boolean isLocalAccountType(DeviceLocalAccountTypeFactory factory,
-                String type) {
-
-            return isLocalAccountType(factory.classifyAccount(type));
-        }
-    }
-
-    class Default implements DeviceLocalAccountTypeFactory {
-        private Context mContext;
-
-        public Default(Context context) {
-            mContext = context;
-        }
-
-        @Override
-        public int classifyAccount(String accountType) {
-            return accountType == null ? TYPE_DEVICE : TYPE_OTHER;
-        }
-
-        @Override
-        public AccountType getAccountType(String accountType) {
-            if (accountType != null) {
-                throw new IllegalArgumentException(accountType + " is not a device account type.");
-            }
-            return new DeviceLocalAccountType(mContext);
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/util/EmptyService.java b/src/com/android/contacts/common/util/EmptyService.java
deleted file mode 100644
index c5c3608..0000000
--- a/src/com/android/contacts/common/util/EmptyService.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.util;
-
-import android.app.Service;
-import android.content.Intent;
-import android.os.IBinder;
-
-/**
- * Background {@link Service} that is used to keep our process alive long enough
- * for background threads to finish. Started and stopped directly by specific
- * background tasks when needed.
- */
-public class EmptyService extends Service {
-    @Override
-    public IBinder onBind(Intent intent) {
-        return null;
-    }
-}
diff --git a/src/com/android/contacts/common/util/ImplicitIntentsUtil.java b/src/com/android/contacts/common/util/ImplicitIntentsUtil.java
deleted file mode 100644
index d30f495..0000000
--- a/src/com/android/contacts/common/util/ImplicitIntentsUtil.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.util;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.net.Uri;
-import android.os.Build;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.QuickContact;
-import android.provider.Settings;
-import android.text.TextUtils;
-
-import com.android.contacts.common.Experiments;
-import com.android.contacts.common.logging.ScreenEvent.ScreenType;
-import com.android.contacts.common.model.account.GoogleAccountType;
-import com.android.contacts.quickcontact.QuickContactActivity;
-import com.android.contactsbind.ObjectFactory;
-import com.android.contactsbind.experiments.Flags;
-
-import java.util.List;
-
-import static com.android.contacts.common.list.ShortcutIntentBuilder.INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION;
-
-/**
- * Utility for forcing intents to be started inside the current app. This is useful for avoiding
- * senseless disambiguation dialogs. Ie, if a user clicks a contact inside Contacts we assume
- * they want to view the contact inside the Contacts app as opposed to a 3rd party contacts app.
- *
- * Methods are designed to replace the use of startActivity() for implicit intents. This class isn't
- * necessary for explicit intents. No attempt is made to replace startActivityForResult(), since
- * startActivityForResult() is always used with explicit intents in this project.
- *
- * Why not just always use explicit intents? The Contacts/Dialer app implements standard intent
- * actions used by others apps. We want to continue exercising these intent filters to make sure
- * they still work. Plus we sometimes don't know an explicit intent would work. See
- * {@link #startActivityInAppIfPossible}.
- *
- * Some ContactsCommon code that is only used by Dialer doesn't use ImplicitIntentsUtil.
- */
-public class ImplicitIntentsUtil {
-
-    /**
-     * Start an intent. If it is possible for this app to handle the intent, force this app's
-     * activity to handle the intent. Sometimes it is impossible to know whether this app
-     * can handle an intent while coding since the code is used inside both Dialer and Contacts.
-     * This method is particularly useful in such circumstances.
-     *
-     * On a Nexus 5 with a small number of apps, this method consistently added 3-16ms of delay
-     * in order to talk to the package manager.
-     */
-    public static void startActivityInAppIfPossible(Context context, Intent intent) {
-        final Intent appIntent = getIntentInAppIfExists(context, intent);
-        if (appIntent != null) {
-            context.startActivity(appIntent);
-        } else {
-            context.startActivity(intent);
-        }
-    }
-
-    /**
-     * Start intent using an activity inside this app. This method is useful if you are certain
-     * that the intent can be handled inside this app, and you care about shaving milliseconds.
-     */
-    public static void startActivityInApp(Context context, Intent intent) {
-        String packageName = context.getPackageName();
-        intent.setPackage(packageName);
-        context.startActivity(intent);
-    }
-
-    /**
-     * Start an intent normally. Assert that the intent can't be opened inside this app.
-     */
-    public static void startActivityOutsideApp(Context context, Intent intent) {
-        final boolean isPlatformDebugBuild = Build.TYPE.equals("eng")
-                || Build.TYPE.equals("userdebug");
-        if (isPlatformDebugBuild) {
-            if (getIntentInAppIfExists(context, intent) != null) {
-                throw new AssertionError("startActivityOutsideApp() was called for an intent" +
-                        " that can be handled inside the app");
-            }
-        }
-        context.startActivity(intent);
-    }
-
-    /**
-     * Starts QuickContact in app with the default mode and specified previous screen type.
-     */
-    public static void startQuickContact(Activity activity, Uri contactLookupUri,
-            int previousScreenType) {
-        startQuickContact(activity, contactLookupUri, previousScreenType, /* requestCode */ -1);
-    }
-
-    /**
-     * Starts QuickContact for result with the default mode and specified previous screen type.
-     */
-    public static void startQuickContactForResult(Activity activity, Uri contactLookupUri,
-            int previousScreenType, int requestCode) {
-        startQuickContact(activity, contactLookupUri, previousScreenType, requestCode);
-    }
-
-    private static void startQuickContact(Activity activity, Uri contactLookupUri,
-            int previousScreenType, int requestCode) {
-
-        if (Flags.getInstance().getBoolean(Experiments.CONTACT_SHEET)) {
-            final Intent intent = ObjectFactory.getContactSheetIntent(activity, contactLookupUri);
-            if (intent != null) {
-                // We must start ContactSheet "for result" with a requestCode that is >= 0
-                // so that ContactSheet can validate that the caller is a 1P app.
-                activity.startActivityForResult(intent, requestCode >= 0 ? requestCode : 0);
-                return;
-            }
-        }
-
-        final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
-                activity, contactLookupUri, previousScreenType);
-
-        // For the non ContactSheet case we only start "for result" if specifically requested.
-        if (requestCode >= 0) {
-            intent.setPackage(activity.getPackageName());
-            activity.startActivityForResult(intent, requestCode);
-        } else {
-            startActivityInApp(activity, intent);
-        }
-    }
-
-    /**
-     * Returns an implicit intent for opening QuickContacts with the default mode and specified
-     * previous screen type.
-     */
-    public static Intent composeQuickContactIntent(Context context, Uri contactLookupUri,
-            int previousScreenType) {
-        return composeQuickContactIntent(context, contactLookupUri,
-                QuickContactActivity.MODE_FULLY_EXPANDED, previousScreenType);
-    }
-
-    /**
-     * Returns an implicit intent for opening QuickContacts.
-     */
-    public static Intent composeQuickContactIntent(Context context, Uri contactLookupUri,
-            int mode, int previousScreenType) {
-        final Intent intent = new Intent(context, QuickContactActivity.class);
-        intent.setAction(QuickContact.ACTION_QUICK_CONTACT);
-        intent.setData(contactLookupUri);
-        intent.putExtra(QuickContact.EXTRA_MODE, mode);
-        // Make sure not to show QuickContacts on top of another QuickContacts.
-        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
-        intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, previousScreenType);
-        return intent;
-    }
-
-    /**
-     * Returns an Intent to open the Settings add account activity filtered to only
-     * display contact provider account types.
-     */
-    public static Intent getIntentForAddingAccount() {
-        final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
-        intent.putExtra(Settings.EXTRA_AUTHORITIES,
-                new String[]{ContactsContract.AUTHORITY});
-        return intent;
-    }
-
-    /**
-     * Returns an Intent to add a google account.
-     */
-    public static Intent getIntentForAddingGoogleAccount() {
-        final Intent intent = new Intent(Settings.ACTION_ADD_ACCOUNT);
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
-        intent.putExtra(Settings.EXTRA_ACCOUNT_TYPES,
-                new String[]{GoogleAccountType.ACCOUNT_TYPE});
-        return intent;
-    }
-
-    public static Intent getIntentForQuickContactLauncherShortcut(Context context, Uri contactUri) {
-        final Intent intent = composeQuickContactIntent(context, contactUri,
-                QuickContact.MODE_LARGE, ScreenType.UNKNOWN);
-        intent.setPackage(context.getPackageName());
-
-        // When starting from the launcher, start in a new, cleared task.
-        // CLEAR_WHEN_TASK_RESET cannot reset the root of a task, so we
-        // clear the whole thing preemptively here since QuickContactActivity will
-        // finish itself when launching other detail activities. We need to use
-        // Intent.FLAG_ACTIVITY_NO_ANIMATION since not all versions of launcher will respect
-        // the INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION intent extra.
-        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
-                | Intent.FLAG_ACTIVITY_NO_ANIMATION);
-
-        // Tell the launcher to not do its animation, because we are doing our own
-        intent.putExtra(INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION, true);
-
-        intent.putExtra(QuickContact.EXTRA_EXCLUDE_MIMES, (String[])null);
-
-        return intent;
-    }
-
-    /**
-     * Returns a copy of {@param intent} with a class name set, if a class inside this app
-     * has a corresponding intent filter.
-     */
-    private static Intent getIntentInAppIfExists(Context context, Intent intent) {
-        try {
-            final Intent intentCopy = new Intent(intent);
-            // Force this intentCopy to open inside the current app.
-            intentCopy.setPackage(context.getPackageName());
-            final List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(
-                    intentCopy, PackageManager.MATCH_DEFAULT_ONLY);
-            if (list != null && list.size() != 0) {
-                // Now that we know the intentCopy will work inside the current app, we
-                // can return this intent non-null.
-                if (list.get(0).activityInfo != null
-                        && !TextUtils.isEmpty(list.get(0).activityInfo.name)) {
-                    // Now that we know the class name, we may as well attach it to intentCopy
-                    // to prevent the package manager from needing to find it again inside
-                    // startActivity(). This is only needed for efficiency.
-                    intentCopy.setClassName(context.getPackageName(),
-                            list.get(0).activityInfo.name);
-                }
-                return intentCopy;
-            }
-            return null;
-        } catch (Exception e) {
-            // Don't let the package manager crash our app. If the package manager can't resolve the
-            // intent here, then we can still call startActivity without calling setClass() first.
-            return null;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/util/LocalizedNameResolver.java b/src/com/android/contacts/common/util/LocalizedNameResolver.java
deleted file mode 100644
index 92104c4..0000000
--- a/src/com/android/contacts/common/util/LocalizedNameResolver.java
+++ /dev/null
@@ -1,146 +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.common.util;
-
-import android.accounts.AccountManager;
-import android.accounts.AuthenticatorDescription;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
-import android.content.res.Resources.NotFoundException;
-import android.content.res.TypedArray;
-import android.content.res.XmlResourceParser;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.Xml;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.account.ExternalAccountType;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
-import java.io.IOException;
-
-/**
- * Retrieves localized names per account type. This allows customizing texts like
- * "All Contacts" for certain account types, but e.g. "All Friends" or "All Connections" for others.
- */
-public class LocalizedNameResolver  {
-    private static final String TAG = "LocalizedNameResolver";
-
-    private static final String CONTACTS_DATA_KIND = "ContactsDataKind";
-
-    /**
-     * Returns the name for All Contacts for the specified account type.
-     */
-    public static String getAllContactsName(Context context, String accountType) {
-        if (context == null) throw new IllegalArgumentException("Context must not be null");
-        if (accountType == null) return null;
-
-        return resolveAllContactsName(context, accountType);
-     }
-
-    /**
-     * Finds "All Contacts"-Name for the specified account type.
-     */
-    private static String resolveAllContactsName(Context context, String accountType) {
-        final AccountManager am = AccountManager.get(context);
-
-        for (AuthenticatorDescription auth : am.getAuthenticatorTypes()) {
-            if (accountType.equals(auth.type)) {
-                return resolveAllContactsNameFromMetaData(context, auth.packageName);
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Finds the meta-data XML containing the contacts configuration and
-     * reads the picture priority from that file.
-     */
-    private static String resolveAllContactsNameFromMetaData(Context context, String packageName) {
-        final XmlResourceParser parser = ExternalAccountType.loadContactsXml(context, packageName);
-        if (parser != null) {
-            return loadAllContactsNameFromXml(context, parser, packageName);
-        }
-        return null;
-    }
-
-    private static String loadAllContactsNameFromXml(Context context, XmlPullParser parser,
-            String packageName) {
-        try {
-            final AttributeSet attrs = Xml.asAttributeSet(parser);
-            int type;
-            while ((type = parser.next()) != XmlPullParser.START_TAG
-                    && type != XmlPullParser.END_DOCUMENT) {
-                // Drain comments and whitespace
-            }
-
-            if (type != XmlPullParser.START_TAG) {
-                throw new IllegalStateException("No start tag found");
-            }
-
-            final int depth = parser.getDepth();
-            while (((type = parser.next()) != XmlPullParser.END_TAG || parser.getDepth() > depth)
-                    && type != XmlPullParser.END_DOCUMENT) {
-                String name = parser.getName();
-                if (type == XmlPullParser.START_TAG && CONTACTS_DATA_KIND.equals(name)) {
-                    final TypedArray typedArray = context.obtainStyledAttributes(attrs,
-                            R.styleable.ContactsDataKind);
-                    try {
-                        // See if a string has been hardcoded directly into the xml
-                        final String nonResourceString = typedArray.getNonResourceString(
-                                R.styleable.ContactsDataKind_android_allContactsName);
-                        if (nonResourceString != null) {
-                            return nonResourceString;
-                        }
-
-                        // See if a resource is referenced. We can't rely on getString
-                        // to automatically resolve it as the resource lives in a different package
-                        int id = typedArray.getResourceId(
-                                R.styleable.ContactsDataKind_android_allContactsName, 0);
-                        if (id == 0) return null;
-
-                        // Resolve the resource Id
-                        final PackageManager packageManager = context.getPackageManager();
-                        final Resources resources;
-                        try {
-                            resources = packageManager.getResourcesForApplication(packageName);
-                        } catch (NameNotFoundException e) {
-                            return null;
-                        }
-                        try {
-                            return resources.getString(id);
-                        } catch (NotFoundException e) {
-                            return null;
-                        }
-                    } finally {
-                        typedArray.recycle();
-                    }
-                }
-            }
-            return null;
-        } catch (XmlPullParserException e) {
-            throw new IllegalStateException("Problem reading XML", e);
-        } catch (IOException e) {
-            throw new IllegalStateException("Problem reading XML", e);
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/util/MaterialColorMapUtils.java b/src/com/android/contacts/common/util/MaterialColorMapUtils.java
deleted file mode 100644
index 50d8f0f..0000000
--- a/src/com/android/contacts/common/util/MaterialColorMapUtils.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.util;
-
-import com.android.contacts.ContactsDrawerActivity;
-import com.android.contacts.R;
-
-import android.app.Activity;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.os.Trace;
-import android.support.v4.content.ContextCompat;
-
-public class MaterialColorMapUtils {
-    private final TypedArray sPrimaryColors;
-    private final TypedArray sSecondaryColors;
-
-    public MaterialColorMapUtils(Resources resources) {
-        sPrimaryColors = resources.obtainTypedArray(
-                com.android.contacts.common.R.array.letter_tile_colors);
-        sSecondaryColors = resources.obtainTypedArray(
-                com.android.contacts.common.R.array.letter_tile_colors_dark);
-    }
-
-    public static class MaterialPalette implements Parcelable {
-        public MaterialPalette(int primaryColor, int secondaryColor) {
-            mPrimaryColor = primaryColor;
-            mSecondaryColor = secondaryColor;
-        }
-        public final int mPrimaryColor;
-        public final int mSecondaryColor;
-
-        @Override
-        public boolean equals(Object obj) {
-            if (this == obj) {
-                return true;
-            }
-            if (obj == null) {
-                return false;
-            }
-            if (getClass() != obj.getClass()) {
-                return false;
-            }
-            MaterialPalette other = (MaterialPalette) obj;
-            if (mPrimaryColor != other.mPrimaryColor) {
-                return false;
-            }
-            if (mSecondaryColor != other.mSecondaryColor) {
-                return false;
-            }
-            return true;
-        }
-
-        @Override
-        public int hashCode() {
-            final int prime = 31;
-            int result = 1;
-            result = prime * result + mPrimaryColor;
-            result = prime * result + mSecondaryColor;
-            return result;
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            dest.writeInt(mPrimaryColor);
-            dest.writeInt(mSecondaryColor);
-        }
-
-        private MaterialPalette(Parcel in) {
-            mPrimaryColor = in.readInt();
-            mSecondaryColor = in.readInt();
-        }
-
-        public static final Creator<MaterialPalette> CREATOR = new Creator<MaterialPalette>() {
-                @Override
-                public MaterialPalette createFromParcel(Parcel in) {
-                    return new MaterialPalette(in);
-                }
-
-                @Override
-                public MaterialPalette[] newArray(int size) {
-                    return new MaterialPalette[size];
-                }
-        };
-    }
-
-    /**
-     * Return primary and secondary colors from the Material color palette that are similar to
-     * {@param color}.
-     */
-    public MaterialPalette calculatePrimaryAndSecondaryColor(int color) {
-        Trace.beginSection("calculatePrimaryAndSecondaryColor");
-
-        final float colorHue = hue(color);
-        float minimumDistance = Float.MAX_VALUE;
-        int indexBestMatch = 0;
-        for (int i = 0; i < sPrimaryColors.length(); i++) {
-            final int primaryColor = sPrimaryColors.getColor(i, 0);
-            final float comparedHue = hue(primaryColor);
-            // No need to be perceptually accurate when calculating color distances since
-            // we are only mapping to 15 colors. Being slightly inaccurate isn't going to change
-            // the mapping very often.
-            final float distance = Math.abs(comparedHue - colorHue);
-            if (distance < minimumDistance) {
-                minimumDistance = distance;
-                indexBestMatch = i;
-            }
-        }
-
-        Trace.endSection();
-        return new MaterialPalette(sPrimaryColors.getColor(indexBestMatch, 0),
-                sSecondaryColors.getColor(indexBestMatch, 0));
-    }
-
-    public static MaterialPalette getDefaultPrimaryAndSecondaryColors(Resources resources) {
-        final int primaryColor = resources.getColor(
-                R.color.quickcontact_default_photo_tint_color);
-        final int secondaryColor = resources.getColor(
-                R.color.quickcontact_default_photo_tint_color_dark);
-        return new MaterialPalette(primaryColor, secondaryColor);
-    }
-
-    /**
-     * Returns the hue component of a color int.
-     *
-     * @return A value between 0.0f and 1.0f
-     */
-    public static float hue(int color) {
-        int r = (color >> 16) & 0xFF;
-        int g = (color >> 8) & 0xFF;
-        int b = color & 0xFF;
-
-        int V = Math.max(b, Math.max(r, g));
-        int temp = Math.min(b, Math.min(r, g));
-
-        float H;
-
-        if (V == temp) {
-            H = 0;
-        } else {
-            final float vtemp = V - temp;
-            final float cr = (V - r) / vtemp;
-            final float cg = (V - g) / vtemp;
-            final float cb = (V - b) / vtemp;
-
-            if (r == V) {
-                H = cb - cg;
-            } else if (g == V) {
-                H = 2 + cr - cb;
-            } else {
-                H = 4 + cg - cr;
-            }
-
-            H /= 6.f;
-            if (H < 0) {
-                H++;
-            }
-        }
-
-        return H;
-    }
-
-    /**
-     * Returns status bar color for group view and non-group views.
-     */
-    public static int getStatusBarColor(Activity activity) {
-        final boolean isGroupView = activity instanceof ContactsDrawerActivity
-                && ((ContactsDrawerActivity) activity).isGroupView();
-        return isGroupView
-                ? ContextCompat.getColor(activity, R.color.group_primary_color_dark)
-                : ContextCompat.getColor(activity, R.color.primary_color_dark);
-    }
-
-    /**
-     * Returns toolbar color for group view and non-group views.
-     */
-    public static int getToolBarColor(Activity activity) {
-        final boolean isGroupView = activity instanceof ContactsDrawerActivity
-                && ((ContactsDrawerActivity) activity).isGroupView();
-        return isGroupView
-                ? ContextCompat.getColor(activity, R.color.group_primary_color)
-                : ContextCompat.getColor(activity, R.color.primary_color);
-    }
-}
diff --git a/src/com/android/contacts/common/util/NameConverter.java b/src/com/android/contacts/common/util/NameConverter.java
deleted file mode 100644
index 227a0ec..0000000
--- a/src/com/android/contacts/common/util/NameConverter.java
+++ /dev/null
@@ -1,158 +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.common.util;
-
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.database.Cursor;
-import android.net.Uri;
-import android.net.Uri.Builder;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.text.TextUtils;
-
-import com.android.contacts.common.model.dataitem.StructuredNameDataItem;
-
-/**
- * Utility class for converting between a display name and structured name (and vice-versa), via
- * calls to the contact provider.
- */
-public class NameConverter {
-
-    /**
-     * The array of fields that comprise a structured name.
-     */
-    public static final String[] STRUCTURED_NAME_FIELDS = new String[] {
-            StructuredName.PREFIX,
-            StructuredName.GIVEN_NAME,
-            StructuredName.MIDDLE_NAME,
-            StructuredName.FAMILY_NAME,
-            StructuredName.SUFFIX
-    };
-
-    /**
-     * Converts the given structured name (provided as ContentValues) into a display name string.
-     * @param context Activity context.
-     * @param values The content values containing values comprising the structured name.
-     * @return
-     */
-    public static String structuredNameToDisplayName(Context context, ContentValues values) {
-        Builder builder = ContactsContract.AUTHORITY_URI.buildUpon().appendPath("complete_name");
-        for (String key : STRUCTURED_NAME_FIELDS) {
-            if (values.containsKey(key)) {
-                appendQueryParameter(builder, key, values.getAsString(key));
-            }
-        }
-        return fetchDisplayName(context, builder.build());
-    }
-
-    /**
-     * Helper method for fetching the display name via the given URI.
-     */
-    private static String fetchDisplayName(Context context, Uri uri) {
-        String displayName = null;
-        Cursor cursor = context.getContentResolver().query(uri, new String[]{
-                StructuredName.DISPLAY_NAME,
-        }, null, null, null);
-
-        if (cursor != null) {
-            try {
-                if (cursor.moveToFirst()) {
-                    displayName = cursor.getString(0);
-                }
-            } finally {
-                cursor.close();
-            }
-        }
-        return displayName;
-    }
-
-    private static void appendQueryParameter(Builder builder, String field, String value) {
-        if (!TextUtils.isEmpty(value)) {
-            builder.appendQueryParameter(field, value);
-        }
-    }
-
-
-    /**
-     * Parses phonetic name and returns parsed data (family, middle, given) as ContentValues.
-     * Parsed data should be {@link StructuredName#PHONETIC_FAMILY_NAME},
-     * {@link StructuredName#PHONETIC_MIDDLE_NAME}, and
-     * {@link StructuredName#PHONETIC_GIVEN_NAME}.
-     * If this method cannot parse given phoneticName, null values will be stored.
-     *
-     * @param phoneticName Phonetic name to be parsed
-     * @param values ContentValues to be used for storing data. If null, new instance will be
-     * created.
-     * @return ContentValues with parsed data. Those data can be null.
-     */
-    public static StructuredNameDataItem parsePhoneticName(String phoneticName,
-            StructuredNameDataItem item) {
-        String family = null;
-        String middle = null;
-        String given = null;
-
-        if (!TextUtils.isEmpty(phoneticName)) {
-            String[] strings = phoneticName.split(" ", 3);
-            switch (strings.length) {
-                case 1:
-                    family = strings[0];
-                    break;
-                case 2:
-                    family = strings[0];
-                    given = strings[1];
-                    break;
-                case 3:
-                    family = strings[0];
-                    middle = strings[1];
-                    given = strings[2];
-                    break;
-            }
-        }
-
-        if (item == null) {
-            item = new StructuredNameDataItem();
-        }
-        item.setPhoneticFamilyName(family);
-        item.setPhoneticMiddleName(middle);
-        item.setPhoneticGivenName(given);
-        return item;
-    }
-
-    /**
-     * Constructs and returns a phonetic full name from given parts.
-     */
-    public static String buildPhoneticName(String family, String middle, String given) {
-        if (!TextUtils.isEmpty(family) || !TextUtils.isEmpty(middle)
-                || !TextUtils.isEmpty(given)) {
-            StringBuilder sb = new StringBuilder();
-            if (!TextUtils.isEmpty(family)) {
-                sb.append(family.trim()).append(' ');
-            }
-            if (!TextUtils.isEmpty(middle)) {
-                sb.append(middle.trim()).append(' ');
-            }
-            if (!TextUtils.isEmpty(given)) {
-                sb.append(given.trim()).append(' ');
-            }
-            sb.setLength(sb.length() - 1); // Yank the last space
-            return sb.toString();
-        } else {
-            return null;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/util/PermissionsUtil.java b/src/com/android/contacts/common/util/PermissionsUtil.java
deleted file mode 100644
index 37c1762..0000000
--- a/src/com/android/contacts/common/util/PermissionsUtil.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.util;
-
-import android.Manifest.permission;
-import android.app.AppOpsManager;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.os.Process;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.content.LocalBroadcastManager;
-
-/**
- * Utility class to help with runtime permissions.
- */
-public class PermissionsUtil {
-    // Each permission in this list is a cherry-picked permission from a particular permission
-    // group. Granting a permission group enables access to all permissions in that group so we
-    // only need to check a single permission in each group.
-    // Note: This assumes that the app has correctly requested for all the relevant permissions
-    // in its Manifest file.
-    public static final String PHONE = permission.CALL_PHONE;
-    public static final String CONTACTS = permission.READ_CONTACTS;
-    public static final String LOCATION = permission.ACCESS_FINE_LOCATION;
-
-    public static boolean hasPhonePermissions(Context context) {
-        return hasPermission(context, PHONE);
-    }
-
-    public static boolean hasContactsPermissions(Context context) {
-        return hasPermission(context, CONTACTS);
-    }
-
-    public static boolean hasLocationPermissions(Context context) {
-        return hasPermission(context, LOCATION);
-    }
-
-    public static boolean hasPermission(Context context, String permission) {
-        return ContextCompat.checkSelfPermission(context, permission)
-                == PackageManager.PERMISSION_GRANTED;
-    }
-
-    public static boolean hasAppOp(Context context, String appOp) {
-        final AppOpsManager appOpsManager =
-                (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
-        final int mode = appOpsManager.checkOpNoThrow(appOp, Process.myUid(),
-                context.getPackageName());
-        return mode == AppOpsManager.MODE_ALLOWED;
-    }
-
-    /**
-     * Rudimentary methods wrapping the use of a LocalBroadcastManager to simplify the process
-     * of notifying other classes when a particular fragment is notified that a permission is
-     * granted.
-     *
-     * To be notified when a permission has been granted, create a new broadcast receiver
-     * and register it using {@link #registerPermissionReceiver(Context, BroadcastReceiver, String)}
-     *
-     * E.g.
-     *
-     * final BroadcastReceiver receiver = new BroadcastReceiver() {
-     *     @Override
-     *     public void onReceive(Context context, Intent intent) {
-     *         refreshContactsView();
-     *     }
-     * }
-     *
-     * PermissionsUtil.registerPermissionReceiver(getActivity(), receiver, READ_CONTACTS);
-     *
-     * If you register to listen for multiple permissions, you can identify which permission was
-     * granted by inspecting {@link Intent#getAction()}.
-     *
-     * In the fragment that requests for the permission, be sure to call
-     * {@link #notifyPermissionGranted(Context, String)} when the permission is granted so that
-     * any interested listeners are notified of the change.
-     */
-    public static void registerPermissionReceiver(Context context, BroadcastReceiver receiver,
-            String permission) {
-        final IntentFilter filter = new IntentFilter(permission);
-        LocalBroadcastManager.getInstance(context).registerReceiver(receiver, filter);
-    }
-
-    public static void unregisterPermissionReceiver(Context context, BroadcastReceiver receiver) {
-        LocalBroadcastManager.getInstance(context).unregisterReceiver(receiver);
-    }
-
-    public static void notifyPermissionGranted(Context context, String permission) {
-        final Intent intent = new Intent(permission);
-        LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
-    }
-}
diff --git a/src/com/android/contacts/common/util/PhoneNumberFormatter.java b/src/com/android/contacts/common/util/PhoneNumberFormatter.java
deleted file mode 100644
index bbf9785..0000000
--- a/src/com/android/contacts/common/util/PhoneNumberFormatter.java
+++ /dev/null
@@ -1,89 +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.common.util;
-
-import android.content.Context;
-import android.os.AsyncTask;
-import android.telephony.PhoneNumberFormattingTextWatcher;
-import android.widget.TextView;
-
-import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.compat.PhoneNumberFormattingTextWatcherCompat;
-
-public final class PhoneNumberFormatter {
-    private PhoneNumberFormatter() {}
-
-    /**
-     * Load {@link TextWatcherLoadAsyncTask} in a worker thread and set it to a {@link TextView}.
-     */
-    private static class TextWatcherLoadAsyncTask extends
-            AsyncTask<Void, Void, PhoneNumberFormattingTextWatcher> {
-        private final String mCountryCode;
-        private final TextView mTextView;
-        private final boolean mFormatAfterWatcherSet;
-
-        public TextWatcherLoadAsyncTask(
-                String countryCode, TextView textView, boolean formatAfterWatcherSet) {
-            mCountryCode = countryCode;
-            mTextView = textView;
-            mFormatAfterWatcherSet = formatAfterWatcherSet;
-        }
-
-        @Override
-        protected PhoneNumberFormattingTextWatcher doInBackground(Void... params) {
-            return PhoneNumberFormattingTextWatcherCompat.newInstance(mCountryCode);
-        }
-
-        @Override
-        protected void onPostExecute(PhoneNumberFormattingTextWatcher watcher) {
-            if (watcher == null || isCancelled()) {
-                return; // May happen if we cancel the task.
-            }
-
-            // Setting a text changed listener is safe even after the view is detached.
-            mTextView.addTextChangedListener(watcher);
-
-            // Forcing formatting the existing phone number
-            if (mFormatAfterWatcherSet) {
-                watcher.afterTextChanged(mTextView.getEditableText());
-            }
-        }
-    }
-
-    /**
-     * Delay-set {@link PhoneNumberFormattingTextWatcher} to a {@link TextView}.
-     */
-    public static final void setPhoneNumberFormattingTextWatcher(Context context,
-            TextView textView) {
-        setPhoneNumberFormattingTextWatcher(context, textView,
-                /* formatAfterWatcherSet =*/ false);
-    }
-
-    /**
-     * Delay-sets {@link PhoneNumberFormattingTextWatcher} to a {@link TextView}
-     * and formats the number immediately if formatAfterWaterSet is true.
-     * In some cases, formatting before user editing might cause unwanted results
-     * (e.g. the editor thinks the user changed the content, and would save
-     * when closed even when the user didn't make other changes.)
-     */
-    public static final void setPhoneNumberFormattingTextWatcher(
-            Context context, TextView textView, boolean formatAfterWatcherSet) {
-        new TextWatcherLoadAsyncTask(GeoUtil.getCurrentCountryIso(context),
-                textView, formatAfterWatcherSet)
-                .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null);
-    }
-}
diff --git a/src/com/android/contacts/common/util/PhoneNumberHelper.java b/src/com/android/contacts/common/util/PhoneNumberHelper.java
deleted file mode 100644
index 794b6dd..0000000
--- a/src/com/android/contacts/common/util/PhoneNumberHelper.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.util;
-
-import android.content.Context;
-import android.telephony.PhoneNumberUtils;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.google.i18n.phonenumbers.NumberParseException;
-import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
-import com.google.i18n.phonenumbers.ShortNumberInfo;
-
-import java.util.Locale;
-
-/**
- * This class wraps several PhoneNumberUtil calls and TelephonyManager calls. Some of them are
- * the same as the ones in the framework's code base. We can remove those once they are part of
- * the public API.
- */
-public class PhoneNumberHelper {
-
-    private static final String LOG_TAG = PhoneNumberHelper.class.getSimpleName();
-
-    private static final String KOREA_ISO_COUNTRY_CODE = "KR";
-    /**
-     * Determines if the specified number is actually a URI (i.e. a SIP address) rather than a
-     * regular PSTN phone number, based on whether or not the number contains an "@" character.
-     *
-     * @param number Phone number
-     * @return true if number contains @
-     *
-     * TODO: Remove if PhoneNumberUtils.isUriNumber(String number) is made public.
-     */
-    public static boolean isUriNumber(String number) {
-        // Note we allow either "@" or "%40" to indicate a URI, in case
-        // the passed-in string is URI-escaped.  (Neither "@" nor "%40"
-        // will ever be found in a legal PSTN number.)
-        return number != null && (number.contains("@") || number.contains("%40"));
-    }
-
-    /**
-     * Normalize a phone number by removing the characters other than digits. If
-     * the given number has keypad letters, the letters will be converted to
-     * digits first.
-     *
-     * @param phoneNumber The number to be normalized.
-     * @return The normalized number.
-     *
-     * TODO: Remove if PhoneNumberUtils.normalizeNumber(String phoneNumber) is made public.
-     */
-    public static String normalizeNumber(String phoneNumber) {
-        StringBuilder sb = new StringBuilder();
-        int len = phoneNumber.length();
-        for (int i = 0; i < len; i++) {
-            char c = phoneNumber.charAt(i);
-            // Character.digit() supports ASCII and Unicode digits (fullwidth, Arabic-Indic, etc.)
-            int digit = Character.digit(c, 10);
-            if (digit != -1) {
-                sb.append(digit);
-            } else if (i == 0 && c == '+') {
-                sb.append(c);
-            } else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
-                return normalizeNumber(PhoneNumberUtils.convertKeypadLettersToDigits(phoneNumber));
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * @return the "username" part of the specified SIP address, i.e. the part before the "@"
-     * character (or "%40").
-     *
-     * @param number SIP address of the form "username@domainname" (or the URI-escaped equivalent
-     * "username%40domainname")
-     *
-     * TODO: Remove if PhoneNumberUtils.getUsernameFromUriNumber(String number) is made public.
-     */
-    public static String getUsernameFromUriNumber(String number) {
-        // The delimiter between username and domain name can be
-        // either "@" or "%40" (the URI-escaped equivalent.)
-        int delimiterIndex = number.indexOf('@');
-        if (delimiterIndex < 0) {
-            delimiterIndex = number.indexOf("%40");
-        }
-        if (delimiterIndex < 0) {
-            Log.w(LOG_TAG,
-                    "getUsernameFromUriNumber: no delimiter found in SIP addr '" + number + "'");
-            return number;
-        }
-        return number.substring(0, delimiterIndex);
-    }
-}
diff --git a/src/com/android/contacts/common/util/SchedulingUtils.java b/src/com/android/contacts/common/util/SchedulingUtils.java
deleted file mode 100644
index 1dfa153..0000000
--- a/src/com/android/contacts/common/util/SchedulingUtils.java
+++ /dev/null
@@ -1,53 +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.common.util;
-
-import android.view.View;
-import android.view.ViewTreeObserver.OnGlobalLayoutListener;
-import android.view.ViewTreeObserver.OnPreDrawListener;
-
-/** Static methods that are useful for scheduling actions to occur at a later time. */
-public class SchedulingUtils {
-
-
-    /** Runs a piece of code after the next layout run */
-    public static void doAfterLayout(final View view, final Runnable runnable) {
-        final OnGlobalLayoutListener listener = new OnGlobalLayoutListener() {
-            @Override
-            public void onGlobalLayout() {
-                // Layout pass done, unregister for further events
-                view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
-                runnable.run();
-            }
-        };
-        view.getViewTreeObserver().addOnGlobalLayoutListener(listener);
-    }
-
-    /** Runs a piece of code just before the next draw, after layout and measurement */
-    public static void doOnPreDraw(final View view, final boolean drawNextFrame,
-            final Runnable runnable) {
-        final OnPreDrawListener listener = new OnPreDrawListener() {
-            @Override
-            public boolean onPreDraw() {
-                view.getViewTreeObserver().removeOnPreDrawListener(this);
-                runnable.run();
-                return drawNextFrame;
-            }
-        };
-        view.getViewTreeObserver().addOnPreDrawListener(listener);
-    }
-}
diff --git a/src/com/android/contacts/common/util/SearchUtil.java b/src/com/android/contacts/common/util/SearchUtil.java
deleted file mode 100644
index ed41d6c..0000000
--- a/src/com/android/contacts/common/util/SearchUtil.java
+++ /dev/null
@@ -1,204 +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.common.util;
-
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * Methods related to search.
- */
-public class SearchUtil {
-
-    public static class MatchedLine {
-
-        public int startIndex = -1;
-        public String line;
-
-        @Override
-        public String toString() {
-            return "MatchedLine{" +
-                    "line='" + line + '\'' +
-                    ", startIndex=" + startIndex +
-                    '}';
-        }
-    }
-
-    /**
-     * Given a string with lines delimited with '\n', finds the matching line to the given
-     * substring.
-     *
-     * @param contents The string to search.
-     * @param substring The substring to search for.
-     * @return A MatchedLine object containing the matching line and the startIndex of the substring
-     * match within that line.
-     */
-    public static MatchedLine findMatchingLine(String contents, String substring) {
-        final MatchedLine matched = new MatchedLine();
-
-        // Snippet may contain multiple lines separated by "\n".
-        // Locate the lines of the content that contain the substring.
-        final int index = SearchUtil.contains(contents, substring);
-        if (index != -1) {
-            // Match found.  Find the corresponding line.
-            int start = index - 1;
-            while (start > -1) {
-                if (contents.charAt(start) == '\n') {
-                    break;
-                }
-                start--;
-            }
-            int end = index + 1;
-            while (end < contents.length()) {
-                if (contents.charAt(end) == '\n') {
-                    break;
-                }
-                end++;
-            }
-            matched.line = contents.substring(start + 1, end);
-            matched.startIndex = index - (start + 1);
-        }
-        return matched;
-    }
-
-    /**
-     * Similar to String.contains() with two main differences:
-     * <p>
-     * 1) Only searches token prefixes.  A token is defined as any combination of letters or
-     * numbers.
-     * <p>
-     * 2) Returns the starting index where the substring is found.
-     *
-     * @param value The string to search.
-     * @param substring The substring to look for.
-     * @return The starting index where the substring is found. {@literal -1} if substring is not
-     *         found in value.
-     */
-    @VisibleForTesting
-    static int contains(String value, String substring) {
-        if (value.length() < substring.length()) {
-            return -1;
-        }
-
-        // i18n support
-        // Generate the code points for the substring once.
-        // There will be a maximum of substring.length code points.  But may be fewer.
-        // Since the array length is not an accurate size, we need to keep a separate variable.
-        final int[] substringCodePoints = new int[substring.length()];
-        int substringLength = 0;  // may not equal substring.length()!!
-        for (int i = 0; i < substring.length(); ) {
-            final int codePoint = Character.codePointAt(substring, i);
-            substringCodePoints[substringLength] = codePoint;
-            substringLength++;
-            i += Character.charCount(codePoint);
-        }
-
-        for (int i = 0; i < value.length(); i = findNextTokenStart(value, i)) {
-            int numMatch = 0;
-            for (int j = i; j < value.length() && numMatch < substringLength; ++numMatch) {
-                int valueCp = Character.toLowerCase(value.codePointAt(j));
-                int substringCp = substringCodePoints[numMatch];
-                if (valueCp != substringCp) {
-                    break;
-                }
-                j += Character.charCount(valueCp);
-            }
-            if (numMatch == substringLength) {
-                return i;
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * Find the start of the next token.  A token is composed of letters and numbers. Any other
-     * character are considered delimiters.
-     *
-     * @param line The string to search for the next token.
-     * @param startIndex The index to start searching.  0 based indexing.
-     * @return The index for the start of the next token.  line.length() if next token not found.
-     */
-    @VisibleForTesting
-    static int findNextTokenStart(String line, int startIndex) {
-        int index = startIndex;
-
-        // If already in token, eat remainder of token.
-        while (index <= line.length()) {
-            if (index == line.length()) {
-                // No more tokens.
-                return index;
-            }
-            final int codePoint = line.codePointAt(index);
-            if (!Character.isLetterOrDigit(codePoint)) {
-                break;
-            }
-            index += Character.charCount(codePoint);
-        }
-
-        // Out of token, eat all consecutive delimiters.
-        while (index <= line.length()) {
-            if (index == line.length()) {
-                return index;
-            }
-            final int codePoint = line.codePointAt(index);
-            if (Character.isLetterOrDigit(codePoint)) {
-                break;
-            }
-            index += Character.charCount(codePoint);
-        }
-
-        return index;
-    }
-
-    /**
-     * Anything other than letter and numbers are considered delimiters.  Remove start and end
-     * delimiters since they are not relevant to search.
-     *
-     * @param query The query string to clean.
-     * @return The cleaned query. Empty string if all characters are cleaned out.
-     */
-    public static String cleanStartAndEndOfSearchQuery(String query) {
-        int start = 0;
-        while (start < query.length()) {
-            int codePoint = query.codePointAt(start);
-            if (Character.isLetterOrDigit(codePoint)) {
-                break;
-            }
-            start += Character.charCount(codePoint);
-        }
-
-        if (start == query.length()) {
-            // All characters are delimiters.
-            return "";
-        }
-
-        int end = query.length() - 1;
-        while (end > -1) {
-            if (Character.isLowSurrogate(query.charAt(end))) {
-                // Assume valid i18n string.  There should be a matching high surrogate before it.
-                end--;
-            }
-            int codePoint = query.codePointAt(end);
-            if (Character.isLetterOrDigit(codePoint)) {
-                break;
-            }
-            end--;
-        }
-
-        // end is a letter or digit.
-        return query.substring(start, end + 1);
-    }
-}
diff --git a/src/com/android/contacts/common/util/StopWatch.java b/src/com/android/contacts/common/util/StopWatch.java
deleted file mode 100644
index 581d6ee..0000000
--- a/src/com/android/contacts/common/util/StopWatch.java
+++ /dev/null
@@ -1,110 +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.common.util;
-
-import android.util.Log;
-
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-
-/**
- * A {@link StopWatch} records start, laps and stop, and print them to logcat.
- */
-public class StopWatch {
-
-    private final String mLabel;
-
-    private final ArrayList<Long> mTimes = Lists.newArrayList();
-    private final ArrayList<String> mLapLabels = Lists.newArrayList();
-
-    private StopWatch(String label) {
-        mLabel = label;
-        lap("");
-    }
-
-    /**
-     * Create a new instance and start it.
-     */
-    public static StopWatch start(String label) {
-        return new StopWatch(label);
-    }
-
-    /**
-     * Record a lap.
-     */
-    public void lap(String lapLabel) {
-        mTimes.add(System.currentTimeMillis());
-        mLapLabels.add(lapLabel);
-    }
-
-    /**
-     * Stop it and log the result, if the total time >= {@code timeThresholdToLog}.
-     */
-    public void stopAndLog(String TAG, int timeThresholdToLog) {
-
-        lap("");
-
-        final long start = mTimes.get(0);
-        final long stop = mTimes.get(mTimes.size() - 1);
-
-        final long total = stop - start;
-        if (total < timeThresholdToLog) return;
-
-        final StringBuilder sb = new StringBuilder();
-        sb.append(mLabel);
-        sb.append(",");
-        sb.append(total);
-        sb.append(": ");
-
-        long last = start;
-        for (int i = 1; i < mTimes.size(); i++) {
-            final long current = mTimes.get(i);
-            sb.append(mLapLabels.get(i));
-            sb.append(",");
-            sb.append((current - last));
-            sb.append(" ");
-            last = current;
-        }
-        Log.v(TAG, sb.toString());
-    }
-
-    /**
-     * Return a dummy instance that does no operations.
-     */
-    public static StopWatch getNullStopWatch() {
-        return NullStopWatch.INSTANCE;
-    }
-
-    private static class NullStopWatch extends StopWatch {
-        public static final NullStopWatch INSTANCE = new NullStopWatch();
-
-        public NullStopWatch() {
-            super(null);
-        }
-
-        @Override
-        public void lap(String lapLabel) {
-            // noop
-        }
-
-        @Override
-        public void stopAndLog(String TAG, int timeThresholdToLog) {
-            // noop
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/util/TelephonyManagerUtils.java b/src/com/android/contacts/common/util/TelephonyManagerUtils.java
deleted file mode 100644
index 7c322ca..0000000
--- a/src/com/android/contacts/common/util/TelephonyManagerUtils.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.util;
-
-import android.content.Context;
-import android.telephony.PhoneNumberUtils;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-import java.util.Locale;
-
-/**
- * This class provides several TelephonyManager util functions.
- */
-public class TelephonyManagerUtils {
-
-    private static final String LOG_TAG = TelephonyManagerUtils.class.getSimpleName();
-
-    /**
-     * Gets the voicemail tag from Telephony Manager.
-     * @param context Current application context
-     * @return Voicemail tag, the alphabetic identifier associated with the voice mail number.
-     */
-    public static String getVoiceMailAlphaTag(Context context) {
-        final TelephonyManager telephonyManager =
-                (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-        final String voiceMailLabel = telephonyManager.getVoiceMailAlphaTag();
-        return voiceMailLabel;
-    }
-
-    /**
-     * @return The ISO 3166-1 two letters country code of the country the user
-     *         is in based on the network location. If the network location does not exist, fall
-     *         back to the locale setting.
-     */
-    public static String getCurrentCountryIso(Context context, Locale locale) {
-        // Without framework function calls, this seems to be the most accurate location service
-        // we can rely on.
-        final TelephonyManager telephonyManager =
-            (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-        String countryIso = telephonyManager.getNetworkCountryIso().toUpperCase();
-
-        if (countryIso == null) {
-            countryIso = locale.getCountry();
-            Log.w(LOG_TAG, "No CountryDetector; falling back to countryIso based on locale: "
-                    + countryIso);
-        }
-        return countryIso;
-    }
-
-    /**
-     * @param context Current application context.
-     * @return True if there is a subscription which supports video calls. False otherwise.
-     */
-    public static boolean hasVideoCallSubscription(Context context) {
-        // TODO: Check the telephony manager's subscriptions to see if any support video calls.
-        return true;
-    }
-}
diff --git a/src/com/android/contacts/common/util/TrafficStatsTags.java b/src/com/android/contacts/common/util/TrafficStatsTags.java
deleted file mode 100644
index 78faa94..0000000
--- a/src/com/android/contacts/common/util/TrafficStatsTags.java
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.util;
-
-public class TrafficStatsTags {
-    public static final int CONTACT_PHOTO_DOWNLOAD_TAG = 0x0001;
-    public static final int TAG_MAX = 0x9999;
-}
diff --git a/src/com/android/contacts/common/util/UriUtils.java b/src/com/android/contacts/common/util/UriUtils.java
deleted file mode 100644
index 41ef62f..0000000
--- a/src/com/android/contacts/common/util/UriUtils.java
+++ /dev/null
@@ -1,94 +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.common.util;
-
-import android.net.Uri;
-import android.provider.ContactsContract;
-
-import java.util.List;
-
-/**
- * Utility methods for dealing with URIs.
- */
-public class UriUtils {
-    /** Static helper, not instantiable. */
-    private UriUtils() {}
-
-    /** Checks whether two URI are equal, taking care of the case where either is null. */
-    public static boolean areEqual(Uri uri1, Uri uri2) {
-        if (uri1 == null && uri2 == null) {
-            return true;
-        }
-        if (uri1 == null || uri2 == null) {
-            return false;
-        }
-        return uri1.equals(uri2);
-    }
-
-    /** Parses a string into a URI and returns null if the given string is null. */
-    public static Uri parseUriOrNull(String uriString) {
-        if (uriString == null) {
-            return null;
-        }
-        return Uri.parse(uriString);
-    }
-
-    /** Converts a URI into a string, returns null if the given URI is null. */
-    public static String uriToString(Uri uri) {
-        return uri == null ? null : uri.toString();
-    }
-
-    public static boolean isEncodedContactUri(Uri uri) {
-        if (uri == null) {
-            return false;
-        }
-        final String lastPathSegment = uri.getLastPathSegment();
-        if (lastPathSegment == null) {
-            return false;
-        }
-        return lastPathSegment.equals(Constants.LOOKUP_URI_ENCODED);
-    }
-
-    /**
-     * @return {@code uri} as-is if the authority is of contacts provider.  Otherwise
-     * or {@code uri} is null, return null otherwise
-     */
-    public static Uri nullForNonContactsUri(Uri uri) {
-        if (uri == null) {
-            return null;
-        }
-        return ContactsContract.AUTHORITY.equals(uri.getAuthority()) ? uri : null;
-    }
-
-    /**
-     * Parses the given URI to determine the original lookup key of the contact.
-     */
-    public static String getLookupKeyFromUri(Uri lookupUri) {
-        // Would be nice to be able to persist the lookup key somehow to avoid having to parse
-        // the uri entirely just to retrieve the lookup key, but every uri is already parsed
-        // once anyway to check if it is an encoded JSON uri, so this has negligible effect
-        // on performance.
-        if (lookupUri != null && !UriUtils.isEncodedContactUri(lookupUri)) {
-            final List<String> segments = lookupUri.getPathSegments();
-            // This returns the third path segment of the uri, where the lookup key is located.
-            // See {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}.
-            return (segments.size() < 3) ? null : Uri.encode(segments.get(2));
-        } else {
-            return null;
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/util/ViewUtil.java b/src/com/android/contacts/common/util/ViewUtil.java
deleted file mode 100644
index 895b757..0000000
--- a/src/com/android/contacts/common/util/ViewUtil.java
+++ /dev/null
@@ -1,127 +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.common.util;
-
-import android.content.res.Resources;
-import android.graphics.Outline;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewOutlineProvider;
-import android.widget.ListView;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.compat.CompatUtils;
-
-/**
- * Provides static functions to work with views
- */
-public class ViewUtil {
-    private ViewUtil() {}
-
-    /**
-     * Returns the width as specified in the LayoutParams
-     * @throws IllegalStateException Thrown if the view's width is unknown before a layout pass
-     * s
-     */
-    public static int getConstantPreLayoutWidth(View view) {
-        // We haven't been layed out yet, so get the size from the LayoutParams
-        final ViewGroup.LayoutParams p = view.getLayoutParams();
-        if (p.width < 0) {
-            throw new IllegalStateException("Expecting view's width to be a constant rather " +
-                    "than a result of the layout pass");
-        }
-        return p.width;
-    }
-
-    /**
-     * Returns a boolean indicating whether or not the view's layout direction is RTL
-     *
-     * @param view - A valid view
-     * @return True if the view's layout direction is RTL
-     */
-    public static boolean isViewLayoutRtl(View view) {
-        return view.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
-    }
-
-    private static final ViewOutlineProvider OVAL_OUTLINE_PROVIDER;
-    static {
-        if (CompatUtils.isLollipopCompatible()) {
-            OVAL_OUTLINE_PROVIDER = new ViewOutlineProvider() {
-                @Override
-                public void getOutline(View view, Outline outline) {
-                    outline.setOval(0, 0, view.getWidth(), view.getHeight());
-                }
-            };
-        } else {
-            OVAL_OUTLINE_PROVIDER = null;
-        }
-    }
-
-    private static final ViewOutlineProvider RECT_OUTLINE_PROVIDER;
-    static {
-        if (CompatUtils.isLollipopCompatible()) {
-            RECT_OUTLINE_PROVIDER = new ViewOutlineProvider() {
-                @Override
-                public void getOutline(View view, Outline outline) {
-                    outline.setRect(0, 0, view.getWidth(), view.getHeight());
-                }
-            };
-        } else {
-            RECT_OUTLINE_PROVIDER = null;
-        }
-    }
-
-    /**
-     * Adds a rectangular outline to a view. This can be useful when you want to add a shadow
-     * to a transparent view. See b/16856049.
-     * @param view view that the outline is added to
-     * @param res The resources file.
-     */
-    public static void addRectangularOutlineProvider(View view, Resources res) {
-        if (CompatUtils.isLollipopCompatible()) {
-            view.setOutlineProvider(RECT_OUTLINE_PROVIDER);
-        }
-    }
-
-    /**
-     * Configures the floating action button, clipping it to a circle and setting its translation z.
-     * @param view The float action button's view.
-     * @param res The resources file.
-     */
-    public static void setupFloatingActionButton(View view, Resources res) {
-        if (CompatUtils.isLollipopCompatible()) {
-            view.setOutlineProvider(OVAL_OUTLINE_PROVIDER);
-            view.setTranslationZ(
-                    res.getDimensionPixelSize(R.dimen.floating_action_button_translation_z));
-        }
-    }
-
-    /**
-     * Adds padding to the bottom of the given {@link ListView} so that the floating action button
-     * does not obscure any content.
-     *
-     * @param listView to add the padding to
-     * @param res valid resources object
-     */
-    public static void addBottomPaddingToListViewForFab(ListView listView, Resources res) {
-        final int fabPadding = res.getDimensionPixelSize(
-                R.dimen.floating_action_button_list_bottom_padding);
-        listView.setPaddingRelative(listView.getPaddingStart(), listView.getPaddingTop(),
-                listView.getPaddingEnd(), listView.getPaddingBottom() + fabPadding);
-        listView.setClipToPadding(false);
-    }
-}
diff --git a/src/com/android/contacts/common/util/WeakAsyncTask.java b/src/com/android/contacts/common/util/WeakAsyncTask.java
deleted file mode 100644
index f46e514..0000000
--- a/src/com/android/contacts/common/util/WeakAsyncTask.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.util;
-
-import android.os.AsyncTask;
-
-import java.lang.ref.WeakReference;
-
-public abstract class WeakAsyncTask<Params, Progress, Result, WeakTarget> extends
-        AsyncTask<Params, Progress, Result> {
-    protected WeakReference<WeakTarget> mTarget;
-
-    public WeakAsyncTask(WeakTarget target) {
-        mTarget = new WeakReference<WeakTarget>(target);
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected final void onPreExecute() {
-        final WeakTarget target = mTarget.get();
-        if (target != null) {
-            this.onPreExecute(target);
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected final Result doInBackground(Params... params) {
-        final WeakTarget target = mTarget.get();
-        if (target != null) {
-            return this.doInBackground(target, params);
-        } else {
-            return null;
-        }
-    }
-
-    /** {@inheritDoc} */
-    @Override
-    protected final void onPostExecute(Result result) {
-        final WeakTarget target = mTarget.get();
-        if (target != null) {
-            this.onPostExecute(target, result);
-        }
-    }
-
-    protected void onPreExecute(WeakTarget target) {
-        // No default action
-    }
-
-    protected abstract Result doInBackground(WeakTarget target, Params... params);
-
-    protected void onPostExecute(WeakTarget target, Result result) {
-        // No default action
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/CancelActivity.java b/src/com/android/contacts/common/vcard/CancelActivity.java
deleted file mode 100644
index 8e393e1..0000000
--- a/src/com/android/contacts/common/vcard/CancelActivity.java
+++ /dev/null
@@ -1,130 +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.common.vcard;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.util.Log;
-
-import com.android.contacts.common.R;
-
-/**
- * The Activity for canceling vCard import/export.
- */
-public class CancelActivity extends Activity implements ServiceConnection {
-    private final String LOG_TAG = "VCardCancel";
-
-    /* package */ final static String JOB_ID = "job_id";
-    /* package */ final static String DISPLAY_NAME = "display_name";
-
-    /**
-     * Type of the process to be canceled. Only used for choosing appropriate title/message.
-     * Must be {@link VCardService#TYPE_IMPORT} or {@link VCardService#TYPE_EXPORT}.
-     */
-    /* package */ final static String TYPE = "type";
-
-    private class RequestCancelListener implements DialogInterface.OnClickListener {
-        @Override
-        public void onClick(DialogInterface dialog, int which) {
-            bindService(new Intent(CancelActivity.this,
-                    VCardService.class), CancelActivity.this, Context.BIND_AUTO_CREATE);
-        }
-    }
-
-    private class CancelListener
-            implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
-        @Override
-        public void onClick(DialogInterface dialog, int which) {
-            finish();
-        }
-        @Override
-        public void onCancel(DialogInterface dialog) {
-            finish();
-        }
-    }
-
-    private final CancelListener mCancelListener = new CancelListener();
-    private int mJobId;
-    private String mDisplayName;
-    private int mType;
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        final Uri uri = getIntent().getData();
-        mJobId = Integer.parseInt(uri.getQueryParameter(JOB_ID));
-        mDisplayName = uri.getQueryParameter(DISPLAY_NAME);
-        mType = Integer.parseInt(uri.getQueryParameter(TYPE));
-        showDialog(R.id.dialog_cancel_confirmation);
-    }
-
-    @Override
-    protected Dialog onCreateDialog(int id, Bundle bundle) {
-        if (id == R.id.dialog_cancel_confirmation) {
-            final String message;
-            if (mType == VCardService.TYPE_IMPORT) {
-                message = getString(R.string.cancel_import_confirmation_message, mDisplayName);
-            } else {
-                message = getString(R.string.cancel_export_confirmation_message, mDisplayName);
-            }
-            final AlertDialog.Builder builder = new AlertDialog.Builder(this)
-                    .setMessage(message)
-                    .setPositiveButton(android.R.string.ok, new RequestCancelListener())
-                    .setOnCancelListener(mCancelListener)
-                    .setNegativeButton(android.R.string.cancel, mCancelListener);
-            return builder.create();
-        } else if (id == R.id.dialog_cancel_failed) {
-            final AlertDialog.Builder builder = new AlertDialog.Builder(this)
-                    .setTitle(R.string.cancel_vcard_import_or_export_failed)
-                    .setIconAttribute(android.R.attr.alertDialogIcon)
-                    .setMessage(getString(R.string.fail_reason_unknown))
-                    .setOnCancelListener(mCancelListener)
-                    .setPositiveButton(android.R.string.ok, mCancelListener);
-            return builder.create();
-        } else {
-            Log.w(LOG_TAG, "Unknown dialog id: " + id);
-            return super.onCreateDialog(id, bundle);
-        }
-    }
-
-    @Override
-    public void onServiceConnected(ComponentName name, IBinder binder) {
-        VCardService service = ((VCardService.MyBinder) binder).getService();
-
-        try {
-            final CancelRequest request = new CancelRequest(mJobId, mDisplayName);
-            service.handleCancelRequest(request, null);
-        } finally {
-            unbindService(this);
-        }
-
-        finish();
-    }
-
-    @Override
-    public void onServiceDisconnected(ComponentName name) {
-        // do nothing
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/CancelRequest.java b/src/com/android/contacts/common/vcard/CancelRequest.java
deleted file mode 100644
index a5eb4aa..0000000
--- a/src/com/android/contacts/common/vcard/CancelRequest.java
+++ /dev/null
@@ -1,32 +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.common.vcard;
-
-/**
- * Class representing one request for canceling vCard import/export.
- */
-public class CancelRequest {
-    public final int jobId;
-    /**
-     * Name used for showing users some useful info. Typically a file name.
-     * Must not be used to do some actual operations.
-     */
-    public final String displayName;
-    public CancelRequest(int jobId, String displayName) {
-        this.jobId = jobId;
-        this.displayName = displayName;
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/ExportProcessor.java b/src/com/android/contacts/common/vcard/ExportProcessor.java
deleted file mode 100644
index 48420da..0000000
--- a/src/com/android/contacts/common/vcard/ExportProcessor.java
+++ /dev/null
@@ -1,340 +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.common.vcard;
-
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.net.Uri;
-import android.os.Handler;
-import android.os.Message;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.RawContactsEntity;
-import android.text.TextUtils;
-import android.util.Log;
-import android.widget.Toast;
-
-import com.android.contacts.common.R;
-import com.android.contactsbind.FeedbackHelper;
-import com.android.vcard.VCardComposer;
-import com.android.vcard.VCardConfig;
-
-import java.io.BufferedWriter;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-
-/**
- * Class for processing one export request from a user. Dropped after exporting requested Uri(s).
- * {@link VCardService} will create another object when there is another export request.
- */
-public class ExportProcessor extends ProcessorBase {
-    private static final String LOG_TAG = "VCardExport";
-    private static final boolean DEBUG = VCardService.DEBUG;
-
-    private final VCardService mService;
-    private final ContentResolver mResolver;
-    private final NotificationManager mNotificationManager;
-    private final ExportRequest mExportRequest;
-    private final int mJobId;
-    private final String mCallingActivity;
-
-    private volatile boolean mCanceled;
-    private volatile boolean mDone;
-
-    private final int SHOW_READY_TOAST = 1;
-    private final Handler handler = new Handler() {
-        public void handleMessage(Message msg) {
-            if (msg.arg1 == SHOW_READY_TOAST) {
-                // This message is long, so we set the duration to LENGTH_LONG.
-                Toast.makeText(mService,
-                        R.string.exporting_vcard_finished_toast, Toast.LENGTH_LONG).show();
-            }
-
-        }
-    };
-
-    public ExportProcessor(VCardService service, ExportRequest exportRequest, int jobId,
-            String callingActivity) {
-        mService = service;
-        mResolver = service.getContentResolver();
-        mNotificationManager =
-                (NotificationManager)mService.getSystemService(Context.NOTIFICATION_SERVICE);
-        mExportRequest = exportRequest;
-        mJobId = jobId;
-        mCallingActivity = callingActivity;
-    }
-
-    @Override
-    public final int getType() {
-        return VCardService.TYPE_EXPORT;
-    }
-
-    @Override
-    public void run() {
-        // ExecutorService ignores RuntimeException, so we need to show it here.
-        try {
-            runInternal();
-
-            if (isCancelled()) {
-                doCancelNotification();
-            }
-        } catch (OutOfMemoryError|RuntimeException e) {
-            FeedbackHelper.sendFeedback(mService, LOG_TAG, "Failed to process vcard export", e);
-            throw e;
-        } finally {
-            synchronized (this) {
-                mDone = true;
-            }
-        }
-    }
-
-    private void runInternal() {
-        if (DEBUG) Log.d(LOG_TAG, String.format("vCard export (id: %d) has started.", mJobId));
-        final ExportRequest request = mExportRequest;
-        VCardComposer composer = null;
-        Writer writer = null;
-        boolean successful = false;
-        try {
-            if (isCancelled()) {
-                Log.i(LOG_TAG, "Export request is cancelled before handling the request");
-                return;
-            }
-            final Uri uri = request.destUri;
-            final OutputStream outputStream;
-            try {
-                outputStream = mResolver.openOutputStream(uri);
-            } catch (FileNotFoundException e) {
-                Log.w(LOG_TAG, "FileNotFoundException thrown", e);
-                // Need concise title.
-
-                final String errorReason =
-                    mService.getString(R.string.fail_reason_could_not_open_file,
-                            uri, e.getMessage());
-                doFinishNotification(errorReason, null);
-                return;
-            }
-
-            final String exportType = request.exportType;
-            final int vcardType;
-            if (TextUtils.isEmpty(exportType)) {
-                vcardType = VCardConfig.getVCardTypeFromString(
-                        mService.getString(R.string.config_export_vcard_type));
-            } else {
-                vcardType = VCardConfig.getVCardTypeFromString(exportType);
-            }
-
-            composer = new VCardComposer(mService, vcardType, true);
-
-            // for test
-            // int vcardType = (VCardConfig.VCARD_TYPE_V21_GENERIC |
-            //     VCardConfig.FLAG_USE_QP_TO_PRIMARY_PROPERTIES);
-            // composer = new VCardComposer(ExportVCardActivity.this, vcardType, true);
-
-            writer = new BufferedWriter(new OutputStreamWriter(outputStream));
-            final Uri contentUriForRawContactsEntity = RawContactsEntity.CONTENT_URI;
-            // TODO: should provide better selection.
-            if (!composer.init(Contacts.CONTENT_URI, new String[] {Contacts._ID},
-                    null, null,
-                    null, contentUriForRawContactsEntity)) {
-                final String errorReason = composer.getErrorReason();
-                Log.e(LOG_TAG, "initialization of vCard composer failed: " + errorReason);
-                final String translatedErrorReason =
-                        translateComposerError(errorReason);
-                final String title =
-                        mService.getString(R.string.fail_reason_could_not_initialize_exporter,
-                                translatedErrorReason);
-                doFinishNotification(title, null);
-                return;
-            }
-
-            final int total = composer.getCount();
-            if (total == 0) {
-                final String title =
-                        mService.getString(R.string.fail_reason_no_exportable_contact);
-                doFinishNotification(title, null);
-                return;
-            }
-
-            int current = 1;  // 1-origin
-            while (!composer.isAfterLast()) {
-                if (isCancelled()) {
-                    Log.i(LOG_TAG, "Export request is cancelled during composing vCard");
-                    return;
-                }
-                try {
-                    writer.write(composer.createOneEntry());
-                } catch (IOException e) {
-                    final String errorReason = composer.getErrorReason();
-                    Log.e(LOG_TAG, "Failed to read a contact: " + errorReason);
-                    final String translatedErrorReason =
-                            translateComposerError(errorReason);
-                    final String title =
-                            mService.getString(R.string.fail_reason_error_occurred_during_export,
-                                    translatedErrorReason);
-                    doFinishNotification(title, null);
-                    return;
-                }
-
-                // vCard export is quite fast (compared to import), and frequent notifications
-                // bother notification bar too much.
-                if (current % 100 == 1) {
-                    doProgressNotification(uri, total, current);
-                }
-                current++;
-            }
-            Log.i(LOG_TAG, "Successfully finished exporting vCard " + request.destUri);
-
-            if (DEBUG) {
-                Log.d(LOG_TAG, "Ask MediaScanner to scan the file: " + request.destUri.getPath());
-            }
-            mService.updateMediaScanner(request.destUri.getPath());
-
-            successful = true;
-            final String filename = ExportVCardActivity.getOpenableUriDisplayName(mService, uri);
-            // If it is a local file (i.e. not a file from Drive), we need to allow user to share
-            // the file by pressing the notification; otherwise, it would be a file in Drive, we
-            // don't need to enable this action in notification since the file is already uploaded.
-            if (isLocalFile(uri)) {
-                final Message msg = handler.obtainMessage();
-                msg.arg1 = SHOW_READY_TOAST;
-                handler.sendMessage(msg);
-                doFinishNotificationWithShareAction(
-                        mService.getString(R.string.exporting_vcard_finished_title_fallback),
-                        mService.getString(R.string.touch_to_share_contacts), uri);
-            } else {
-                final String title = filename == null
-                        ? mService.getString(R.string.exporting_vcard_finished_title_fallback)
-                        : mService.getString(R.string.exporting_vcard_finished_title, filename);
-                doFinishNotification(title, null);
-            }
-        } finally {
-            if (composer != null) {
-                composer.terminate();
-            }
-            if (writer != null) {
-                try {
-                    writer.close();
-                } catch (IOException e) {
-                    Log.w(LOG_TAG, "IOException is thrown during close(). Ignored. " + e);
-                }
-            }
-            mService.handleFinishExportNotification(mJobId, successful);
-        }
-    }
-
-    private boolean isLocalFile(Uri uri) {
-        final String authority = uri.getAuthority();
-        return mService.getString(R.string.contacts_file_provider_authority).equals(authority);
-    }
-
-    private String translateComposerError(String errorMessage) {
-        final Resources resources = mService.getResources();
-        if (VCardComposer.FAILURE_REASON_FAILED_TO_GET_DATABASE_INFO.equals(errorMessage)) {
-            return resources.getString(R.string.composer_failed_to_get_database_infomation);
-        } else if (VCardComposer.FAILURE_REASON_NO_ENTRY.equals(errorMessage)) {
-            return resources.getString(R.string.composer_has_no_exportable_contact);
-        } else if (VCardComposer.FAILURE_REASON_NOT_INITIALIZED.equals(errorMessage)) {
-            return resources.getString(R.string.composer_not_initialized);
-        } else {
-            return errorMessage;
-        }
-    }
-
-    private void doProgressNotification(Uri uri, int totalCount, int currentCount) {
-        final String displayName = uri.getLastPathSegment();
-        final String description =
-                mService.getString(R.string.exporting_contact_list_message, displayName);
-        final String tickerText =
-                mService.getString(R.string.exporting_contact_list_title);
-        final Notification notification =
-                NotificationImportExportListener.constructProgressNotification(mService,
-                        VCardService.TYPE_EXPORT, description, tickerText, mJobId, displayName,
-                        totalCount, currentCount);
-        mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
-                mJobId, notification);
-    }
-
-    private void doCancelNotification() {
-        if (DEBUG) Log.d(LOG_TAG, "send cancel notification");
-        final String description = mService.getString(R.string.exporting_vcard_canceled_title,
-                mExportRequest.destUri.getLastPathSegment());
-        final Notification notification =
-                NotificationImportExportListener.constructCancelNotification(mService, description);
-        mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
-                mJobId, notification);
-    }
-
-    private void doFinishNotification(final String title, final String description) {
-        if (DEBUG) Log.d(LOG_TAG, "send finish notification: " + title + ", " + description);
-        final Intent intent = new Intent();
-        intent.setClassName(mService, mCallingActivity);
-        final Notification notification =
-                NotificationImportExportListener.constructFinishNotification(mService, title,
-                        description, intent);
-        mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
-                mJobId, notification);
-    }
-
-    /**
-     * Pass intent with ACTION_SEND to notification so that user can press the notification to
-     * share contacts.
-     */
-    private void doFinishNotificationWithShareAction(final String title, final String
-            description, Uri uri) {
-        if (DEBUG) Log.d(LOG_TAG, "send finish notification: " + title + ", " + description);
-        final Intent intent = new Intent(Intent.ACTION_SEND);
-        intent.setType(Contacts.CONTENT_VCARD_TYPE);
-        intent.putExtra(Intent.EXTRA_STREAM, uri);
-        // Securely grant access using temporary access permissions
-        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
-        // Build notification
-        final Notification notification =
-                NotificationImportExportListener.constructFinishNotificationWithFlags(
-                        mService, title, description, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
-        mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
-                mJobId, notification);
-    }
-
-    @Override
-    public synchronized boolean cancel(boolean mayInterruptIfRunning) {
-        if (DEBUG) Log.d(LOG_TAG, "received cancel request");
-        if (mDone || mCanceled) {
-            return false;
-        }
-        mCanceled = true;
-        return true;
-    }
-
-    @Override
-    public synchronized boolean isCancelled() {
-        return mCanceled;
-    }
-
-    @Override
-    public synchronized boolean isDone() {
-        return mDone;
-    }
-
-    public ExportRequest getRequest() {
-        return mExportRequest;
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/ExportRequest.java b/src/com/android/contacts/common/vcard/ExportRequest.java
deleted file mode 100644
index e05a32c..0000000
--- a/src/com/android/contacts/common/vcard/ExportRequest.java
+++ /dev/null
@@ -1,35 +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.common.vcard;
-
-import android.net.Uri;
-
-public class ExportRequest {
-    public final Uri destUri;
-    /**
-     * Can be null.
-     */
-    public final String exportType;
-
-    public ExportRequest(Uri destUri) {
-        this(destUri, null);
-    }
-
-    public ExportRequest(Uri destUri, String exportType) {
-        this.destUri = destUri;
-        this.exportType = exportType;
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/ExportVCardActivity.java b/src/com/android/contacts/common/vcard/ExportVCardActivity.java
deleted file mode 100644
index 18de505..0000000
--- a/src/com/android/contacts/common/vcard/ExportVCardActivity.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.vcard;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.provider.OpenableColumns;
-import android.text.BidiFormatter;
-import android.text.TextDirectionHeuristics;
-import android.util.Log;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.activity.RequestImportVCardPermissionsActivity;
-
-import java.util.List;
-
-/**
- * Shows a dialog confirming the export and asks actual vCard export to {@link VCardService}
- *
- * This Activity first connects to VCardService and ask an available file name and shows it to
- * a user. After the user's confirmation, it send export request with the file name, assuming the
- * file name is not reserved yet.
- */
-public class ExportVCardActivity extends Activity implements ServiceConnection,
-        DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
-    private static final String LOG_TAG = "VCardExport";
-    protected static final boolean DEBUG = VCardService.DEBUG;
-    private static final int REQUEST_CREATE_DOCUMENT = 100;
-
-    /**
-     * True when this Activity is connected to {@link VCardService}.
-     *
-     * Should be touched inside synchronized block.
-     */
-    protected boolean mConnected;
-
-    /**
-     * True when users need to do something and this Activity should not disconnect from
-     * VCardService. False when all necessary procedures are done (including sending export request)
-     * or there's some error occured.
-     */
-    private volatile boolean mProcessOngoing = true;
-
-    protected VCardService mService;
-    private static final BidiFormatter mBidiFormatter = BidiFormatter.getInstance();
-
-    // String for storing error reason temporarily.
-    private String mErrorReason;
-
-    @Override
-    protected void onCreate(Bundle bundle) {
-        super.onCreate(bundle);
-
-        if (RequestImportVCardPermissionsActivity.startPermissionActivity(this)) {
-            return;
-        }
-
-        if (!hasExportIntentHandler()) {
-            Log.e(LOG_TAG, "Couldn't find export intent handler");
-            showErrorDialog();
-            return;
-        }
-
-        connectVCardService();
-    }
-
-    private void connectVCardService() {
-        final String callingActivity = getIntent().getExtras()
-                .getString(VCardCommonArguments.ARG_CALLING_ACTIVITY);
-        Intent intent = new Intent(this, VCardService.class);
-        intent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY, callingActivity);
-
-        if (startService(intent) == null) {
-            Log.e(LOG_TAG, "Failed to start vCard service");
-            showErrorDialog();
-            return;
-        }
-
-        if (!bindService(intent, this, Context.BIND_AUTO_CREATE)) {
-            Log.e(LOG_TAG, "Failed to connect to vCard service.");
-            showErrorDialog();
-        }
-        // Continued to onServiceConnected()
-    }
-
-    private boolean hasExportIntentHandler() {
-        final Intent intent = getCreateDocIntent();
-        final List<ResolveInfo> receivers = getPackageManager().queryIntentActivities(intent,
-                PackageManager.MATCH_DEFAULT_ONLY);
-        return receivers != null && receivers.size() > 0;
-    }
-
-    private Intent getCreateDocIntent() {
-        final Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
-        intent.addCategory(Intent.CATEGORY_OPENABLE);
-        intent.setType(VCardService.X_VCARD_MIME_TYPE);
-        intent.putExtra(Intent.EXTRA_TITLE, mBidiFormatter.unicodeWrap(
-                getString(R.string.exporting_vcard_filename), TextDirectionHeuristics.LTR));
-        return intent;
-    }
-
-    private void showErrorDialog() {
-        mErrorReason = getString(R.string.fail_reason_unknown);
-        showDialog(R.id.dialog_fail_to_export_with_reason);
-    }
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == REQUEST_CREATE_DOCUMENT) {
-            if (resultCode == Activity.RESULT_OK && mService != null &&
-                    data != null && data.getData() != null) {
-                final Uri targetFileName = data.getData();
-                if (DEBUG) Log.d(LOG_TAG, "exporting to " + targetFileName);
-                final ExportRequest request = new ExportRequest(targetFileName);
-                // The connection object will call finish().
-                mService.handleExportRequest(request, new NotificationImportExportListener(
-                        ExportVCardActivity.this));
-            } else if (DEBUG) {
-                if (mService == null) {
-                    Log.d(LOG_TAG, "No vCard service.");
-                } else {
-                    Log.d(LOG_TAG, "create document cancelled or no data returned");
-                }
-            }
-            finish();
-        }
-    }
-
-    @Override
-    public synchronized void onServiceConnected(ComponentName name, IBinder binder) {
-        if (DEBUG) Log.d(LOG_TAG, "connected to service, requesting a destination file name");
-        mConnected = true;
-        mService = ((VCardService.MyBinder) binder).getService();
-
-        // Have the user choose where vcards will be exported to
-        startActivityForResult(getCreateDocIntent(), REQUEST_CREATE_DOCUMENT);
-    }
-
-    // Use synchronized since we don't want to call finish() just after this call.
-    @Override
-    public synchronized void onServiceDisconnected(ComponentName name) {
-        if (DEBUG) Log.d(LOG_TAG, "onServiceDisconnected()");
-        mService = null;
-        mConnected = false;
-        if (mProcessOngoing) {
-            // Unexpected disconnect event.
-            Log.w(LOG_TAG, "Disconnected from service during the process ongoing.");
-            showErrorDialog();
-        }
-    }
-
-    @Override
-    protected Dialog onCreateDialog(int id, Bundle bundle) {
-        if (id == R.id.dialog_fail_to_export_with_reason) {
-            mProcessOngoing = false;
-            return new AlertDialog.Builder(this)
-                    .setTitle(R.string.exporting_contact_failed_title)
-                    .setMessage(getString(R.string.exporting_contact_failed_message,
-                            mErrorReason != null ? mErrorReason :
-                                    getString(R.string.fail_reason_unknown)))
-                    .setPositiveButton(android.R.string.ok, this)
-                    .setOnCancelListener(this)
-                    .create();
-        }
-        return super.onCreateDialog(id, bundle);
-    }
-
-    @Override
-    protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
-        if (id == R.id.dialog_fail_to_export_with_reason) {
-            ((AlertDialog)dialog).setMessage(mErrorReason);
-        } else {
-            super.onPrepareDialog(id, dialog, args);
-        }
-    }
-
-    @Override
-    public void onClick(DialogInterface dialog, int which) {
-        if (DEBUG) Log.d(LOG_TAG, "ExportVCardActivity#onClick() is called");
-        finish();
-    }
-
-    @Override
-    public void onCancel(DialogInterface dialog) {
-        if (DEBUG) Log.d(LOG_TAG, "ExportVCardActivity#onCancel() is called");
-        mProcessOngoing = false;
-        finish();
-    }
-
-    @Override
-    public void unbindService(ServiceConnection conn) {
-        mProcessOngoing = false;
-        super.unbindService(conn);
-    }
-
-    @Override
-    protected void onDestroy() {
-        if (mConnected) {
-            unbindService(this);
-            mConnected = false;
-        }
-        super.onDestroy();
-    }
-
-    /**
-     * Returns the display name for the given openable Uri or null if it could not be resolved. */
-    static String getOpenableUriDisplayName(Context context, Uri uri) {
-        if (uri == null) return null;
-        final Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
-        try {
-            if (cursor != null && cursor.moveToFirst()) {
-                return cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
-            }
-        } finally {
-            if (cursor != null)  {
-                cursor.close();
-            }
-        }
-        return null;
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/ImportProcessor.java b/src/com/android/contacts/common/vcard/ImportProcessor.java
deleted file mode 100644
index 36836c6..0000000
--- a/src/com/android/contacts/common/vcard/ImportProcessor.java
+++ /dev/null
@@ -1,298 +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.common.vcard;
-
-import android.accounts.Account;
-import android.content.ContentResolver;
-import android.net.Uri;
-import android.util.Log;
-
-import com.android.contactsbind.FeedbackHelper;
-import com.android.vcard.VCardEntry;
-import com.android.vcard.VCardEntryCommitter;
-import com.android.vcard.VCardEntryConstructor;
-import com.android.vcard.VCardEntryHandler;
-import com.android.vcard.VCardInterpreter;
-import com.android.vcard.VCardParser;
-import com.android.vcard.VCardParser_V21;
-import com.android.vcard.VCardParser_V30;
-import com.android.vcard.exception.VCardException;
-import com.android.vcard.exception.VCardNotSupportedException;
-import com.android.vcard.exception.VCardVersionException;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Class for processing one import request from a user. Dropped after importing requested Uri(s).
- * {@link VCardService} will create another object when there is another import request.
- */
-public class ImportProcessor extends ProcessorBase implements VCardEntryHandler {
-    private static final String LOG_TAG = "VCardImport";
-    private static final boolean DEBUG = VCardService.DEBUG;
-
-    private final VCardService mService;
-    private final ContentResolver mResolver;
-    private final ImportRequest mImportRequest;
-    private final int mJobId;
-    private final VCardImportExportListener mListener;
-
-    // TODO: remove and show appropriate message instead.
-    private final List<Uri> mFailedUris = new ArrayList<Uri>();
-
-    private VCardParser mVCardParser;
-
-    private volatile boolean mCanceled;
-    private volatile boolean mDone;
-
-    private int mCurrentCount = 0;
-    private int mTotalCount = 0;
-
-    public ImportProcessor(final VCardService service, final VCardImportExportListener listener,
-            final ImportRequest request, final int jobId) {
-        mService = service;
-        mResolver = mService.getContentResolver();
-        mListener = listener;
-
-        mImportRequest = request;
-        mJobId = jobId;
-    }
-
-    @Override
-    public void onStart() {
-        // do nothing
-    }
-
-    @Override
-    public void onEnd() {
-        // do nothing
-    }
-
-    @Override
-    public void onEntryCreated(VCardEntry entry) {
-        mCurrentCount++;
-        if (mListener != null) {
-            mListener.onImportParsed(mImportRequest, mJobId, entry, mCurrentCount, mTotalCount);
-        }
-    }
-
-    @Override
-    public final int getType() {
-        return VCardService.TYPE_IMPORT;
-    }
-
-    @Override
-    public void run() {
-        // ExecutorService ignores RuntimeException, so we need to show it here.
-        try {
-            runInternal();
-
-            if (isCancelled() && mListener != null) {
-                mListener.onImportCanceled(mImportRequest, mJobId);
-            }
-        } catch (OutOfMemoryError|RuntimeException e) {
-            FeedbackHelper.sendFeedback(mService, LOG_TAG, "Vcard import failed", e);
-        } finally {
-            synchronized (this) {
-                mDone = true;
-            }
-        }
-    }
-
-    private void runInternal() {
-        Log.i(LOG_TAG, String.format("vCard import (id: %d) has started.", mJobId));
-        final ImportRequest request = mImportRequest;
-        if (isCancelled()) {
-            Log.i(LOG_TAG, "Canceled before actually handling parameter (" + request.uri + ")");
-            return;
-        }
-        final int[] possibleVCardVersions;
-        if (request.vcardVersion == ImportVCardActivity.VCARD_VERSION_AUTO_DETECT) {
-            /**
-             * Note: this code assumes that a given Uri is able to be opened more than once,
-             * which may not be true in certain conditions.
-             */
-            possibleVCardVersions = new int[] {
-                    ImportVCardActivity.VCARD_VERSION_V21,
-                    ImportVCardActivity.VCARD_VERSION_V30
-            };
-        } else {
-            possibleVCardVersions = new int[] {
-                    request.vcardVersion
-            };
-        }
-
-        final Uri uri = request.uri;
-        final Account account = request.account;
-        final int estimatedVCardType = request.estimatedVCardType;
-        final String estimatedCharset = request.estimatedCharset;
-        final int entryCount = request.entryCount;
-        mTotalCount += entryCount;
-
-        final VCardEntryConstructor constructor =
-                new VCardEntryConstructor(estimatedVCardType, account, estimatedCharset);
-        final VCardEntryCommitter committer = new VCardEntryCommitter(mResolver);
-        constructor.addEntryHandler(committer);
-        constructor.addEntryHandler(this);
-
-        InputStream is = null;
-        boolean successful = false;
-        try {
-            if (uri != null) {
-                Log.i(LOG_TAG, "start importing one vCard (Uri: " + uri + ")");
-                is = mResolver.openInputStream(uri);
-            } else if (request.data != null){
-                Log.i(LOG_TAG, "start importing one vCard (byte[])");
-                is = new ByteArrayInputStream(request.data);
-            }
-
-            if (is != null) {
-                successful = readOneVCard(is, estimatedVCardType, estimatedCharset, constructor,
-                        possibleVCardVersions);
-            }
-        } catch (IOException e) {
-            successful = false;
-        } finally {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (Exception e) {
-                    // ignore
-                }
-            }
-        }
-
-        mService.handleFinishImportNotification(mJobId, successful);
-
-        if (successful) {
-            // TODO: successful becomes true even when cancelled. Should return more appropriate
-            // value
-            if (isCancelled()) {
-                Log.i(LOG_TAG, "vCard import has been canceled (uri: " + uri + ")");
-                // Cancel notification will be done outside this method.
-            } else {
-                Log.i(LOG_TAG, "Successfully finished importing one vCard file: " + uri);
-                List<Uri> uris = committer.getCreatedUris();
-                if (mListener != null) {
-                    if (uris != null && uris.size() == 1) {
-                        mListener.onImportFinished(mImportRequest, mJobId, uris.get(0));
-                    } else {
-                        if (uris == null || uris.size() == 0) {
-                            // Not critical, but suspicious.
-                            Log.w(LOG_TAG,  "Created Uris is null or 0 length " +
-                                    "though the creation itself is successful.");
-                        }
-                        mListener.onImportFinished(mImportRequest, mJobId, null);
-                    }
-                }
-            }
-        } else {
-            Log.w(LOG_TAG, "Failed to read one vCard file: " + uri);
-            mFailedUris.add(uri);
-        }
-    }
-
-    private boolean readOneVCard(InputStream is, int vcardType, String charset,
-            final VCardInterpreter interpreter,
-            final int[] possibleVCardVersions) {
-        boolean successful = false;
-        final int length = possibleVCardVersions.length;
-        for (int i = 0; i < length; i++) {
-            final int vcardVersion = possibleVCardVersions[i];
-            try {
-                if (i > 0 && (interpreter instanceof VCardEntryConstructor)) {
-                    // Let the object clean up internal temporary objects,
-                    ((VCardEntryConstructor) interpreter).clear();
-                }
-
-                // We need synchronized block here,
-                // since we need to handle mCanceled and mVCardParser at once.
-                // In the worst case, a user may call cancel() just before creating
-                // mVCardParser.
-                synchronized (this) {
-                    mVCardParser = (vcardVersion == ImportVCardActivity.VCARD_VERSION_V30 ?
-                            new VCardParser_V30(vcardType) :
-                                new VCardParser_V21(vcardType));
-                    if (isCancelled()) {
-                        Log.i(LOG_TAG, "ImportProcessor already recieves cancel request, so " +
-                                "send cancel request to vCard parser too.");
-                        mVCardParser.cancel();
-                    }
-                }
-                mVCardParser.parse(is, interpreter);
-
-                successful = true;
-                break;
-            } catch (IOException|VCardNotSupportedException e) {
-                // VCardNestedException (a subclass of VCardNotSupportedException) should
-                // not be thrown here. We should instead handle it
-                // in the preprocessing session in ImportVCardActivity, as we don't try
-                // to detect the type of given vCard here.
-                //
-                // TODO: Handle this case appropriately, which should mean we have to have
-                // code trying to auto-detect the type of given vCard twice (both in
-                // ImportVCardActivity and ImportVCardService).
-                FeedbackHelper.sendFeedback(mService, LOG_TAG, "Failed to read vcard", e);
-            } catch (VCardVersionException e) {
-                if (i == length - 1) {
-                    Log.e(LOG_TAG, "Appropriate version for this vCard is not found.");
-                } else {
-                    // We'll try the other (v30) version.
-                }
-            } catch (VCardException e) {
-                Log.e(LOG_TAG, e.toString());
-            } finally {
-                if (is != null) {
-                    try {
-                        is.close();
-                    } catch (IOException e) {
-                    }
-                }
-            }
-        }
-
-        return successful;
-    }
-
-    @Override
-    public synchronized boolean cancel(boolean mayInterruptIfRunning) {
-        if (DEBUG) Log.d(LOG_TAG, "ImportProcessor received cancel request");
-        if (mDone || mCanceled) {
-            return false;
-        }
-        mCanceled = true;
-        synchronized (this) {
-            if (mVCardParser != null) {
-                mVCardParser.cancel();
-            }
-        }
-        return true;
-    }
-
-    @Override
-    public synchronized boolean isCancelled() {
-        return mCanceled;
-    }
-
-
-    @Override
-    public synchronized boolean isDone() {
-        return mDone;
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/ImportRequest.java b/src/com/android/contacts/common/vcard/ImportRequest.java
deleted file mode 100644
index 32efb99..0000000
--- a/src/com/android/contacts/common/vcard/ImportRequest.java
+++ /dev/null
@@ -1,111 +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.common.vcard;
-
-import android.accounts.Account;
-import android.net.Uri;
-
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.vcard.VCardSourceDetector;
-
-/**
- * Class representing one request for importing vCard (given as a Uri).
- *
- * Mainly used when {@link ImportVCardActivity} requests {@link VCardService}
- * to import some specific Uri.
- *
- * Note: This object's accepting only One Uri does NOT mean that
- * there's only one vCard entry inside the instance, as one Uri often has multiple
- * vCard entries inside it.
- */
-public class ImportRequest {
-    /**
-     * Can be null (typically when there's no Account available in the system).
-     */
-    public final Account account;
-
-    /**
-     * Uri to be imported. May have different content than originally given from users, so
-     * when displaying user-friendly information (e.g. "importing xxx.vcf"), use
-     * {@link #displayName} instead.
-     *
-     * If this is null {@link #data} contains the byte stream of the vcard.
-     */
-    public final Uri uri;
-
-    /**
-     * Holds the byte stream of the vcard, if {@link #uri} is null.
-     */
-    public final byte[] data;
-
-    /**
-     * String to be displayed to the user to indicate the source of the VCARD.
-     */
-    public final String displayName;
-
-    /**
-     * Can be {@link VCardSourceDetector#PARSE_TYPE_UNKNOWN}.
-     */
-    public final int estimatedVCardType;
-
-    /**
-     * Can be null, meaning no preferable charset is available.
-     */
-    public final String estimatedCharset;
-
-    /**
-     * Assumes that one Uri contains only one version, while there's a (tiny) possibility
-     * we may have two types in one vCard.
-     *
-     * e.g.
-     * BEGIN:VCARD
-     * VERSION:2.1
-     * ...
-     * END:VCARD
-     * BEGIN:VCARD
-     * VERSION:3.0
-     * ...
-     * END:VCARD
-     *
-     * We've never seen this kind of a file, but we may have to cope with it in the future.
-     */
-    public final int vcardVersion;
-
-    /**
-     * The count of vCard entries in {@link #uri}. A receiver of this object can use it
-     * when showing the progress of import. Thus a receiver must be able to torelate this
-     * variable being invalid because of vCard's limitation.
-     *
-     * vCard does not let us know this count without looking over a whole file content,
-     * which means we have to open and scan over {@link #uri} to know this value, while
-     * it may not be opened more than once (Uri does not require it to be opened multiple times
-     * and may become invalid after its close() request).
-     */
-    public final int entryCount;
-
-    public ImportRequest(AccountWithDataSet account,
-            byte[] data, Uri uri, String displayName, int estimatedType, String estimatedCharset,
-            int vcardVersion, int entryCount) {
-        this.account = account != null ? account.getAccountOrNull() : null;
-        this.data = data;
-        this.uri = uri;
-        this.displayName = displayName;
-        this.estimatedVCardType = estimatedType;
-        this.estimatedCharset = estimatedCharset;
-        this.vcardVersion = vcardVersion;
-        this.entryCount = entryCount;
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/ImportVCardActivity.java b/src/com/android/contacts/common/vcard/ImportVCardActivity.java
deleted file mode 100644
index e5fab4e..0000000
--- a/src/com/android/contacts/common/vcard/ImportVCardActivity.java
+++ /dev/null
@@ -1,811 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.vcard;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.ProgressDialog;
-import android.content.ClipData;
-import android.content.ComponentName;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.database.Cursor;
-import android.net.Uri;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.PowerManager;
-import android.provider.OpenableColumns;
-import android.text.TextUtils;
-import android.util.Log;
-import android.widget.Toast;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.activity.RequestImportVCardPermissionsActivity;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contactsbind.FeedbackHelper;
-import com.android.vcard.VCardEntryCounter;
-import com.android.vcard.VCardParser;
-import com.android.vcard.VCardParser_V21;
-import com.android.vcard.VCardParser_V30;
-import com.android.vcard.VCardSourceDetector;
-import com.android.vcard.exception.VCardException;
-import com.android.vcard.exception.VCardNestedException;
-import com.android.vcard.exception.VCardVersionException;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.ByteBuffer;
-import java.nio.channels.Channels;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.channels.WritableByteChannel;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * The class letting users to import vCard. This includes the UI part for letting them select
- * an Account and posssibly a file if there's no Uri is given from its caller Activity.
- *
- * Note that this Activity assumes that the instance is a "one-shot Activity", which will be
- * finished (with the method {@link Activity#finish()}) after the import and never reuse
- * any Dialog in the instance. So this code is careless about the management around managed
- * dialogs stuffs (like how onCreateDialog() is used).
- */
-public class ImportVCardActivity extends Activity implements ImportVCardDialogFragment.Listener {
-    private static final String LOG_TAG = "VCardImport";
-
-    private static final int SELECT_ACCOUNT = 0;
-
-    /* package */ final static int VCARD_VERSION_AUTO_DETECT = 0;
-    /* package */ final static int VCARD_VERSION_V21 = 1;
-    /* package */ final static int VCARD_VERSION_V30 = 2;
-
-    private static final int REQUEST_OPEN_DOCUMENT = 100;
-
-    /**
-     * Notification id used when error happened before sending an import request to VCardServer.
-     */
-    private static final int FAILURE_NOTIFICATION_ID = 1;
-
-    private static final String LOCAL_TMP_FILE_NAME_EXTRA =
-            "com.android.contacts.common.vcard.LOCAL_TMP_FILE_NAME";
-
-    private static final String SOURCE_URI_DISPLAY_NAME =
-            "com.android.contacts.common.vcard.SOURCE_URI_DISPLAY_NAME";
-
-    private static final String STORAGE_VCARD_URI_PREFIX = "file:///storage";
-
-    private AccountWithDataSet mAccount;
-
-    private ProgressDialog mProgressDialogForCachingVCard;
-
-    private VCardCacheThread mVCardCacheThread;
-    private ImportRequestConnection mConnection;
-    /* package */ VCardImportExportListener mListener;
-
-    private String mErrorMessage;
-
-    private Handler mHandler = new Handler();
-
-    // Runs on the UI thread.
-    private class DialogDisplayer implements Runnable {
-        private final int mResId;
-        public DialogDisplayer(int resId) {
-            mResId = resId;
-        }
-        public DialogDisplayer(String errorMessage) {
-            mResId = R.id.dialog_error_with_message;
-            mErrorMessage = errorMessage;
-        }
-        @Override
-        public void run() {
-            if (!isFinishing()) {
-                showDialog(mResId);
-            }
-        }
-    }
-
-    private class CancelListener
-        implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
-        @Override
-        public void onClick(DialogInterface dialog, int which) {
-            finish();
-        }
-        @Override
-        public void onCancel(DialogInterface dialog) {
-            finish();
-        }
-    }
-
-    private CancelListener mCancelListener = new CancelListener();
-
-    private class ImportRequestConnection implements ServiceConnection {
-        private VCardService mService;
-
-        public void sendImportRequest(final List<ImportRequest> requests) {
-            Log.i(LOG_TAG, "Send an import request");
-            mService.handleImportRequest(requests, mListener);
-        }
-
-        @Override
-        public void onServiceConnected(ComponentName name, IBinder binder) {
-            mService = ((VCardService.MyBinder) binder).getService();
-            Log.i(LOG_TAG,
-                    String.format("Connected to VCardService. Kick a vCard cache thread (uri: %s)",
-                            Arrays.toString(mVCardCacheThread.getSourceUris())));
-            mVCardCacheThread.start();
-        }
-
-        @Override
-        public void onServiceDisconnected(ComponentName name) {
-            Log.i(LOG_TAG, "Disconnected from VCardService");
-        }
-    }
-
-    /**
-     * Caches given vCard files into a local directory, and sends actual import request to
-     * {@link VCardService}.
-     *
-     * We need to cache given files into local storage. One of reasons is that some data (as Uri)
-     * may have special permissions. Callers may allow only this Activity to access that content,
-     * not what this Activity launched (like {@link VCardService}).
-     */
-    private class VCardCacheThread extends Thread
-            implements DialogInterface.OnCancelListener {
-        private boolean mCanceled;
-        private PowerManager.WakeLock mWakeLock;
-        private VCardParser mVCardParser;
-        private final Uri[] mSourceUris;  // Given from a caller.
-        private final String[] mSourceDisplayNames; // Display names for each Uri in mSourceUris.
-        private final byte[] mSource;
-        private final String mDisplayName;
-
-        public VCardCacheThread(final Uri[] sourceUris, String[] sourceDisplayNames) {
-            mSourceUris = sourceUris;
-            mSourceDisplayNames = sourceDisplayNames;
-            mSource = null;
-            final Context context = ImportVCardActivity.this;
-            final PowerManager powerManager =
-                    (PowerManager)context.getSystemService(Context.POWER_SERVICE);
-            mWakeLock = powerManager.newWakeLock(
-                    PowerManager.SCREEN_DIM_WAKE_LOCK |
-                    PowerManager.ON_AFTER_RELEASE, LOG_TAG);
-            mDisplayName = null;
-        }
-
-        @Override
-        public void finalize() {
-            if (mWakeLock != null && mWakeLock.isHeld()) {
-                Log.w(LOG_TAG, "WakeLock is being held.");
-                mWakeLock.release();
-            }
-        }
-
-        @Override
-        public void run() {
-            Log.i(LOG_TAG, "vCard cache thread starts running.");
-            if (mConnection == null) {
-                throw new NullPointerException("vCard cache thread must be launched "
-                        + "after a service connection is established");
-            }
-
-            mWakeLock.acquire();
-            try {
-                if (mCanceled == true) {
-                    Log.i(LOG_TAG, "vCard cache operation is canceled.");
-                    return;
-                }
-
-                final Context context = ImportVCardActivity.this;
-                // Uris given from caller applications may not be opened twice: consider when
-                // it is not from local storage (e.g. "file:///...") but from some special
-                // provider (e.g. "content://...").
-                // Thus we have to once copy the content of Uri into local storage, and read
-                // it after it.
-                //
-                // We may be able to read content of each vCard file during copying them
-                // to local storage, but currently vCard code does not allow us to do so.
-                int cache_index = 0;
-                ArrayList<ImportRequest> requests = new ArrayList<ImportRequest>();
-                if (mSource != null) {
-                    try {
-                        requests.add(constructImportRequest(mSource, null, mDisplayName));
-                    } catch (VCardException e) {
-                        FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
-                                "Failed to cache vcard", e);
-                        showFailureNotification(R.string.fail_reason_not_supported);
-                        return;
-                    }
-                } else {
-                    int i = 0;
-                    for (Uri sourceUri : mSourceUris) {
-                        if (mCanceled) {
-                            Log.i(LOG_TAG, "vCard cache operation is canceled.");
-                            break;
-                        }
-
-                        String sourceDisplayName = mSourceDisplayNames[i++];
-
-                        final ImportRequest request;
-                        try {
-                            request = constructImportRequest(null, sourceUri, sourceDisplayName);
-                        } catch (VCardException e) {
-                            FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
-                                    "Failed to cache vcard", e);
-                            showFailureNotification(R.string.fail_reason_not_supported);
-                            return;
-                        } catch (IOException e) {
-                            FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
-                                    "Failed to cache vcard", e);
-                            showFailureNotification(R.string.fail_reason_io_error);
-                            return;
-                        }
-                        if (mCanceled) {
-                            Log.i(LOG_TAG, "vCard cache operation is canceled.");
-                            return;
-                        }
-                        requests.add(request);
-                    }
-                }
-                if (!requests.isEmpty()) {
-                    mConnection.sendImportRequest(requests);
-                } else {
-                    Log.w(LOG_TAG, "Empty import requests. Ignore it.");
-                }
-            } catch (OutOfMemoryError e) {
-                FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
-                        "OutOfMemoryError occured during caching vCard", e);
-                System.gc();
-                runOnUiThread(new DialogDisplayer(
-                        getString(R.string.fail_reason_low_memory_during_import)));
-            } catch (IOException e) {
-                FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
-                        "IOException during caching vCard", e);
-                runOnUiThread(new DialogDisplayer(
-                        getString(R.string.fail_reason_io_error)));
-            } finally {
-                Log.i(LOG_TAG, "Finished caching vCard.");
-                mWakeLock.release();
-                try {
-                    unbindService(mConnection);
-                } catch (IllegalArgumentException e) {
-                    FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
-                            "Cannot unbind service connection", e);
-                }
-                mProgressDialogForCachingVCard.dismiss();
-                mProgressDialogForCachingVCard = null;
-                finish();
-            }
-        }
-
-        /**
-         * Reads localDataUri (possibly multiple times) and constructs {@link ImportRequest} from
-         * its content.
-         *
-         * @arg localDataUri Uri actually used for the import. Should be stored in
-         * app local storage, as we cannot guarantee other types of Uris can be read
-         * multiple times. This variable populates {@link ImportRequest#uri}.
-         * @arg displayName Used for displaying information to the user. This variable populates
-         * {@link ImportRequest#displayName}.
-         */
-        private ImportRequest constructImportRequest(final byte[] data,
-                final Uri localDataUri, final String displayName)
-                throws IOException, VCardException {
-            final ContentResolver resolver = ImportVCardActivity.this.getContentResolver();
-            VCardEntryCounter counter = null;
-            VCardSourceDetector detector = null;
-            int vcardVersion = VCARD_VERSION_V21;
-            try {
-                boolean shouldUseV30 = false;
-                InputStream is;
-                if (data != null) {
-                    is = new ByteArrayInputStream(data);
-                } else {
-                    is = resolver.openInputStream(localDataUri);
-                }
-                mVCardParser = new VCardParser_V21();
-                try {
-                    counter = new VCardEntryCounter();
-                    detector = new VCardSourceDetector();
-                    mVCardParser.addInterpreter(counter);
-                    mVCardParser.addInterpreter(detector);
-                    mVCardParser.parse(is);
-                } catch (VCardVersionException e1) {
-                    try {
-                        is.close();
-                    } catch (IOException e) {
-                    }
-
-                    shouldUseV30 = true;
-                    if (data != null) {
-                        is = new ByteArrayInputStream(data);
-                    } else {
-                        is = resolver.openInputStream(localDataUri);
-                    }
-                    mVCardParser = new VCardParser_V30();
-                    try {
-                        counter = new VCardEntryCounter();
-                        detector = new VCardSourceDetector();
-                        mVCardParser.addInterpreter(counter);
-                        mVCardParser.addInterpreter(detector);
-                        mVCardParser.parse(is);
-                    } catch (VCardVersionException e2) {
-                        throw new VCardException("vCard with unspported version.");
-                    }
-                } finally {
-                    if (is != null) {
-                        try {
-                            is.close();
-                        } catch (IOException e) {
-                        }
-                    }
-                }
-
-                vcardVersion = shouldUseV30 ? VCARD_VERSION_V30 : VCARD_VERSION_V21;
-            } catch (VCardNestedException e) {
-                Log.w(LOG_TAG, "Nested Exception is found (it may be false-positive).");
-                // Go through without throwing the Exception, as we may be able to detect the
-                // version before it
-            }
-            return new ImportRequest(mAccount,
-                    data, localDataUri, displayName,
-                    detector.getEstimatedType(),
-                    detector.getEstimatedCharset(),
-                    vcardVersion, counter.getCount());
-        }
-
-        public Uri[] getSourceUris() {
-            return mSourceUris;
-        }
-
-        public void cancel() {
-            mCanceled = true;
-            if (mVCardParser != null) {
-                mVCardParser.cancel();
-            }
-        }
-
-        @Override
-        public void onCancel(DialogInterface dialog) {
-            Log.i(LOG_TAG, "Cancel request has come. Abort caching vCard.");
-            cancel();
-        }
-    }
-
-    private void importVCard(final Uri uri, final String sourceDisplayName) {
-        importVCard(new Uri[] {uri}, new String[] {sourceDisplayName});
-    }
-
-    private void importVCard(final Uri[] uris, final String[] sourceDisplayNames) {
-        runOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                if (!isFinishing()) {
-                    mVCardCacheThread = new VCardCacheThread(uris, sourceDisplayNames);
-                    mListener = new NotificationImportExportListener(ImportVCardActivity.this);
-                    showDialog(R.id.dialog_cache_vcard);
-                }
-            }
-        });
-    }
-
-    private String getDisplayName(Uri sourceUri) {
-        if (sourceUri == null) {
-            return null;
-        }
-        final ContentResolver resolver = ImportVCardActivity.this.getContentResolver();
-        String displayName = null;
-        Cursor cursor = null;
-        // Try to get a display name from the given Uri. If it fails, we just
-        // pick up the last part of the Uri.
-        try {
-            cursor = resolver.query(sourceUri,
-                    new String[] { OpenableColumns.DISPLAY_NAME },
-                    null, null, null);
-            if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
-                if (cursor.getCount() > 1) {
-                    Log.w(LOG_TAG, "Unexpected multiple rows: "
-                            + cursor.getCount());
-                }
-                int index = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
-                if (index >= 0) {
-                    displayName = cursor.getString(index);
-                }
-            }
-        } finally {
-            if (cursor != null) {
-                cursor.close();
-            }
-        }
-        if (TextUtils.isEmpty(displayName)){
-            displayName = sourceUri.getLastPathSegment();
-        }
-        return displayName;
-    }
-
-    /**
-     * Copy the content of sourceUri to the destination.
-     */
-    private Uri copyTo(final Uri sourceUri, String filename) throws IOException {
-        Log.i(LOG_TAG, String.format("Copy a Uri to app local storage (%s -> %s)",
-                sourceUri, filename));
-        final Context context = ImportVCardActivity.this;
-        final ContentResolver resolver = context.getContentResolver();
-        ReadableByteChannel inputChannel = null;
-        WritableByteChannel outputChannel = null;
-        Uri destUri = null;
-        try {
-            inputChannel = Channels.newChannel(resolver.openInputStream(sourceUri));
-            destUri = Uri.parse(context.getFileStreamPath(filename).toURI().toString());
-            outputChannel = context.openFileOutput(filename, Context.MODE_PRIVATE).getChannel();
-            final ByteBuffer buffer = ByteBuffer.allocateDirect(8192);
-            while (inputChannel.read(buffer) != -1) {
-                buffer.flip();
-                outputChannel.write(buffer);
-                buffer.compact();
-            }
-            buffer.flip();
-            while (buffer.hasRemaining()) {
-                outputChannel.write(buffer);
-            }
-        } finally {
-            if (inputChannel != null) {
-                try {
-                    inputChannel.close();
-                } catch (IOException e) {
-                    Log.w(LOG_TAG, "Failed to close inputChannel.");
-                }
-            }
-            if (outputChannel != null) {
-                try {
-                    outputChannel.close();
-                } catch(IOException e) {
-                    Log.w(LOG_TAG, "Failed to close outputChannel");
-                }
-            }
-        }
-        return destUri;
-    }
-
-    /**
-     * Reads the file from {@param sourceUri} and copies it to local cache file.
-     * Returns the local file name which stores the file from sourceUri.
-     */
-    private String readUriToLocalFile(Uri sourceUri) {
-        // Read the uri to local first.
-        int cache_index = 0;
-        String localFilename = null;
-        // Note: caches are removed by VCardService.
-        while (true) {
-            localFilename = VCardService.CACHE_FILE_PREFIX + cache_index + ".vcf";
-            final File file = getFileStreamPath(localFilename);
-            if (!file.exists()) {
-                break;
-            } else {
-                if (cache_index == Integer.MAX_VALUE) {
-                    throw new RuntimeException("Exceeded cache limit");
-                }
-                cache_index++;
-            }
-        }
-        try {
-            copyTo(sourceUri, localFilename);
-        } catch (IOException|SecurityException e) {
-            FeedbackHelper.sendFeedback(this, LOG_TAG, "Failed to copy vcard to local file", e);
-            showFailureNotification(R.string.fail_reason_io_error);
-            return null;
-        }
-
-        if (localFilename == null) {
-            Log.e(LOG_TAG, "Cannot load uri to local storage.");
-            showFailureNotification(R.string.fail_reason_io_error);
-            return null;
-        }
-
-        return localFilename;
-    }
-
-    private Uri readUriToLocalUri(Uri sourceUri) {
-        final String fileName = readUriToLocalFile(sourceUri);
-        if (fileName == null) {
-            return null;
-        }
-        return Uri.parse(getFileStreamPath(fileName).toURI().toString());
-    }
-
-    // Returns true if uri is from Storage.
-    private boolean isStorageUri(Uri uri) {
-        return uri != null && uri.toString().startsWith(STORAGE_VCARD_URI_PREFIX);
-    }
-
-    @Override
-    protected void onCreate(Bundle bundle) {
-        super.onCreate(bundle);
-
-        Uri sourceUri = getIntent().getData();
-
-        // Reading uris from non-storage needs the permission granted from the source intent,
-        // instead of permissions from RequestImportVCardPermissionActivity. So skipping requesting
-        // permissions from RequestImportVCardPermissionActivity for uris from non-storage source.
-        if (isStorageUri(sourceUri) && RequestImportVCardPermissionsActivity
-                .startPermissionActivity(this, isCallerSelf(this))) {
-            return;
-        }
-
-        String sourceDisplayName = null;
-        if (sourceUri != null) {
-            // Read the uri to local first.
-            String localTmpFileName = getIntent().getStringExtra(LOCAL_TMP_FILE_NAME_EXTRA);
-            sourceDisplayName = getIntent().getStringExtra(SOURCE_URI_DISPLAY_NAME);
-            if (TextUtils.isEmpty(localTmpFileName)) {
-                localTmpFileName = readUriToLocalFile(sourceUri);
-                sourceDisplayName = getDisplayName(sourceUri);
-                if (localTmpFileName == null) {
-                    Log.e(LOG_TAG, "Cannot load uri to local storage.");
-                    showFailureNotification(R.string.fail_reason_io_error);
-                    return;
-                }
-                getIntent().putExtra(LOCAL_TMP_FILE_NAME_EXTRA, localTmpFileName);
-                getIntent().putExtra(SOURCE_URI_DISPLAY_NAME, sourceDisplayName);
-            }
-            sourceUri = Uri.parse(getFileStreamPath(localTmpFileName).toURI().toString());
-        }
-
-        // Always request required permission for contacts before importing the vcard.
-        if (RequestImportVCardPermissionsActivity.startPermissionActivity(this,
-                isCallerSelf(this))) {
-            return;
-        }
-
-        String accountName = null;
-        String accountType = null;
-        String dataSet = null;
-        final Intent intent = getIntent();
-        if (intent != null) {
-            accountName = intent.getStringExtra(SelectAccountActivity.ACCOUNT_NAME);
-            accountType = intent.getStringExtra(SelectAccountActivity.ACCOUNT_TYPE);
-            dataSet = intent.getStringExtra(SelectAccountActivity.DATA_SET);
-        } else {
-            Log.e(LOG_TAG, "intent does not exist");
-        }
-
-        if (!TextUtils.isEmpty(accountName) && !TextUtils.isEmpty(accountType)) {
-            mAccount = new AccountWithDataSet(accountName, accountType, dataSet);
-        } else {
-            final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
-            final List<AccountWithDataSet> accountList = accountTypes.getAccounts(true);
-            if (accountList.size() == 0) {
-                mAccount = null;
-            } else if (accountList.size() == 1) {
-                mAccount = accountList.get(0);
-            } else {
-                startActivityForResult(new Intent(this, SelectAccountActivity.class),
-                        SELECT_ACCOUNT);
-                return;
-            }
-        }
-
-        if (isCallerSelf(this)) {
-            startImport(sourceUri, sourceDisplayName);
-        } else {
-            ImportVCardDialogFragment.show(this, sourceUri, sourceDisplayName);
-        }
-    }
-
-    private static boolean isCallerSelf(Activity activity) {
-        // {@link Activity#getCallingActivity()} is a safer alternative to
-        // {@link Activity#getCallingPackage()} that works around a
-        // framework bug where getCallingPackage() can sometimes return null even when the
-        // current activity *was* in fact launched via a startActivityForResult() call.
-        //
-        // (The bug happens if the task stack needs to be re-created by the framework after
-        // having been killed due to memory pressure or by the "Don't keep activities"
-        // developer option; see bug 7494866 for the full details.)
-        //
-        // Turns out that {@link Activity#getCallingActivity()} *does* return correct info
-        // even in the case where getCallingPackage() is broken, so the workaround is simply
-        // to get the package name from getCallingActivity().getPackageName() instead.
-        final ComponentName callingActivity = activity.getCallingActivity();
-        if (callingActivity == null) return false;
-        final String packageName = callingActivity.getPackageName();
-        if (packageName == null) return false;
-        return packageName.equals(activity.getApplicationContext().getPackageName());
-    }
-
-    @Override
-    public void onImportVCardConfirmed(Uri sourceUri, String sourceDisplayName) {
-        startImport(sourceUri, sourceDisplayName);
-    }
-
-    @Override
-    public void onImportVCardDenied() {
-        finish();
-    }
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
-        if (requestCode == SELECT_ACCOUNT) {
-            if (resultCode == Activity.RESULT_OK) {
-                mAccount = new AccountWithDataSet(
-                        intent.getStringExtra(SelectAccountActivity.ACCOUNT_NAME),
-                        intent.getStringExtra(SelectAccountActivity.ACCOUNT_TYPE),
-                        intent.getStringExtra(SelectAccountActivity.DATA_SET));
-                final Uri sourceUri = getIntent().getData();
-                if (sourceUri == null) {
-                    startImport(sourceUri, /* sourceDisplayName =*/ null);
-                } else {
-                    final String sourceDisplayName = getIntent().getStringExtra(
-                            SOURCE_URI_DISPLAY_NAME);
-                    final String localFileName = getIntent().getStringExtra(
-                            LOCAL_TMP_FILE_NAME_EXTRA);
-                    final Uri localUri = Uri.parse(
-                            getFileStreamPath(localFileName).toURI().toString());
-                    startImport(localUri, sourceDisplayName);
-                }
-            } else {
-                if (resultCode != Activity.RESULT_CANCELED) {
-                    Log.w(LOG_TAG, "Result code was not OK nor CANCELED: " + resultCode);
-                }
-                finish();
-            }
-        } else if (requestCode == REQUEST_OPEN_DOCUMENT) {
-            if (resultCode == Activity.RESULT_OK) {
-                final ClipData clipData = intent.getClipData();
-                if (clipData != null) {
-                    final ArrayList<Uri> uris = new ArrayList<>();
-                    final ArrayList<String> sourceDisplayNames = new ArrayList<>();
-                    for (int i = 0; i < clipData.getItemCount(); i++) {
-                        ClipData.Item item = clipData.getItemAt(i);
-                        final Uri uri = item.getUri();
-                        if (uri != null) {
-                            final Uri localUri = readUriToLocalUri(uri);
-                            if (localUri != null) {
-                                final String sourceDisplayName = getDisplayName(uri);
-                                uris.add(localUri);
-                                sourceDisplayNames.add(sourceDisplayName);
-                            }
-                        }
-                    }
-                    if (uris.isEmpty()) {
-                        Log.w(LOG_TAG, "No vCard was selected for import");
-                        finish();
-                    } else {
-                        Log.i(LOG_TAG, "Multiple vCards selected for import: " + uris);
-                        importVCard(uris.toArray(new Uri[0]),
-                                sourceDisplayNames.toArray(new String[0]));
-                    }
-                } else {
-                    final Uri uri = intent.getData();
-                    if (uri != null) {
-                        Log.i(LOG_TAG, "vCard selected for import: " + uri);
-                        final Uri localUri = readUriToLocalUri(uri);
-                        if (localUri != null) {
-                            final String sourceDisplayName = getDisplayName(uri);
-                            importVCard(localUri, sourceDisplayName);
-                        } else {
-                            Log.w(LOG_TAG, "No local URI for vCard import");
-                            finish();
-                        }
-                    } else {
-                        Log.w(LOG_TAG, "No vCard was selected for import");
-                        finish();
-                    }
-                }
-            } else {
-                if (resultCode != Activity.RESULT_CANCELED) {
-                    Log.w(LOG_TAG, "Result code was not OK nor CANCELED" + resultCode);
-                }
-                finish();
-            }
-        }
-    }
-
-    private void startImport(Uri uri, String sourceDisplayName) {
-        // Handle inbound files
-        if (uri != null) {
-            Log.i(LOG_TAG, "Starting vCard import using Uri " + uri);
-            importVCard(uri, sourceDisplayName);
-        } else {
-            Log.i(LOG_TAG, "Start vCard without Uri. The user will select vCard manually.");
-            final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
-            intent.addCategory(Intent.CATEGORY_OPENABLE);
-            intent.setType(VCardService.X_VCARD_MIME_TYPE);
-            intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
-            startActivityForResult(intent, REQUEST_OPEN_DOCUMENT);
-        }
-    }
-
-    @Override
-    protected Dialog onCreateDialog(int resId, Bundle bundle) {
-        if (resId == R.id.dialog_cache_vcard) {
-            if (mProgressDialogForCachingVCard == null) {
-                final String title = getString(R.string.caching_vcard_title);
-                final String message = getString(R.string.caching_vcard_message);
-                mProgressDialogForCachingVCard = new ProgressDialog(this);
-                mProgressDialogForCachingVCard.setTitle(title);
-                mProgressDialogForCachingVCard.setMessage(message);
-                mProgressDialogForCachingVCard.setProgressStyle(ProgressDialog.STYLE_SPINNER);
-                mProgressDialogForCachingVCard.setOnCancelListener(mVCardCacheThread);
-                startVCardService();
-            }
-            return mProgressDialogForCachingVCard;
-        } else if (resId == R.id.dialog_error_with_message) {
-            String message = mErrorMessage;
-            if (TextUtils.isEmpty(message)) {
-                Log.e(LOG_TAG, "Error message is null while it must not.");
-                message = getString(R.string.fail_reason_unknown);
-            }
-            final AlertDialog.Builder builder = new AlertDialog.Builder(this)
-                .setTitle(getString(R.string.reading_vcard_failed_title))
-                .setIconAttribute(android.R.attr.alertDialogIcon)
-                .setMessage(message)
-                .setOnCancelListener(mCancelListener)
-                .setPositiveButton(android.R.string.ok, mCancelListener);
-            return builder.create();
-        }
-
-        return super.onCreateDialog(resId, bundle);
-    }
-
-    /* package */ void startVCardService() {
-        mConnection = new ImportRequestConnection();
-
-        Log.i(LOG_TAG, "Bind to VCardService.");
-        // We don't want the service finishes itself just after this connection.
-        Intent intent = new Intent(this, VCardService.class);
-        startService(intent);
-        bindService(new Intent(this, VCardService.class),
-                mConnection, Context.BIND_AUTO_CREATE);
-    }
-
-    @Override
-    protected void onRestoreInstanceState(Bundle savedInstanceState) {
-        super.onRestoreInstanceState(savedInstanceState);
-        if (mProgressDialogForCachingVCard != null) {
-            Log.i(LOG_TAG, "Cache thread is still running. Show progress dialog again.");
-            showDialog(R.id.dialog_cache_vcard);
-        }
-    }
-
-    /* package */ void showFailureNotification(int reasonId) {
-        final NotificationManager notificationManager =
-                (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
-        final Notification notification =
-                NotificationImportExportListener.constructImportFailureNotification(
-                        ImportVCardActivity.this,
-                        getString(reasonId));
-        notificationManager.notify(NotificationImportExportListener.FAILURE_NOTIFICATION_TAG,
-                FAILURE_NOTIFICATION_ID, notification);
-        mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                Toast.makeText(ImportVCardActivity.this,
-                        getString(R.string.vcard_import_failed), Toast.LENGTH_LONG).show();
-            }
-        });
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/ImportVCardDialogFragment.java b/src/com/android/contacts/common/vcard/ImportVCardDialogFragment.java
deleted file mode 100644
index b1f1c3b..0000000
--- a/src/com/android/contacts/common/vcard/ImportVCardDialogFragment.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.vcard;
-
-import android.app.Activity;
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.DialogInterface;
-import android.net.Uri;
-import android.os.Bundle;
-
-import com.android.contacts.R;
-
-/** Asks for confirmation before importing contacts from a vcard. */
-public class ImportVCardDialogFragment extends DialogFragment {
-
-    static final String TAG = "importVCardDialog";
-
-    private static final String ARG_SOURCE_URI = "sourceUri";
-    private static final String ARG_SOURCE_DISPLAY_NAME = "sourceDisplayName";
-
-    /** Callbacks for hosts of the {@link ImportVCardDialogFragment}. */
-    public interface Listener {
-
-        /** Invoked after the user has confirmed that contacts should be imported. */
-        void onImportVCardConfirmed(Uri sourceUri, String sourceDisplayName);
-
-        /** Invoked after the user has rejected importing contacts. */
-        void onImportVCardDenied();
-    }
-
-    /** Displays the dialog asking for confirmation before importing contacts. */
-    public static void show(Activity activity, Uri sourceUri,
-            String sourceDisplayName) {
-        if (!(activity instanceof Listener)) {
-            throw new IllegalArgumentException(
-                    "Activity must implement " + Listener.class.getName());
-        }
-
-        final Bundle args = new Bundle();
-        args.putParcelable(ARG_SOURCE_URI, sourceUri);
-        args.putString(ARG_SOURCE_DISPLAY_NAME, sourceDisplayName);
-
-        final ImportVCardDialogFragment dialog = new ImportVCardDialogFragment();
-        dialog.setArguments(args);
-        dialog.show(activity.getFragmentManager(), TAG);
-    }
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        final Uri sourceUri = getArguments().getParcelable(ARG_SOURCE_URI);
-        final String sourceDisplayName = getArguments().getString(ARG_SOURCE_DISPLAY_NAME);
-
-        return new AlertDialog.Builder(getActivity())
-                .setIconAttribute(android.R.attr.alertDialogIcon)
-                .setMessage(R.string.import_from_vcf_file_confirmation_message)
-                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int whichButton) {
-                        final Listener listener = (Listener) getActivity();
-                        if (listener != null) {
-                            listener.onImportVCardConfirmed(sourceUri, sourceDisplayName);
-                        }
-                    }
-                })
-                .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int whichButton) {
-                        final Listener listener = (Listener) getActivity();
-                        if (listener != null) {
-                            listener.onImportVCardDenied();
-                        }
-                    }
-                })
-                .create();
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java b/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java
deleted file mode 100644
index f2ddcab..0000000
--- a/src/com/android/contacts/common/vcard/NfcImportVCardActivity.java
+++ /dev/null
@@ -1,310 +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.common.vcard;
-
-import android.app.Activity;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.net.Uri;
-import android.nfc.NdefMessage;
-import android.nfc.NdefRecord;
-import android.nfc.NfcAdapter;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.provider.ContactsContract.RawContacts;
-import android.util.Log;
-import android.widget.Toast;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contactsbind.FeedbackHelper;
-import com.android.vcard.VCardEntry;
-import com.android.vcard.VCardEntryCounter;
-import com.android.vcard.VCardParser;
-import com.android.vcard.VCardParser_V21;
-import com.android.vcard.VCardParser_V30;
-import com.android.vcard.VCardSourceDetector;
-import com.android.vcard.exception.VCardException;
-import com.android.vcard.exception.VCardNestedException;
-import com.android.vcard.exception.VCardVersionException;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-public class NfcImportVCardActivity extends Activity implements ServiceConnection,
-        VCardImportExportListener {
-    private static final String TAG = "NfcImportVCardActivity";
-
-    private static final int SELECT_ACCOUNT = 1;
-
-    private NdefRecord mRecord;
-    private AccountWithDataSet mAccount;
-    private Handler mHandler = new Handler();
-
-    /**
-     * Notification id used when error happened before sending an import request to VCardServer.
-     */
-    private static final int FAILURE_NOTIFICATION_ID = 1;
-
-    /* package */ class ImportTask extends AsyncTask<VCardService, Void, ImportRequest> {
-        @Override
-        public ImportRequest doInBackground(VCardService... services) {
-            ImportRequest request = createImportRequest();
-            if (request == null) {
-                return null;
-            }
-
-            ArrayList<ImportRequest> requests = new ArrayList<ImportRequest>();
-            requests.add(request);
-            services[0].handleImportRequest(requests, NfcImportVCardActivity.this);
-            return request;
-        }
-
-        @Override
-        public void onCancelled() {
-            unbindService(NfcImportVCardActivity.this);
-        }
-
-        @Override
-        public void onPostExecute(ImportRequest request) {
-            if (request == null) {
-                // Finish the activity in case of error so it doesn't stay in view.
-                finish();
-            }
-            unbindService(NfcImportVCardActivity.this);
-        }
-    }
-
-    /* package */ ImportRequest createImportRequest() {
-        VCardParser parser;
-        VCardEntryCounter counter = null;
-        VCardSourceDetector detector = null;
-        int vcardVersion = ImportVCardActivity.VCARD_VERSION_V21;
-        try {
-            ByteArrayInputStream is = new ByteArrayInputStream(mRecord.getPayload());
-            is.mark(0);
-            parser = new VCardParser_V21();
-            try {
-                counter = new VCardEntryCounter();
-                detector = new VCardSourceDetector();
-                parser.addInterpreter(counter);
-                parser.addInterpreter(detector);
-                parser.parse(is);
-            } catch (VCardVersionException e1) {
-                is.reset();
-                vcardVersion = ImportVCardActivity.VCARD_VERSION_V30;
-                parser = new VCardParser_V30();
-                try {
-                    counter = new VCardEntryCounter();
-                    detector = new VCardSourceDetector();
-                    parser.addInterpreter(counter);
-                    parser.addInterpreter(detector);
-                    parser.parse(is);
-                } catch (VCardVersionException e2) {
-                    FeedbackHelper.sendFeedback(this, TAG, "vcard with unsupported version", e2);
-                    showFailureNotification(R.string.fail_reason_not_supported);
-                    return null;
-                }
-            } finally {
-                try {
-                    if (is != null) is.close();
-                } catch (IOException e) {
-                }
-            }
-        } catch (IOException e) {
-            FeedbackHelper.sendFeedback(this, TAG, "Failed to read vcard data", e);
-            showFailureNotification(R.string.fail_reason_io_error);
-            return null;
-        } catch (VCardNestedException e) {
-            Log.w(TAG, "Nested Exception is found (it may be false-positive).");
-            // Go through without throwing the Exception, as we may be able to detect the
-            // version before it
-        } catch (VCardException e) {
-            FeedbackHelper.sendFeedback(this, TAG, "Failed to parse vcard", e);
-            showFailureNotification(R.string.fail_reason_not_supported);
-            return null;
-        }
-
-        return new ImportRequest(mAccount, mRecord.getPayload(), null,
-                getString(R.string.nfc_vcard_file_name), detector.getEstimatedType(),
-                detector.getEstimatedCharset(), vcardVersion, counter.getCount());
-    }
-
-    @Override
-    public void onServiceConnected(ComponentName name, IBinder binder) {
-        VCardService service = ((VCardService.MyBinder) binder).getService();
-        new ImportTask().execute(service);
-    }
-
-    @Override
-    public void onServiceDisconnected(ComponentName name) {
-        // Do nothing
-    }
-
-    @Override
-    protected void onCreate(Bundle bundle) {
-        super.onCreate(bundle);
-
-        if (RequestPermissionsActivity.startPermissionActivity(this)) {
-            return;
-        }
-
-        Intent intent = getIntent();
-        if (!NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
-            Log.w(TAG, "Unknowon intent " + intent);
-            finish();
-            return;
-        }
-
-        String type = intent.getType();
-        if (type == null ||
-                (!"text/x-vcard".equals(type) && !"text/vcard".equals(type))) {
-            Log.w(TAG, "Not a vcard");
-            //setStatus(getString(R.string.fail_reason_not_supported));
-            finish();
-            return;
-        }
-        NdefMessage msg = (NdefMessage) intent.getParcelableArrayExtra(
-                NfcAdapter.EXTRA_NDEF_MESSAGES)[0];
-        mRecord = msg.getRecords()[0];
-
-        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
-        final List<AccountWithDataSet> accountList = accountTypes.getAccounts(true);
-        if (accountList.size() == 0) {
-            mAccount = null;
-        } else if (accountList.size() == 1) {
-            mAccount = accountList.get(0);
-        } else {
-            startActivityForResult(new Intent(this, SelectAccountActivity.class), SELECT_ACCOUNT);
-            return;
-        }
-
-        startImport();
-    }
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
-        if (requestCode == SELECT_ACCOUNT) {
-            if (resultCode == RESULT_OK) {
-                mAccount = new AccountWithDataSet(
-                        intent.getStringExtra(SelectAccountActivity.ACCOUNT_NAME),
-                        intent.getStringExtra(SelectAccountActivity.ACCOUNT_TYPE),
-                        intent.getStringExtra(SelectAccountActivity.DATA_SET));
-                startImport();
-            } else {
-                finish();
-            }
-        }
-    }
-
-    private void startImport() {
-        // We don't want the service finishes itself just after this connection.
-        Intent intent = new Intent(this, VCardService.class);
-        startService(intent);
-        bindService(intent, this, Context.BIND_AUTO_CREATE);
-    }
-
-    @Override
-    public void onImportProcessed(ImportRequest request, int jobId, int sequence) {
-        // do nothing
-    }
-
-    @Override
-    public void onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
-            int totalCount) {
-        // do nothing
-    }
-
-    @Override
-    public void onImportFinished(ImportRequest request, int jobId, Uri uri) {
-        if (isFinishing()) {
-            Log.i(TAG, "Late import -- ignoring");
-            return;
-        }
-
-        if (uri != null) {
-            Uri contactUri = RawContacts.getContactLookupUri(getContentResolver(), uri);
-            Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);
-            ImplicitIntentsUtil.startActivityInAppIfPossible(this, intent);
-            finish();
-        }
-    }
-
-    @Override
-    public void onImportFailed(ImportRequest request) {
-        if (isFinishing()) {
-            Log.i(TAG, "Late import failure -- ignoring");
-            return;
-        }
-        showFailureNotification(R.string.vcard_import_request_rejected_message);
-        finish();
-    }
-
-    @Override
-    public void onImportCanceled(ImportRequest request, int jobId) {
-        // do nothing
-    }
-
-    @Override
-    public void onExportProcessed(ExportRequest request, int jobId) {
-        // do nothing
-    }
-
-    @Override
-    public void onExportFailed(ExportRequest request) {
-        // do nothing
-    }
-
-    @Override
-    public void onCancelRequest(CancelRequest request, int type) {
-        // do nothing
-    }
-
-    @Override
-    public void onComplete() {
-        // do nothing
-    }
-
-    /* package */ void showFailureNotification(int reasonId) {
-        final NotificationManager notificationManager =
-                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
-        final Notification notification =
-                NotificationImportExportListener.constructImportFailureNotification(
-                        this,
-                        getString(reasonId));
-        notificationManager.notify(NotificationImportExportListener.FAILURE_NOTIFICATION_TAG,
-                FAILURE_NOTIFICATION_ID, notification);
-        mHandler.post(new Runnable() {
-            @Override
-            public void run() {
-                Toast.makeText(NfcImportVCardActivity.this,
-                        getString(R.string.vcard_import_failed), Toast.LENGTH_LONG).show();
-            }
-        });
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/NotificationImportExportListener.java b/src/com/android/contacts/common/vcard/NotificationImportExportListener.java
deleted file mode 100644
index 2ac8c1c..0000000
--- a/src/com/android/contacts/common/vcard/NotificationImportExportListener.java
+++ /dev/null
@@ -1,318 +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.common.vcard;
-
-import android.app.Activity;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.ContentUris;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Handler;
-import android.os.Message;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.RawContacts;
-import android.support.v4.app.NotificationCompat;
-import android.widget.Toast;
-
-import com.android.contacts.common.R;
-import com.android.vcard.VCardEntry;
-
-import java.text.NumberFormat;
-
-public class NotificationImportExportListener implements VCardImportExportListener,
-        Handler.Callback {
-    /** The tag used by vCard-related notifications. */
-    /* package */ static final String DEFAULT_NOTIFICATION_TAG = "VCardServiceProgress";
-    /**
-     * The tag used by vCard-related failure notifications.
-     * <p>
-     * Use a different tag from {@link #DEFAULT_NOTIFICATION_TAG} so that failures do not get
-     * replaced by other notifications and vice-versa.
-     */
-    /* package */ static final String FAILURE_NOTIFICATION_TAG = "VCardServiceFailure";
-
-    private final NotificationManager mNotificationManager;
-    private final Activity mContext;
-    private final Handler mHandler;
-
-    public NotificationImportExportListener(Activity activity) {
-        mContext = activity;
-        mNotificationManager = (NotificationManager) activity.getSystemService(
-                Context.NOTIFICATION_SERVICE);
-        mHandler = new Handler(this);
-    }
-
-    @Override
-    public boolean handleMessage(Message msg) {
-        String text = (String) msg.obj;
-        Toast.makeText(mContext, text, Toast.LENGTH_LONG).show();
-        return true;
-    }
-
-    @Override
-    public void onImportProcessed(ImportRequest request, int jobId, int sequence) {
-        // Show a notification about the status
-        final String displayName;
-        final String message;
-        if (request.displayName != null) {
-            displayName = request.displayName;
-            message = mContext.getString(R.string.vcard_import_will_start_message, displayName);
-        } else {
-            displayName = mContext.getString(R.string.vcard_unknown_filename);
-            message = mContext.getString(
-                    R.string.vcard_import_will_start_message_with_default_name);
-        }
-
-        // We just want to show notification for the first vCard.
-        if (sequence == 0) {
-            // TODO: Ideally we should detect the current status of import/export and
-            // show "started" when we can import right now and show "will start" when
-            // we cannot.
-            mHandler.obtainMessage(0, message).sendToTarget();
-        }
-
-        final Notification notification = constructProgressNotification(mContext,
-                VCardService.TYPE_IMPORT, message, message, jobId, displayName, -1, 0);
-        mNotificationManager.notify(DEFAULT_NOTIFICATION_TAG, jobId, notification);
-    }
-
-    @Override
-    public void onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
-            int totalCount) {
-        if (entry.isIgnorable()) {
-            return;
-        }
-
-        final String totalCountString = String.valueOf(totalCount);
-        final String tickerText =
-                mContext.getString(R.string.progress_notifier_message,
-                        String.valueOf(currentCount),
-                        totalCountString,
-                        entry.getDisplayName());
-        final String description = mContext.getString(R.string.importing_vcard_description,
-                entry.getDisplayName());
-
-        final Notification notification = constructProgressNotification(
-                mContext.getApplicationContext(), VCardService.TYPE_IMPORT, description, tickerText,
-                jobId, request.displayName, totalCount, currentCount);
-        mNotificationManager.notify(DEFAULT_NOTIFICATION_TAG, jobId, notification);
-    }
-
-    @Override
-    public void onImportFinished(ImportRequest request, int jobId, Uri createdUri) {
-        final String description = mContext.getString(R.string.importing_vcard_finished_title,
-                request.displayName);
-        final Intent intent;
-        if (createdUri != null) {
-            final long rawContactId = ContentUris.parseId(createdUri);
-            final Uri contactUri = RawContacts.getContactLookupUri(
-                    mContext.getContentResolver(), ContentUris.withAppendedId(
-                            RawContacts.CONTENT_URI, rawContactId));
-            intent = new Intent(Intent.ACTION_VIEW, contactUri);
-        } else {
-            intent = new Intent(Intent.ACTION_VIEW);
-            intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
-        }
-        intent.setPackage(mContext.getPackageName());
-        final Notification notification =
-                NotificationImportExportListener.constructFinishNotification(mContext,
-                description, null, intent);
-        mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
-                jobId, notification);
-    }
-
-    @Override
-    public void onImportFailed(ImportRequest request) {
-        // TODO: a little unkind to show Toast in this case, which is shown just a moment.
-        // Ideally we should show some persistent something users can notice more easily.
-        mHandler.obtainMessage(0,
-                mContext.getString(R.string.vcard_import_request_rejected_message)).sendToTarget();
-    }
-
-    @Override
-    public void onImportCanceled(ImportRequest request, int jobId) {
-        final String description = mContext.getString(R.string.importing_vcard_canceled_title,
-                request.displayName);
-        final Notification notification =
-                NotificationImportExportListener.constructCancelNotification(mContext, description);
-        mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
-                jobId, notification);
-    }
-
-    @Override
-    public void onExportProcessed(ExportRequest request, int jobId) {
-        final String displayName = ExportVCardActivity.getOpenableUriDisplayName(mContext,
-                request.destUri);
-        final String message = mContext.getString(R.string.contacts_export_will_start_message);
-
-        mHandler.obtainMessage(0, message).sendToTarget();
-        final Notification notification =
-                NotificationImportExportListener.constructProgressNotification(mContext,
-                        VCardService.TYPE_EXPORT, message, message, jobId, displayName, -1, 0);
-        mNotificationManager.notify(DEFAULT_NOTIFICATION_TAG, jobId, notification);
-    }
-
-    @Override
-    public void onExportFailed(ExportRequest request) {
-        mHandler.obtainMessage(0,
-                mContext.getString(R.string.vcard_export_request_rejected_message)).sendToTarget();
-    }
-
-    @Override
-    public void onCancelRequest(CancelRequest request, int type) {
-        final String description = type == VCardService.TYPE_IMPORT ?
-                mContext.getString(R.string.importing_vcard_canceled_title, request.displayName) :
-                mContext.getString(R.string.exporting_vcard_canceled_title, request.displayName);
-        final Notification notification = constructCancelNotification(mContext, description);
-        mNotificationManager.notify(DEFAULT_NOTIFICATION_TAG, request.jobId, notification);
-    }
-
-    /**
-     * Constructs a {@link Notification} showing the current status of import/export.
-     * Users can cancel the process with the Notification.
-     *
-     * @param context
-     * @param type import/export
-     * @param description Content of the Notification.
-     * @param tickerText
-     * @param jobId
-     * @param displayName Name to be shown to the Notification (e.g. "finished importing XXXX").
-     * Typycally a file name.
-     * @param totalCount The number of vCard entries to be imported. Used to show progress bar.
-     * -1 lets the system show the progress bar with "indeterminate" state.
-     * @param currentCount The index of current vCard. Used to show progress bar.
-     */
-    /* package */ static Notification constructProgressNotification(
-            Context context, int type, String description, String tickerText,
-            int jobId, String displayName, int totalCount, int currentCount) {
-        // Note: We cannot use extra values here (like setIntExtra()), as PendingIntent doesn't
-        // preserve them across multiple Notifications. PendingIntent preserves the first extras
-        // (when flag is not set), or update them when PendingIntent#getActivity() is called
-        // (See PendingIntent#FLAG_UPDATE_CURRENT). In either case, we cannot preserve extras as we
-        // expect (for each vCard import/export request).
-        //
-        // We use query parameter in Uri instead.
-        // Scheme and Authority is arbitorary, assuming CancelActivity never refers them.
-        final Intent intent = new Intent(context, CancelActivity.class);
-        final Uri uri = (new Uri.Builder())
-                .scheme("invalidscheme")
-                .authority("invalidauthority")
-                .appendQueryParameter(CancelActivity.JOB_ID, String.valueOf(jobId))
-                .appendQueryParameter(CancelActivity.DISPLAY_NAME, displayName)
-                .appendQueryParameter(CancelActivity.TYPE, String.valueOf(type)).build();
-        intent.setData(uri);
-
-        final NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
-        builder.setOngoing(true)
-                .setProgress(totalCount, currentCount, totalCount == - 1)
-                .setTicker(tickerText)
-                .setContentTitle(description)
-                .setColor(context.getResources().getColor(R.color.dialtacts_theme_color))
-                .setSmallIcon(type == VCardService.TYPE_IMPORT
-                        ? android.R.drawable.stat_sys_download
-                        : android.R.drawable.stat_sys_upload)
-                .setContentIntent(PendingIntent.getActivity(context, 0, intent, 0));
-        if (totalCount > 0) {
-            String percentage =
-                    NumberFormat.getPercentInstance().format((double) currentCount / totalCount);
-            builder.setContentText(percentage);
-        }
-        return builder.getNotification();
-    }
-
-    /**
-     * Constructs a Notification telling users the process is canceled.
-     *
-     * @param context
-     * @param description Content of the Notification
-     */
-    /* package */ static Notification constructCancelNotification(
-            Context context, String description) {
-        return new NotificationCompat.Builder(context)
-                .setAutoCancel(true)
-                .setSmallIcon(android.R.drawable.stat_notify_error)
-                .setColor(context.getResources().getColor(R.color.dialtacts_theme_color))
-                .setContentTitle(description)
-                .setContentText(description)
-                // Launch an intent that won't resolve to anything. Restrict the intent to this
-                // app to make sure that no other app can steal this pending-intent b/19296918.
-                .setContentIntent(PendingIntent
-                        .getActivity(context, 0, new Intent(context.getPackageName(), null), 0))
-                .getNotification();
-    }
-
-    /**
-     * Constructs a Notification telling users the process is finished.
-     *
-     * @param context
-     * @param description Content of the Notification
-     * @param intent Intent to be launched when the Notification is clicked. Can be null.
-     */
-    /* package */ static Notification constructFinishNotification(
-            Context context, String title, String description, Intent intent) {
-        return constructFinishNotificationWithFlags(context, title, description, intent, 0);
-    }
-
-    /**
-     * @param flags use FLAG_ACTIVITY_NEW_TASK to set it as new task, to get rid of cached files.
-     */
-    /* package */ static Notification constructFinishNotificationWithFlags(
-            Context context, String title, String description, Intent intent, int flags) {
-        return new NotificationCompat.Builder(context)
-                .setAutoCancel(true)
-                .setColor(context.getResources().getColor(R.color.dialtacts_theme_color))
-                .setSmallIcon(R.drawable.ic_check_mark)
-                .setContentTitle(title)
-                .setContentText(description)
-                // If no intent provided, include an intent that won't resolve to anything.
-                // Restrict the intent to this app to make sure that no other app can steal this
-                // pending-intent b/19296918.
-                .setContentIntent(PendingIntent.getActivity(context, 0,
-                        (intent != null ? intent : new Intent(context.getPackageName(), null)),
-                        flags))
-                .getNotification();
-    }
-
-    /**
-     * Constructs a Notification telling the vCard import has failed.
-     *
-     * @param context
-     * @param reason The reason why the import has failed. Shown in description field.
-     */
-    /* package */ static Notification constructImportFailureNotification(
-            Context context, String reason) {
-        return new NotificationCompat.Builder(context)
-                .setAutoCancel(true)
-                .setColor(context.getResources().getColor(R.color.dialtacts_theme_color))
-                .setSmallIcon(android.R.drawable.stat_notify_error)
-                .setContentTitle(context.getString(R.string.vcard_import_failed))
-                .setContentText(reason)
-                // Launch an intent that won't resolve to anything. Restrict the intent to this
-                // app to make sure that no other app can steal this pending-intent b/19296918.
-                .setContentIntent(PendingIntent
-                        .getActivity(context, 0, new Intent(context.getPackageName(), null), 0))
-                .getNotification();
-    }
-
-    @Override
-    public void onComplete() {
-        mContext.finish();
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/ProcessorBase.java b/src/com/android/contacts/common/vcard/ProcessorBase.java
deleted file mode 100644
index abc859d..0000000
--- a/src/com/android/contacts/common/vcard/ProcessorBase.java
+++ /dev/null
@@ -1,75 +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.common.vcard;
-
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-import java.util.concurrent.RunnableFuture;
-import java.util.concurrent.TimeUnit;
-
-/**
- * A base processor class. One instance processes vCard one import/export request (imports a given
- * vCard or exports a vCard). Expected to be used with {@link ExecutorService}.
- *
- * This instance starts itself with {@link #run()} method, and can be cancelled with
- * {@link #cancel(boolean)}. Users can check the processor's status using {@link #isCancelled()}
- * and {@link #isDone()} asynchronously.
- *
- * {@link #get()} and {@link #get(long, TimeUnit)}, which are form {@link Future}, aren't
- * supported and {@link UnsupportedOperationException} will be just thrown when they are called.
- */
-public abstract class ProcessorBase implements RunnableFuture<Object> {
-
-    /**
-     * @return the type of the processor. Must be {@link VCardService#TYPE_IMPORT} or
-     * {@link VCardService#TYPE_EXPORT}.
-     */
-    public abstract int getType();
-
-    @Override
-    public abstract void run();
-
-    /**
-     * Cancels this operation.
-     *
-     * @param mayInterruptIfRunning ignored. When this method is called, the instance
-     * stops processing and finish itself even if the thread is running.
-     *
-     * @see Future#cancel(boolean)
-     */
-    @Override
-    public abstract boolean cancel(boolean mayInterruptIfRunning);
-    @Override
-    public abstract boolean isCancelled();
-    @Override
-    public abstract boolean isDone();
-
-    /**
-     * Just throws {@link UnsupportedOperationException}.
-     */
-    @Override
-    public final Object get() {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Just throws {@link UnsupportedOperationException}.
-     */
-    @Override
-    public final Object get(long timeout, TimeUnit unit) {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/SelectAccountActivity.java b/src/com/android/contacts/common/vcard/SelectAccountActivity.java
deleted file mode 100644
index 387f3fb..0000000
--- a/src/com/android/contacts/common/vcard/SelectAccountActivity.java
+++ /dev/null
@@ -1,112 +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.common.vcard;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.os.Bundle;
-import android.util.Log;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.AccountSelectionUtil;
-
-import java.util.List;
-
-public class SelectAccountActivity extends Activity {
-    private static final String LOG_TAG = "SelectAccountActivity";
-
-    public static final String ACCOUNT_NAME = "account_name";
-    public static final String ACCOUNT_TYPE = "account_type";
-    public static final String DATA_SET = "data_set";
-
-    private class CancelListener
-            implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
-        public void onClick(DialogInterface dialog, int which) {
-            finish();
-        }
-        public void onCancel(DialogInterface dialog) {
-            finish();
-        }
-    }
-
-    private AccountSelectionUtil.AccountSelectedListener mAccountSelectionListener;
-
-    @Override
-    protected void onCreate(Bundle bundle) {
-        super.onCreate(bundle);
-
-        // There's three possibilities:
-        // - more than one accounts -> ask the user
-        // - just one account -> use the account without asking the user
-        // - no account -> use phone-local storage without asking the user
-        final int resId = R.string.import_from_vcf_file;
-        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
-        final List<AccountWithDataSet> accountList = accountTypes.getAccounts(true);
-        if (accountList.size() == 0) {
-            Log.w(LOG_TAG, "Account does not exist");
-            finish();
-            return;
-        } else if (accountList.size() == 1) {
-            final AccountWithDataSet account = accountList.get(0);
-            final Intent intent = new Intent();
-            intent.putExtra(ACCOUNT_NAME, account.name);
-            intent.putExtra(ACCOUNT_TYPE, account.type);
-            intent.putExtra(DATA_SET, account.dataSet);
-            setResult(RESULT_OK, intent);
-            finish();
-            return;
-        }
-
-        Log.i(LOG_TAG, "The number of available accounts: " + accountList.size());
-
-        // Multiple accounts. Let users to select one.
-        mAccountSelectionListener =
-                new AccountSelectionUtil.AccountSelectedListener(
-                        this, accountList, resId) {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        dialog.dismiss();
-                        final AccountWithDataSet account = mAccountList.get(which);
-                        final Intent intent = new Intent();
-                        intent.putExtra(ACCOUNT_NAME, account.name);
-                        intent.putExtra(ACCOUNT_TYPE, account.type);
-                        intent.putExtra(DATA_SET, account.dataSet);
-                        setResult(RESULT_OK, intent);
-                        finish();
-                    }
-                };
-        showDialog(resId);
-        return;
-    }
-
-    @Override
-    protected Dialog onCreateDialog(int resId, Bundle bundle) {
-        if (resId == R.string.import_from_vcf_file) {
-            if (mAccountSelectionListener == null) {
-                throw new NullPointerException(
-                        "mAccountSelectionListener must not be null.");
-            }
-            return AccountSelectionUtil.getSelectAccountDialog(this, resId,
-                    mAccountSelectionListener,
-                    new CancelListener());
-        }
-        return super.onCreateDialog(resId, bundle);
-    }
-}
diff --git a/src/com/android/contacts/common/vcard/ShareVCardActivity.java b/src/com/android/contacts/common/vcard/ShareVCardActivity.java
deleted file mode 100644
index 26d20d1..0000000
--- a/src/com/android/contacts/common/vcard/ShareVCardActivity.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.vcard;
-
-import android.content.ComponentName;
-import android.net.Uri;
-import android.os.IBinder;
-import android.support.v4.content.FileProvider;
-import android.util.Log;
-
-import com.android.contacts.common.R;
-import com.android.contactsbind.FeedbackHelper;
-
-import java.io.File;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-/**
- * This activity connects to VCardService, creates a .vcf file in cache directory and send export
- * request with the file URI so as to write contacts data to the file in background.
- */
-public class ShareVCardActivity extends ExportVCardActivity {
-    private static final String LOG_TAG = "VCardShare";
-    private final String EXPORT_FILE_PREFIX = "vcards_";
-    private final long A_DAY_IN_MILLIS = 1000 * 60 * 60 * 24;
-
-    @Override
-    public synchronized void onServiceConnected(ComponentName name, IBinder binder) {
-        if (DEBUG) Log.d(LOG_TAG, "connected to service, requesting a destination file name");
-        mConnected = true;
-        mService = ((VCardService.MyBinder) binder).getService();
-
-        clearExportFiles();
-
-        final File file = getLocalFile();
-        try {
-            file.createNewFile();
-        } catch (IOException e) {
-            FeedbackHelper.sendFeedback(this, LOG_TAG, "Failed to create .vcf file", e);
-            finish();
-            return;
-        }
-
-        final Uri contentUri = FileProvider.getUriForFile(this,
-                getString(R.string.contacts_file_provider_authority), file);
-        if (DEBUG) Log.d(LOG_TAG, "exporting to " + contentUri);
-
-        final ExportRequest request = new ExportRequest(contentUri);
-        // The connection object will call finish().
-        mService.handleExportRequest(request, new NotificationImportExportListener(
-                ShareVCardActivity.this));
-        finish();
-    }
-
-    /**
-     * Delete the files (that are untouched for more than 1 day) in the cache directory.
-     * We cannot rely on VCardService to delete export files because it will delete export files
-     * right after finishing writing so no files could be shared. Therefore, our approach to
-     * deleting export files is:
-     * 1. put export files in cache directory so that Android may delete them;
-     * 2. manually delete the files that are older than 1 day when service is connected.
-     */
-    private void clearExportFiles() {
-        for (File file : getCacheDir().listFiles()) {
-            final long ageInMillis = System.currentTimeMillis() - file.lastModified();
-            if (file.getName().startsWith(EXPORT_FILE_PREFIX) && ageInMillis > A_DAY_IN_MILLIS) {
-                file.delete();
-            }
-        }
-    }
-
-    private File getLocalFile() {
-        final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US);
-        final String currentDateString = dateFormat.format(new Date()).toString();
-        final String localFilename = EXPORT_FILE_PREFIX + currentDateString + ".vcf";
-        return new File(getCacheDir(), localFilename);
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/contacts/common/vcard/VCardCommonArguments.java b/src/com/android/contacts/common/vcard/VCardCommonArguments.java
deleted file mode 100644
index c423ca3..0000000
--- a/src/com/android/contacts/common/vcard/VCardCommonArguments.java
+++ /dev/null
@@ -1,27 +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.common.vcard;
-
-/**
- * Argument constants used by many activities and services.
- */
-public class VCardCommonArguments {
-
-    // Argument used to pass calling activities to the target activity or service.
-    // The value should be a string class name (e.g. com.android.contacts.vcard.VCardCommonArgs)
-    public static final String ARG_CALLING_ACTIVITY = "CALLING_ACTIVITY";
-}
diff --git a/src/com/android/contacts/common/vcard/VCardImportExportListener.java b/src/com/android/contacts/common/vcard/VCardImportExportListener.java
deleted file mode 100644
index e4e4893..0000000
--- a/src/com/android/contacts/common/vcard/VCardImportExportListener.java
+++ /dev/null
@@ -1,36 +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.common.vcard;
-
-import android.net.Uri;
-
-import com.android.vcard.VCardEntry;
-
-interface VCardImportExportListener {
-    void onImportProcessed(ImportRequest request, int jobId, int sequence);
-    void onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
-            int totalCount);
-    void onImportFinished(ImportRequest request, int jobId, Uri uri);
-    void onImportFailed(ImportRequest request);
-    void onImportCanceled(ImportRequest request, int jobId);
-
-    void onExportProcessed(ExportRequest request, int jobId);
-    void onExportFailed(ExportRequest request);
-
-    void onCancelRequest(CancelRequest request, int type);
-    void onComplete();
-}
diff --git a/src/com/android/contacts/common/vcard/VCardService.java b/src/com/android/contacts/common/vcard/VCardService.java
deleted file mode 100644
index 1d7837b..0000000
--- a/src/com/android/contacts/common/vcard/VCardService.java
+++ /dev/null
@@ -1,397 +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.common.vcard;
-
-import android.app.Service;
-import android.content.Intent;
-import android.content.res.Resources;
-import android.media.MediaScannerConnection;
-import android.media.MediaScannerConnection.MediaScannerConnectionClient;
-import android.net.Uri;
-import android.os.Binder;
-import android.os.Environment;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.Messenger;
-import android.os.RemoteException;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.SparseArray;
-
-import com.android.contacts.common.R;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Set;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.RejectedExecutionException;
-
-/**
- * The class responsible for handling vCard import/export requests.
- *
- * This Service creates one ImportRequest/ExportRequest object (as Runnable) per request and push
- * it to {@link ExecutorService} with single thread executor. The executor handles each request
- * one by one, and notifies users when needed.
- */
-// TODO: Using IntentService looks simpler than using Service + ServiceConnection though this
-// works fine enough. Investigate the feasibility.
-public class VCardService extends Service {
-    private final static String LOG_TAG = "VCardService";
-
-    /* package */ final static boolean DEBUG = false;
-
-    /**
-     * Specifies the type of operation. Used when constructing a notification, canceling
-     * some operation, etc.
-     */
-    /* package */ static final int TYPE_IMPORT = 1;
-    /* package */ static final int TYPE_EXPORT = 2;
-
-    /* package */ static final String CACHE_FILE_PREFIX = "import_tmp_";
-
-    /* package */ static final String X_VCARD_MIME_TYPE = "text/x-vcard";
-
-    private class CustomMediaScannerConnectionClient implements MediaScannerConnectionClient {
-        final MediaScannerConnection mConnection;
-        final String mPath;
-
-        public CustomMediaScannerConnectionClient(String path) {
-            mConnection = new MediaScannerConnection(VCardService.this, this);
-            mPath = path;
-        }
-
-        public void start() {
-            mConnection.connect();
-        }
-
-        @Override
-        public void onMediaScannerConnected() {
-            if (DEBUG) { Log.d(LOG_TAG, "Connected to MediaScanner. Start scanning."); }
-            mConnection.scanFile(mPath, null);
-        }
-
-        @Override
-        public void onScanCompleted(String path, Uri uri) {
-            if (DEBUG) { Log.d(LOG_TAG, "scan completed: " + path); }
-            mConnection.disconnect();
-            removeConnectionClient(this);
-        }
-    }
-
-    // Should be single thread, as we don't want to simultaneously handle import and export
-    // requests.
-    private final ExecutorService mExecutorService = Executors.newSingleThreadExecutor();
-
-    private int mCurrentJobId;
-
-    // Stores all unfinished import/export jobs which will be executed by mExecutorService.
-    // Key is jobId.
-    private final SparseArray<ProcessorBase> mRunningJobMap = new SparseArray<ProcessorBase>();
-    // Stores ScannerConnectionClient objects until they finish scanning requested files.
-    // Uses List class for simplicity. It's not costly as we won't have multiple objects in
-    // almost all cases.
-    private final List<CustomMediaScannerConnectionClient> mRemainingScannerConnections =
-            new ArrayList<CustomMediaScannerConnectionClient>();
-
-    private MyBinder mBinder;
-
-    private String mCallingActivity;
-
-    // File names currently reserved by some export job.
-    private final Set<String> mReservedDestination = new HashSet<String>();
-    /* ** end of vCard exporter params ** */
-
-    public class MyBinder extends Binder {
-        public VCardService getService() {
-            return VCardService.this;
-        }
-    }
-
-   @Override
-    public void onCreate() {
-        super.onCreate();
-        mBinder = new MyBinder();
-        if (DEBUG) Log.d(LOG_TAG, "vCard Service is being created.");
-    }
-
-    @Override
-    public int onStartCommand(Intent intent, int flags, int id) {
-        if (intent != null && intent.getExtras() != null) {
-            mCallingActivity = intent.getExtras().getString(
-                    VCardCommonArguments.ARG_CALLING_ACTIVITY);
-        } else {
-            mCallingActivity = null;
-        }
-        return START_STICKY;
-    }
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        return mBinder;
-    }
-
-    @Override
-    public void onDestroy() {
-        if (DEBUG) Log.d(LOG_TAG, "VCardService is being destroyed.");
-        cancelAllRequestsAndShutdown();
-        clearCache();
-        super.onDestroy();
-    }
-
-    public synchronized void handleImportRequest(List<ImportRequest> requests,
-            VCardImportExportListener listener) {
-        if (DEBUG) {
-            final ArrayList<String> uris = new ArrayList<String>();
-            final ArrayList<String> displayNames = new ArrayList<String>();
-            for (ImportRequest request : requests) {
-                uris.add(request.uri.toString());
-                displayNames.add(request.displayName);
-            }
-            Log.d(LOG_TAG,
-                    String.format("received multiple import request (uri: %s, displayName: %s)",
-                            uris.toString(), displayNames.toString()));
-        }
-        final int size = requests.size();
-        for (int i = 0; i < size; i++) {
-            ImportRequest request = requests.get(i);
-
-            if (tryExecute(new ImportProcessor(this, listener, request, mCurrentJobId))) {
-                if (listener != null) {
-                    listener.onImportProcessed(request, mCurrentJobId, i);
-                }
-                mCurrentJobId++;
-            } else {
-                if (listener != null) {
-                    listener.onImportFailed(request);
-                }
-                // A rejection means executor doesn't run any more. Exit.
-                break;
-            }
-        }
-    }
-
-    public synchronized void handleExportRequest(ExportRequest request,
-            VCardImportExportListener listener) {
-        if (tryExecute(new ExportProcessor(this, request, mCurrentJobId, mCallingActivity))) {
-            final String path = request.destUri.getEncodedPath();
-            if (DEBUG) Log.d(LOG_TAG, "Reserve the path " + path);
-            if (!mReservedDestination.add(path)) {
-                Log.w(LOG_TAG,
-                        String.format("The path %s is already reserved. Reject export request",
-                                path));
-                if (listener != null) {
-                    listener.onExportFailed(request);
-                }
-                return;
-            }
-
-            if (listener != null) {
-                listener.onExportProcessed(request, mCurrentJobId);
-            }
-            mCurrentJobId++;
-        } else {
-            if (listener != null) {
-                listener.onExportFailed(request);
-            }
-        }
-    }
-
-    /**
-     * Tries to call {@link ExecutorService#execute(Runnable)} toward a given processor.
-     * @return true when successful.
-     */
-    private synchronized boolean tryExecute(ProcessorBase processor) {
-        try {
-            if (DEBUG) {
-                Log.d(LOG_TAG, "Executor service status: shutdown: " + mExecutorService.isShutdown()
-                        + ", terminated: " + mExecutorService.isTerminated());
-            }
-            mExecutorService.execute(processor);
-            mRunningJobMap.put(mCurrentJobId, processor);
-            return true;
-        } catch (RejectedExecutionException e) {
-            Log.w(LOG_TAG, "Failed to excetute a job.", e);
-            return false;
-        }
-    }
-
-    public synchronized void handleCancelRequest(CancelRequest request,
-            VCardImportExportListener listener) {
-        final int jobId = request.jobId;
-        if (DEBUG) Log.d(LOG_TAG, String.format("Received cancel request. (id: %d)", jobId));
-
-        final ProcessorBase processor = mRunningJobMap.get(jobId);
-        mRunningJobMap.remove(jobId);
-
-        if (processor != null) {
-            processor.cancel(true);
-            final int type = processor.getType();
-            if (listener != null) {
-                listener.onCancelRequest(request, type);
-            }
-            if (type == TYPE_EXPORT) {
-                final String path =
-                        ((ExportProcessor)processor).getRequest().destUri.getEncodedPath();
-                Log.i(LOG_TAG,
-                        String.format("Cancel reservation for the path %s if appropriate", path));
-                if (!mReservedDestination.remove(path)) {
-                    Log.w(LOG_TAG, "Not reserved.");
-                }
-            }
-        } else {
-            Log.w(LOG_TAG, String.format("Tried to remove unknown job (id: %d)", jobId));
-        }
-        stopServiceIfAppropriate();
-    }
-
-    /**
-     * Checks job list and call {@link #stopSelf()} when there's no job and no scanner connection
-     * is remaining.
-     * A new job (import/export) cannot be submitted any more after this call.
-     */
-    private synchronized void stopServiceIfAppropriate() {
-        if (mRunningJobMap.size() > 0) {
-            final int size = mRunningJobMap.size();
-
-            // Check if there are processors which aren't finished yet. If we still have ones to
-            // process, we cannot stop the service yet. Also clean up already finished processors
-            // here.
-
-            // Job-ids to be removed. At first all elements in the array are invalid and will
-            // be filled with real job-ids from the array's top. When we find a not-yet-finished
-            // processor, then we start removing those finished jobs. In that case latter half of
-            // this array will be invalid.
-            final int[] toBeRemoved = new int[size];
-            for (int i = 0; i < size; i++) {
-                final int jobId = mRunningJobMap.keyAt(i);
-                final ProcessorBase processor = mRunningJobMap.valueAt(i);
-                if (!processor.isDone()) {
-                    Log.i(LOG_TAG, String.format("Found unfinished job (id: %d)", jobId));
-
-                    // Remove processors which are already "done", all of which should be before
-                    // processors which aren't done yet.
-                    for (int j = 0; j < i; j++) {
-                        mRunningJobMap.remove(toBeRemoved[j]);
-                    }
-                    return;
-                }
-
-                // Remember the finished processor.
-                toBeRemoved[i] = jobId;
-            }
-
-            // We're sure we can remove all. Instead of removing one by one, just call clear().
-            mRunningJobMap.clear();
-        }
-
-        if (!mRemainingScannerConnections.isEmpty()) {
-            Log.i(LOG_TAG, "MediaScanner update is in progress.");
-            return;
-        }
-
-        Log.i(LOG_TAG, "No unfinished job. Stop this service.");
-        mExecutorService.shutdown();
-        stopSelf();
-    }
-
-    /* package */ synchronized void updateMediaScanner(String path) {
-        if (DEBUG) {
-            Log.d(LOG_TAG, "MediaScanner is being updated: " + path);
-        }
-
-        if (mExecutorService.isShutdown()) {
-            Log.w(LOG_TAG, "MediaScanner update is requested after executor's being shut down. " +
-                    "Ignoring the update request");
-            return;
-        }
-        final CustomMediaScannerConnectionClient client =
-                new CustomMediaScannerConnectionClient(path);
-        mRemainingScannerConnections.add(client);
-        client.start();
-    }
-
-    private synchronized void removeConnectionClient(
-            CustomMediaScannerConnectionClient client) {
-        if (DEBUG) {
-            Log.d(LOG_TAG, "Removing custom MediaScannerConnectionClient.");
-        }
-        mRemainingScannerConnections.remove(client);
-        stopServiceIfAppropriate();
-    }
-
-    /* package */ synchronized void handleFinishImportNotification(
-            int jobId, boolean successful) {
-        if (DEBUG) {
-            Log.d(LOG_TAG, String.format("Received vCard import finish notification (id: %d). "
-                    + "Result: %b", jobId, (successful ? "success" : "failure")));
-        }
-        mRunningJobMap.remove(jobId);
-        stopServiceIfAppropriate();
-    }
-
-    /* package */ synchronized void handleFinishExportNotification(
-            int jobId, boolean successful) {
-        if (DEBUG) {
-            Log.d(LOG_TAG, String.format("Received vCard export finish notification (id: %d). "
-                    + "Result: %b", jobId, (successful ? "success" : "failure")));
-        }
-        final ProcessorBase job = mRunningJobMap.get(jobId);
-        mRunningJobMap.remove(jobId);
-        if (job == null) {
-            Log.w(LOG_TAG, String.format("Tried to remove unknown job (id: %d)", jobId));
-        } else if (!(job instanceof ExportProcessor)) {
-            Log.w(LOG_TAG,
-                    String.format("Removed job (id: %s) isn't ExportProcessor", jobId));
-        } else {
-            final String path = ((ExportProcessor)job).getRequest().destUri.getEncodedPath();
-            if (DEBUG) Log.d(LOG_TAG, "Remove reserved path " + path);
-            mReservedDestination.remove(path);
-        }
-
-        stopServiceIfAppropriate();
-    }
-
-    /**
-     * Cancels all the import/export requests and calls {@link ExecutorService#shutdown()}, which
-     * means this Service becomes no longer ready for import/export requests.
-     *
-     * Mainly called from onDestroy().
-     */
-    private synchronized void cancelAllRequestsAndShutdown() {
-        for (int i = 0; i < mRunningJobMap.size(); i++) {
-            mRunningJobMap.valueAt(i).cancel(true);
-        }
-        mRunningJobMap.clear();
-        mExecutorService.shutdown();
-    }
-
-    /**
-     * Removes import caches stored locally.
-     */
-    private void clearCache() {
-        for (final String fileName : fileList()) {
-            if (fileName.startsWith(CACHE_FILE_PREFIX)) {
-                // We don't want to keep all the caches so we remove cache files old enough.
-                Log.i(LOG_TAG, "Remove a temporary file: " + fileName);
-                deleteFile(fileName);
-            }
-        }
-    }
-}
diff --git a/src/com/android/contacts/common/widget/ActivityTouchLinearLayout.java b/src/com/android/contacts/common/widget/ActivityTouchLinearLayout.java
deleted file mode 100644
index d81526e..0000000
--- a/src/com/android/contacts/common/widget/ActivityTouchLinearLayout.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.widget;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.widget.LinearLayout;
-
-import com.android.contacts.common.interactions.TouchPointManager;
-
-/**
- * Linear layout for an activity that listens to all touch events on the screen and saves the touch
- * point.
- * Typically touch events are handled by child views--this class intercepts those touch events
- * before passing them on to the child.
- */
-public class ActivityTouchLinearLayout extends LinearLayout {
-    public ActivityTouchLinearLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent (MotionEvent ev) {
-        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
-            TouchPointManager.getInstance().setPoint((int) ev.getRawX(), (int) ev.getRawY());
-        }
-        return false;
-    }
-}
diff --git a/src/com/android/contacts/common/widget/FloatingActionButtonController.java b/src/com/android/contacts/common/widget/FloatingActionButtonController.java
deleted file mode 100644
index 0e94df1..0000000
--- a/src/com/android/contacts/common/widget/FloatingActionButtonController.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.widget;
-
-import android.app.Activity;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.view.animation.AnimationUtils;
-import android.view.animation.Interpolator;
-import android.view.View;
-import android.widget.ImageButton;
-
-import com.android.contacts.common.util.ViewUtil;
-import com.android.contacts.common.R;
-import com.android.phone.common.animation.AnimUtils;
-
-/**
- * Controls the movement and appearance of the FAB (Floating Action Button).
- */
-public class FloatingActionButtonController {
-    public static final int ALIGN_MIDDLE = 0;
-    public static final int ALIGN_QUARTER_END = 1;
-    public static final int ALIGN_END = 2;
-
-    private static final int FAB_SCALE_IN_DURATION = 186;
-    private static final int FAB_SCALE_IN_FADE_IN_DELAY = 70;
-    private static final int FAB_ICON_FADE_OUT_DURATION = 46;
-
-    private final int mAnimationDuration;
-    private final int mFloatingActionButtonWidth;
-    private final int mFloatingActionButtonMarginRight;
-    private final View mFloatingActionButtonContainer;
-    private final ImageButton mFloatingActionButton;
-    private final Interpolator mFabInterpolator;
-    private int mScreenWidth;
-
-    public FloatingActionButtonController(Activity activity, View container, ImageButton button) {
-        Resources resources = activity.getResources();
-        mFabInterpolator = AnimationUtils.loadInterpolator(activity,
-                android.R.interpolator.fast_out_slow_in);
-        mFloatingActionButtonWidth = resources.getDimensionPixelSize(
-                R.dimen.floating_action_button_width);
-        mFloatingActionButtonMarginRight = resources.getDimensionPixelOffset(
-                R.dimen.floating_action_button_margin_right);
-        mAnimationDuration = resources.getInteger(
-                R.integer.floating_action_button_animation_duration);
-        mFloatingActionButtonContainer = container;
-        mFloatingActionButton = button;
-        ViewUtil.setupFloatingActionButton(mFloatingActionButtonContainer, resources);
-    }
-
-    /**
-     * Passes the screen width into the class. Necessary for translation calculations.
-     * Should be called as soon as parent View width is available.
-     *
-     * @param screenWidth The width of the screen in pixels.
-     */
-    public void setScreenWidth(int screenWidth) {
-        mScreenWidth = screenWidth;
-    }
-
-    /**
-     * Sets FAB as View.VISIBLE or View.GONE.
-     *
-     * @param visible Whether or not to make the container visible.
-     */
-    public void setVisible(boolean visible) {
-        mFloatingActionButtonContainer.setVisibility(visible ? View.VISIBLE : View.GONE);
-    }
-
-    public boolean isVisible() {
-        return mFloatingActionButtonContainer.getVisibility() == View.VISIBLE;
-    }
-
-    public void changeIcon(Drawable icon, String description) {
-        if (mFloatingActionButton.getDrawable() != icon
-                || !mFloatingActionButton.getContentDescription().equals(description)) {
-            mFloatingActionButton.setImageDrawable(icon);
-            mFloatingActionButton.setContentDescription(description);
-        }
-    }
-
-    /**
-     * Updates the FAB location (middle to right position) as the PageView scrolls.
-     *
-     * @param positionOffset A fraction used to calculate position of the FAB during page scroll.
-     */
-    public void onPageScrolled(float positionOffset) {
-        // As the page is scrolling, if we're on the first tab, update the FAB position so it
-        // moves along with it.
-        mFloatingActionButtonContainer.setTranslationX(
-                (int) (positionOffset * getTranslationXForAlignment(ALIGN_END)));
-    }
-
-    /**
-     * Aligns the FAB to the described location
-     *
-     * @param align One of ALIGN_MIDDLE, ALIGN_QUARTER_RIGHT, or ALIGN_RIGHT.
-     * @param animate Whether or not to animate the transition.
-     */
-    public void align(int align, boolean animate) {
-        align(align, 0 /*offsetX */, 0 /* offsetY */, animate);
-    }
-
-    /**
-     * Aligns the FAB to the described location plus specified additional offsets.
-     *
-     * @param align One of ALIGN_MIDDLE, ALIGN_QUARTER_RIGHT, or ALIGN_RIGHT.
-     * @param offsetX Additional offsetX to translate by.
-     * @param offsetY Additional offsetY to translate by.
-     * @param animate Whether or not to animate the transition.
-     */
-    public void align(int align, int offsetX, int offsetY, boolean animate) {
-        if (mScreenWidth == 0) {
-            return;
-        }
-
-        int translationX = getTranslationXForAlignment(align);
-
-        // Skip animation if container is not shown; animation causes container to show again.
-        if (animate && mFloatingActionButtonContainer.isShown()) {
-            mFloatingActionButtonContainer.animate()
-                    .translationX(translationX + offsetX)
-                    .translationY(offsetY)
-                    .setInterpolator(mFabInterpolator)
-                    .setDuration(mAnimationDuration)
-                    .start();
-        } else {
-            mFloatingActionButtonContainer.setTranslationX(translationX + offsetX);
-            mFloatingActionButtonContainer.setTranslationY(offsetY);
-        }
-    }
-
-    /**
-     * Resizes width and height of the floating action bar container.
-     * @param dimension The new dimensions for the width and height.
-     * @param animate Whether to animate this change.
-     */
-    public void resize(int dimension, boolean animate) {
-        if (animate) {
-            AnimUtils.changeDimensions(mFloatingActionButtonContainer, dimension, dimension);
-        } else {
-            mFloatingActionButtonContainer.getLayoutParams().width = dimension;
-            mFloatingActionButtonContainer.getLayoutParams().height = dimension;
-            mFloatingActionButtonContainer.requestLayout();
-        }
-    }
-
-    /**
-     * Scales the floating action button from no height and width to its actual dimensions. This is
-     * an animation for showing the floating action button.
-     * @param delayMs The delay for the effect, in milliseconds.
-     */
-    public void scaleIn(int delayMs) {
-        setVisible(true);
-        AnimUtils.scaleIn(mFloatingActionButtonContainer, FAB_SCALE_IN_DURATION, delayMs);
-        AnimUtils.fadeIn(mFloatingActionButton, FAB_SCALE_IN_DURATION,
-                delayMs + FAB_SCALE_IN_FADE_IN_DELAY, null);
-    }
-
-    /**
-     * Immediately remove the affects of the last call to {@link #scaleOut}.
-     */
-    public void resetIn() {
-        mFloatingActionButton.setAlpha(1f);
-        mFloatingActionButton.setVisibility(View.VISIBLE);
-        mFloatingActionButtonContainer.setScaleX(1);
-        mFloatingActionButtonContainer.setScaleY(1);
-    }
-
-    /**
-     * Scales the floating action button from its actual dimensions to no height and width. This is
-     * an animation for hiding the floating action button.
-     */
-    public void scaleOut() {
-        AnimUtils.scaleOut(mFloatingActionButtonContainer, mAnimationDuration);
-        // Fade out the icon faster than the scale out animation, so that the icon scaling is less
-        // obvious. We don't want it to scale, but the resizing the container is not as performant.
-        AnimUtils.fadeOut(mFloatingActionButton, FAB_ICON_FADE_OUT_DURATION, null);
-    }
-
-    /**
-     * Calculates the X offset of the FAB to the given alignment, adjusted for whether or not the
-     * view is in RTL mode.
-     *
-     * @param align One of ALIGN_MIDDLE, ALIGN_QUARTER_RIGHT, or ALIGN_RIGHT.
-     * @return The translationX for the given alignment.
-     */
-    public int getTranslationXForAlignment(int align) {
-        int result = 0;
-        switch (align) {
-            case ALIGN_MIDDLE:
-                // Moves the FAB to exactly center screen.
-                return 0;
-            case ALIGN_QUARTER_END:
-                // Moves the FAB a quarter of the screen width.
-                result = mScreenWidth / 4;
-                break;
-            case ALIGN_END:
-                // Moves the FAB half the screen width. Same as aligning right with a marginRight.
-                result = mScreenWidth / 2
-                        - mFloatingActionButtonWidth / 2
-                        - mFloatingActionButtonMarginRight;
-                break;
-        }
-        if (isLayoutRtl()) {
-            result *= -1;
-        }
-        return result;
-    }
-
-    private boolean isLayoutRtl() {
-        return mFloatingActionButtonContainer.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
-    }
-}
diff --git a/src/com/android/contacts/common/widget/LayoutSuppressingImageView.java b/src/com/android/contacts/common/widget/LayoutSuppressingImageView.java
deleted file mode 100644
index abcf786..0000000
--- a/src/com/android/contacts/common/widget/LayoutSuppressingImageView.java
+++ /dev/null
@@ -1,39 +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.common.widget;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.ImageView;
-
-/**
- * Custom {@link ImageView} that improves layouting performance.
- *
- * This improves the performance by not passing requestLayout() to its parent, taking advantage
- * of knowing that image size won't change once set.
- */
-public class LayoutSuppressingImageView extends ImageView {
-
-    public LayoutSuppressingImageView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    public void requestLayout() {
-        forceLayout();
-    }
-}
diff --git a/src/com/android/contacts/common/widget/LayoutSuppressingQuickContactBadge.java b/src/com/android/contacts/common/widget/LayoutSuppressingQuickContactBadge.java
deleted file mode 100644
index 1f48f5d..0000000
--- a/src/com/android/contacts/common/widget/LayoutSuppressingQuickContactBadge.java
+++ /dev/null
@@ -1,39 +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.common.widget;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.widget.QuickContactBadge;
-
-/**
- * Custom {@link QuickContactBadge} that improves layouting performance.
- *
- * This improves the performance by not passing requestLayout() to its parent, taking advantage
- * of knowing that image size won't change once set.
- */
-public class LayoutSuppressingQuickContactBadge extends QuickContactBadge {
-
-    public LayoutSuppressingQuickContactBadge(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    public void requestLayout() {
-        forceLayout();
-    }
-}
diff --git a/src/com/android/contacts/common/widget/ProportionalLayout.java b/src/com/android/contacts/common/widget/ProportionalLayout.java
deleted file mode 100644
index 5a5ac29..0000000
--- a/src/com/android/contacts/common/widget/ProportionalLayout.java
+++ /dev/null
@@ -1,146 +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.common.widget;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.android.contacts.common.R;
-
-/**
- * Layout that calculates its height based on its width, or vice versa (depending on the set
- * {@link #setDirection(Direction)}. The factor is specified in {@link #setRatio(float)}.
- * <p>For {@link Direction#heightToWidth}: width := height * factor</p>
- * <p>For {@link Direction#widthToHeight}: height := width * factor</p>
- * <p>Only one child is allowed; if more are required, another ViewGroup can be used as the direct
- * child of this layout.</p>
- */
-public class ProportionalLayout extends ViewGroup {
-    /** Specifies whether the width should be calculated based on the height or vice-versa  */
-    public enum Direction {
-        widthToHeight("widthToHeight"),
-        heightToWidth("heightToWidth");
-
-        public final String XmlName;
-
-        private Direction(String xmlName) {
-            XmlName = xmlName;
-        }
-
-        /**
-         * Parses the given direction string and returns the Direction instance. This
-         * should be used when inflating from xml
-         */
-        public static Direction parse(String value) {
-            if (widthToHeight.XmlName.equals(value)) {
-                return Direction.widthToHeight;
-            } else if (heightToWidth.XmlName.equals(value)) {
-                return Direction.heightToWidth;
-            } else {
-                throw new IllegalStateException("direction must be either " +
-                        widthToHeight.XmlName + " or " + heightToWidth.XmlName);
-            }
-        }
-    }
-
-    private Direction mDirection;
-    private float mRatio;
-
-    public ProportionalLayout(Context context) {
-        super(context);
-    }
-
-    public ProportionalLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        initFromAttributes(context, attrs);
-    }
-
-    public ProportionalLayout(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        initFromAttributes(context, attrs);
-    }
-
-    private void initFromAttributes(Context context, AttributeSet attrs) {
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ProportionalLayout);
-
-        mDirection = Direction.parse(a.getString(R.styleable.ProportionalLayout_direction));
-        mRatio = a.getFloat(R.styleable.ProportionalLayout_ratio, 1.0f);
-
-        a.recycle();
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        if (getChildCount() != 1) {
-            throw new IllegalStateException("ProportionalLayout requires exactly one child");
-        }
-
-        final View child = getChildAt(0);
-
-        // Do a first pass to get the optimal size
-        measureChild(child, widthMeasureSpec, heightMeasureSpec);
-        final int childWidth = child.getMeasuredWidth();
-        final int childHeight = child.getMeasuredHeight();
-
-        final int width;
-        final int height;
-        if (mDirection == Direction.heightToWidth) {
-            width = Math.round(childHeight * mRatio);
-            height = childHeight;
-        } else {
-            width = childWidth;
-            height = Math.round(childWidth * mRatio);
-        }
-
-        // Do a second pass so that all children are informed of the new size
-        measureChild(child,
-                MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
-                MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
-
-        setMeasuredDimension(
-                resolveSize(width, widthMeasureSpec), resolveSize(height, heightMeasureSpec));
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        if (getChildCount() != 1) {
-            throw new IllegalStateException("ProportionalLayout requires exactly one child");
-        }
-
-        final View child = getChildAt(0);
-        child.layout(0, 0, right-left, bottom-top);
-    }
-
-    public Direction getDirection() {
-        return mDirection;
-    }
-
-    public void setDirection(Direction direction) {
-        mDirection = direction;
-    }
-
-    public float getRatio() {
-        return mRatio;
-    }
-
-    public void setRatio(float ratio) {
-        mRatio = ratio;
-    }
-}
diff --git a/src/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java b/src/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java
deleted file mode 100644
index 709ce41..0000000
--- a/src/com/android/contacts/common/widget/SelectPhoneAccountDialogFragment.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.contacts.common.widget;
-
-import android.app.AlertDialog;
-import android.app.Dialog;
-import android.app.DialogFragment;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.graphics.drawable.Icon;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.ResultReceiver;
-import android.telecom.PhoneAccount;
-import android.telecom.PhoneAccountHandle;
-import android.telecom.TelecomManager;
-import android.text.TextUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.ListAdapter;
-import android.widget.TextView;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.compat.PhoneAccountCompat;
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Dialog that allows the user to select a phone accounts for a given action. Optionally provides
- * the choice to set the phone account as default.
- */
-public class SelectPhoneAccountDialogFragment extends DialogFragment {
-    private static final String ARG_TITLE_RES_ID = "title_res_id";
-    private static final String ARG_CAN_SET_DEFAULT = "can_set_default";
-    private static final String ARG_ACCOUNT_HANDLES = "account_handles";
-    private static final String ARG_IS_DEFAULT_CHECKED = "is_default_checked";
-    private static final String ARG_LISTENER = "listener";
-
-    private int mTitleResId;
-    private boolean mCanSetDefault;
-    private List<PhoneAccountHandle> mAccountHandles;
-    private boolean mIsSelected;
-    private boolean mIsDefaultChecked;
-    private TelecomManager mTelecomManager;
-    private SelectPhoneAccountListener mListener;
-
-    /**
-     * Create new fragment instance with default title and no option to set as default.
-     *
-     * @param accountHandles The {@code PhoneAccountHandle}s available to select from.
-     * @param listener The listener for the results of the account selection.
-     */
-    public static SelectPhoneAccountDialogFragment newInstance(
-            List<PhoneAccountHandle> accountHandles, SelectPhoneAccountListener listener) {
-        return newInstance(R.string.select_account_dialog_title, false,
-                accountHandles, listener);
-    }
-
-    /**
-     * Create new fragment instance.
-     * This method also allows specifying a custom title and "set default" checkbox.
-     *
-     * @param titleResId The resource ID for the string to use in the title of the dialog.
-     * @param canSetDefault {@code true} if the dialog should include an option to set the selection
-     * as the default. False otherwise.
-     * @param accountHandles The {@code PhoneAccountHandle}s available to select from.
-     * @param listener The listener for the results of the account selection.
-     */
-    public static SelectPhoneAccountDialogFragment newInstance(int titleResId,
-            boolean canSetDefault, List<PhoneAccountHandle> accountHandles,
-            SelectPhoneAccountListener listener) {
-        ArrayList<PhoneAccountHandle> accountHandlesCopy = new ArrayList<PhoneAccountHandle>();
-        if (accountHandles != null) {
-            accountHandlesCopy.addAll(accountHandles);
-        }
-        SelectPhoneAccountDialogFragment fragment = new SelectPhoneAccountDialogFragment();
-        final Bundle args = new Bundle();
-        args.putInt(ARG_TITLE_RES_ID, titleResId);
-        args.putBoolean(ARG_CAN_SET_DEFAULT, canSetDefault);
-        args.putParcelableArrayList(ARG_ACCOUNT_HANDLES, accountHandlesCopy);
-        args.putParcelable(ARG_LISTENER, listener);
-        fragment.setArguments(args);
-        fragment.setListener(listener);
-        return fragment;
-    }
-
-    public SelectPhoneAccountDialogFragment() {
-    }
-
-    public void setListener(SelectPhoneAccountListener listener) {
-        mListener = listener;
-    }
-
-    public static class SelectPhoneAccountListener extends ResultReceiver {
-        static final int RESULT_SELECTED = 1;
-        static final int RESULT_DISMISSED = 2;
-
-        static final String EXTRA_SELECTED_ACCOUNT_HANDLE = "extra_selected_account_handle";
-        static final String EXTRA_SET_DEFAULT = "extra_set_default";
-
-        public SelectPhoneAccountListener() {
-            super(new Handler());
-        }
-
-        @Override
-        protected void onReceiveResult(int resultCode, Bundle resultData) {
-            if (resultCode == RESULT_SELECTED) {
-                onPhoneAccountSelected(
-                        (PhoneAccountHandle) resultData.getParcelable(
-                                EXTRA_SELECTED_ACCOUNT_HANDLE),
-                        resultData.getBoolean(EXTRA_SET_DEFAULT));
-            } else if (resultCode == RESULT_DISMISSED) {
-                onDialogDismissed();
-            }
-        }
-
-        public void onPhoneAccountSelected(PhoneAccountHandle selectedAccountHandle,
-                boolean setDefault) {}
-
-        public void onDialogDismissed() {}
-    }
-
-    @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putBoolean(ARG_IS_DEFAULT_CHECKED, mIsDefaultChecked);
-    }
-
-    @Override
-    public Dialog onCreateDialog(Bundle savedInstanceState) {
-        mTitleResId = getArguments().getInt(ARG_TITLE_RES_ID);
-        mCanSetDefault = getArguments().getBoolean(ARG_CAN_SET_DEFAULT);
-        mAccountHandles = getArguments().getParcelableArrayList(ARG_ACCOUNT_HANDLES);
-        mListener = getArguments().getParcelable(ARG_LISTENER);
-        if (savedInstanceState != null) {
-            mIsDefaultChecked = savedInstanceState.getBoolean(ARG_IS_DEFAULT_CHECKED);
-        }
-        mIsSelected = false;
-        mTelecomManager =
-                (TelecomManager) getActivity().getSystemService(Context.TELECOM_SERVICE);
-
-        final DialogInterface.OnClickListener selectionListener =
-                new DialogInterface.OnClickListener() {
-            @Override
-            public void onClick(DialogInterface dialog, int which) {
-                mIsSelected = true;
-                PhoneAccountHandle selectedAccountHandle = mAccountHandles.get(which);
-                final Bundle result = new Bundle();
-                result.putParcelable(SelectPhoneAccountListener.EXTRA_SELECTED_ACCOUNT_HANDLE,
-                        selectedAccountHandle);
-                result.putBoolean(SelectPhoneAccountListener.EXTRA_SET_DEFAULT,
-                        mIsDefaultChecked);
-                if (mListener != null) {
-                    mListener.onReceiveResult(SelectPhoneAccountListener.RESULT_SELECTED, result);
-                }
-            }
-        };
-
-        final CompoundButton.OnCheckedChangeListener checkListener =
-                new CompoundButton.OnCheckedChangeListener() {
-            @Override
-            public void onCheckedChanged(CompoundButton check, boolean isChecked) {
-                mIsDefaultChecked = isChecked;
-            }
-        };
-
-        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-        ListAdapter selectAccountListAdapter = new SelectAccountListAdapter(
-                builder.getContext(),
-                R.layout.select_account_list_item,
-                mAccountHandles);
-
-        AlertDialog dialog = builder.setTitle(mTitleResId)
-                .setAdapter(selectAccountListAdapter, selectionListener)
-                .create();
-
-        if (mCanSetDefault) {
-            // Generate custom checkbox view
-            LinearLayout checkboxLayout = (LinearLayout) getActivity()
-                    .getLayoutInflater()
-                    .inflate(R.layout.default_account_checkbox, null);
-
-            CheckBox cb =
-                    (CheckBox) checkboxLayout.findViewById(R.id.default_account_checkbox_view);
-            cb.setOnCheckedChangeListener(checkListener);
-            cb.setChecked(mIsDefaultChecked);
-
-            dialog.getListView().addFooterView(checkboxLayout);
-        }
-
-        return dialog;
-    }
-
-    private class SelectAccountListAdapter extends ArrayAdapter<PhoneAccountHandle> {
-        private int mResId;
-
-        public SelectAccountListAdapter(
-                Context context, int resource, List<PhoneAccountHandle> accountHandles) {
-            super(context, resource, accountHandles);
-            mResId = resource;
-        }
-
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            LayoutInflater inflater = (LayoutInflater)
-                    getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-
-            View rowView;
-            final ViewHolder holder;
-
-            if (convertView == null) {
-                // Cache views for faster scrolling
-                rowView = inflater.inflate(mResId, null);
-                holder = new ViewHolder();
-                holder.labelTextView = (TextView) rowView.findViewById(R.id.label);
-                holder.numberTextView = (TextView) rowView.findViewById(R.id.number);
-                holder.imageView = (ImageView) rowView.findViewById(R.id.icon);
-                rowView.setTag(holder);
-            }
-            else {
-                rowView = convertView;
-                holder = (ViewHolder) rowView.getTag();
-            }
-
-            PhoneAccountHandle accountHandle = getItem(position);
-            PhoneAccount account = mTelecomManager.getPhoneAccount(accountHandle);
-            if (account == null) {
-                return rowView;
-            }
-            holder.labelTextView.setText(account.getLabel());
-            if (account.getAddress() == null ||
-                    TextUtils.isEmpty(account.getAddress().getSchemeSpecificPart())) {
-                holder.numberTextView.setVisibility(View.GONE);
-            } else {
-                holder.numberTextView.setVisibility(View.VISIBLE);
-                holder.numberTextView.setText(
-                        PhoneNumberUtilsCompat.createTtsSpannable(
-                                account.getAddress().getSchemeSpecificPart()));
-            }
-            holder.imageView.setImageDrawable(PhoneAccountCompat.createIconDrawable(account,
-                    getContext()));
-            return rowView;
-        }
-
-        private class ViewHolder {
-            TextView labelTextView;
-            TextView numberTextView;
-            ImageView imageView;
-        }
-    }
-
-    @Override
-    public void onStop() {
-        if (!mIsSelected && mListener != null) {
-            mListener.onReceiveResult(SelectPhoneAccountListener.RESULT_DISMISSED, null);
-        }
-        super.onStop();
-    }
-}
diff --git a/src/com/android/contacts/compat/CallSdkCompat.java b/src/com/android/contacts/compat/CallSdkCompat.java
new file mode 100644
index 0000000..d8fbc9a
--- /dev/null
+++ b/src/com/android/contacts/compat/CallSdkCompat.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.compat;
+
+import android.telecom.Call;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+public class CallSdkCompat {
+    public static class Details {
+        // TODO: This property is hidden in the N release; replace with actual when the API is
+        // made public.
+        public static final int PROPERTY_IS_EXTERNAL_CALL = 0x00000040;
+        public static final int PROPERTY_ENTERPRISE_CALL = Call.Details.PROPERTY_ENTERPRISE_CALL;
+        // TODO: This capability is hidden in the N release; replace with actual when the API is
+        // made public.
+        public static final int CAPABILITY_CAN_PULL_CALL = 0x00800000;
+        public static final int CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO =
+                Call.Details.CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO;
+    }
+
+    /**
+     * TODO: This API is hidden in the N release; replace the implementation with a call to the
+     * actual once it is made public.
+     */
+    public static void pullExternalCall(Call call) {
+        if (!CompatUtils.isNCompatible()) {
+            return;
+        }
+        Class<?> callClass = Call.class;
+        try {
+            Method pullExternalCallMethod = callClass.getDeclaredMethod("pullExternalCall");
+            pullExternalCallMethod.invoke(call);
+        } catch (NoSuchMethodException e) {
+            // Ignore requests to pull call if there is a problem.
+        } catch (InvocationTargetException e) {
+            // Ignore requests to pull call if there is a problem.
+        } catch (IllegalAccessException e) {
+            // Ignore requests to pull call if there is a problem.
+        }
+    }
+}
diff --git a/src/com/android/contacts/compat/CallableCompat.java b/src/com/android/contacts/compat/CallableCompat.java
new file mode 100644
index 0000000..bcc675c
--- /dev/null
+++ b/src/com/android/contacts/compat/CallableCompat.java
@@ -0,0 +1,36 @@
+/*
+ * 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.compat;
+
+import android.net.Uri;
+import android.provider.ContactsContract.CommonDataKinds.Callable;
+
+import com.android.contacts.ContactsUtils;
+
+public class CallableCompat {
+
+    // TODO: Use N APIs
+    private static final Uri ENTERPRISE_CONTENT_FILTER_URI =
+            Uri.withAppendedPath(Callable.CONTENT_URI, "filter_enterprise");
+
+    public static Uri getContentFilterUri() {
+        if (ContactsUtils.FLAG_N_FEATURE) {
+            return ENTERPRISE_CONTENT_FILTER_URI;
+        }
+        return Callable.CONTENT_FILTER_URI;
+    }
+}
diff --git a/src/com/android/contacts/compat/CompatUtils.java b/src/com/android/contacts/compat/CompatUtils.java
new file mode 100644
index 0000000..30ad9b8
--- /dev/null
+++ b/src/com/android/contacts/compat/CompatUtils.java
@@ -0,0 +1,282 @@
+/*
+ * 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.compat;
+
+import android.os.Build;
+import android.os.Build.VERSION;
+import android.support.annotation.Nullable;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.contacts.model.CPOWrapper;
+
+import java.lang.reflect.InvocationTargetException;
+
+public final class CompatUtils {
+
+    private static final String TAG = CompatUtils.class.getSimpleName();
+
+    /**
+     * These 4 variables are copied from ContentProviderOperation for compatibility.
+     */
+    public final static int TYPE_INSERT = 1;
+
+    public final static int TYPE_UPDATE = 2;
+
+    public final static int TYPE_DELETE = 3;
+
+    public final static int TYPE_ASSERT = 4;
+
+    /**
+     * Returns whether the operation in CPOWrapper is of TYPE_INSERT;
+     */
+    public static boolean isInsertCompat(CPOWrapper cpoWrapper) {
+        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
+            return cpoWrapper.getOperation().isInsert();
+        }
+        return (cpoWrapper.getType() == TYPE_INSERT);
+    }
+
+    /**
+     * Returns whether the operation in CPOWrapper is of TYPE_UPDATE;
+     */
+    public static boolean isUpdateCompat(CPOWrapper cpoWrapper) {
+        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
+            return cpoWrapper.getOperation().isUpdate();
+        }
+        return (cpoWrapper.getType() == TYPE_UPDATE);
+    }
+
+    /**
+     * Returns whether the operation in CPOWrapper is of TYPE_DELETE;
+     */
+    public static boolean isDeleteCompat(CPOWrapper cpoWrapper) {
+        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
+            return cpoWrapper.getOperation().isDelete();
+        }
+        return (cpoWrapper.getType() == TYPE_DELETE);
+    }
+    /**
+     * Returns whether the operation in CPOWrapper is of TYPE_ASSERT;
+     */
+    public static boolean isAssertQueryCompat(CPOWrapper cpoWrapper) {
+        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
+            return cpoWrapper.getOperation().isAssertQuery();
+        }
+        return (cpoWrapper.getType() == TYPE_ASSERT);
+    }
+
+    /**
+     * PrioritizedMimeType is added in API level 23.
+     */
+    public static boolean hasPrioritizedMimeType() {
+        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M)
+                >= Build.VERSION_CODES.M;
+    }
+
+    /**
+     * Determines if this version is compatible with multi-SIM and the phone account APIs. Can also
+     * force the version to be lower through SdkVersionOverride.
+     *
+     * @return {@code true} if multi-SIM capability is available, {@code false} otherwise.
+     */
+    public static boolean isMSIMCompatible() {
+        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
+                >= Build.VERSION_CODES.LOLLIPOP_MR1;
+    }
+
+    /**
+     * Determines if this version is compatible with video calling. Can also force the version to be
+     * lower through SdkVersionOverride.
+     *
+     * @return {@code true} if video calling is allowed, {@code false} otherwise.
+     */
+    public static boolean isVideoCompatible() {
+        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
+                >= Build.VERSION_CODES.M;
+    }
+
+    /**
+     * Determines if this version is capable of using presence checking for video calling. Support
+     * for video call presence indication is added in SDK 24.
+     *
+     * @return {@code true} if video presence checking is allowed, {@code false} otherwise.
+     */
+    public static boolean isVideoPresenceCompatible() {
+        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M)
+                > Build.VERSION_CODES.M;
+    }
+
+    /**
+     * Determines if this version is compatible with call subject. Can also force the version to be
+     * lower through SdkVersionOverride.
+     *
+     * @return {@code true} if call subject is a feature on this device, {@code false} otherwise.
+     */
+    public static boolean isCallSubjectCompatible() {
+        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
+                >= Build.VERSION_CODES.M;
+    }
+
+    /**
+     * Determines if this version is compatible with a default dialer. Can also force the version to
+     * be lower through {@link SdkVersionOverride}.
+     *
+     * @return {@code true} if default dialer is a feature on this device, {@code false} otherwise.
+     */
+    public static boolean isDefaultDialerCompatible() {
+        return isMarshmallowCompatible();
+    }
+
+    /**
+     * Determines if this version is compatible with Lollipop Mr1-specific APIs. Can also force the
+     * version to be lower through SdkVersionOverride.
+     *
+     * @return {@code true} if runtime sdk is compatible with Lollipop MR1, {@code false} otherwise.
+     */
+    public static boolean isLollipopMr1Compatible() {
+        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP_MR1)
+                >= Build.VERSION_CODES.LOLLIPOP_MR1;
+    }
+
+    /**
+     * Determines if this version is compatible with Marshmallow-specific APIs. Can also force the
+     * version to be lower through SdkVersionOverride.
+     *
+     * @return {@code true} if runtime sdk is compatible with Marshmallow, {@code false} otherwise.
+     */
+    public static boolean isMarshmallowCompatible() {
+        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
+                >= Build.VERSION_CODES.M;
+    }
+
+    /**
+     * Determines if this version is compatible with N-specific APIs.
+     *
+     * @return {@code true} if runtime sdk is compatible with N and the app is built with N, {@code
+     * false} otherwise.
+     */
+    public static boolean isNCompatible() {
+        return VERSION.SDK_INT >= 24;
+    }
+
+
+    public static boolean isNougatMr1Compatible() {
+        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.N_MR1)
+                >= Build.VERSION_CODES.N_MR1;
+    }
+
+    public static boolean isLauncherShortcutCompatible() {
+        return isNougatMr1Compatible();
+    }
+
+    /**
+     * Determines if the given class is available. Can be used to check if system apis exist at
+     * runtime.
+     *
+     * @param className the name of the class to look for.
+     * @return {@code true} if the given class is available, {@code false} otherwise or if className
+     * is empty.
+     */
+    public static boolean isClassAvailable(@Nullable String className) {
+        if (TextUtils.isEmpty(className)) {
+            return false;
+        }
+        try {
+            Class.forName(className);
+            return true;
+        } catch (ClassNotFoundException e) {
+            return false;
+        } catch (Throwable t) {
+            Log.e(TAG, "Unexpected exception when checking if class:" + className + " exists at "
+                    + "runtime", t);
+            return false;
+        }
+    }
+
+    /**
+     * Determines if the given class's method is available to call. Can be used to check if system
+     * apis exist at runtime.
+     *
+     * @param className the name of the class to look for
+     * @param methodName the name of the method to look for
+     * @param parameterTypes the needed parameter types for the method to look for
+     * @return {@code true} if the given class is available, {@code false} otherwise or if className
+     * or methodName are empty.
+     */
+    public static boolean isMethodAvailable(@Nullable String className, @Nullable String methodName,
+            Class<?>... parameterTypes) {
+        if (TextUtils.isEmpty(className) || TextUtils.isEmpty(methodName)) {
+            return false;
+        }
+
+        try {
+            Class.forName(className).getMethod(methodName, parameterTypes);
+            return true;
+        } catch (ClassNotFoundException | NoSuchMethodException e) {
+            Log.v(TAG, "Could not find method: " + className + "#" + methodName);
+            return false;
+        } catch (Throwable t) {
+            Log.e(TAG, "Unexpected exception when checking if method: " + className + "#"
+                    + methodName + " exists at runtime", t);
+            return false;
+        }
+    }
+
+    /**
+     * Invokes a given class's method using reflection. Can be used to call system apis that exist
+     * at runtime but not in the SDK.
+     *
+     * @param instance The instance of the class to invoke the method on.
+     * @param methodName The name of the method to invoke.
+     * @param parameterTypes The needed parameter types for the method.
+     * @param parameters The parameter values to pass into the method.
+     * @return The result of the invocation or {@code null} if instance or methodName are empty, or
+     * if the reflection fails.
+     */
+    @Nullable
+    public static Object invokeMethod(@Nullable Object instance, @Nullable String methodName,
+            Class<?>[] parameterTypes, Object[] parameters) {
+        if (instance == null || TextUtils.isEmpty(methodName)) {
+            return null;
+        }
+
+        String className = instance.getClass().getName();
+        try {
+            return Class.forName(className).getMethod(methodName, parameterTypes)
+                    .invoke(instance, parameters);
+        } catch (ClassNotFoundException | NoSuchMethodException | IllegalArgumentException
+                | IllegalAccessException | InvocationTargetException e) {
+            Log.v(TAG, "Could not invoke method: " + className + "#" + methodName);
+            return null;
+        } catch (Throwable t) {
+            Log.e(TAG, "Unexpected exception when invoking method: " + className
+                    + "#" + methodName + " at runtime", t);
+            return null;
+        }
+    }
+
+    /**
+     * Determines if this version is compatible with Lollipop-specific APIs. Can also force the
+     * version to be lower through SdkVersionOverride.
+     *
+     * @return {@code true} if call subject is a feature on this device, {@code false} otherwise.
+     */
+    public static boolean isLollipopCompatible() {
+        return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP)
+                >= Build.VERSION_CODES.LOLLIPOP;
+    }
+}
diff --git a/src/com/android/contacts/compat/ContactsCompat.java b/src/com/android/contacts/compat/ContactsCompat.java
new file mode 100644
index 0000000..3b090b5
--- /dev/null
+++ b/src/com/android/contacts/compat/ContactsCompat.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.compat;
+
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+
+import com.android.contacts.ContactsUtils;
+
+/**
+ * Compatibility class for {@link ContactsContract.Contacts}
+ */
+public class ContactsCompat {
+    /**
+     * Not instantiable.
+     */
+    private ContactsCompat() {
+    }
+
+    // TODO: Use N APIs
+    private static final Uri ENTERPRISE_CONTENT_FILTER_URI =
+            Uri.withAppendedPath(Contacts.CONTENT_URI, "filter_enterprise");
+
+    // Copied from ContactsContract.Contacts#ENTERPRISE_CONTACT_ID_BASE, which is hidden.
+    private static final long ENTERPRISE_CONTACT_ID_BASE = 1000000000;
+
+    public static Uri getContentUri() {
+        if (ContactsUtils.FLAG_N_FEATURE) {
+            return ENTERPRISE_CONTENT_FILTER_URI;
+        }
+        return Contacts.CONTENT_FILTER_URI;
+    }
+
+    /**
+     * Return {@code true} if a contact ID is from the contacts provider on the enterprise profile.
+     */
+    public static boolean isEnterpriseContactId(long contactId) {
+        if (CompatUtils.isLollipopCompatible()) {
+            return Contacts.isEnterpriseContactId(contactId);
+        } else {
+            // copied from ContactsContract.Contacts.isEnterpriseContactId
+            return (contactId >= ENTERPRISE_CONTACT_ID_BASE) &&
+                    (contactId < ContactsContract.Profile.MIN_ID);
+        }
+    }
+}
diff --git a/src/com/android/contacts/compat/DirectoryCompat.java b/src/com/android/contacts/compat/DirectoryCompat.java
new file mode 100644
index 0000000..95e021f
--- /dev/null
+++ b/src/com/android/contacts/compat/DirectoryCompat.java
@@ -0,0 +1,53 @@
+/*
+ * 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.compat;
+
+import android.net.Uri;
+import android.provider.ContactsContract.Directory;
+
+import com.android.contacts.ContactsUtils;
+
+public class DirectoryCompat {
+
+    public static Uri getContentUri() {
+        if (ContactsUtils.FLAG_N_FEATURE) {
+            return DirectorySdkCompat.ENTERPRISE_CONTENT_URI;
+        }
+        return Directory.CONTENT_URI;
+    }
+
+    public static boolean isInvisibleDirectory(long directoryId) {
+        if (ContactsUtils.FLAG_N_FEATURE) {
+            return (directoryId == Directory.LOCAL_INVISIBLE
+                    || directoryId == DirectorySdkCompat.ENTERPRISE_LOCAL_INVISIBLE);
+        }
+        return directoryId == Directory.LOCAL_INVISIBLE;
+    }
+
+    public static boolean isRemoteDirectoryId(long directoryId) {
+        if (ContactsUtils.FLAG_N_FEATURE) {
+            return DirectorySdkCompat.isRemoteDirectoryId(directoryId);
+        }
+        return !(directoryId == Directory.DEFAULT || directoryId == Directory.LOCAL_INVISIBLE);
+    }
+
+    public static boolean isEnterpriseDirectoryId(long directoryId) {
+        return ContactsUtils.FLAG_N_FEATURE
+                ? DirectorySdkCompat.isEnterpriseDirectoryId(directoryId)
+                : false;
+    }
+}
diff --git a/src/com/android/contacts/compat/DirectorySdkCompat.java b/src/com/android/contacts/compat/DirectorySdkCompat.java
new file mode 100644
index 0000000..32b918c
--- /dev/null
+++ b/src/com/android/contacts/compat/DirectorySdkCompat.java
@@ -0,0 +1,37 @@
+/*
+ * 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.compat;
+
+import android.net.Uri;
+import android.provider.ContactsContract.Directory;
+
+public class DirectorySdkCompat {
+
+    private static final String TAG = "DirectorySdkCompat";
+
+    public static final Uri ENTERPRISE_CONTENT_URI = Directory.ENTERPRISE_CONTENT_URI;
+    public static final long ENTERPRISE_LOCAL_DEFAULT = Directory.ENTERPRISE_DEFAULT;
+    public static final long ENTERPRISE_LOCAL_INVISIBLE = Directory.ENTERPRISE_LOCAL_INVISIBLE;
+
+    public static boolean isRemoteDirectoryId(long directoryId) {
+        return CompatUtils.isNCompatible() ? Directory.isRemoteDirectoryId(directoryId) : false;
+    }
+
+    public static boolean isEnterpriseDirectoryId(long directoryId) {
+        return CompatUtils.isNCompatible() ? Directory.isEnterpriseDirectoryId(directoryId) : false;
+    }
+}
diff --git a/src/com/android/contacts/compat/EdgeEffectCompat.java b/src/com/android/contacts/compat/EdgeEffectCompat.java
index 92999a0..b93ff90 100644
--- a/src/com/android/contacts/compat/EdgeEffectCompat.java
+++ b/src/com/android/contacts/compat/EdgeEffectCompat.java
@@ -17,7 +17,6 @@
 package com.android.contacts.compat;
 
 import android.widget.EdgeEffect;
-import com.android.contacts.common.compat.CompatUtils;
 
 /**
  * Compatibility class for {@link android.widget.EdgeEffect}
diff --git a/src/com/android/contacts/compat/EventCompat.java b/src/com/android/contacts/compat/EventCompat.java
new file mode 100644
index 0000000..2ce8148
--- /dev/null
+++ b/src/com/android/contacts/compat/EventCompat.java
@@ -0,0 +1,58 @@
+/*
+ * 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.compat;
+
+import android.content.res.Resources;
+import android.provider.ContactsContract.CommonDataKinds.BaseTypes;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.text.TextUtils;
+
+/**
+ * Compatibility class for {@link Event}
+ */
+public class EventCompat {
+    /**
+     * Not instantiable.
+     */
+    private EventCompat() {
+    }
+
+    /**
+     * Return a {@link CharSequence} that best describes the given type, possibly substituting
+     * the given label value for TYPE_CUSTOM.
+     */
+    public static CharSequence getTypeLabel(Resources res, int type, CharSequence label) {
+        if (CompatUtils.isLollipopCompatible()) {
+            return Event.getTypeLabel(res, type, label);
+        } else {
+            return getTypeLabelInternal(res, type, label);
+        }
+    }
+
+    /**
+     * The method was added in API level 21, and below is the implementation copied from
+     * {@link Event#getTypeLabel(Resources, int, CharSequence)}
+     */
+    private static CharSequence getTypeLabelInternal(Resources res, int type, CharSequence label) {
+        if (type == BaseTypes.TYPE_CUSTOM && !TextUtils.isEmpty(label)) {
+            return label;
+        } else {
+            return res.getText(Event.getTypeResource(type));
+        }
+    }
+
+}
diff --git a/src/com/android/contacts/compat/MultiWindowCompat.java b/src/com/android/contacts/compat/MultiWindowCompat.java
new file mode 100644
index 0000000..61af516
--- /dev/null
+++ b/src/com/android/contacts/compat/MultiWindowCompat.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.compat;
+
+import android.app.Activity;
+
+public class MultiWindowCompat {
+    /**
+     * Returns true if the activity is currently in multi-window mode.
+     */
+    public static boolean isInMultiWindowMode(Activity activity) {
+        return CompatUtils.isNCompatible() ? activity.isInMultiWindowMode() : false;
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/contacts/compat/PhoneAccountCompat.java b/src/com/android/contacts/compat/PhoneAccountCompat.java
new file mode 100644
index 0000000..5c396f5
--- /dev/null
+++ b/src/com/android/contacts/compat/PhoneAccountCompat.java
@@ -0,0 +1,101 @@
+/*
+ * 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.compat;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.Icon;
+import android.support.annotation.Nullable;
+import android.telecom.PhoneAccount;
+import android.util.Log;
+
+/**
+ * Compatiblity class for {@link android.telecom.PhoneAccount}
+ */
+public class PhoneAccountCompat {
+
+    private static final String TAG = PhoneAccountCompat.class.getSimpleName();
+
+    /**
+     * Gets the {@link Icon} associated with the given {@link PhoneAccount}
+     *
+     * @param phoneAccount the PhoneAccount from which to retrieve the Icon
+     * @return the Icon, or null
+     */
+    @Nullable
+    public static Icon getIcon(@Nullable PhoneAccount phoneAccount) {
+        if (phoneAccount == null) {
+            return null;
+        }
+
+        if (CompatUtils.isMarshmallowCompatible()) {
+            return phoneAccount.getIcon();
+        }
+
+        return null;
+    }
+
+    /**
+     * Builds and returns an icon {@code Drawable} to represent this {@code PhoneAccount} in a user
+     * interface.
+     *
+     * @param phoneAccount the PhoneAccount from which to build the icon.
+     * @param context A {@code Context} to use for loading Drawables.
+     *
+     * @return An icon for this PhoneAccount, or null
+     */
+    @Nullable
+    public static Drawable createIconDrawable(@Nullable PhoneAccount phoneAccount,
+            @Nullable Context context) {
+        if (phoneAccount == null || context == null) {
+            return null;
+        }
+
+        if (CompatUtils.isMarshmallowCompatible()) {
+            return createIconDrawableMarshmallow(phoneAccount, context);
+        }
+
+        if (CompatUtils.isLollipopMr1Compatible()) {
+            return createIconDrawableLollipopMr1(phoneAccount, context);
+        }
+        return null;
+    }
+
+    @Nullable
+    private static Drawable createIconDrawableMarshmallow(PhoneAccount phoneAccount,
+            Context context) {
+        Icon accountIcon = getIcon(phoneAccount);
+        if (accountIcon == null) {
+            return null;
+        }
+        return accountIcon.loadDrawable(context);
+    }
+
+    @Nullable
+    private static Drawable createIconDrawableLollipopMr1(PhoneAccount phoneAccount,
+            Context context) {
+        try {
+            return (Drawable) PhoneAccount.class.getMethod("createIconDrawable", Context.class)
+                    .invoke(phoneAccount, context);
+        } catch (ReflectiveOperationException e) {
+            return null;
+        } catch (Throwable t) {
+            Log.e(TAG, "Unexpected exception when attempting to call "
+                    + "android.telecom.PhoneAccount#createIconDrawable", t);
+            return null;
+        }
+    }
+}
diff --git a/src/com/android/contacts/compat/PhoneAccountSdkCompat.java b/src/com/android/contacts/compat/PhoneAccountSdkCompat.java
new file mode 100644
index 0000000..cb150c0
--- /dev/null
+++ b/src/com/android/contacts/compat/PhoneAccountSdkCompat.java
@@ -0,0 +1,37 @@
+/*
+ * 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.compat;
+
+import android.os.Bundle;
+import android.telecom.PhoneAccount;
+
+public class PhoneAccountSdkCompat {
+
+    private static final String TAG = "PhoneAccountSdkCompat";
+
+    public static final String EXTRA_CALL_SUBJECT_MAX_LENGTH =
+            PhoneAccount.EXTRA_CALL_SUBJECT_MAX_LENGTH;
+    public static final String EXTRA_CALL_SUBJECT_CHARACTER_ENCODING =
+            PhoneAccount.EXTRA_CALL_SUBJECT_CHARACTER_ENCODING;
+
+    public static final int CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE =
+            PhoneAccount.CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE;
+
+    public static Bundle getExtras(PhoneAccount account) {
+        return CompatUtils.isNCompatible() ? account.getExtras() : null;
+    }
+}
diff --git a/src/com/android/contacts/compat/PhoneCompat.java b/src/com/android/contacts/compat/PhoneCompat.java
new file mode 100644
index 0000000..67ef558
--- /dev/null
+++ b/src/com/android/contacts/compat/PhoneCompat.java
@@ -0,0 +1,36 @@
+/*
+ * 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.compat;
+
+import android.net.Uri;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+
+import com.android.contacts.ContactsUtils;
+
+public class PhoneCompat {
+
+    // TODO: Use N APIs
+    private static final Uri ENTERPRISE_CONTENT_FILTER_URI =
+            Uri.withAppendedPath(Phone.CONTENT_URI, "filter_enterprise");
+
+    public static Uri getContentFilterUri() {
+        if (ContactsUtils.FLAG_N_FEATURE) {
+            return ENTERPRISE_CONTENT_FILTER_URI;
+        }
+        return Phone.CONTENT_FILTER_URI;
+    }
+}
diff --git a/src/com/android/contacts/compat/PhoneLookupSdkCompat.java b/src/com/android/contacts/compat/PhoneLookupSdkCompat.java
new file mode 100644
index 0000000..770216f
--- /dev/null
+++ b/src/com/android/contacts/compat/PhoneLookupSdkCompat.java
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.compat;
+
+import android.provider.ContactsContract;
+
+public class PhoneLookupSdkCompat {
+    public static final String CONTACT_ID = ContactsContract.PhoneLookup.CONTACT_ID;
+}
diff --git a/src/com/android/contacts/compat/PhoneNumberFormattingTextWatcherCompat.java b/src/com/android/contacts/compat/PhoneNumberFormattingTextWatcherCompat.java
new file mode 100644
index 0000000..46d727e
--- /dev/null
+++ b/src/com/android/contacts/compat/PhoneNumberFormattingTextWatcherCompat.java
@@ -0,0 +1,27 @@
+/*
+ * 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.compat;
+
+import android.telephony.PhoneNumberFormattingTextWatcher;
+
+public class PhoneNumberFormattingTextWatcherCompat {
+    public static PhoneNumberFormattingTextWatcher newInstance(String countryCode) {
+        if (CompatUtils.isLollipopCompatible()) {
+            return new PhoneNumberFormattingTextWatcher(countryCode);
+        }
+        return new PhoneNumberFormattingTextWatcher();
+    }
+}
diff --git a/src/com/android/contacts/compat/PhoneNumberUtilsCompat.java b/src/com/android/contacts/compat/PhoneNumberUtilsCompat.java
new file mode 100644
index 0000000..0399b68
--- /dev/null
+++ b/src/com/android/contacts/compat/PhoneNumberUtilsCompat.java
@@ -0,0 +1,188 @@
+/*
+ * 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.compat;
+
+import android.telephony.PhoneNumberUtils;
+import android.text.Spannable;
+import android.text.TextUtils;
+import android.text.style.TtsSpan;
+
+import com.google.i18n.phonenumbers.NumberParseException;
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
+
+/**
+ * This class contains static utility methods extracted from PhoneNumberUtils, and the
+ * methods were added in API level 23. In this way, we could enable the corresponding functionality
+ * for pre-M devices. We need maintain this class and keep it synced with PhoneNumberUtils.
+ * Another thing to keep in mind is that we use com.google.i18n rather than com.android.i18n in
+ * here, so we need make sure the application behavior is preserved.
+ */
+public class PhoneNumberUtilsCompat {
+    /**
+     * Not instantiable.
+     */
+    private PhoneNumberUtilsCompat() {}
+
+    public static String normalizeNumber(String phoneNumber) {
+        if (CompatUtils.isLollipopCompatible()) {
+            return PhoneNumberUtils.normalizeNumber(phoneNumber);
+        } else {
+            return normalizeNumberInternal(phoneNumber);
+        }
+    }
+
+    /**
+     * Implementation copied from {@link PhoneNumberUtils#normalizeNumber}
+     */
+    private static String normalizeNumberInternal(String phoneNumber) {
+        if (TextUtils.isEmpty(phoneNumber)) {
+            return "";
+        }
+        StringBuilder sb = new StringBuilder();
+        int len = phoneNumber.length();
+        for (int i = 0; i < len; i++) {
+            char c = phoneNumber.charAt(i);
+            // Character.digit() supports ASCII and Unicode digits (fullwidth, Arabic-Indic, etc.)
+            int digit = Character.digit(c, 10);
+            if (digit != -1) {
+                sb.append(digit);
+            } else if (sb.length() == 0 && c == '+') {
+                sb.append(c);
+            } else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
+                return normalizeNumber(PhoneNumberUtils.convertKeypadLettersToDigits(phoneNumber));
+            }
+        }
+        return sb.toString();
+    }
+
+    public static String formatNumber(
+            String phoneNumber, String phoneNumberE164, String defaultCountryIso) {
+        if (CompatUtils.isLollipopCompatible()) {
+            return PhoneNumberUtils.formatNumber(phoneNumber, phoneNumberE164, defaultCountryIso);
+        } else {
+            // This method was deprecated in API level 21, so it's only used on pre-L SDKs.
+            return PhoneNumberUtils.formatNumber(phoneNumber);
+        }
+    }
+
+    public static CharSequence createTtsSpannable(CharSequence phoneNumber) {
+        if (CompatUtils.isMarshmallowCompatible()) {
+            return PhoneNumberUtils.createTtsSpannable(phoneNumber);
+        } else {
+            return createTtsSpannableInternal(phoneNumber);
+        }
+    }
+
+    public static TtsSpan createTtsSpan(String phoneNumber) {
+        if (CompatUtils.isMarshmallowCompatible()) {
+            return PhoneNumberUtils.createTtsSpan(phoneNumber);
+        } else if (CompatUtils.isLollipopCompatible()) {
+            return createTtsSpanLollipop(phoneNumber);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Copied from {@link PhoneNumberUtils#createTtsSpannable}
+     */
+    private static CharSequence createTtsSpannableInternal(CharSequence phoneNumber) {
+        if (phoneNumber == null) {
+            return null;
+        }
+        Spannable spannable = Spannable.Factory.getInstance().newSpannable(phoneNumber);
+        addTtsSpanInternal(spannable, 0, spannable.length());
+        return spannable;
+    }
+
+    /**
+     * Compat method for addTtsSpan, see {@link PhoneNumberUtils#addTtsSpan}
+     */
+    public static void addTtsSpan(Spannable s, int start, int endExclusive) {
+        if (CompatUtils.isMarshmallowCompatible()) {
+            PhoneNumberUtils.addTtsSpan(s, start, endExclusive);
+        } else {
+            addTtsSpanInternal(s, start, endExclusive);
+        }
+    }
+
+    /**
+     * Copied from {@link PhoneNumberUtils#addTtsSpan}
+     */
+    private static void addTtsSpanInternal(Spannable s, int start, int endExclusive) {
+        s.setSpan(createTtsSpan(s.subSequence(start, endExclusive).toString()),
+                start,
+                endExclusive,
+                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+    }
+
+    /**
+     * Copied from {@link PhoneNumberUtils#createTtsSpan}
+     */
+    private static TtsSpan createTtsSpanLollipop(String phoneNumberString) {
+        if (phoneNumberString == null) {
+            return null;
+        }
+
+        // Parse the phone number
+        final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
+        PhoneNumber phoneNumber = null;
+        try {
+            // Don't supply a defaultRegion so this fails for non-international numbers because
+            // we don't want to TalkBalk to read a country code (e.g. +1) if it is not already
+            // present
+            phoneNumber = phoneNumberUtil.parse(phoneNumberString, /* defaultRegion */ null);
+        } catch (NumberParseException ignored) {
+        }
+
+        // Build a telephone tts span
+        final TtsSpan.TelephoneBuilder builder = new TtsSpan.TelephoneBuilder();
+        if (phoneNumber == null) {
+            // Strip separators otherwise TalkBack will be silent
+            // (this behavior was observed with TalkBalk 4.0.2 from their alpha channel)
+            builder.setNumberParts(splitAtNonNumerics(phoneNumberString));
+        } else {
+            if (phoneNumber.hasCountryCode()) {
+                builder.setCountryCode(Integer.toString(phoneNumber.getCountryCode()));
+            }
+            builder.setNumberParts(Long.toString(phoneNumber.getNationalNumber()));
+        }
+        return builder.build();
+    }
+
+
+
+    /**
+     * Split a phone number using spaces, ignoring anything that is not a digit
+     * @param number A {@code CharSequence} before splitting, e.g., "+20(123)-456#"
+     * @return A {@code String} after splitting, e.g., "20 123 456".
+     */
+    private static String splitAtNonNumerics(CharSequence number) {
+        StringBuilder sb = new StringBuilder(number.length());
+        for (int i = 0; i < number.length(); i++) {
+            sb.append(PhoneNumberUtils.isISODigit(number.charAt(i))
+                    ? number.charAt(i)
+                    : " ");
+        }
+        // It is very important to remove extra spaces. At time of writing, any leading or trailing
+        // spaces, or any sequence of more than one space, will confuse TalkBack and cause the TTS
+        // span to be non-functional!
+        return sb.toString().replaceAll(" +", " ").trim();
+    }
+
+}
diff --git a/src/com/android/contacts/compat/PinnedPositionsCompat.java b/src/com/android/contacts/compat/PinnedPositionsCompat.java
index 044ef20..59a48e3 100644
--- a/src/com/android/contacts/compat/PinnedPositionsCompat.java
+++ b/src/com/android/contacts/compat/PinnedPositionsCompat.java
@@ -20,8 +20,6 @@
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.PinnedPositions;
 
-import com.android.contacts.common.compat.CompatUtils;
-
 /**
  * Compatibility class for {@link android.provider.ContactsContract.PinnedPositions}
  */
diff --git a/src/com/android/contacts/compat/ProviderStatusCompat.java b/src/com/android/contacts/compat/ProviderStatusCompat.java
new file mode 100644
index 0000000..35d514e
--- /dev/null
+++ b/src/com/android/contacts/compat/ProviderStatusCompat.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.compat;
+
+import android.provider.ContactsContract.ProviderStatus;
+
+/**
+ * This class contains constants from the pre-M version of ContactsContract.ProviderStatus class
+ * and also the mappings between pre-M constants and M constants for compatibility purpose,
+ * because ProviderStatus class constant names and values changed and the class became visible in
+ * API level 23.
+ */
+public class ProviderStatusCompat {
+    /**
+     * Not instantiable.
+     */
+    private ProviderStatusCompat() {
+    }
+
+    public static final boolean USE_CURRENT_VERSION = CompatUtils.isMarshmallowCompatible();
+
+    public static final int STATUS_EMPTY = USE_CURRENT_VERSION ?
+            ProviderStatus.STATUS_EMPTY : ProviderStatusCompat.STATUS_NO_ACCOUNTS_NO_CONTACTS;
+
+    public static final int STATUS_BUSY = USE_CURRENT_VERSION ?
+            ProviderStatus.STATUS_BUSY : ProviderStatusCompat.STATUS_UPGRADING;
+
+    /**
+     * Default status of the provider, using the actual constant to guard against errors
+     */
+    public static final int STATUS_NORMAL = ProviderStatus.STATUS_NORMAL;
+
+    /**
+     * The following three constants are from pre-M.
+     *
+     * The status used when the provider is in the process of upgrading.  Contacts
+     * are temporarily unaccessible.
+     */
+    private static final int STATUS_UPGRADING = 1;
+
+    /**
+     * The status used during a locale change.
+     */
+    public static final int STATUS_CHANGING_LOCALE = 3;
+
+    /**
+     * The status that indicates that there are no accounts and no contacts
+     * on the device.
+     */
+    private static final int STATUS_NO_ACCOUNTS_NO_CONTACTS = 4;
+}
diff --git a/src/com/android/contacts/compat/SdkVersionOverride.java b/src/com/android/contacts/compat/SdkVersionOverride.java
new file mode 100644
index 0000000..5f50fef
--- /dev/null
+++ b/src/com/android/contacts/compat/SdkVersionOverride.java
@@ -0,0 +1,45 @@
+/*
+ * 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.compat;
+
+import android.os.Build.VERSION;
+
+/**
+ * Class used to override the current sdk version to test specific branches of compatibility
+ * logic. When such branching occurs, use {@link #getSdkVersion(int)} rather than explicitly
+ * calling {@link VERSION#SDK_INT}. This allows the sdk version to be forced to a specific value.
+ */
+public class SdkVersionOverride {
+
+    /**
+     * Flag used to determine if override sdk versions are returned.
+     */
+    private static final boolean ALLOW_OVERRIDE_VERSION = false;
+
+    private SdkVersionOverride() {}
+
+    /**
+     * Gets the sdk version
+     *
+     * @param overrideVersion the version to attempt using
+     * @return overrideVersion if the {@link #ALLOW_OVERRIDE_VERSION} flag is set to {@code true},
+     * otherwise the current version
+     */
+    public static int getSdkVersion(int overrideVersion) {
+        return ALLOW_OVERRIDE_VERSION ? overrideVersion : VERSION.SDK_INT;
+    }
+}
diff --git a/src/com/android/contacts/compat/TelecomManagerUtil.java b/src/com/android/contacts/compat/TelecomManagerUtil.java
new file mode 100644
index 0000000..b6a030a
--- /dev/null
+++ b/src/com/android/contacts/compat/TelecomManagerUtil.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.contacts.compat;
+
+import android.content.Intent;
+import android.telecom.TelecomManager;
+
+/**
+ * Utility class for TelecomManager
+ */
+public class TelecomManagerUtil {
+    /**
+     * Creates {@link Intent} to launch the activity to manage blocked numbers.
+     */
+    public static Intent createManageBlockedNumbersIntent(TelecomManager tm) {
+        return CompatUtils.isNCompatible() ? tm.createManageBlockedNumbersIntent() : null;
+    }
+}
diff --git a/src/com/android/contacts/compat/TelephonyManagerCompat.java b/src/com/android/contacts/compat/TelephonyManagerCompat.java
new file mode 100644
index 0000000..07523b1
--- /dev/null
+++ b/src/com/android/contacts/compat/TelephonyManagerCompat.java
@@ -0,0 +1,171 @@
+/*
+ * 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.compat;
+
+import android.net.Uri;
+import android.support.annotation.Nullable;
+import android.telecom.PhoneAccountHandle;
+import android.telephony.TelephonyManager;
+
+public class TelephonyManagerCompat {
+    public static final String TELEPHONY_MANAGER_CLASS = "android.telephony.TelephonyManager";
+
+    /**
+     * @param telephonyManager The telephony manager instance to use for method calls.
+     * @return true if the current device is "voice capable".
+     * <p>
+     * "Voice capable" means that this device supports circuit-switched
+     * (i.e. voice) phone calls over the telephony network, and is allowed
+     * to display the in-call UI while a cellular voice call is active.
+     * This will be false on "data only" devices which can't make voice
+     * calls and don't support any in-call UI.
+     * <p>
+     * Note: the meaning of this flag is subtly different from the
+     * PackageManager.FEATURE_TELEPHONY system feature, which is available
+     * on any device with a telephony radio, even if the device is
+     * data-only.
+     */
+    public static boolean isVoiceCapable(@Nullable TelephonyManager telephonyManager) {
+        if (telephonyManager == null) {
+            return false;
+        }
+        if (CompatUtils.isLollipopMr1Compatible()
+                || CompatUtils.isMethodAvailable(TELEPHONY_MANAGER_CLASS, "isVoiceCapable")) {
+            // isVoiceCapable was unhidden in L-MR1
+            return telephonyManager.isVoiceCapable();
+        }
+        final int phoneType = telephonyManager.getPhoneType();
+        return phoneType == TelephonyManager.PHONE_TYPE_CDMA ||
+                phoneType == TelephonyManager.PHONE_TYPE_GSM;
+    }
+
+    /**
+     * Returns the number of phones available.
+     * Returns 1 for Single standby mode (Single SIM functionality)
+     * Returns 2 for Dual standby mode.(Dual SIM functionality)
+     *
+     * Returns 1 if the method or telephonyManager is not available.
+     *
+     * @param telephonyManager The telephony manager instance to use for method calls.
+     */
+    public static int getPhoneCount(@Nullable TelephonyManager telephonyManager) {
+        if (telephonyManager == null) {
+            return 1;
+        }
+        if (CompatUtils.isMarshmallowCompatible() || CompatUtils
+                .isMethodAvailable(TELEPHONY_MANAGER_CLASS, "getPhoneCount")) {
+            return telephonyManager.getPhoneCount();
+        }
+        return 1;
+    }
+
+    /**
+     * Returns the unique device ID of a subscription, for example, the IMEI for
+     * GSM and the MEID for CDMA phones. Return null if device ID is not available.
+     *
+     * <p>Requires Permission:
+     *   {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
+     *
+     * @param telephonyManager The telephony manager instance to use for method calls.
+     * @param slotId of which deviceID is returned
+     */
+    public static String getDeviceId(@Nullable TelephonyManager telephonyManager, int slotId) {
+        if (telephonyManager == null) {
+            return null;
+        }
+        if (CompatUtils.isMarshmallowCompatible()
+                || CompatUtils.isMethodAvailable(TELEPHONY_MANAGER_CLASS,
+                        "getDeviceId", Integer.class)) {
+            return telephonyManager.getDeviceId(slotId);
+        }
+        return null;
+    }
+
+    /**
+     * Whether the phone supports TTY mode.
+     *
+     * @param telephonyManager The telephony manager instance to use for method calls.
+     * @return {@code true} if the device supports TTY mode, and {@code false} otherwise.
+     */
+
+    public static boolean isTtyModeSupported(@Nullable TelephonyManager telephonyManager) {
+        if (telephonyManager == null) {
+            return false;
+        }
+        if (CompatUtils.isMarshmallowCompatible()
+                || CompatUtils.isMethodAvailable(TELEPHONY_MANAGER_CLASS, "isTtyModeSupported")) {
+            return telephonyManager.isTtyModeSupported();
+        }
+        return false;
+    }
+
+    /**
+     * Whether the phone supports hearing aid compatibility.
+     *
+     * @param telephonyManager The telephony manager instance to use for method calls.
+     * @return {@code true} if the device supports hearing aid compatibility, and {@code false}
+     * otherwise.
+     */
+    public static boolean isHearingAidCompatibilitySupported(
+            @Nullable TelephonyManager telephonyManager) {
+        if (telephonyManager == null) {
+            return false;
+        }
+        if (CompatUtils.isMarshmallowCompatible()
+                || CompatUtils.isMethodAvailable(TELEPHONY_MANAGER_CLASS,
+                        "isHearingAidCompatibilitySupported")) {
+            return telephonyManager.isHearingAidCompatibilitySupported();
+        }
+        return false;
+    }
+
+    /**
+     * Returns the URI for the per-account voicemail ringtone set in Phone settings.
+     *
+     * @param telephonyManager The telephony manager instance to use for method calls.
+     * @param accountHandle The handle for the {@link android.telecom.PhoneAccount} for which to
+     * retrieve the voicemail ringtone.
+     * @return The URI for the ringtone to play when receiving a voicemail from a specific
+     * PhoneAccount.
+     */
+    @Nullable
+    public static Uri getVoicemailRingtoneUri(TelephonyManager telephonyManager,
+            PhoneAccountHandle accountHandle) {
+        if (!CompatUtils.isNCompatible()) {
+            return null;
+        }
+        return TelephonyManagerSdkCompat
+                .getVoicemailRingtoneUri(telephonyManager, accountHandle);
+    }
+
+    /**
+     * Returns whether vibration is set for voicemail notification in Phone settings.
+     *
+     * @param telephonyManager The telephony manager instance to use for method calls.
+     * @param accountHandle The handle for the {@link android.telecom.PhoneAccount} for which to
+     * retrieve the voicemail vibration setting.
+     * @return {@code true} if the vibration is set for this PhoneAccount, {@code false} otherwise.
+     */
+    public static boolean isVoicemailVibrationEnabled(TelephonyManager telephonyManager,
+            PhoneAccountHandle accountHandle) {
+        if (!CompatUtils.isNCompatible()) {
+            return true;
+        }
+        return TelephonyManagerSdkCompat
+                .isVoicemailVibrationEnabled(telephonyManager, accountHandle);
+    }
+}
diff --git a/src/com/android/contacts/compat/TelephonyManagerSdkCompat.java b/src/com/android/contacts/compat/TelephonyManagerSdkCompat.java
new file mode 100644
index 0000000..dec486b
--- /dev/null
+++ b/src/com/android/contacts/compat/TelephonyManagerSdkCompat.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.contacts.compat;
+
+import android.net.Uri;
+import android.telecom.PhoneAccountHandle;
+import android.telephony.TelephonyManager;
+
+/**
+ * On N and above, this will look up voicemail notification settings from Telephony.
+ */
+public class TelephonyManagerSdkCompat {
+    public static Uri getVoicemailRingtoneUri(TelephonyManager telephonyManager,
+            PhoneAccountHandle accountHandle) {
+        return CompatUtils.isNCompatible()
+                ? telephonyManager.getVoicemailRingtoneUri(accountHandle) : null;
+    }
+
+    public static boolean isVoicemailVibrationEnabled(TelephonyManager telephonyManager,
+            PhoneAccountHandle accountHandle) {
+        return CompatUtils.isNCompatible()
+                ? telephonyManager.isVoicemailVibrationEnabled(accountHandle) : false;
+    }
+}
diff --git a/src/com/android/contacts/compat/TelephonyThreadsCompat.java b/src/com/android/contacts/compat/TelephonyThreadsCompat.java
new file mode 100644
index 0000000..545e185
--- /dev/null
+++ b/src/com/android/contacts/compat/TelephonyThreadsCompat.java
@@ -0,0 +1,168 @@
+/*
+ * 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.compat;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.BaseColumns;
+import android.provider.Telephony;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.Patterns;
+
+import java.util.HashSet;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * This class contains static utility methods and variables extracted from Telephony and
+ * SqliteWrapper, and the methods were made visible in API level 23. In this way, we could
+ * enable the corresponding functionality for pre-M devices. We need maintain this class and keep
+ * it synced with Telephony and SqliteWrapper.
+ */
+public class TelephonyThreadsCompat {
+    /**
+     * Not instantiable.
+     */
+    private TelephonyThreadsCompat() {}
+
+    private static final String TAG = "TelephonyThreadsCompat";
+
+    public static long getOrCreateThreadId(Context context, String recipient) {
+        if (SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) >= Build.VERSION_CODES.M) {
+            return Telephony.Threads.getOrCreateThreadId(context, recipient);
+        } else {
+            return getOrCreateThreadIdInternal(context, recipient);
+        }
+    }
+
+    // Below is code copied from Telephony and SqliteWrapper
+    /**
+     * Private {@code content://} style URL for this table. Used by
+     * {@link #getOrCreateThreadId(Context, Set)}.
+     */
+    private static final Uri THREAD_ID_CONTENT_URI = Uri.parse("content://mms-sms/threadID");
+
+    private static final String[] ID_PROJECTION = { BaseColumns._ID };
+
+    /**
+     * Regex pattern for names and email addresses.
+     * <ul>
+     *     <li><em>mailbox</em> = {@code name-addr}</li>
+     *     <li><em>name-addr</em> = {@code [display-name] angle-addr}</li>
+     *     <li><em>angle-addr</em> = {@code [CFWS] "<" addr-spec ">" [CFWS]}</li>
+     * </ul>
+     */
+    private static final Pattern NAME_ADDR_EMAIL_PATTERN =
+            Pattern.compile("\\s*(\"[^\"]*\"|[^<>\"]+)\\s*<([^<>]+)>\\s*");
+
+    /**
+     * Copied from {@link Telephony.Threads#getOrCreateThreadId(Context, String)}
+     */
+    private static long getOrCreateThreadIdInternal(Context context, String recipient) {
+        Set<String> recipients = new HashSet<String>();
+
+        recipients.add(recipient);
+        return getOrCreateThreadIdInternal(context, recipients);
+    }
+
+    /**
+     * Given the recipients list and subject of an unsaved message,
+     * return its thread ID.  If the message starts a new thread,
+     * allocate a new thread ID.  Otherwise, use the appropriate
+     * existing thread ID.
+     *
+     * <p>Find the thread ID of the same set of recipients (in any order,
+     * without any additions). If one is found, return it. Otherwise,
+     * return a unique thread ID.</p>
+     */
+    private static long getOrCreateThreadIdInternal(Context context, Set<String> recipients) {
+        Uri.Builder uriBuilder = THREAD_ID_CONTENT_URI.buildUpon();
+
+        for (String recipient : recipients) {
+            if (isEmailAddress(recipient)) {
+                recipient = extractAddrSpec(recipient);
+            }
+
+            uriBuilder.appendQueryParameter("recipient", recipient);
+        }
+
+        Uri uri = uriBuilder.build();
+
+        Cursor cursor = query(
+                context.getContentResolver(), uri, ID_PROJECTION, null, null, null);
+        if (cursor != null) {
+            try {
+                if (cursor.moveToFirst()) {
+                    return cursor.getLong(0);
+                } else {
+                    Log.e(TAG, "getOrCreateThreadId returned no rows!");
+                }
+            } finally {
+                cursor.close();
+            }
+        }
+
+        Log.e(TAG, "getOrCreateThreadId failed with uri " + uri.toString());
+        throw new IllegalArgumentException("Unable to find or allocate a thread ID.");
+    }
+
+    /**
+     * Copied from {@link SqliteWrapper#query}
+     */
+    private static Cursor query(ContentResolver resolver, Uri uri, String[] projection,
+            String selection, String[] selectionArgs, String sortOrder) {
+        try {
+            return resolver.query(uri, projection, selection, selectionArgs, sortOrder);
+        } catch (Exception e) {
+            Log.e(TAG, "Catch an exception when query: ", e);
+            return null;
+        }
+    }
+
+    /**
+     * Is the specified address an email address?
+     *
+     * @param address the input address to test
+     * @return true if address is an email address; false otherwise.
+     */
+    private static boolean isEmailAddress(String address) {
+        if (TextUtils.isEmpty(address)) {
+            return false;
+        }
+
+        String s = extractAddrSpec(address);
+        Matcher match = Patterns.EMAIL_ADDRESS.matcher(s);
+        return match.matches();
+    }
+
+    /**
+     * Helper method to extract email address from address string.
+     */
+    private static String extractAddrSpec(String address) {
+        Matcher match = NAME_ADDR_EMAIL_PATTERN.matcher(address);
+
+        if (match.matches()) {
+            return match.group(2);
+        }
+        return address;
+    }
+}
diff --git a/src/com/android/contacts/compat/telecom/TelecomManagerCompat.java b/src/com/android/contacts/compat/telecom/TelecomManagerCompat.java
new file mode 100644
index 0000000..881c1a4
--- /dev/null
+++ b/src/com/android/contacts/compat/telecom/TelecomManagerCompat.java
@@ -0,0 +1,48 @@
+/*
+ * 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.compat.telecom;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.support.annotation.Nullable;
+import android.telecom.TelecomManager;
+
+import com.android.contacts.compat.CompatUtils;
+
+/**
+ * Compatibility class for {@link android.telecom.TelecomManager}.
+ */
+public class TelecomManagerCompat {
+    /**
+     * Places a new outgoing call to the provided address using the system telecom service with
+     * the specified intent.
+     *
+     * @param activity {@link Activity} used to start another activity for the given intent
+     * @param telecomManager the {@link TelecomManager} used to place a call, if possible
+     * @param intent the intent for the call
+     */
+    public static void placeCall(@Nullable Activity activity,
+            @Nullable TelecomManager telecomManager, @Nullable Intent intent) {
+        if (activity == null || telecomManager == null || intent == null) {
+            return;
+        }
+        if (CompatUtils.isMarshmallowCompatible()) {
+            telecomManager.placeCall(intent.getData(), intent.getExtras());
+            return;
+        }
+        activity.startActivityForResult(intent, 0);
+    }
+}
diff --git a/src/com/android/contacts/database/ContactUpdateUtils.java b/src/com/android/contacts/database/ContactUpdateUtils.java
new file mode 100644
index 0000000..2333688
--- /dev/null
+++ b/src/com/android/contacts/database/ContactUpdateUtils.java
@@ -0,0 +1,47 @@
+/*
+ * 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.database;
+
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract;
+import android.util.Log;
+
+/**
+ * Static methods to update contact information.
+ */
+public class ContactUpdateUtils {
+
+    private static final String TAG = ContactUpdateUtils.class.getSimpleName();
+
+    public static void setSuperPrimary(Context context, long dataId) {
+        if (dataId == -1) {
+            Log.e(TAG, "Invalid arguments for setSuperPrimary request");
+            return;
+        }
+
+        // Update the primary values in the data record.
+        ContentValues values = new ContentValues(2);
+        values.put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
+        values.put(ContactsContract.Data.IS_PRIMARY, 1);
+
+        context.getContentResolver().update(
+                ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, dataId),
+                values, null, null);
+    }
+}
diff --git a/src/com/android/contacts/database/EmptyCursor.java b/src/com/android/contacts/database/EmptyCursor.java
new file mode 100644
index 0000000..a6c1760
--- /dev/null
+++ b/src/com/android/contacts/database/EmptyCursor.java
@@ -0,0 +1,84 @@
+/*
+* 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.database;
+
+import android.database.AbstractCursor;
+import android.database.CursorIndexOutOfBoundsException;
+
+/**
+ * A cursor that is empty.
+ * <p>
+ * If you want an empty cursor, this class is better than a MatrixCursor because it has less
+ * overhead.
+ */
+final public class EmptyCursor extends AbstractCursor {
+
+    private String[] mColumns;
+
+    public EmptyCursor(String[] columns) {
+        this.mColumns = columns;
+    }
+
+    @Override
+    public int getCount() {
+        return 0;
+    }
+
+    @Override
+    public String[] getColumnNames() {
+        return mColumns;
+    }
+
+    @Override
+    public String getString(int column) {
+        throw cursorException();
+    }
+
+    @Override
+    public short getShort(int column) {
+        throw cursorException();
+    }
+
+    @Override
+    public int getInt(int column) {
+        throw cursorException();
+    }
+
+    @Override
+    public long getLong(int column) {
+        throw cursorException();
+    }
+
+    @Override
+    public float getFloat(int column) {
+        throw cursorException();
+    }
+
+    @Override
+    public double getDouble(int column) {
+        throw cursorException();
+    }
+
+    @Override
+    public boolean isNull(int column) {
+        throw cursorException();
+    }
+
+    private CursorIndexOutOfBoundsException cursorException() {
+        return new CursorIndexOutOfBoundsException("Operation not permitted on an empty cursor.");
+    }
+}
diff --git a/src/com/android/contacts/database/NoNullCursorAsyncQueryHandler.java b/src/com/android/contacts/database/NoNullCursorAsyncQueryHandler.java
new file mode 100644
index 0000000..a7ff261
--- /dev/null
+++ b/src/com/android/contacts/database/NoNullCursorAsyncQueryHandler.java
@@ -0,0 +1,69 @@
+/*
+ * 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.database;
+
+import android.content.AsyncQueryHandler;
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.net.Uri;
+
+/**
+ * An {@AsyncQueryHandler} that will never return a null cursor.
+ * <p>
+ * Instead, will return a {@link Cursor} with 0 records.
+ */
+public abstract class NoNullCursorAsyncQueryHandler extends AsyncQueryHandler {
+
+    public NoNullCursorAsyncQueryHandler(ContentResolver cr) {
+        super(cr);
+    }
+
+    @Override
+    public void startQuery(int token, Object cookie, Uri uri, String[] projection, String selection,
+            String[] selectionArgs, String orderBy) {
+        final CookieWithProjection projectionCookie = new CookieWithProjection(cookie, projection);
+        super.startQuery(token, projectionCookie, uri, projection, selection, selectionArgs,
+                orderBy);
+    }
+
+    @Override
+    protected final void onQueryComplete(int token, Object cookie, Cursor cursor) {
+        CookieWithProjection projectionCookie = (CookieWithProjection) cookie;
+
+        super.onQueryComplete(token, projectionCookie.originalCookie, cursor);
+
+        if (cursor == null) {
+            cursor = new EmptyCursor(projectionCookie.projection);
+        }
+        onNotNullableQueryComplete(token, projectionCookie.originalCookie, cursor);
+    }
+
+    protected abstract void onNotNullableQueryComplete(int token, Object cookie, Cursor cursor);
+
+    /**
+     * Class to add projection to an existing cookie.
+     */
+    private static class CookieWithProjection {
+        public final Object originalCookie;
+        public final String[] projection;
+
+        public CookieWithProjection(Object cookie, String[] projection) {
+            this.originalCookie = cookie;
+            this.projection = projection;
+        }
+    }
+}
diff --git a/src/com/android/contacts/database/SimContactDao.java b/src/com/android/contacts/database/SimContactDao.java
new file mode 100644
index 0000000..d6ed88d
--- /dev/null
+++ b/src/com/android/contacts/database/SimContactDao.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.database;
+
+import android.content.ContentProviderResult;
+import android.content.Context;
+import android.content.OperationApplicationException;
+import android.os.RemoteException;
+import android.support.annotation.VisibleForTesting;
+
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import com.google.common.base.Function;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Provides data access methods for loading contacts from a SIM card and and migrating these
+ * SIM contacts to a CP2 account.
+ */
+public abstract class SimContactDao {
+
+    // Set to true for manual testing on an emulator or phone without a SIM card
+    // DO NOT SUBMIT if set to true
+    private static final boolean USE_FAKE_INSTANCE = false;
+
+    public static final Function<Context, SimContactDao> DEFAULT_FACTORY =
+            new Function<Context, SimContactDao>() {
+                @Override
+                public SimContactDao apply(Context context) {
+                    return USE_FAKE_INSTANCE ?
+                            createDebugInstance(context) :
+                            new SimContactDaoImpl(context);
+                }
+            };
+    private static Function<? super Context, SimContactDao> sInstanceFactory = DEFAULT_FACTORY;
+
+    private static SimContactDao createDebugInstance(Context context) {
+        return new SimContactDaoImpl.DebugImpl(context)
+                .addSimCard(new SimCard("fake-sim-id1", 1, "Fake Carrier",
+                        "Card 1", "15095550101", "us").withContacts(
+                        new SimContact(1, "Sim One", "15095550111", null),
+                        new SimContact(2, "Sim Two", "15095550112", null),
+                        new SimContact(3, "Sim Three", "15095550113", null),
+                        new SimContact(4, "Sim Four", "15095550114", null),
+                        new SimContact(5, "411 & more", "411", null)
+                ))
+                .addSimCard(new SimCard("fake-sim-id2", 2, "Carrier Two",
+                        "Card 2", "15095550102", "us").withContacts(
+                        new SimContact(1, "John Sim", "15095550121", null),
+                        new SimContact(2, "Bob Sim", "15095550122", null),
+                        new SimContact(3, "Mary Sim", "15095550123", null),
+                        new SimContact(4, "Alice Sim", "15095550124", null),
+                        new SimContact(5, "Sim Duplicate", "15095550121", null)
+                ));
+    }
+
+    public static synchronized SimContactDao create(Context context) {
+        return sInstanceFactory.apply(context);
+    }
+
+    /**
+     * Sets the factory function used by {@link SimContactDao#create}
+     */
+    @VisibleForTesting
+    public static synchronized void setFactoryForTest(
+            Function<? super Context, SimContactDao> factory) {
+        sInstanceFactory = factory;
+    }
+
+    public abstract boolean canReadSimContacts();
+
+    public abstract List<SimCard> getSimCards();
+
+    public abstract ArrayList<SimContact> loadContactsForSim(SimCard sim);
+
+    public abstract ContentProviderResult[] importContacts(List<SimContact> contacts,
+            AccountWithDataSet targetAccount)
+            throws RemoteException, OperationApplicationException;
+
+    public abstract void persistSimStates(List<SimCard> simCards);
+
+    public abstract SimCard getSimBySubscriptionId(int subscriptionId);
+
+    public abstract Map<AccountWithDataSet, Set<SimContact>> findAccountsOfExistingSimContacts(
+            List<SimContact> contacts);
+
+    public void persistSimState(SimCard sim) {
+        persistSimStates(Collections.singletonList(sim));
+    }
+}
diff --git a/src/com/android/contacts/database/SimContactDaoImpl.java b/src/com/android/contacts/database/SimContactDaoImpl.java
new file mode 100644
index 0000000..4eb5fd3
--- /dev/null
+++ b/src/com/android/contacts/database/SimContactDaoImpl.java
@@ -0,0 +1,482 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.database;
+
+import android.annotation.TargetApi;
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderResult;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.OperationApplicationException;
+import android.content.pm.PackageManager;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build;
+import android.os.RemoteException;
+import android.provider.BaseColumns;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+import android.support.annotation.VisibleForTesting;
+import android.support.v4.util.ArrayMap;
+import android.support.v4.util.ArraySet;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.SparseArray;
+
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.PermissionsUtil;
+import com.android.contacts.util.SharedPreferenceUtil;
+
+import com.google.common.base.Joiner;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Provides data access methods for loading contacts from a SIM card and and migrating these
+ * SIM contacts to a CP2 account.
+ */
+public class SimContactDaoImpl extends SimContactDao {
+    private static final String TAG = "SimContactDao";
+
+    // Maximum number of SIM contacts to import in a single ContentResolver.applyBatch call.
+    // This is necessary to avoid TransactionTooLargeException when there are a large number of
+    // contacts. This has been tested on Nexus 6 NME70B and is probably be conservative enough
+    // to work on any phone.
+    private static final int IMPORT_MAX_BATCH_SIZE = 300;
+
+    // How many SIM contacts to consider in a single query. This prevents hitting the SQLite
+    // query parameter limit.
+    static final int QUERY_MAX_BATCH_SIZE = 100;
+
+    @VisibleForTesting
+    public static final Uri ICC_CONTENT_URI = Uri.parse("content://icc/adn");
+
+    public static String _ID = BaseColumns._ID;
+    public static String NAME = "name";
+    public static String NUMBER = "number";
+    public static String EMAILS = "emails";
+
+    private final Context mContext;
+    private final ContentResolver mResolver;
+    private final TelephonyManager mTelephonyManager;
+
+    public SimContactDaoImpl(Context context) {
+        this(context, context.getContentResolver(),
+                (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE));
+    }
+
+    public SimContactDaoImpl(Context context, ContentResolver resolver,
+            TelephonyManager telephonyManager) {
+        mContext = context;
+        mResolver = resolver;
+        mTelephonyManager = telephonyManager;
+    }
+
+    public Context getContext() {
+        return mContext;
+    }
+
+    @Override
+    public boolean canReadSimContacts() {
+        // Require SIM_STATE_READY because the TelephonyManager methods related to SIM require
+        // this state
+        return hasTelephony() && hasPermissions() &&
+                mTelephonyManager.getSimState() == TelephonyManager.SIM_STATE_READY;
+    }
+
+    @Override
+    public List<SimCard> getSimCards() {
+        if (!canReadSimContacts()) {
+            return Collections.emptyList();
+        }
+        final List<SimCard> sims = CompatUtils.isMSIMCompatible() ?
+                getSimCardsFromSubscriptions() :
+                Collections.singletonList(SimCard.create(mTelephonyManager,
+                        mContext.getString(R.string.single_sim_display_label)));
+        return SharedPreferenceUtil.restoreSimStates(mContext, sims);
+    }
+
+    @Override
+    public ArrayList<SimContact> loadContactsForSim(SimCard sim) {
+        if (sim.hasValidSubscriptionId()) {
+            return loadSimContacts(sim.getSubscriptionId());
+        }
+        return loadSimContacts();
+    }
+
+    public ArrayList<SimContact> loadSimContacts(int subscriptionId) {
+        return loadFrom(ICC_CONTENT_URI.buildUpon()
+                .appendPath("subId")
+                .appendPath(String.valueOf(subscriptionId))
+                .build());
+    }
+
+    public ArrayList<SimContact> loadSimContacts() {
+        return loadFrom(ICC_CONTENT_URI);
+    }
+
+    @Override
+    public ContentProviderResult[] importContacts(List<SimContact> contacts,
+            AccountWithDataSet targetAccount)
+            throws RemoteException, OperationApplicationException {
+        if (contacts.size() < IMPORT_MAX_BATCH_SIZE) {
+            return importBatch(contacts, targetAccount);
+        }
+        final List<ContentProviderResult> results = new ArrayList<>();
+        for (int i = 0; i < contacts.size(); i += IMPORT_MAX_BATCH_SIZE) {
+            results.addAll(Arrays.asList(importBatch(
+                    contacts.subList(i, Math.min(contacts.size(), i + IMPORT_MAX_BATCH_SIZE)),
+                    targetAccount)));
+        }
+        return results.toArray(new ContentProviderResult[results.size()]);
+    }
+
+    public void persistSimState(SimCard sim) {
+        SharedPreferenceUtil.persistSimStates(mContext, Collections.singletonList(sim));
+    }
+
+    @Override
+    public void persistSimStates(List<SimCard> simCards) {
+        SharedPreferenceUtil.persistSimStates(mContext, simCards);
+    }
+
+    @Override
+    public SimCard getSimBySubscriptionId(int subscriptionId) {
+        final List<SimCard> sims = SharedPreferenceUtil.restoreSimStates(mContext, getSimCards());
+        if (subscriptionId == SimCard.NO_SUBSCRIPTION_ID && !sims.isEmpty()) {
+            return sims.get(0);
+        }
+        for (SimCard sim : getSimCards()) {
+            if (sim.getSubscriptionId() == subscriptionId) {
+                return sim;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Finds SIM contacts that exist in CP2 and associates the account of the CP2 contact with
+     * the SIM contact
+     */
+    public Map<AccountWithDataSet, Set<SimContact>> findAccountsOfExistingSimContacts(
+            List<SimContact> contacts) {
+        final Map<AccountWithDataSet, Set<SimContact>> result = new ArrayMap<>();
+        for (int i = 0; i < contacts.size(); i += QUERY_MAX_BATCH_SIZE) {
+            findAccountsOfExistingSimContacts(
+                    contacts.subList(i, Math.min(contacts.size(), i + QUERY_MAX_BATCH_SIZE)),
+                    result);
+        }
+        return result;
+    }
+
+    private void findAccountsOfExistingSimContacts(List<SimContact> contacts,
+            Map<AccountWithDataSet, Set<SimContact>> result) {
+        final Map<Long, List<SimContact>> rawContactToSimContact = new HashMap<>();
+        Collections.sort(contacts, SimContact.compareByPhoneThenName());
+
+        final Cursor dataCursor = queryRawContactsForSimContacts(contacts);
+
+        try {
+            while (dataCursor.moveToNext()) {
+                final String number = DataQuery.getPhoneNumber(dataCursor);
+                final String name = DataQuery.getDisplayName(dataCursor);
+
+                final int index = SimContact.findByPhoneAndName(contacts, number, name);
+                if (index < 0) {
+                    continue;
+                }
+                final SimContact contact = contacts.get(index);
+                final long id = DataQuery.getRawContactId(dataCursor);
+                if (!rawContactToSimContact.containsKey(id)) {
+                    rawContactToSimContact.put(id, new ArrayList<SimContact>());
+                }
+                rawContactToSimContact.get(id).add(contact);
+            }
+        } finally {
+            dataCursor.close();
+        }
+
+        final Cursor accountsCursor = queryAccountsOfRawContacts(rawContactToSimContact.keySet());
+        try {
+            while (accountsCursor.moveToNext()) {
+                final AccountWithDataSet account = AccountQuery.getAccount(accountsCursor);
+                final long id = AccountQuery.getId(accountsCursor);
+                if (!result.containsKey(account)) {
+                    result.put(account, new ArraySet<SimContact>());
+                }
+                for (SimContact contact : rawContactToSimContact.get(id)) {
+                    result.get(account).add(contact);
+                }
+            }
+        } finally {
+            accountsCursor.close();
+        }
+    }
+
+
+    private ContentProviderResult[] importBatch(List<SimContact> contacts,
+            AccountWithDataSet targetAccount)
+            throws RemoteException, OperationApplicationException {
+        final ArrayList<ContentProviderOperation> ops =
+                createImportOperations(contacts, targetAccount);
+        return mResolver.applyBatch(ContactsContract.AUTHORITY, ops);
+    }
+
+    @TargetApi(Build.VERSION_CODES.LOLLIPOP_MR1)
+    private List<SimCard> getSimCardsFromSubscriptions() {
+        final SubscriptionManager subscriptionManager = (SubscriptionManager)
+                mContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
+        final List<SubscriptionInfo> subscriptions = subscriptionManager
+                .getActiveSubscriptionInfoList();
+        final ArrayList<SimCard> result = new ArrayList<>();
+        for (SubscriptionInfo subscriptionInfo : subscriptions) {
+            result.add(SimCard.create(subscriptionInfo));
+        }
+        return result;
+    }
+
+    private List<SimContact> getContactsForSim(SimCard sim) {
+        final List<SimContact> contacts = sim.getContacts();
+        return contacts != null ? contacts : loadContactsForSim(sim);
+    }
+
+    // See b/32831092
+    // Sometimes the SIM contacts provider seems to get stuck if read from multiple threads
+    // concurrently. So we just have a global lock around it to prevent potential issues.
+    private static final Object SIM_READ_LOCK = new Object();
+    private ArrayList<SimContact> loadFrom(Uri uri) {
+        synchronized (SIM_READ_LOCK) {
+            final Cursor cursor = mResolver.query(uri, null, null, null, null);
+
+            try {
+                return loadFromCursor(cursor);
+            } finally {
+                cursor.close();
+            }
+        }
+    }
+
+    private ArrayList<SimContact> loadFromCursor(Cursor cursor) {
+        final int colId = cursor.getColumnIndex(_ID);
+        final int colName = cursor.getColumnIndex(NAME);
+        final int colNumber = cursor.getColumnIndex(NUMBER);
+        final int colEmails = cursor.getColumnIndex(EMAILS);
+
+        final ArrayList<SimContact> result = new ArrayList<>();
+
+        while (cursor.moveToNext()) {
+            final long id = cursor.getLong(colId);
+            final String name = cursor.getString(colName);
+            final String number = cursor.getString(colNumber);
+            final String emails = cursor.getString(colEmails);
+
+            final SimContact contact = new SimContact(id, name, number, parseEmails(emails));
+            // Only include contact if it has some useful data
+            if (contact.hasName() || contact.hasPhone() || contact.hasEmails()) {
+                result.add(contact);
+            }
+        }
+        return result;
+    }
+
+    private Cursor queryRawContactsForSimContacts(List<SimContact> contacts) {
+        final StringBuilder selectionBuilder = new StringBuilder();
+
+        int phoneCount = 0;
+        int nameCount = 0;
+        for (SimContact contact : contacts) {
+            if (contact.hasPhone()) {
+                phoneCount++;
+            } else if (contact.hasName()) {
+                nameCount++;
+            }
+        }
+        List<String> selectionArgs = new ArrayList<>(phoneCount + 1);
+
+        selectionBuilder.append('(');
+        selectionBuilder.append(Data.MIMETYPE).append("=? AND ");
+        selectionArgs.add(Phone.CONTENT_ITEM_TYPE);
+
+        selectionBuilder.append(Phone.NUMBER).append(" IN (")
+                .append(Joiner.on(',').join(Collections.nCopies(phoneCount, '?')))
+                .append(')');
+        for (SimContact contact : contacts) {
+            if (contact.hasPhone()) {
+                selectionArgs.add(contact.getPhone());
+            }
+        }
+        selectionBuilder.append(')');
+
+        if (nameCount > 0) {
+            selectionBuilder.append(" OR (");
+
+            selectionBuilder.append(Data.MIMETYPE).append("=? AND ");
+            selectionArgs.add(StructuredName.CONTENT_ITEM_TYPE);
+
+            selectionBuilder.append(Data.DISPLAY_NAME).append(" IN (")
+                    .append(Joiner.on(',').join(Collections.nCopies(nameCount, '?')))
+                    .append(')');
+            for (SimContact contact : contacts) {
+                if (!contact.hasPhone() && contact.hasName()) {
+                    selectionArgs.add(contact.getName());
+                }
+            }
+            selectionBuilder.append(')');
+        }
+
+        return mResolver.query(Data.CONTENT_URI.buildUpon()
+                        .appendQueryParameter(Data.VISIBLE_CONTACTS_ONLY, "true")
+                        .build(),
+                DataQuery.PROJECTION,
+                selectionBuilder.toString(),
+                selectionArgs.toArray(new String[selectionArgs.size()]),
+                null);
+    }
+
+    private Cursor queryAccountsOfRawContacts(Set<Long> ids) {
+        final StringBuilder selectionBuilder = new StringBuilder();
+
+        final String[] args = new String[ids.size()];
+
+        selectionBuilder.append(RawContacts._ID).append(" IN (")
+                .append(Joiner.on(',').join(Collections.nCopies(args.length, '?')))
+                .append(")");
+        int i = 0;
+        for (long id : ids) {
+            args[i++] = String.valueOf(id);
+        }
+        return mResolver.query(RawContacts.CONTENT_URI,
+                AccountQuery.PROJECTION,
+                selectionBuilder.toString(),
+                args,
+                null);
+    }
+
+    private ArrayList<ContentProviderOperation> createImportOperations(List<SimContact> contacts,
+            AccountWithDataSet targetAccount) {
+        final ArrayList<ContentProviderOperation> ops = new ArrayList<>();
+        for (SimContact contact : contacts) {
+            contact.appendCreateContactOperations(ops, targetAccount);
+        }
+        return ops;
+    }
+
+    private String[] parseEmails(String emails) {
+        return !TextUtils.isEmpty(emails) ? emails.split(",") : null;
+    }
+
+    private boolean hasTelephony() {
+        return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
+    }
+
+    private boolean hasPermissions() {
+        return PermissionsUtil.hasContactsPermissions(mContext) &&
+                PermissionsUtil.hasPhonePermissions(mContext);
+    }
+
+    // TODO remove this class and the USE_FAKE_INSTANCE flag once this code is not under
+    // active development or anytime after 3/1/2017
+    public static class DebugImpl extends SimContactDaoImpl {
+
+        private List<SimCard> mSimCards = new ArrayList<>();
+        private SparseArray<SimCard> mCardsBySubscription = new SparseArray<>();
+
+        public DebugImpl(Context context) {
+            super(context);
+        }
+
+        public DebugImpl addSimCard(SimCard sim) {
+            mSimCards.add(sim);
+            mCardsBySubscription.put(sim.getSubscriptionId(), sim);
+            return this;
+        }
+
+        @Override
+        public List<SimCard> getSimCards() {
+            return SharedPreferenceUtil.restoreSimStates(getContext(), mSimCards);
+        }
+
+        @Override
+        public ArrayList<SimContact> loadContactsForSim(SimCard card) {
+            return new ArrayList<>(card.getContacts());
+        }
+
+        @Override
+        public boolean canReadSimContacts() {
+            return true;
+        }
+    }
+
+    // Query used for detecting existing contacts that may match a SimContact.
+    private static final class DataQuery {
+
+        public static final String[] PROJECTION = new String[] {
+                Data.RAW_CONTACT_ID, Phone.NUMBER, Data.DISPLAY_NAME, Data.MIMETYPE
+        };
+
+        public static final int RAW_CONTACT_ID = 0;
+        public static final int PHONE_NUMBER = 1;
+        public static final int DISPLAY_NAME = 2;
+        public static final int MIMETYPE = 3;
+
+        public static long getRawContactId(Cursor cursor) {
+            return cursor.getLong(RAW_CONTACT_ID);
+        }
+
+        public static String getPhoneNumber(Cursor cursor) {
+            return isPhoneNumber(cursor) ? cursor.getString(PHONE_NUMBER) : null;
+        }
+
+        public static String getDisplayName(Cursor cursor) {
+            return cursor.getString(DISPLAY_NAME);
+        }
+
+        public static boolean isPhoneNumber(Cursor cursor) {
+            return Phone.CONTENT_ITEM_TYPE.equals(cursor.getString(MIMETYPE));
+        }
+    }
+
+    private static final class AccountQuery {
+        public static final String[] PROJECTION = new String[] {
+                RawContacts._ID, RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE,
+                RawContacts.DATA_SET
+        };
+
+        public static long getId(Cursor cursor) {
+            return cursor.getLong(0);
+        }
+
+        public static AccountWithDataSet getAccount(Cursor cursor) {
+            return new AccountWithDataSet(cursor.getString(1), cursor.getString(2),
+                    cursor.getString(3));
+        }
+    }
+}
diff --git a/src/com/android/contacts/datepicker/DatePickerDialog.java b/src/com/android/contacts/datepicker/DatePickerDialog.java
index 1ae1e61..82eed24 100644
--- a/src/com/android/contacts/datepicker/DatePickerDialog.java
+++ b/src/com/android/contacts/datepicker/DatePickerDialog.java
@@ -28,8 +28,8 @@
 import android.view.View;
 
 import com.android.contacts.R;
-import com.android.contacts.common.util.DateUtils;
 import com.android.contacts.datepicker.DatePicker.OnDateChangedListener;
+import com.android.contacts.util.DateUtils;
 
 import java.text.DateFormat;
 import java.util.Calendar;
diff --git a/src/com/android/contacts/detail/ContactDisplayUtils.java b/src/com/android/contacts/detail/ContactDisplayUtils.java
index 85e6026..6803e9d 100644
--- a/src/com/android/contacts/detail/ContactDisplayUtils.java
+++ b/src/com/android/contacts/detail/ContactDisplayUtils.java
@@ -16,16 +16,6 @@
 
 package com.android.contacts.detail;
 
-import com.google.common.collect.Iterables;
-
-import com.android.contacts.R;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.RawContact;
-import com.android.contacts.common.model.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.OrganizationDataItem;
-import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.util.MoreMath;
-
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
@@ -41,10 +31,18 @@
 import android.util.Log;
 import android.view.MenuItem;
 import android.view.View;
-import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
 
+import com.android.contacts.R;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.RawContact;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.OrganizationDataItem;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.MoreMath;
+import com.google.common.collect.Iterables;
+
 import java.util.List;
 
 /**
@@ -156,34 +154,14 @@
     /**
      * Sets the starred state of this contact.
      */
-    public static void configureStarredImageView(ImageView starredView, boolean isDirectoryEntry,
-            boolean isUserProfile, boolean isStarred) {
-        // Check if the starred state should be visible
-        if (!isDirectoryEntry && !isUserProfile) {
-            starredView.setVisibility(View.VISIBLE);
-            final int resId = isStarred
-                    ? R.drawable.btn_star_on_normal_holo_light
-                    : R.drawable.btn_star_off_normal_holo_light;
-            starredView.setImageResource(resId);
-            starredView.setTag(isStarred);
-            starredView.setContentDescription(starredView.getResources().getString(
-                    isStarred ? R.string.menu_removeStar : R.string.menu_addStar));
-        } else {
-            starredView.setVisibility(View.GONE);
-        }
-    }
-
-    /**
-     * Sets the starred state of this contact.
-     */
     public static void configureStarredMenuItem(MenuItem starredMenuItem, boolean isDirectoryEntry,
             boolean isUserProfile, boolean isStarred) {
         // Check if the starred state should be visible
         if (!isDirectoryEntry && !isUserProfile) {
             starredMenuItem.setVisible(true);
             final int resId = isStarred
-                    ? R.drawable.ic_star_24dp
-                    : R.drawable.ic_star_outline_24dp;
+                    ? R.drawable.quantum_ic_star_vd_theme_24
+                    : R.drawable.quantum_ic_star_border_vd_theme_24;
             starredMenuItem.setIcon(resId);
             starredMenuItem.setChecked(isStarred);
             starredMenuItem.setTitle(isStarred ? R.string.menu_removeStar : R.string.menu_addStar);
diff --git a/src/com/android/contacts/detail/PhotoSelectionHandler.java b/src/com/android/contacts/detail/PhotoSelectionHandler.java
index dbd36a4..3053714 100644
--- a/src/com/android/contacts/detail/PhotoSelectionHandler.java
+++ b/src/com/android/contacts/detail/PhotoSelectionHandler.java
@@ -38,12 +38,12 @@
 
 import com.android.contacts.R;
 import com.android.contacts.editor.PhotoActionPopup;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.RawContactDeltaList;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType;
 import com.android.contacts.util.ContactPhotoUtils;
 import com.android.contacts.util.UiClosables;
 
diff --git a/src/com/android/contacts/dialog/CallSubjectDialog.java b/src/com/android/contacts/dialog/CallSubjectDialog.java
new file mode 100644
index 0000000..036a0f3
--- /dev/null
+++ b/src/com/android/contacts/dialog/CallSubjectDialog.java
@@ -0,0 +1,623 @@
+/*
+ * 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.dialog;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.text.Editable;
+import android.text.InputFilter;
+import android.text.TextUtils;
+import android.text.TextWatcher;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.EditText;
+import android.widget.ListView;
+import android.widget.QuickContactBadge;
+import android.widget.TextView;
+
+import com.android.contacts.CallUtil;
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.PhoneAccountSdkCompat;
+import com.android.contacts.compat.telecom.TelecomManagerCompat;
+import com.android.contacts.util.UriUtils;
+import com.android.phone.common.animation.AnimUtils;
+
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Implements a dialog which prompts for a call subject for an outgoing call.  The dialog includes
+ * a pop up list of historical call subjects.
+ */
+public class CallSubjectDialog extends Activity {
+    private static final String TAG = "CallSubjectDialog";
+    private static final int CALL_SUBJECT_LIMIT = 16;
+    private static final int CALL_SUBJECT_HISTORY_SIZE = 5;
+
+    private static final int REQUEST_SUBJECT = 1001;
+
+    public static final String PREF_KEY_SUBJECT_HISTORY_COUNT = "subject_history_count";
+    public static final String PREF_KEY_SUBJECT_HISTORY_ITEM = "subject_history_item";
+
+    /**
+     * Activity intent argument bundle keys:
+     */
+    public static final String ARG_PHOTO_ID = "PHOTO_ID";
+    public static final String ARG_PHOTO_URI = "PHOTO_URI";
+    public static final String ARG_CONTACT_URI = "CONTACT_URI";
+    public static final String ARG_NAME_OR_NUMBER = "NAME_OR_NUMBER";
+    public static final String ARG_IS_BUSINESS = "IS_BUSINESS";
+    public static final String ARG_NUMBER = "NUMBER";
+    public static final String ARG_DISPLAY_NUMBER = "DISPLAY_NUMBER";
+    public static final String ARG_NUMBER_LABEL = "NUMBER_LABEL";
+    public static final String ARG_PHONE_ACCOUNT_HANDLE = "PHONE_ACCOUNT_HANDLE";
+
+    private int mAnimationDuration;
+    private Charset mMessageEncoding;
+    private View mBackgroundView;
+    private View mDialogView;
+    private QuickContactBadge mContactPhoto;
+    private TextView mNameView;
+    private TextView mNumberView;
+    private EditText mCallSubjectView;
+    private TextView mCharacterLimitView;
+    private View mHistoryButton;
+    private View mSendAndCallButton;
+    private ListView mSubjectList;
+
+    private int mLimit = CALL_SUBJECT_LIMIT;
+    private int mPhotoSize;
+    private SharedPreferences mPrefs;
+    private List<String> mSubjectHistory;
+
+    private long mPhotoID;
+    private Uri mPhotoUri;
+    private Uri mContactUri;
+    private String mNameOrNumber;
+    private boolean mIsBusiness;
+    private String mNumber;
+    private String mDisplayNumber;
+    private String mNumberLabel;
+    private PhoneAccountHandle mPhoneAccountHandle;
+
+    /**
+     * Handles changes to the text in the subject box.  Ensures the character limit is updated.
+     */
+    private final TextWatcher mTextWatcher = new TextWatcher() {
+        @Override
+        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+            // no-op
+        }
+
+        @Override
+        public void onTextChanged(CharSequence s, int start, int before, int count) {
+            updateCharacterLimit();
+        }
+
+        @Override
+        public void afterTextChanged(Editable s) {
+            // no-op
+        }
+    };
+
+    /**
+     * Click listener which handles user clicks outside of the dialog.
+     */
+    private View.OnClickListener mBackgroundListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            finish();
+        }
+    };
+
+    /**
+     * Handles displaying the list of past call subjects.
+     */
+    private final View.OnClickListener mHistoryOnClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            hideSoftKeyboard(CallSubjectDialog.this, mCallSubjectView);
+            showCallHistory(mSubjectList.getVisibility() == View.GONE);
+        }
+    };
+
+    /**
+     * Handles starting a call with a call subject specified.
+     */
+    private final View.OnClickListener mSendAndCallOnClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            String subject = mCallSubjectView.getText().toString();
+            Intent intent = CallUtil.getCallWithSubjectIntent(mNumber, mPhoneAccountHandle,
+                    subject);
+
+            TelecomManagerCompat.placeCall(
+                    CallSubjectDialog.this,
+                    (TelecomManager) getSystemService(Context.TELECOM_SERVICE),
+                    intent);
+
+            mSubjectHistory.add(subject);
+            saveSubjectHistory(mSubjectHistory);
+            finish();
+        }
+    };
+
+    /**
+     * Handles auto-hiding the call history when user clicks in the call subject field to give it
+     * focus.
+     */
+    private final View.OnClickListener mCallSubjectClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            if (mSubjectList.getVisibility() == View.VISIBLE) {
+                showCallHistory(false);
+            }
+        }
+    };
+
+    /**
+     * Item click listener which handles user clicks on the items in the list view.  Dismisses
+     * the activity, returning the subject to the caller and closing the activity with the
+     * {@link Activity#RESULT_OK} result code.
+     */
+    private AdapterView.OnItemClickListener mItemClickListener =
+            new AdapterView.OnItemClickListener() {
+                @Override
+                public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
+                    mCallSubjectView.setText(mSubjectHistory.get(position));
+                    showCallHistory(false);
+                }
+            };
+
+    /**
+     * Show the call subject dialog given a phone number to dial (e.g. from the dialpad).
+     *
+     * @param activity The activity.
+     * @param number The number to dial.
+     */
+    public static void start(Activity activity, String number) {
+        start(activity,
+                -1 /* photoId */,
+                null /* photoUri */,
+                null /* contactUri */,
+                number /* nameOrNumber */,
+                false /* isBusiness */,
+                number /* number */,
+                null /* displayNumber */,
+                null /* numberLabel */,
+                null /* phoneAccountHandle */);
+    }
+
+    /**
+     * Creates a call subject dialog.
+     *
+     * @param activity The current activity.
+     * @param photoId The photo ID (used to populate contact photo).
+     * @param photoUri The photo Uri (used to populate contact photo).
+     * @param contactUri The Contact URI (used so quick contact can be invoked from contact photo).
+     * @param nameOrNumber The name or number of the callee.
+     * @param isBusiness {@code true} if a business is being called (used for contact photo).
+     * @param number The raw number to dial.
+     * @param displayNumber The number to dial, formatted for display.
+     * @param numberLabel The label for the number (if from a contact).
+     * @param phoneAccountHandle The phone account handle.
+     */
+    public static void start(Activity activity, long photoId, Uri photoUri, Uri contactUri,
+            String nameOrNumber, boolean isBusiness, String number, String displayNumber,
+            String numberLabel, PhoneAccountHandle phoneAccountHandle) {
+        Bundle arguments = new Bundle();
+        arguments.putLong(ARG_PHOTO_ID, photoId);
+        arguments.putParcelable(ARG_PHOTO_URI, photoUri);
+        arguments.putParcelable(ARG_CONTACT_URI, contactUri);
+        arguments.putString(ARG_NAME_OR_NUMBER, nameOrNumber);
+        arguments.putBoolean(ARG_IS_BUSINESS, isBusiness);
+        arguments.putString(ARG_NUMBER, number);
+        arguments.putString(ARG_DISPLAY_NUMBER, displayNumber);
+        arguments.putString(ARG_NUMBER_LABEL, numberLabel);
+        arguments.putParcelable(ARG_PHONE_ACCOUNT_HANDLE, phoneAccountHandle);
+        start(activity, arguments);
+    }
+
+    /**
+     * Shows the call subject dialog given a Bundle containing all the arguments required to
+     * display the dialog (e.g. from Quick Contacts).
+     *
+     * @param activity The activity.
+     * @param arguments The arguments bundle.
+     */
+    public static void start(Activity activity, Bundle arguments) {
+        Intent intent = new Intent(activity, CallSubjectDialog.class);
+        intent.putExtras(arguments);
+        activity.startActivity(intent);
+    }
+
+    /**
+     * Creates the dialog, inflating the layout and populating it with the name and phone number.
+     *
+     * @param savedInstanceState The last saved instance state of the Fragment,
+     * or null if this is a freshly created Fragment.
+     *
+     * @return Dialog instance.
+     */
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mAnimationDuration = getResources().getInteger(R.integer.call_subject_animation_duration);
+        mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+        mPhotoSize = getResources().getDimensionPixelSize(
+                R.dimen.call_subject_dialog_contact_photo_size);
+        readArguments();
+        loadConfiguration();
+        mSubjectHistory = loadSubjectHistory(mPrefs);
+
+        setContentView(R.layout.dialog_call_subject);
+        getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT,
+                ViewGroup.LayoutParams.MATCH_PARENT);
+        mBackgroundView = findViewById(R.id.call_subject_dialog);
+        mBackgroundView.setOnClickListener(mBackgroundListener);
+        mDialogView = findViewById(R.id.dialog_view);
+        mContactPhoto = (QuickContactBadge) findViewById(R.id.contact_photo);
+        mNameView = (TextView) findViewById(R.id.name);
+        mNumberView = (TextView) findViewById(R.id.number);
+        mCallSubjectView = (EditText) findViewById(R.id.call_subject);
+        mCallSubjectView.addTextChangedListener(mTextWatcher);
+        mCallSubjectView.setOnClickListener(mCallSubjectClickListener);
+        InputFilter[] filters = new InputFilter[1];
+        filters[0] = new InputFilter.LengthFilter(mLimit);
+        mCallSubjectView.setFilters(filters);
+        mCharacterLimitView = (TextView) findViewById(R.id.character_limit);
+        mHistoryButton = findViewById(R.id.history_button);
+        mHistoryButton.setOnClickListener(mHistoryOnClickListener);
+        mHistoryButton.setVisibility(mSubjectHistory.isEmpty() ? View.GONE : View.VISIBLE);
+        mSendAndCallButton = findViewById(R.id.send_and_call_button);
+        mSendAndCallButton.setOnClickListener(mSendAndCallOnClickListener);
+        mSubjectList = (ListView) findViewById(R.id.subject_list);
+        mSubjectList.setOnItemClickListener(mItemClickListener);
+        mSubjectList.setVisibility(View.GONE);
+
+        updateContactInfo();
+        updateCharacterLimit();
+    }
+
+    /**
+     * Populates the contact info fields based on the current contact information.
+     */
+    private void updateContactInfo() {
+        if (mContactUri != null) {
+            setPhoto(mPhotoID, mPhotoUri, mContactUri, mNameOrNumber, mIsBusiness);
+        } else {
+            mContactPhoto.setVisibility(View.GONE);
+        }
+        mNameView.setText(mNameOrNumber);
+        if (!TextUtils.isEmpty(mNumberLabel) && !TextUtils.isEmpty(mDisplayNumber)) {
+            mNumberView.setVisibility(View.VISIBLE);
+            mNumberView.setText(getString(R.string.call_subject_type_and_number,
+                    mNumberLabel, mDisplayNumber));
+        } else {
+            mNumberView.setVisibility(View.GONE);
+            mNumberView.setText(null);
+        }
+    }
+
+    /**
+     * Reads arguments from the fragment arguments and populates the necessary instance variables.
+     */
+    private void readArguments() {
+        Bundle arguments = getIntent().getExtras();
+        if (arguments == null) {
+            Log.e(TAG, "Arguments cannot be null.");
+            return;
+        }
+        mPhotoID = arguments.getLong(ARG_PHOTO_ID);
+        mPhotoUri = arguments.getParcelable(ARG_PHOTO_URI);
+        mContactUri = arguments.getParcelable(ARG_CONTACT_URI);
+        mNameOrNumber = arguments.getString(ARG_NAME_OR_NUMBER);
+        mIsBusiness = arguments.getBoolean(ARG_IS_BUSINESS);
+        mNumber = arguments.getString(ARG_NUMBER);
+        mDisplayNumber = arguments.getString(ARG_DISPLAY_NUMBER);
+        mNumberLabel = arguments.getString(ARG_NUMBER_LABEL);
+        mPhoneAccountHandle = arguments.getParcelable(ARG_PHONE_ACCOUNT_HANDLE);
+    }
+
+    /**
+     * Updates the character limit display, coloring the text RED when the limit is reached or
+     * exceeded.
+     */
+    private void updateCharacterLimit() {
+        String subjectText = mCallSubjectView.getText().toString();
+        final int length;
+
+        // If a message encoding is specified, use that to count bytes in the message.
+        if (mMessageEncoding != null) {
+            length = subjectText.getBytes(mMessageEncoding).length;
+        } else {
+            // No message encoding specified, so just count characters entered.
+            length = subjectText.length();
+        }
+
+        mCharacterLimitView.setText(
+                getString(R.string.call_subject_limit, length, mLimit));
+        if (length >= mLimit) {
+            mCharacterLimitView.setTextColor(getResources().getColor(
+                    R.color.call_subject_limit_exceeded));
+        } else {
+            mCharacterLimitView.setTextColor(getResources().getColor(
+                    R.color.dialtacts_secondary_text_color));
+        }
+    }
+
+    /**
+     * Sets the photo on the quick contact photo.
+     *
+     * @param photoId
+     * @param photoUri
+     * @param contactUri
+     * @param displayName
+     * @param isBusiness
+     */
+    private void setPhoto(long photoId, Uri photoUri, Uri contactUri, String displayName,
+            boolean isBusiness) {
+        mContactPhoto.assignContactUri(contactUri);
+        if (CompatUtils.isLollipopCompatible()) {
+            mContactPhoto.setOverlay(null);
+        }
+
+        int contactType;
+        if (isBusiness) {
+            contactType = ContactPhotoManager.TYPE_BUSINESS;
+        } else {
+            contactType = ContactPhotoManager.TYPE_DEFAULT;
+        }
+
+        String lookupKey = null;
+        if (contactUri != null) {
+            lookupKey = UriUtils.getLookupKeyFromUri(contactUri);
+        }
+
+        ContactPhotoManager.DefaultImageRequest
+                request = new ContactPhotoManager.DefaultImageRequest(
+                displayName, lookupKey, contactType, true /* isCircular */);
+
+        if (photoId == 0 && photoUri != null) {
+            ContactPhotoManager.getInstance(this).loadPhoto(mContactPhoto, photoUri,
+                    mPhotoSize, false /* darkTheme */, true /* isCircular */, request);
+        } else {
+            ContactPhotoManager.getInstance(this).loadThumbnail(mContactPhoto, photoId,
+                    false /* darkTheme */, true /* isCircular */, request);
+        }
+    }
+
+    /**
+     * Loads the subject history from shared preferences.
+     *
+     * @param prefs Shared preferences.
+     * @return List of subject history strings.
+     */
+    public static List<String> loadSubjectHistory(SharedPreferences prefs) {
+        int historySize = prefs.getInt(PREF_KEY_SUBJECT_HISTORY_COUNT, 0);
+        List<String> subjects = new ArrayList(historySize);
+
+        for (int ix = 0 ; ix < historySize; ix++) {
+            String historyItem = prefs.getString(PREF_KEY_SUBJECT_HISTORY_ITEM + ix, null);
+            if (!TextUtils.isEmpty(historyItem)) {
+                subjects.add(historyItem);
+            }
+        }
+
+        return subjects;
+    }
+
+    /**
+     * Saves the subject history list to shared prefs, removing older items so that there are only
+     * {@link #CALL_SUBJECT_HISTORY_SIZE} items at most.
+     *
+     * @param history The history.
+     */
+    private void saveSubjectHistory(List<String> history) {
+        // Remove oldest subject(s).
+        while (history.size() > CALL_SUBJECT_HISTORY_SIZE) {
+            history.remove(0);
+        }
+
+        SharedPreferences.Editor editor = mPrefs.edit();
+        int historyCount = 0;
+        for (String subject : history) {
+            if (!TextUtils.isEmpty(subject)) {
+                editor.putString(PREF_KEY_SUBJECT_HISTORY_ITEM + historyCount,
+                        subject);
+                historyCount++;
+            }
+        }
+        editor.putInt(PREF_KEY_SUBJECT_HISTORY_COUNT, historyCount);
+        editor.apply();
+    }
+
+    /**
+     * Hide software keyboard for the given {@link View}.
+     */
+    public void hideSoftKeyboard(Context context, View view) {
+        InputMethodManager imm = (InputMethodManager) context.getSystemService(
+                Context.INPUT_METHOD_SERVICE);
+        if (imm != null) {
+            imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
+        }
+    }
+
+    /**
+     * Hides or shows the call history list.
+     *
+     * @param show {@code true} if the call history should be shown, {@code false} otherwise.
+     */
+    private void showCallHistory(final boolean show) {
+        // Bail early if the visibility has not changed.
+        if ((show && mSubjectList.getVisibility() == View.VISIBLE) ||
+                (!show && mSubjectList.getVisibility() == View.GONE)) {
+            return;
+        }
+
+        final int dialogStartingBottom = mDialogView.getBottom();
+        if (show) {
+            // Showing the subject list; bind the list of history items to the list and show it.
+            ArrayAdapter<String> adapter = new ArrayAdapter<String>(CallSubjectDialog.this,
+                    R.layout.call_subject_history_list_item, mSubjectHistory);
+            mSubjectList.setAdapter(adapter);
+            mSubjectList.setVisibility(View.VISIBLE);
+        } else {
+            // Hiding the subject list.
+            mSubjectList.setVisibility(View.GONE);
+        }
+
+        // Use a ViewTreeObserver so that we can animate between the pre-layout and post-layout
+        // states.
+        final ViewTreeObserver observer = mBackgroundView.getViewTreeObserver();
+        observer.addOnPreDrawListener(
+                new ViewTreeObserver.OnPreDrawListener() {
+                    @Override
+                    public boolean onPreDraw() {
+                        // We don't want to continue getting called.
+                        if (observer.isAlive()) {
+                            observer.removeOnPreDrawListener(this);
+                        }
+
+                        // Determine the amount the dialog has shifted due to the relayout.
+                        int shiftAmount = dialogStartingBottom - mDialogView.getBottom();
+
+                        // If the dialog needs to be shifted, do that now.
+                        if (shiftAmount != 0) {
+                            // Start animation in translated state and animate to translationY 0.
+                            mDialogView.setTranslationY(shiftAmount);
+                            mDialogView.animate()
+                                    .translationY(0)
+                                    .setInterpolator(AnimUtils.EASE_OUT_EASE_IN)
+                                    .setDuration(mAnimationDuration)
+                                    .start();
+                        }
+
+                        if (show) {
+                            // Show the subhect list.
+                            mSubjectList.setTranslationY(mSubjectList.getHeight());
+
+                            mSubjectList.animate()
+                                    .translationY(0)
+                                    .setInterpolator(AnimUtils.EASE_OUT_EASE_IN)
+                                    .setDuration(mAnimationDuration)
+                                    .setListener(new AnimatorListenerAdapter() {
+                                        @Override
+                                        public void onAnimationEnd(Animator animation) {
+                                            super.onAnimationEnd(animation);
+                                        }
+
+                                        @Override
+                                        public void onAnimationStart(Animator animation) {
+                                            super.onAnimationStart(animation);
+                                            mSubjectList.setVisibility(View.VISIBLE);
+                                        }
+                                    })
+                                    .start();
+                        } else {
+                            // Hide the subject list.
+                            mSubjectList.setTranslationY(0);
+
+                            mSubjectList.animate()
+                                    .translationY(mSubjectList.getHeight())
+                                    .setInterpolator(AnimUtils.EASE_OUT_EASE_IN)
+                                    .setDuration(mAnimationDuration)
+                                    .setListener(new AnimatorListenerAdapter() {
+                                        @Override
+                                        public void onAnimationEnd(Animator animation) {
+                                            super.onAnimationEnd(animation);
+                                            mSubjectList.setVisibility(View.GONE);
+                                        }
+
+                                        @Override
+                                        public void onAnimationStart(Animator animation) {
+                                            super.onAnimationStart(animation);
+                                        }
+                                    })
+                                    .start();
+                        }
+                        return true;
+                    }
+                }
+        );
+    }
+
+    /**
+     * Loads the message encoding and maximum message length from the phone account extras for the
+     * current phone account.
+     */
+    private void loadConfiguration() {
+        // Only attempt to load configuration from the phone account extras if the SDK is N or
+        // later.  If we've got a prior SDK the default encoding and message length will suffice.
+        int sdk = android.os.Build.VERSION.SDK_INT;
+        if(sdk <= android.os.Build.VERSION_CODES.M) {
+            return;
+        }
+
+        if (mPhoneAccountHandle == null) {
+            return;
+        }
+
+        TelecomManager telecomManager =
+                (TelecomManager) getSystemService(Context.TELECOM_SERVICE);
+        final PhoneAccount account = telecomManager.getPhoneAccount(mPhoneAccountHandle);
+
+        Bundle phoneAccountExtras = PhoneAccountSdkCompat.getExtras(account);
+        if (phoneAccountExtras == null) {
+            return;
+        }
+
+        // Get limit, if provided; otherwise default to existing value.
+        mLimit = phoneAccountExtras
+                .getInt(PhoneAccountSdkCompat.EXTRA_CALL_SUBJECT_MAX_LENGTH, mLimit);
+
+        // Get charset; default to none (e.g. count characters 1:1).
+        String charsetName = phoneAccountExtras.getString(
+                PhoneAccountSdkCompat.EXTRA_CALL_SUBJECT_CHARACTER_ENCODING);
+
+        if (!TextUtils.isEmpty(charsetName)) {
+            try {
+                mMessageEncoding = Charset.forName(charsetName);
+            } catch (java.nio.charset.UnsupportedCharsetException uce) {
+                // Character set was invalid; log warning and fallback to none.
+                Log.w(TAG, "Invalid charset: " + charsetName);
+                mMessageEncoding = null;
+            }
+        } else {
+            // No character set specified, so count characters 1:1.
+            mMessageEncoding = null;
+        }
+    }
+}
diff --git a/src/com/android/contacts/dialog/ClearFrequentsDialog.java b/src/com/android/contacts/dialog/ClearFrequentsDialog.java
new file mode 100644
index 0000000..7591de3
--- /dev/null
+++ b/src/com/android/contacts/dialog/ClearFrequentsDialog.java
@@ -0,0 +1,81 @@
+/*
+ * 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.dialog;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+
+import com.android.contacts.R;
+import com.android.contacts.util.PermissionsUtil;
+
+/**
+ * Dialog that clears the frequently contacted list after confirming with the user.
+ */
+public class ClearFrequentsDialog extends DialogFragment {
+    /** Preferred way to show this dialog */
+    public static void show(FragmentManager fragmentManager) {
+        ClearFrequentsDialog dialog = new ClearFrequentsDialog();
+        dialog.show(fragmentManager, "clearFrequents");
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        final Context context = getActivity().getApplicationContext();
+        final ContentResolver resolver = getActivity().getContentResolver();
+        final OnClickListener okListener = new OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                if (!PermissionsUtil.hasContactsPermissions(context)) {
+                    return;
+                }
+                final IndeterminateProgressDialog progressDialog = IndeterminateProgressDialog.show(
+                        getFragmentManager(), getString(R.string.clearFrequentsProgress_title),
+                        null, 500);
+                final AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
+                    @Override
+                    protected Void doInBackground(Void... params) {
+                        resolver.delete(ContactsContract.DataUsageFeedback.DELETE_USAGE_URI,
+                                null, null);
+                        return null;
+                    }
+
+                    @Override
+                    protected void onPostExecute(Void result) {
+                        progressDialog.dismiss();
+                    }
+                };
+                task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+            }
+        };
+        return new AlertDialog.Builder(getActivity())
+            .setTitle(R.string.clearFrequentsConfirmation_title)
+            .setMessage(R.string.clearFrequentsConfirmation)
+            .setNegativeButton(android.R.string.cancel, null)
+            .setPositiveButton(android.R.string.ok, okListener)
+            .setCancelable(true)
+            .create();
+    }
+}
diff --git a/src/com/android/contacts/dialog/IndeterminateProgressDialog.java b/src/com/android/contacts/dialog/IndeterminateProgressDialog.java
new file mode 100644
index 0000000..21cd4bb
--- /dev/null
+++ b/src/com/android/contacts/dialog/IndeterminateProgressDialog.java
@@ -0,0 +1,208 @@
+/*
+ * 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.dialog;
+
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.app.ProgressDialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.os.Handler;
+
+/**
+ * Indeterminate progress dialog wrapped up in a DialogFragment to work even when the device
+ * orientation is changed. Currently, only supports adding a title and/or message to the progress
+ * dialog.  There is an additional parameter of the minimum amount of time to display the progress
+ * dialog even after a call to dismiss the dialog {@link #dismiss()} or
+ * {@link #dismissAllowingStateLoss()}.
+ * <p>
+ * To create and show the progress dialog, use
+ * {@link #show(FragmentManager, CharSequence, CharSequence, long)} and retain the reference to the
+ * IndeterminateProgressDialog instance.
+ * <p>
+ * To dismiss the dialog, use {@link #dismiss()} or {@link #dismissAllowingStateLoss()} on the
+ * instance.  The instance returned by
+ * {@link #show(FragmentManager, CharSequence, CharSequence, long)} is guaranteed to be valid
+ * after a device orientation change because the {@link #setRetainInstance(boolean)} is called
+ * internally with true.
+ */
+public class IndeterminateProgressDialog extends DialogFragment {
+    private static final String TAG = IndeterminateProgressDialog.class.getSimpleName();
+
+    private CharSequence mTitle;
+    private CharSequence mMessage;
+    private long mMinDisplayTime;
+    private long mShowTime = 0;
+    private boolean mActivityReady = false;
+    private Dialog mOldDialog;
+    private final Handler mHandler = new Handler();
+    private boolean mCalledSuperDismiss = false;
+    private boolean mAllowStateLoss;
+    private final Runnable mDismisser = new Runnable() {
+        @Override
+        public void run() {
+            superDismiss();
+        }
+    };
+
+    /**
+     * Creates and shows an indeterminate progress dialog.  Once the progress dialog is shown, it
+     * will be shown for at least the minDisplayTime (in milliseconds), so that the progress dialog
+     * does not flash in and out to quickly.
+     */
+    public static IndeterminateProgressDialog show(FragmentManager fragmentManager,
+            CharSequence title, CharSequence message, long minDisplayTime) {
+        IndeterminateProgressDialog dialogFragment = new IndeterminateProgressDialog();
+        dialogFragment.mTitle = title;
+        dialogFragment.mMessage = message;
+        dialogFragment.mMinDisplayTime = minDisplayTime;
+        dialogFragment.show(fragmentManager, TAG);
+        dialogFragment.mShowTime = System.currentTimeMillis();
+        dialogFragment.setCancelable(false);
+
+        return dialogFragment;
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setRetainInstance(true);
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // Create the progress dialog and set its properties
+        final ProgressDialog dialog = new ProgressDialog(getActivity());
+        dialog.setIndeterminate(true);
+        dialog.setIndeterminateDrawable(null);
+        dialog.setTitle(mTitle);
+        dialog.setMessage(mMessage);
+
+        return dialog;
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+        mActivityReady = true;
+
+        // Check if superDismiss() had been called before.  This can happen if in a long
+        // running operation, the user hits the home button and closes this fragment's activity.
+        // Upon returning, we want to dismiss this progress dialog fragment.
+        if (mCalledSuperDismiss) {
+            superDismiss();
+        }
+    }
+
+    @Override
+    public void onStop() {
+        super.onStop();
+        mActivityReady = false;
+    }
+
+    /**
+     * There is a race condition that is not handled properly by the DialogFragment class.
+     * If we don't check that this onDismiss callback isn't for the old progress dialog from before
+     * the device orientation change, then this will cause the newly created dialog after the
+     * orientation change to be dismissed immediately.
+     */
+    @Override
+    public void onDismiss(DialogInterface dialog) {
+        if (mOldDialog != null && mOldDialog == dialog) {
+            // This is the callback from the old progress dialog that was already dismissed before
+            // the device orientation change, so just ignore it.
+            return;
+        }
+        super.onDismiss(dialog);
+    }
+
+    /**
+     * Save the old dialog that is about to get destroyed in case this is due to a change
+     * in device orientation.  This will allow us to intercept the callback to
+     * {@link #onDismiss(DialogInterface)} in case the callback happens after a new progress dialog
+     * instance was created.
+     */
+    @Override
+    public void onDestroyView() {
+        mOldDialog = getDialog();
+        super.onDestroyView();
+    }
+
+    /**
+     * This tells the progress dialog to dismiss itself after guaranteeing to be shown for the
+     * specified time in {@link #show(FragmentManager, CharSequence, CharSequence, long)}.
+     */
+    @Override
+    public void dismiss() {
+        mAllowStateLoss = false;
+        dismissWhenReady();
+    }
+
+    /**
+     * This tells the progress dialog to dismiss itself (with state loss) after guaranteeing to be
+     * shown for the specified time in
+     * {@link #show(FragmentManager, CharSequence, CharSequence, long)}.
+     */
+    @Override
+    public void dismissAllowingStateLoss() {
+        mAllowStateLoss = true;
+        dismissWhenReady();
+    }
+
+    /**
+     * Tells the progress dialog to dismiss itself after guaranteeing that the dialog had been
+     * showing for at least the minimum display time as set in
+     * {@link #show(FragmentManager, CharSequence, CharSequence, long)}.
+     */
+    private void dismissWhenReady() {
+        // Compute how long the dialog has been showing
+        final long shownTime = System.currentTimeMillis() - mShowTime;
+        if (shownTime >= mMinDisplayTime) {
+            // dismiss immediately
+            mHandler.post(mDismisser);
+        } else {
+            // Need to wait some more, so compute the amount of time to sleep.
+            final long sleepTime = mMinDisplayTime - shownTime;
+            mHandler.postDelayed(mDismisser, sleepTime);
+        }
+    }
+
+    /**
+     * Actually dismiss the dialog fragment.
+     */
+    private void superDismiss() {
+        mCalledSuperDismiss = true;
+        if (mActivityReady) {
+            // The fragment is either in onStart or past it, but has not gotten to onStop yet.
+            // It is safe to dismiss this dialog fragment.
+            if (mAllowStateLoss) {
+                super.dismissAllowingStateLoss();
+            } else {
+                super.dismiss();
+            }
+        }
+        // If mActivityReady is false, then this dialog fragment has already passed the onStop
+        // state. This can happen if the user hit the 'home' button before this dialog fragment was
+        // dismissed or if there is a configuration change.
+        // In the event that this dialog fragment is re-attached and reaches onStart (e.g.,
+        // because the user returns to this fragment's activity or the device configuration change
+        // has re-attached this dialog fragment), because the mCalledSuperDismiss flag was set to
+        // true, this dialog fragment will be dismissed within onStart.  So, there's nothing else
+        // that needs to be done.
+    }
+}
diff --git a/src/com/android/contacts/editor/AccountHeaderPresenter.java b/src/com/android/contacts/editor/AccountHeaderPresenter.java
index 61a440f..e7e8e50 100644
--- a/src/com/android/contacts/editor/AccountHeaderPresenter.java
+++ b/src/com/android/contacts/editor/AccountHeaderPresenter.java
@@ -26,11 +26,9 @@
 import android.widget.TextView;
 
 import com.android.contacts.R;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.AccountsListAdapter;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.AccountsListAdapter;
 import com.android.contacts.util.UiClosables;
 
 import java.util.List;
@@ -56,8 +54,8 @@
     }
 
     private final Context mContext;
-    private AccountDisplayInfoFactory mAccountDisplayInfoFactory;
 
+    private List<AccountInfo> mAccounts;
     private AccountWithDataSet mCurrentAccount;
 
     // Account header
@@ -82,8 +80,6 @@
         mAccountHeaderName = (TextView) container.findViewById(R.id.account_name);
         mAccountHeaderIcon = (ImageView) container.findViewById(R.id.account_type_icon);
         mAccountHeaderExpanderIcon = (ImageView) container.findViewById(R.id.account_expander_icon);
-
-        mAccountDisplayInfoFactory = AccountDisplayInfoFactory.forWritableAccounts(mContext);
     }
 
     public void setObserver(Observer observer) {
@@ -101,8 +97,18 @@
         updateDisplayedAccount();
     }
 
+    public void setAccounts(List<AccountInfo> accounts) {
+        mAccounts = accounts;
+        // If the current account was removed just switch to the next one in the list.
+        if (mCurrentAccount != null && !AccountInfo.contains(mAccounts, mCurrentAccount)) {
+            mCurrentAccount = mAccounts.isEmpty() ? null : accounts.get(0).getAccount();
+            mObserver.onChange(this);
+        }
+        updateDisplayedAccount();
+    }
+
     public AccountWithDataSet getCurrentAccount() {
-        return mCurrentAccount;
+        return mCurrentAccount != null ? mCurrentAccount : null;
     }
 
     public void onSaveInstanceState(Bundle outState) {
@@ -120,17 +126,11 @@
     private void updateDisplayedAccount() {
         mAccountHeaderContainer.setVisibility(View.GONE);
         if (mCurrentAccount == null) return;
+        if (mAccounts == null) return;
 
-        final AccountDisplayInfo account =
-                mAccountDisplayInfoFactory.getAccountDisplayInfo(mCurrentAccount);
+        final String accountLabel = getAccountLabel(mCurrentAccount);
 
-        final String accountLabel = getAccountLabel(account);
-
-        // Either the account header or selector should be shown, not both.
-        final List<AccountWithDataSet> accounts =
-                AccountTypeManager.getInstance(mContext).getAccounts(true);
-
-        if (accounts.size() > 1) {
+        if (mAccounts.size() > 1) {
             addAccountSelector(accountLabel);
         } else {
             addAccountHeader(accountLabel);
@@ -150,10 +150,10 @@
             mAccountHeaderType.setText(selectorTitle);
         }
 
+        final AccountInfo accountInfo = AccountInfo.getAccount(mAccounts, mCurrentAccount);
+
         // Set the icon
-        final AccountDisplayInfo displayInfo = mAccountDisplayInfoFactory
-                .getAccountDisplayInfo(mCurrentAccount);
-        mAccountHeaderIcon.setImageDrawable(displayInfo.getIcon());
+        mAccountHeaderIcon.setImageDrawable(accountInfo.getIcon());
 
         // Set the content description
         mAccountHeaderContainer.setContentDescription(
@@ -174,9 +174,7 @@
     private void showPopup() {
         final ListPopupWindow popup = new ListPopupWindow(mContext);
         final AccountsListAdapter adapter =
-                new AccountsListAdapter(mContext,
-                        AccountsListAdapter.AccountListFilter.ACCOUNTS_CONTACT_WRITABLE,
-                        mCurrentAccount);
+                new AccountsListAdapter(mContext, mAccounts, mCurrentAccount);
         popup.setWidth(mAccountHeaderContainer.getWidth());
         popup.setAnchorView(mAccountHeaderContainer);
         popup.setAdapter(adapter);
@@ -212,8 +210,8 @@
         mAccountHeaderContainer.setOnClickListener(listener);
     }
 
-    private String getAccountLabel(AccountDisplayInfo account) {
-        // TODO: if used from editor this would need to be different if editing the user's profile.
-        return account.getNameLabel().toString();
+    private String getAccountLabel(AccountWithDataSet account) {
+        final AccountInfo accountInfo = AccountInfo.getAccount(mAccounts, account);
+        return accountInfo != null ? accountInfo.getNameLabel().toString() : null;
     }
 }
diff --git a/src/com/android/contacts/editor/AggregationSuggestionEngine.java b/src/com/android/contacts/editor/AggregationSuggestionEngine.java
index 42776ff..3d5af74 100644
--- a/src/com/android/contacts/editor/AggregationSuggestionEngine.java
+++ b/src/com/android/contacts/editor/AggregationSuggestionEngine.java
@@ -38,9 +38,9 @@
 import android.provider.ContactsContract.RawContacts;
 import android.text.TextUtils;
 
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.compat.AggregationSuggestionsCompat;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountWithDataSet;
 
 import com.google.common.base.MoreObjects;
 import com.google.common.collect.Lists;
diff --git a/src/com/android/contacts/editor/AggregationSuggestionView.java b/src/com/android/contacts/editor/AggregationSuggestionView.java
index 42db014..d391c40 100644
--- a/src/com/android/contacts/editor/AggregationSuggestionView.java
+++ b/src/com/android/contacts/editor/AggregationSuggestionView.java
@@ -26,8 +26,8 @@
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import com.android.contacts.ContactPhotoManager;
 import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.editor.AggregationSuggestionEngine.Suggestion;
 
 /**
diff --git a/src/com/android/contacts/editor/CancelEditDialogFragment.java b/src/com/android/contacts/editor/CancelEditDialogFragment.java
index d467f3c..48cedff 100644
--- a/src/com/android/contacts/editor/CancelEditDialogFragment.java
+++ b/src/com/android/contacts/editor/CancelEditDialogFragment.java
@@ -16,13 +16,13 @@
 
 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;
+import android.support.v7.app.AlertDialog;
+
+import com.android.contacts.R;
 
 /**
  * Asks the user whether to cancel editing the contact.
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 1a7a391..ede4a37 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -41,6 +41,7 @@
 import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
 import android.provider.ContactsContract.Intents;
 import android.provider.ContactsContract.RawContacts;
+import android.support.v7.widget.Toolbar;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.LayoutInflater;
@@ -54,47 +55,49 @@
 import android.widget.LinearLayout;
 import android.widget.ListPopupWindow;
 import android.widget.Toast;
-import android.widget.Toolbar;
 
 import com.android.contacts.ContactSaveService;
+import com.android.contacts.Experiments;
 import com.android.contacts.GroupMetaDataLoader;
 import com.android.contacts.R;
 import com.android.contacts.activities.ContactEditorAccountsChangedActivity;
 import com.android.contacts.activities.ContactEditorActivity;
 import com.android.contacts.activities.ContactEditorActivity.ContactEditor;
 import com.android.contacts.activities.ContactSelectionActivity;
-import com.android.contacts.common.Experiments;
-import com.android.contacts.common.logging.ScreenEvent.ScreenType;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.ContactLoader;
-import com.android.contacts.common.model.RawContact;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.common.util.ContactDisplayUtils;
-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.group.GroupUtil;
 import com.android.contacts.list.UiIntentActions;
+import com.android.contacts.logging.ScreenEvent.ScreenType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.ContactLoader;
+import com.android.contacts.model.RawContact;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.AccountsLoader;
+import com.android.contacts.preference.ContactsPreferences;
 import com.android.contacts.quickcontact.InvisibleContactUtil;
 import com.android.contacts.quickcontact.QuickContactActivity;
+import com.android.contacts.util.ContactDisplayUtils;
 import com.android.contacts.util.ContactPhotoUtils;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.MaterialColorMapUtils;
 import com.android.contacts.util.UiClosables;
 import com.android.contactsbind.HelpUtils;
 import com.android.contactsbind.ObjectFactory;
 import com.android.contactsbind.experiments.Flags;
-
+import com.google.common.base.Preconditions;
 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.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -114,6 +117,7 @@
 
     private static final int LOADER_CONTACT = 1;
     private static final int LOADER_GROUPS = 2;
+    private static final int LOADER_ACCOUNTS = 3;
 
     private static final String KEY_PHOTO_RAW_CONTACT_ID = "photo_raw_contact_id";
     private static final String KEY_UPDATED_PHOTOS = "updated_photos";
@@ -302,7 +306,6 @@
     // Views
     //
     protected LinearLayout mContent;
-    protected View mAggregationSuggestionView;
     protected ListPopupWindow mAggregationSuggestionPopup;
 
     //
@@ -343,6 +346,7 @@
     // Whether to show the new contact blank form and if it's corresponding delta is ready.
     protected boolean mHasNewContact;
     protected AccountWithDataSet mAccountWithDataSet;
+    protected List<AccountInfo> mWritableAccounts = Collections.emptyList();
     protected boolean mNewContactDataReady;
     protected boolean mNewContactAccountChanged;
 
@@ -431,6 +435,52 @@
                 }
             };
 
+    protected LoaderManager.LoaderCallbacks<List<AccountInfo>> mAccountsLoaderListener =
+            new LoaderManager.LoaderCallbacks<List<AccountInfo>>() {
+                @Override
+                public Loader<List<AccountInfo>> onCreateLoader(int id, Bundle args) {
+                    return new AccountsLoader(getActivity(), AccountTypeManager.writableFilter());
+                }
+
+                @Override
+                public void onLoadFinished(
+                        Loader<List<AccountInfo>> loader, List<AccountInfo> data) {
+                    mWritableAccounts = data;
+                    // The user may need to select a new account to save to
+                    if (mAccountWithDataSet == null && mHasNewContact) {
+                        selectAccountAndCreateContact();
+                    }
+
+                    final RawContactEditorView view = getContent();
+                    if (view == null) {
+                        return;
+                    }
+                    view.setAccounts(data);
+                    if (mAccountWithDataSet == null && view.getCurrentRawContactDelta() == null) {
+                        return;
+                    }
+
+                    final AccountWithDataSet account = mAccountWithDataSet != null
+                            ? mAccountWithDataSet
+                            : view.getCurrentRawContactDelta().getAccountWithDataSet();
+
+                    // The current account was removed
+                    if (!AccountInfo.contains(data, account) && !data.isEmpty()) {
+                        if (isReadyToBindEditors()) {
+                            onRebindEditorsForNewContact(getContent().getCurrentRawContactDelta(),
+                                    account, data.get(0).getAccount());
+                        } else {
+                            mAccountWithDataSet = data.get(0).getAccount();
+                        }
+                    }
+                }
+
+                @Override
+                public void onLoaderReset(Loader<List<AccountInfo>> loader) {
+                }
+            };
+
+
     private long mPhotoRawContactId;
     private Bundle mUpdatedPhotos = new Bundle();
 
@@ -539,12 +589,15 @@
 
         // Handle initial actions only when existing state missing
         if (savedInstanceState == null) {
-            final Account account = mIntentExtras == null ? null :
-                    (Account) mIntentExtras.getParcelable(Intents.Insert.EXTRA_ACCOUNT);
-            final String dataSet = mIntentExtras == null ? null :
-                    mIntentExtras.getString(Intents.Insert.EXTRA_DATA_SET);
-            if (account != null) {
-                mAccountWithDataSet = new AccountWithDataSet(account.name, account.type, dataSet);
+            if (mIntentExtras != null) {
+                final Account account = mIntentExtras == null ? null :
+                        (Account) mIntentExtras.getParcelable(Intents.Insert.EXTRA_ACCOUNT);
+                final String dataSet = mIntentExtras == null ? null :
+                        mIntentExtras.getString(Intents.Insert.EXTRA_DATA_SET);
+                mAccountWithDataSet = account != null
+                        ? new AccountWithDataSet(account.name, account.type, dataSet)
+                        : mIntentExtras.<AccountWithDataSet>getParcelable(
+                                ContactEditorActivity.EXTRA_ACCOUNT_WITH_DATA_SET);
             }
 
             if (Intent.ACTION_EDIT.equals(mAction)) {
@@ -553,16 +606,13 @@
                 mHasNewContact = true;
                 if (mAccountWithDataSet != null) {
                     createContact(mAccountWithDataSet);
-                } else if (mIntentExtras != null && mIntentExtras.getBoolean(
-                        ContactEditorActivity.EXTRA_SAVE_TO_DEVICE_FLAG, false)) {
-                    createContact(null);
-                } else {
-                    // No Account specified. Let the user choose
-                    // Load Accounts async so that we can present them
-                    selectAccountAndCreateContact();
-                }
+                } // else wait for accounts to be loaded
             }
         }
+
+        if (mHasNewContact) {
+            getLoaderManager().initLoader(LOADER_ACCOUNTS, null, mAccountsLoaderListener);
+        }
     }
 
     /**
@@ -655,25 +705,16 @@
             }
             case REQUEST_CODE_ACCOUNTS_CHANGED: {
                 // Bail if the account selector was not successful.
-                if (resultCode != Activity.RESULT_OK) {
+                if (resultCode != Activity.RESULT_OK || data == null ||
+                        !data.hasExtra(Intents.Insert.EXTRA_ACCOUNT)) {
                     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();
+                AccountWithDataSet account = data.getParcelableExtra(
+                        Intents.Insert.EXTRA_ACCOUNT);
+                createContact(account);
                 break;
             }
         }
@@ -734,19 +775,19 @@
             return true;
         }
 
-        switch (item.getItemId()) {
-            case R.id.menu_save:
-                return save(SaveMode.CLOSE);
-            case R.id.menu_delete:
-                if (mListener != null) mListener.onDeleteRequested(mLookupUri);
-                return true;
-            case R.id.menu_split:
-                return doSplitContactAction();
-            case R.id.menu_join:
-                return doJoinContactAction();
-            case R.id.menu_help:
-                HelpUtils.launchHelpAndFeedbackForContactScreen(getActivity());
-                return true;
+        final int id = item.getItemId();
+        if (id == R.id.menu_save) {
+            return save(SaveMode.CLOSE);
+        } else if (id == R.id.menu_delete) {
+            if (mListener != null) mListener.onDeleteRequested(mLookupUri);
+            return true;
+        } else if (id == R.id.menu_split) {
+            return doSplitContactAction();
+        } else if (id == R.id.menu_join) {
+            return doJoinContactAction();
+        } else if (id == R.id.menu_help) {
+            HelpUtils.launchHelpAndFeedbackForContactScreen(getActivity());
+            return true;
         }
 
         return false;
@@ -974,6 +1015,7 @@
     //
 
     private void selectAccountAndCreateContact() {
+        Preconditions.checkNotNull(mWritableAccounts, "Accounts must be loaded first");
         // If this is a local profile, then skip the logic about showing the accounts changed
         // activity and create a phone-local contact.
         if (mNewLocalProfile) {
@@ -981,9 +1023,10 @@
             return;
         }
 
+        final List<AccountWithDataSet> accounts = AccountInfo.extractAccounts(mWritableAccounts);
         // 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()) {
+        if (mEditorUtils.shouldShowAccountChangedNotification(accounts)) {
             Intent intent = new Intent(mContext, ContactEditorAccountsChangedActivity.class);
             // Prevent a second instance from being started on rotates
             intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
@@ -992,33 +1035,15 @@
         } else {
             // Make sure the default account is automatically set if there is only one non-device
             // account.
-            mEditorUtils.maybeUpdateDefaultAccount();
+            mEditorUtils.maybeUpdateDefaultAccount(accounts);
             // Otherwise, there should be a default account. Then either create a local contact
             // (if default account is null) or create a contact with the specified account.
-            AccountWithDataSet defaultAccount = mEditorUtils.getOnlyOrDefaultAccount();
+            AccountWithDataSet defaultAccount = mEditorUtils.getOnlyOrDefaultAccount(accounts);
             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.
@@ -1178,16 +1203,6 @@
                 }
             }
 
-            // 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();
@@ -1253,8 +1268,9 @@
                 toolbar.setTitle(R.string.contact_editor_title_read_only_contact);
                 // Set activity title for Talkback
                 getEditorActivity().setTitle(R.string.contact_editor_title_read_only_contact);
-                toolbar.setNavigationIcon(R.drawable.ic_back_arrow);
+                toolbar.setNavigationIcon(R.drawable.quantum_ic_arrow_back_vd_theme_24);
                 toolbar.setNavigationContentDescription(R.string.back_arrow_content_description);
+                toolbar.getNavigationIcon().setAutoMirrored(true);
             }
         }
 
@@ -1514,13 +1530,6 @@
      */
     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) {
diff --git a/src/com/android/contacts/editor/ContactEditorUtils.java b/src/com/android/contacts/editor/ContactEditorUtils.java
index 5b80b04..517c2c7 100644
--- a/src/com/android/contacts/editor/ContactEditorUtils.java
+++ b/src/com/android/contacts/editor/ContactEditorUtils.java
@@ -23,19 +23,14 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
+import android.os.Bundle;
 import android.provider.ContactsContract;
 import android.text.TextUtils;
 
-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.preference.ContactsPreferences;
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.collect.Sets;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferences;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
 
 /**
  * Utility methods for the "account changed" notification in the new contact creation flow.
@@ -44,16 +39,9 @@
     private static final String TAG = "ContactEditorUtils";
 
     private final ContactsPreferences mContactsPrefs;
-    private final AccountTypeManager mAccountTypes;
 
     private ContactEditorUtils(Context context) {
-        this(context, AccountTypeManager.getInstance(context));
-    }
-
-    @VisibleForTesting
-    ContactEditorUtils(Context context, AccountTypeManager accountTypes) {
         mContactsPrefs = new ContactsPreferences(context);
-        mAccountTypes = accountTypes;
     }
 
     public static ContactEditorUtils create(Context context) {
@@ -92,10 +80,6 @@
         mContactsPrefs.clearDefaultAccount();
     }
 
-    private List<AccountWithDataSet> getWritableAccounts() {
-        return mAccountTypes.getAccounts(true);
-    }
-
     /**
      * Saves the default account, which can later be obtained with {@link #getOnlyOrDefaultAccount}.
      *
@@ -119,8 +103,8 @@
      *
      * Also note that the returned account may have been removed already.
      */
-    public AccountWithDataSet getOnlyOrDefaultAccount() {
-        final List<AccountWithDataSet> currentWritableAccounts = getWritableAccounts();
+    public AccountWithDataSet getOnlyOrDefaultAccount(
+            List<AccountWithDataSet> currentWritableAccounts) {
         if (currentWritableAccounts.size() == 1) {
             return currentWritableAccounts.get(0);
         }
@@ -128,15 +112,14 @@
         return mContactsPrefs.getDefaultAccount();
     }
 
-    public boolean shouldShowAccountChangedNotification() {
-        return mContactsPrefs.shouldShowAccountChangedNotification(getWritableAccounts());
+    public boolean shouldShowAccountChangedNotification(List<AccountWithDataSet> writableAccounts) {
+        return mContactsPrefs.shouldShowAccountChangedNotification(writableAccounts);
     }
 
     /**
      * Sets the only non-device account to be default if it is not already.
      */
-    public void maybeUpdateDefaultAccount() {
-        final List<AccountWithDataSet> currentWritableAccounts = getWritableAccounts();
+    public void maybeUpdateDefaultAccount(List<AccountWithDataSet> currentWritableAccounts) {
         if (currentWritableAccounts.size() == 1) {
             final AccountWithDataSet onlyAccount = currentWritableAccounts.get(0);
             if (!onlyAccount.isNullAccount()
@@ -146,46 +129,20 @@
         }
     }
 
-    @VisibleForTesting
-    String[] getWritableAccountTypeStrings() {
-        final Set<String> types = Sets.newHashSet();
-        for (AccountType type : mAccountTypes.getAccountTypes(true)) {
-            types.add(type.accountType);
-        }
-        return types.toArray(new String[types.size()]);
-    }
-
     /**
-     * Create an {@link Intent} to start "add new account" setup wizard.  Selectable account
-     * types will be limited to ones that supports editing contacts.
+     * Parses a result from {@link AccountManager#newChooseAccountIntent(Account, List, String[],
+     *     String, String, String[], Bundle)} and returns the created {@link Account}, or null if
+     * the user has canceled the wizard.
      *
-     * Use {@link Activity#startActivityForResult} or
-     * {@link android.app.Fragment#startActivityForResult} to start the wizard, and
-     * {@link Activity#onActivityResult} or {@link android.app.Fragment#onActivityResult} to
-     * get the result.
-     */
-    public Intent createAddWritableAccountIntent() {
-        return AccountManager.newChooseAccountIntent(
-                null, // selectedAccount
-                new ArrayList<Account>(), // allowableAccounts
-                getWritableAccountTypeStrings(), // allowableAccountTypes
-                false, // alwaysPromptForAccount
-                null, // descriptionOverrideText
-                null, // addAccountAuthTokenType
-                null, // addAccountRequiredFeatures
-                null // addAccountOptions
-                );
-    }
-
-    /**
-     * Parses a result from {@link #createAddWritableAccountIntent} and returns the created
-     * {@link Account}, or null if the user has canceled the wizard.  Pass the {@code resultCode}
-     * and {@code data} parameters passed to {@link Activity#onActivityResult} or
-     * {@link android.app.Fragment#onActivityResult}.
+     * <p>Pass the {@code resultCode} and {@code data} parameters passed to
+     * {@link Activity#onActivityResult} or {@link android.app.Fragment#onActivityResult}.
+     * </p>
      *
+     * <p>
      * Note although the return type is {@link AccountWithDataSet}, return values from this method
      * will never have {@link AccountWithDataSet#dataSet} set, as there's no way to create an
      * extension package account from setup wizard.
+     * </p>
      */
     public AccountWithDataSet getCreatedAccount(int resultCode, Intent resultData) {
         // Javadoc doesn't say anything about resultCode but that the data intent will be non null
diff --git a/src/com/android/contacts/editor/Editor.java b/src/com/android/contacts/editor/Editor.java
index d5c8589..711fbc0 100644
--- a/src/com/android/contacts/editor/Editor.java
+++ b/src/com/android/contacts/editor/Editor.java
@@ -18,9 +18,9 @@
 
 import android.provider.ContactsContract.Data;
 
-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.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.dataitem.DataKind;
 
 /**
  * Generic definition of something that edits a {@link Data} row through an
diff --git a/src/com/android/contacts/editor/EditorAnimator.java b/src/com/android/contacts/editor/EditorAnimator.java
index 2e17e23..598b6b0 100644
--- a/src/com/android/contacts/editor/EditorAnimator.java
+++ b/src/com/android/contacts/editor/EditorAnimator.java
@@ -28,6 +28,7 @@
 import android.widget.ScrollView;
 
 import com.android.contacts.util.SchedulingUtils;
+
 import com.google.common.collect.Lists;
 
 import java.util.List;
diff --git a/src/com/android/contacts/editor/EditorIntents.java b/src/com/android/contacts/editor/EditorIntents.java
index b867b31..91648d0 100644
--- a/src/com/android/contacts/editor/EditorIntents.java
+++ b/src/com/android/contacts/editor/EditorIntents.java
@@ -25,8 +25,8 @@
 
 import com.android.contacts.activities.ContactEditorActivity;
 import com.android.contacts.activities.ContactEditorSpringBoardActivity;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.util.MaterialColorMapUtils.MaterialPalette;
 
 import java.util.ArrayList;
 
diff --git a/src/com/android/contacts/editor/EditorUiUtils.java b/src/com/android/contacts/editor/EditorUiUtils.java
index 83c59df..23c7fa0 100644
--- a/src/com/android/contacts/editor/EditorUiUtils.java
+++ b/src/com/android/contacts/editor/EditorUiUtils.java
@@ -16,6 +16,11 @@
 
 package com.android.contacts.editor;
 
+import static android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import static android.provider.ContactsContract.CommonDataKinds.StructuredName;
+
+import static com.android.contacts.util.MaterialColorMapUtils.getDefaultPrimaryAndSecondaryColors;
+
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
@@ -38,26 +43,24 @@
 import android.text.TextUtils;
 import android.widget.ImageView;
 
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.ContactPhotoManager.DefaultImageProvider;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.ContactsUtils;
 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.ValuesDelta;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
-import com.android.contacts.common.model.account.AccountDisplayInfo;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.dataitem.DataKind;
 import com.android.contacts.util.ContactPhotoUtils;
+import com.android.contacts.util.MaterialColorMapUtils.MaterialPalette;
 import com.android.contacts.widget.QuickContactImageView;
+
 import com.google.common.collect.Maps;
 
 import java.io.FileNotFoundException;
 import java.util.HashMap;
 
-import static android.provider.ContactsContract.CommonDataKinds.GroupMembership;
-import static android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import static com.android.contacts.common.util.MaterialColorMapUtils.getDefaultPrimaryAndSecondaryColors;
-
 /**
  * Utility methods for creating contact editor.
  */
@@ -110,12 +113,12 @@
 
 
     public static String getAccountHeaderLabelForMyProfile(Context context,
-            AccountDisplayInfo displayableAccount) {
-        if (displayableAccount.isDeviceAccount()) {
+            AccountInfo accountInfo) {
+        if (accountInfo.isDeviceAccount()) {
             return context.getString(R.string.local_profile_title);
         } else {
             return context.getString(R.string.external_profile_title,
-                    displayableAccount.getTypeLabel());
+                    accountInfo.getTypeLabel());
         }
     }
 
@@ -155,32 +158,37 @@
     public static Drawable getMimeTypeDrawable(Context context, String mimeType) {
         switch (mimeType) {
             case StructuredName.CONTENT_ITEM_TYPE:
-                return context.getResources().getDrawable(R.drawable.ic_person_black_24dp);
+                return context.getResources().getDrawable(R.drawable.quantum_ic_person_vd_theme_24);
             case StructuredPostal.CONTENT_ITEM_TYPE:
-                return context.getResources().getDrawable(R.drawable.ic_place_24dp);
+                return context.getResources().getDrawable(R.drawable.quantum_ic_place_vd_theme_24);
             case SipAddress.CONTENT_ITEM_TYPE:
-                return context.getResources().getDrawable(R.drawable.ic_dialer_sip_black_24dp);
+                return context.getResources().getDrawable(
+                        R.drawable.quantum_ic_dialer_sip_vd_theme_24);
             case Phone.CONTENT_ITEM_TYPE:
-                return context.getResources().getDrawable(R.drawable.ic_phone_24dp);
+                return context.getResources().getDrawable(R.drawable.quantum_ic_phone_vd_theme_24);
             case Im.CONTENT_ITEM_TYPE:
-                return context.getResources().getDrawable(R.drawable.ic_message_24dp);
+                return context.getResources().getDrawable(
+                        R.drawable.quantum_ic_message_vd_theme_24);
             case Event.CONTENT_ITEM_TYPE:
-                return context.getResources().getDrawable(R.drawable.ic_event_24dp);
+                return context.getResources().getDrawable(R.drawable.quantum_ic_event_vd_theme_24);
             case Email.CONTENT_ITEM_TYPE:
-                return context.getResources().getDrawable(R.drawable.ic_email_24dp);
+                return context.getResources().getDrawable(R.drawable.quantum_ic_email_vd_theme_24);
             case Website.CONTENT_ITEM_TYPE:
-                return context.getResources().getDrawable(R.drawable.ic_public_black_24dp);
+                return context.getResources().getDrawable(R.drawable.quantum_ic_public_vd_theme_24);
             case Photo.CONTENT_ITEM_TYPE:
-                return context.getResources().getDrawable(R.drawable.ic_camera_alt_black_24dp);
+                return context.getResources().getDrawable(
+                        R.drawable.quantum_ic_camera_alt_vd_theme_24);
             case GroupMembership.CONTENT_ITEM_TYPE:
-                return context.getResources().getDrawable(R.drawable.ic_menu_label);
+                return context.getResources().getDrawable(R.drawable.quantum_ic_label_vd_theme_24);
             case Organization.CONTENT_ITEM_TYPE:
-                return context.getResources().getDrawable(R.drawable.ic_business_black_24dp);
+                return context.getResources().getDrawable(
+                        R.drawable.quantum_ic_business_vd_theme_24);
             case Note.CONTENT_ITEM_TYPE:
-                return context.getResources().getDrawable(R.drawable.ic_insert_comment_black_24dp);
+                return context.getResources().getDrawable(
+                        R.drawable.quantum_ic_insert_comment_vd_theme_24);
             case Relation.CONTENT_ITEM_TYPE:
                 return context.getResources().getDrawable(
-                        R.drawable.ic_circles_extended_black_24dp);
+                        R.drawable.quantum_ic_circles_ext_vd_theme_24);
             default:
                 return null;
         }
diff --git a/src/com/android/contacts/editor/EventFieldEditorView.java b/src/com/android/contacts/editor/EventFieldEditorView.java
index 8afcc0a..5d47d95 100644
--- a/src/com/android/contacts/editor/EventFieldEditorView.java
+++ b/src/com/android/contacts/editor/EventFieldEditorView.java
@@ -20,7 +20,6 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.os.Bundle;
-import android.provider.ContactsContract;
 import android.provider.ContactsContract.CommonDataKinds.Event;
 import android.text.TextUtils;
 import android.util.AttributeSet;
@@ -31,13 +30,13 @@
 import com.android.contacts.datepicker.DatePicker;
 import com.android.contacts.datepicker.DatePickerDialog;
 import com.android.contacts.datepicker.DatePickerDialog.OnDateSetListener;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType.EditField;
-import com.android.contacts.common.model.account.AccountType.EventEditType;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.CommonDateUtils;
-import com.android.contacts.common.util.DateUtils;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType.EditField;
+import com.android.contacts.model.account.AccountType.EventEditType;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contacts.util.DateUtils;
 
 import java.text.ParsePosition;
 import java.util.Calendar;
@@ -145,11 +144,10 @@
     public Dialog createDialog(Bundle bundle) {
         if (bundle == null) throw new IllegalArgumentException("bundle must not be null");
         int dialogId = bundle.getInt(DIALOG_ID_KEY);
-        switch (dialogId) {
-            case R.id.dialog_event_date_picker:
-                return createDatePickerDialog();
-            default:
-                return super.createDialog(bundle);
+        if (dialogId == R.id.dialog_event_date_picker) {
+            return createDatePickerDialog();
+        } else {
+            return super.createDialog(bundle);
         }
     }
 
diff --git a/src/com/android/contacts/editor/GroupMembershipView.java b/src/com/android/contacts/editor/GroupMembershipView.java
index a2bd2e9..f545e7b 100644
--- a/src/com/android/contacts/editor/GroupMembershipView.java
+++ b/src/com/android/contacts/editor/GroupMembershipView.java
@@ -39,13 +39,14 @@
 
 import com.android.contacts.GroupMetaDataLoader;
 import com.android.contacts.R;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.dataitem.DataKind;
 import com.android.contacts.group.GroupNameEditDialogFragment;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.RawContactModifier;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.dataitem.DataKind;
 import com.android.contacts.util.UiClosables;
+
 import com.google.common.base.Objects;
 
 import java.util.ArrayList;
diff --git a/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java b/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java
deleted file mode 100644
index 8f8b56a..0000000
--- a/src/com/android/contacts/editor/JoinSuggestedContactDialogFragment.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.contacts.editor;
-
-import com.android.contacts.R;
-
-import 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(ContactEditorFragment 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) {
-                                ContactEditorFragment targetFragment =
-                                        (ContactEditorFragment) getTargetFragment();
-                                long rawContactIds[] =
-                                        getArguments().getLongArray(ARG_RAW_CONTACT_IDS);
-                                targetFragment.doJoinSuggestedContact(rawContactIds);
-                            }
-                        }
-                )
-                .setNegativeButton(android.R.string.no, null)
-                .create();
-    }
-}
diff --git a/src/com/android/contacts/editor/KindSectionData.java b/src/com/android/contacts/editor/KindSectionData.java
index 03aa667..8ebae0a 100644
--- a/src/com/android/contacts/editor/KindSectionData.java
+++ b/src/com/android/contacts/editor/KindSectionData.java
@@ -18,11 +18,11 @@
 
 import android.text.TextUtils;
 
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountType.EditField;
-import com.android.contacts.common.model.dataitem.DataKind;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountType.EditField;
+import com.android.contacts.model.dataitem.DataKind;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/contacts/editor/KindSectionView.java b/src/com/android/contacts/editor/KindSectionView.java
index 125a307..02eae11 100644
--- a/src/com/android/contacts/editor/KindSectionView.java
+++ b/src/com/android/contacts/editor/KindSectionView.java
@@ -31,11 +31,11 @@
 import android.widget.TextView;
 
 import com.android.contacts.R;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.dataitem.DataKind;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.dataitem.DataKind;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/contacts/editor/LabeledEditorView.java b/src/com/android/contacts/editor/LabeledEditorView.java
index 8b29b7e..68832ff 100644
--- a/src/com/android/contacts/editor/LabeledEditorView.java
+++ b/src/com/android/contacts/editor/LabeledEditorView.java
@@ -44,13 +44,13 @@
 import android.widget.Spinner;
 import android.widget.TextView;
 
+import com.android.contacts.ContactsUtils;
 import com.android.contacts.R;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.dataitem.DataKind;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType.EditType;
+import com.android.contacts.model.dataitem.DataKind;
 import com.android.contacts.util.DialogManager;
 import com.android.contacts.util.DialogManager.DialogShowingView;
 
diff --git a/src/com/android/contacts/editor/PhoneticNameEditorView.java b/src/com/android/contacts/editor/PhoneticNameEditorView.java
index 1c6f6a1..c96548c 100644
--- a/src/com/android/contacts/editor/PhoneticNameEditorView.java
+++ b/src/com/android/contacts/editor/PhoneticNameEditorView.java
@@ -22,11 +22,11 @@
 import android.util.AttributeSet;
 
 import com.android.contacts.R;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.dataitem.StructuredNameDataItem;
-import com.android.contacts.common.util.NameConverter;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.model.dataitem.StructuredNameDataItem;
+import com.android.contacts.util.NameConverter;
 
 /**
  * A dedicated editor for phonetic name. It is similar to {@link StructuredNameEditorView}.
diff --git a/src/com/android/contacts/editor/PhotoEditorView.java b/src/com/android/contacts/editor/PhotoEditorView.java
index 1e727df..607c42c 100644
--- a/src/com/android/contacts/editor/PhotoEditorView.java
+++ b/src/com/android/contacts/editor/PhotoEditorView.java
@@ -29,10 +29,10 @@
 import android.view.ViewGroup;
 import android.widget.RelativeLayout;
 
+import com.android.contacts.ContactPhotoManager;
 import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.util.MaterialColorMapUtils.MaterialPalette;
 import com.android.contacts.util.SchedulingUtils;
 import com.android.contacts.widget.QuickContactImageView;
 
diff --git a/src/com/android/contacts/editor/PhotoSourceDialogFragment.java b/src/com/android/contacts/editor/PhotoSourceDialogFragment.java
index c2ed3b4..31d41b1 100644
--- a/src/com/android/contacts/editor/PhotoSourceDialogFragment.java
+++ b/src/com/android/contacts/editor/PhotoSourceDialogFragment.java
@@ -16,19 +16,19 @@
 
 package com.android.contacts.editor;
 
-import com.android.contacts.R;
-import com.android.contacts.editor.PhotoActionPopup.ChoiceListItem;
-
 import android.app.Activity;
-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 android.support.v7.app.AlertDialog;
 import android.view.View;
 import android.widget.TextView;
 
+import com.android.contacts.R;
+import com.android.contacts.editor.PhotoActionPopup.ChoiceListItem;
+
 import java.util.ArrayList;
 
 /**
diff --git a/src/com/android/contacts/editor/PickRawContactDialogFragment.java b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
index 6d6d4d6..d894371 100644
--- a/src/com/android/contacts/editor/PickRawContactDialogFragment.java
+++ b/src/com/android/contacts/editor/PickRawContactDialogFragment.java
@@ -16,21 +16,22 @@
 import android.widget.ListAdapter;
 import android.widget.TextView;
 
+import com.android.contacts.ContactPhotoManager;
 import com.android.contacts.R;
 import com.android.contacts.activities.ContactSelectionActivity;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.logging.EditorEvent;
-import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.account.GoogleAccountType;
-import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.contacts.editor.PickRawContactLoader.RawContact;
 import com.android.contacts.editor.PickRawContactLoader.RawContactsMetadata;
 import com.android.contacts.list.UiIntentActions;
+import com.android.contacts.logging.EditorEvent;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contacts.preference.ContactsPreferences;
 
 /**
  * Should only be started from an activity that implements {@link PickRawContactListener}.
@@ -114,12 +115,12 @@
 
             // Use the same string as editor if it's an editable user profile raw contact.
             if (mRawContactsMetadata.isUserProfile && account.areContactsWritable()) {
-                final AccountDisplayInfo displayInfo =
-                        mAccountDisplayInfoFactory.getAccountDisplayInfo(
+                final AccountInfo accountInfo =
+                        AccountTypeManager.getInstance(getContext()).getAccountInfoForAccount(
                                 new AccountWithDataSet(rawContact.accountName,
                                         rawContact.accountType, rawContact.accountDataSet));
                 accountDisplayLabel = EditorUiUtils.getAccountHeaderLabelForMyProfile(mContext,
-                        displayInfo);
+                        accountInfo);
             } else if (GoogleAccountType.ACCOUNT_TYPE.equals(rawContact.accountType)
                     && account.dataSet == null) {
                 // Focus Google accounts have the account name shown
diff --git a/src/com/android/contacts/editor/PickRawContactLoader.java b/src/com/android/contacts/editor/PickRawContactLoader.java
index b891cb4..e43d02b 100644
--- a/src/com/android/contacts/editor/PickRawContactLoader.java
+++ b/src/com/android/contacts/editor/PickRawContactLoader.java
@@ -13,8 +13,8 @@
 import android.provider.ContactsContract.Profile;
 import android.provider.ContactsContract.RawContacts;
 
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/src/com/android/contacts/editor/RawContactDeltaComparator.java b/src/com/android/contacts/editor/RawContactDeltaComparator.java
index 1a00c9d..8b410aa 100644
--- a/src/com/android/contacts/editor/RawContactDeltaComparator.java
+++ b/src/com/android/contacts/editor/RawContactDeltaComparator.java
@@ -16,14 +16,14 @@
 
 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 com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.GoogleAccountType;
+
 import java.util.Comparator;
 
 /**
diff --git a/src/com/android/contacts/editor/RawContactEditorView.java b/src/com/android/contacts/editor/RawContactEditorView.java
index 3c142d6..6d1f794 100644
--- a/src/com/android/contacts/editor/RawContactEditorView.java
+++ b/src/com/android/contacts/editor/RawContactEditorView.java
@@ -50,27 +50,29 @@
 import android.widget.ListPopupWindow;
 import android.widget.TextView;
 
+import com.android.contacts.GeoUtil;
 import com.android.contacts.R;
-import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.dataitem.CustomDataItem;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.AccountsListAdapter;
-import com.android.contacts.common.util.MaterialColorMapUtils;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.dataitem.CustomDataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.AccountsListAdapter;
+import com.android.contacts.util.MaterialColorMapUtils;
 import com.android.contacts.util.UiClosables;
 
 import java.io.FileNotFoundException;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.List;
@@ -196,7 +198,6 @@
     private RawContactEditorView.Listener mListener;
 
     private AccountTypeManager mAccountTypeManager;
-    private AccountDisplayInfoFactory mAccountDisplayInfoFactory;
     private LayoutInflater mLayoutInflater;
 
     private ViewIdGenerator mViewIdGenerator;
@@ -204,6 +205,7 @@
     private boolean mHasNewContact;
     private boolean mIsUserProfile;
     private AccountWithDataSet mPrimaryAccount;
+    private List<AccountInfo> mAccounts = new ArrayList<>();
     private RawContactDeltaList mRawContactDeltas;
     private RawContactDelta mCurrentRawContactDelta;
     private long mRawContactIdToDisplayAlone = -1;
@@ -248,7 +250,6 @@
         super.onFinishInflate();
 
         mAccountTypeManager = AccountTypeManager.getInstance(getContext());
-        mAccountDisplayInfoFactory = AccountDisplayInfoFactory.forWritableAccounts(getContext());
         mLayoutInflater = (LayoutInflater)
                 getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 
@@ -450,8 +451,9 @@
         mHasNewContact = hasNewContact;
         mIsUserProfile = isUserProfile;
         mPrimaryAccount = primaryAccount;
-        if (mPrimaryAccount == null) {
-            mPrimaryAccount = ContactEditorUtils.create(getContext()).getOnlyOrDefaultAccount();
+        if (mPrimaryAccount == null && mAccounts != null) {
+            mPrimaryAccount = ContactEditorUtils.create(getContext())
+                    .getOnlyOrDefaultAccount(AccountInfo.extractAccounts(mAccounts));
         }
         vlog("state: primary " + mPrimaryAccount);
 
@@ -499,6 +501,13 @@
         if (mListener != null) mListener.onEditorsBound();
     }
 
+    public void setAccounts(List<AccountInfo> accounts) {
+        mAccounts.clear();
+        mAccounts.addAll(accounts);
+        // Update the account header
+        setAccountInfo();
+    }
+
     private void setupEditorNormally() {
         addKindSectionViews();
 
@@ -619,7 +628,7 @@
         primary = mCurrentRawContactDelta.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
         final String name = primary != null ? primary.getAsString(StructuredName.DISPLAY_NAME) :
             getContext().getString(R.string.missing_name);
-        final Drawable nameDrawable = context.getDrawable(R.drawable.ic_person_24dp);
+        final Drawable nameDrawable = context.getDrawable(R.drawable.quantum_ic_person_vd_theme_24);
         final String nameContentDescription = res.getString(R.string.header_name_entry);
         bindData(nameDrawable, nameContentDescription, name, /* type */ null,
                 /* isFirstEntry */ true);
@@ -627,7 +636,7 @@
         // Phones
         final ArrayList<ValuesDelta> phones = mCurrentRawContactDelta
                 .getMimeEntries(Phone.CONTENT_ITEM_TYPE);
-        final Drawable phoneDrawable = context.getDrawable(R.drawable.ic_phone_24dp);
+        final Drawable phoneDrawable = context.getDrawable(R.drawable.quantum_ic_phone_vd_theme_24);
         final String phoneContentDescription = res.getString(R.string.header_phone_entry);
         if (phones != null) {
             boolean isFirstPhoneBound = true;
@@ -653,7 +662,7 @@
         // Emails
         final ArrayList<ValuesDelta> emails = mCurrentRawContactDelta
                 .getMimeEntries(Email.CONTENT_ITEM_TYPE);
-        final Drawable emailDrawable = context.getDrawable(R.drawable.ic_email_24dp);
+        final Drawable emailDrawable = context.getDrawable(R.drawable.quantum_ic_email_vd_theme_24);
         final String emailContentDescription = res.getString(R.string.header_email_entry);
         if (emails != null) {
             boolean isFirstEmailBound = true;
@@ -711,8 +720,19 @@
     }
 
     private void setAccountInfo() {
-        final AccountDisplayInfo account =
-                mAccountDisplayInfoFactory.getAccountDisplayInfoFor(mCurrentRawContactDelta);
+        if (mCurrentRawContactDelta == null && mPrimaryAccount == null) {
+            return;
+        }
+        final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(getContext());
+        final AccountInfo account = mCurrentRawContactDelta != null
+                ? accountTypeManager.getAccountInfoForAccount(
+                mCurrentRawContactDelta.getAccountWithDataSet())
+                : accountTypeManager.getAccountInfoForAccount(mPrimaryAccount);
+
+        // Accounts haven't loaded yet or we are editing.
+        if (mAccounts.isEmpty()) {
+            mAccounts.add(account);
+        }
 
         // Get the account information for the primary raw contact delta
         if (isReadOnlyRawContact()) {
@@ -729,9 +749,7 @@
         }
 
         // If we're saving a new contact and there are multiple accounts, add the account selector.
-        final List<AccountWithDataSet> accounts =
-                AccountTypeManager.getInstance(getContext()).getAccounts(true);
-        if (mHasNewContact && !mIsUserProfile && accounts.size() > 1) {
+        if (mHasNewContact && !mIsUserProfile && mAccounts.size() > 1) {
             addAccountSelector(mCurrentRawContactDelta);
         }
     }
@@ -756,11 +774,11 @@
         final OnClickListener clickListener = new OnClickListener() {
             @Override
             public void onClick(View v) {
+                final AccountWithDataSet current = rawContactDelta.getAccountWithDataSet();
+                AccountInfo.sortAccounts(current, mAccounts);
                 final ListPopupWindow popup = new ListPopupWindow(getContext(), null);
                 final AccountsListAdapter adapter =
-                        new AccountsListAdapter(getContext(),
-                                AccountsListAdapter.AccountListFilter.ACCOUNTS_CONTACT_WRITABLE,
-                                mPrimaryAccount);
+                        new AccountsListAdapter(getContext(), mAccounts, current);
                 popup.setWidth(mAccountHeaderContainer.getWidth());
                 popup.setAnchorView(mAccountHeaderContainer);
                 popup.setAdapter(adapter);
diff --git a/src/com/android/contacts/editor/SelectAccountDialogFragment.java b/src/com/android/contacts/editor/SelectAccountDialogFragment.java
index 4335239..fe3d9d6 100644
--- a/src/com/android/contacts/editor/SelectAccountDialogFragment.java
+++ b/src/com/android/contacts/editor/SelectAccountDialogFragment.java
@@ -26,10 +26,10 @@
 import android.view.View;
 import android.widget.TextView;
 
-import com.android.contacts.common.R;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.AccountsListAdapter;
-import com.android.contacts.common.util.AccountsListAdapter.AccountListFilter;
+import com.android.contacts.R;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.AccountsListAdapter;
+import com.android.contacts.util.AccountsListAdapter.AccountListFilter;
 
 /**
  * Shows a dialog asking the user which account to chose.
diff --git a/src/com/android/contacts/editor/StructuredNameEditorView.java b/src/com/android/contacts/editor/StructuredNameEditorView.java
index 5aca809..0ede939 100644
--- a/src/com/android/contacts/editor/StructuredNameEditorView.java
+++ b/src/com/android/contacts/editor/StructuredNameEditorView.java
@@ -24,12 +24,12 @@
 import android.util.AttributeSet;
 
 import com.android.contacts.R;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.dataitem.StructuredNameDataItem;
-import com.android.contacts.common.util.NameConverter;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.model.dataitem.StructuredNameDataItem;
+import com.android.contacts.util.NameConverter;
 
 /**
  * A dedicated editor for structured name.
diff --git a/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java b/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
index f94d5dc..487a5ee 100644
--- a/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
+++ b/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
@@ -16,12 +16,12 @@
 
 package com.android.contacts.editor;
 
-import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.DialogFragment;
 import android.content.DialogInterface;
 import android.net.Uri;
 import android.os.Bundle;
+import android.support.v7.app.AlertDialog;
 
 import com.android.contacts.R;
 
diff --git a/src/com/android/contacts/editor/TextFieldsEditorView.java b/src/com/android/contacts/editor/TextFieldsEditorView.java
index 6fd03bf..c3a240a 100644
--- a/src/com/android/contacts/editor/TextFieldsEditorView.java
+++ b/src/com/android/contacts/editor/TextFieldsEditorView.java
@@ -39,14 +39,14 @@
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 
+import com.android.contacts.ContactsUtils;
 import com.android.contacts.R;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.account.AccountType.EditField;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.util.PhoneNumberFormatter;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType.EditField;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.PhoneNumberFormatter;
 
 /**
  * Simple editor that handles labels and any {@link EditField} defined for the
@@ -182,8 +182,8 @@
      */
     private void setupExpansionView(boolean shouldExist, boolean collapsed) {
         final Drawable expandIcon = getContext().getDrawable(collapsed
-                ? R.drawable.ic_menu_expand_minimized_24dp
-                : R.drawable.ic_menu_expand_maximized_24dp);
+                ? R.drawable.quantum_ic_expand_more_vd_theme_24
+                : R.drawable.quantum_ic_expand_less_vd_theme_24);
         mExpansionView.setImageDrawable(expandIcon);
         mExpansionView.setContentDescription(collapsed ? mExpandButtonDescription
                 : mCollapseButtonDescription);
diff --git a/src/com/android/contacts/editor/ViewIdGenerator.java b/src/com/android/contacts/editor/ViewIdGenerator.java
index ad99bf8..c4ba31c 100644
--- a/src/com/android/contacts/editor/ViewIdGenerator.java
+++ b/src/com/android/contacts/editor/ViewIdGenerator.java
@@ -20,9 +20,9 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
-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.model.RawContactDelta;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.dataitem.DataKind;
 
 /**
  * A class that provides unique view ids for {@link ContentEditorView},
diff --git a/src/com/android/contacts/extensions/ExtendedPhoneDirectoriesManager.java b/src/com/android/contacts/extensions/ExtendedPhoneDirectoriesManager.java
new file mode 100644
index 0000000..2ee0eae
--- /dev/null
+++ b/src/com/android/contacts/extensions/ExtendedPhoneDirectoriesManager.java
@@ -0,0 +1,26 @@
+// Copyright 2013 Google Inc. All Rights Reserved.
+
+package com.android.contacts.extensions;
+
+import android.content.Context;
+
+import com.android.contacts.list.DirectoryPartition;
+
+import java.util.List;
+
+/**
+ * An interface for adding extended phone directories to
+ * {@link com.android.contacts.list.PhoneNumberListAdapter}.
+ * An app that wishes to add custom phone directories should implement this class and advertise it
+ * in assets/contacts_extensions.properties. {@link ExtensionsFactory} will load the implementation
+ * and the extended directories will be added by
+ * {@link com.android.contacts.list.PhoneNumberListAdapter}.
+ */
+public interface ExtendedPhoneDirectoriesManager {
+
+    /**
+     * Return a list of extended directories to add. May return null if no directories are to be
+     * added.
+     */
+    List<DirectoryPartition> getExtendedDirectories(Context context);
+}
diff --git a/src/com/android/contacts/extensions/ExtensionsFactory.java b/src/com/android/contacts/extensions/ExtensionsFactory.java
new file mode 100644
index 0000000..33f9510
--- /dev/null
+++ b/src/com/android/contacts/extensions/ExtensionsFactory.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2013 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.extensions;
+
+import android.content.Context;
+import android.util.Log;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+
+/*
+ * A framework for adding extensions to Dialer. This class reads a property file from
+ * assets/contacts_extensions.properties and loads extension classes that an app has defined. If
+ * an extension class was not defined, null is returned.
+ */
+public class ExtensionsFactory {
+
+    private static String TAG = "ExtensionsFactory";
+
+    // Config filename for mappings of various class names to their custom
+    // implementations.
+    private static final String EXTENSIONS_PROPERTIES = "contacts_extensions.properties";
+
+    private static final String EXTENDED_PHONE_DIRECTORIES_KEY = "extendedPhoneDirectories";
+
+    private static Properties sProperties = null;
+    private static ExtendedPhoneDirectoriesManager mExtendedPhoneDirectoriesManager = null;
+
+    public static void init(Context context) {
+        if (sProperties != null) {
+            return;
+        }
+        try {
+            final InputStream fileStream = context.getAssets().open(EXTENSIONS_PROPERTIES);
+            sProperties = new Properties();
+            sProperties.load(fileStream);
+            fileStream.close();
+
+            final String className = sProperties.getProperty(EXTENDED_PHONE_DIRECTORIES_KEY);
+            if (className != null) {
+                mExtendedPhoneDirectoriesManager = createInstance(className);
+            } else {
+                Log.d(TAG, EXTENDED_PHONE_DIRECTORIES_KEY + " not found in properties file.");
+            }
+
+        } catch (FileNotFoundException e) {
+            // No custom extensions. Ignore.
+            Log.d(TAG, "No custom extensions.");
+        } catch (IOException e) {
+            Log.d(TAG, e.toString());
+        }
+    }
+
+    private static <T> T createInstance(String className) {
+        try {
+            Class<?> c = Class.forName(className);
+            //noinspection unchecked
+            return (T) c.newInstance();
+        } catch (ClassNotFoundException e) {
+            Log.e(TAG, className + ": unable to create instance.", e);
+        } catch (IllegalAccessException e) {
+            Log.e(TAG, className + ": unable to create instance.", e);
+        } catch (InstantiationException e) {
+            Log.e(TAG, className + ": unable to create instance.", e);
+        }
+        return null;
+    }
+
+    public static ExtendedPhoneDirectoriesManager getExtendedPhoneDirectoriesManager() {
+        return mExtendedPhoneDirectoriesManager;
+    }
+}
diff --git a/src/com/android/contacts/format/FormatUtils.java b/src/com/android/contacts/format/FormatUtils.java
new file mode 100644
index 0000000..c82e0d7
--- /dev/null
+++ b/src/com/android/contacts/format/FormatUtils.java
@@ -0,0 +1,184 @@
+/*
+ * 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.format;
+
+import android.database.CharArrayBuffer;
+import android.graphics.Typeface;
+import android.text.SpannableString;
+import android.text.style.StyleSpan;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import java.util.Arrays;
+
+/**
+ * Assorted utility methods related to text formatting in Contacts.
+ */
+public class FormatUtils {
+
+    /**
+     * Finds the earliest point in buffer1 at which the first part of buffer2 matches.  For example,
+     * overlapPoint("abcd", "cdef") == 2.
+     */
+    public static int overlapPoint(CharArrayBuffer buffer1, CharArrayBuffer buffer2) {
+        if (buffer1 == null || buffer2 == null) {
+            return -1;
+        }
+        return overlapPoint(Arrays.copyOfRange(buffer1.data, 0, buffer1.sizeCopied),
+                Arrays.copyOfRange(buffer2.data, 0, buffer2.sizeCopied));
+    }
+
+    /**
+     * Finds the earliest point in string1 at which the first part of string2 matches.  For example,
+     * overlapPoint("abcd", "cdef") == 2.
+     */
+    @VisibleForTesting
+    public static int overlapPoint(String string1, String string2) {
+        if (string1 == null || string2 == null) {
+            return -1;
+        }
+        return overlapPoint(string1.toCharArray(), string2.toCharArray());
+    }
+
+    /**
+     * Finds the earliest point in array1 at which the first part of array2 matches.  For example,
+     * overlapPoint("abcd", "cdef") == 2.
+     */
+    public static int overlapPoint(char[] array1, char[] array2) {
+        if (array1 == null || array2 == null) {
+            return -1;
+        }
+        int count1 = array1.length;
+        int count2 = array2.length;
+
+        // Ignore matching tails of the two arrays.
+        while (count1 > 0 && count2 > 0 && array1[count1 - 1] == array2[count2 - 1]) {
+            count1--;
+            count2--;
+        }
+
+        int size = count2;
+        for (int i = 0; i < count1; i++) {
+            if (i + size > count1) {
+                size = count1 - i;
+            }
+            int j;
+            for (j = 0; j < size; j++) {
+                if (array1[i+j] != array2[j]) {
+                    break;
+                }
+            }
+            if (j == size) {
+                return i;
+            }
+        }
+
+        return -1;
+    }
+
+    /**
+     * Applies the given style to a range of the input CharSequence.
+     * @param style The style to apply (see the style constants in {@link Typeface}).
+     * @param input The CharSequence to style.
+     * @param start Starting index of the range to style (will be clamped to be a minimum of 0).
+     * @param end Ending index of the range to style (will be clamped to a maximum of the input
+     *     length).
+     * @param flags Bitmask for configuring behavior of the span.  See {@link android.text.Spanned}.
+     * @return The styled CharSequence.
+     */
+    public static CharSequence applyStyleToSpan(int style, CharSequence input, int start, int end,
+            int flags) {
+        // Enforce bounds of the char sequence.
+        start = Math.max(0, start);
+        end = Math.min(input.length(), end);
+        SpannableString text = new SpannableString(input);
+        text.setSpan(new StyleSpan(style), start, end, flags);
+        return text;
+    }
+
+    @VisibleForTesting
+    public static void copyToCharArrayBuffer(String text, CharArrayBuffer buffer) {
+        if (text != null) {
+            char[] data = buffer.data;
+            if (data == null || data.length < text.length()) {
+                buffer.data = text.toCharArray();
+            } else {
+                text.getChars(0, text.length(), data, 0);
+            }
+            buffer.sizeCopied = text.length();
+        } else {
+            buffer.sizeCopied = 0;
+        }
+    }
+
+    /** Returns a String that represents the content of the given {@link CharArrayBuffer}. */
+    @VisibleForTesting
+    public static String charArrayBufferToString(CharArrayBuffer buffer) {
+        return new String(buffer.data, 0, buffer.sizeCopied);
+    }
+
+    /**
+     * Finds the index of the first word that starts with the given prefix.
+     * <p>
+     * If not found, returns -1.
+     *
+     * @param text the text in which to search for the prefix
+     * @param prefix the text to find, in upper case letters
+     */
+    public static int indexOfWordPrefix(CharSequence text, String prefix) {
+        if (prefix == null || text == null) {
+            return -1;
+        }
+
+        int textLength = text.length();
+        int prefixLength = prefix.length();
+
+        if (prefixLength == 0 || textLength < prefixLength) {
+            return -1;
+        }
+
+        int i = 0;
+        while (i < textLength) {
+            // Skip non-word characters
+            while (i < textLength && !Character.isLetterOrDigit(text.charAt(i))) {
+                i++;
+            }
+
+            if (i + prefixLength > textLength) {
+                return -1;
+            }
+
+            // Compare the prefixes
+            int j;
+            for (j = 0; j < prefixLength; j++) {
+                if (Character.toUpperCase(text.charAt(i + j)) != prefix.charAt(j)) {
+                    break;
+                }
+            }
+            if (j == prefixLength) {
+                return i;
+            }
+
+            // Skip this word
+            while (i < textLength && Character.isLetterOrDigit(text.charAt(i))) {
+                i++;
+            }
+        }
+
+        return -1;
+    }
+
+}
diff --git a/src/com/android/contacts/format/TextHighlighter.java b/src/com/android/contacts/format/TextHighlighter.java
new file mode 100644
index 0000000..38c5c2d
--- /dev/null
+++ b/src/com/android/contacts/format/TextHighlighter.java
@@ -0,0 +1,94 @@
+/*
+ * 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.format;
+
+import android.text.SpannableString;
+import android.text.style.CharacterStyle;
+import android.text.style.StyleSpan;
+import android.widget.TextView;
+
+/**
+ * Highlights the text in a text field.
+ */
+public class TextHighlighter {
+    private final String TAG = TextHighlighter.class.getSimpleName();
+    private final static boolean DEBUG = false;
+
+    private int mTextStyle;
+
+    private CharacterStyle mTextStyleSpan;
+
+    public TextHighlighter(int textStyle) {
+        mTextStyle = textStyle;
+        mTextStyleSpan = getStyleSpan();
+    }
+
+    /**
+     * Sets the text on the given text view, highlighting the word that matches the given prefix.
+     *
+     * @param view the view on which to set the text
+     * @param text the string to use as the text
+     * @param prefix the prefix to look for
+     */
+    public void setPrefixText(TextView view, String text, String prefix) {
+        view.setText(applyPrefixHighlight(text, prefix));
+    }
+
+    private CharacterStyle getStyleSpan() {
+        return new StyleSpan(mTextStyle);
+    }
+
+    /**
+     * Applies highlight span to the text.
+     * @param text Text sequence to be highlighted.
+     * @param start Start position of the highlight sequence.
+     * @param end End position of the highlight sequence.
+     */
+    public void applyMaskingHighlight(SpannableString text, int start, int end) {
+        /** Sets text color of the masked locations to be highlighted. */
+        text.setSpan(getStyleSpan(), start, end, 0);
+    }
+
+    /**
+     * Returns a CharSequence which highlights the given prefix if found in the given text.
+     *
+     * @param text the text to which to apply the highlight
+     * @param prefix the prefix to look for
+     */
+    public CharSequence applyPrefixHighlight(CharSequence text, String prefix) {
+        if (prefix == null) {
+            return text;
+        }
+
+        // Skip non-word characters at the beginning of prefix.
+        int prefixStart = 0;
+        while (prefixStart < prefix.length() &&
+                !Character.isLetterOrDigit(prefix.charAt(prefixStart))) {
+            prefixStart++;
+        }
+        final String trimmedPrefix = prefix.substring(prefixStart);
+
+        int index = FormatUtils.indexOfWordPrefix(text, trimmedPrefix);
+        if (index != -1) {
+            final SpannableString result = new SpannableString(text);
+            result.setSpan(mTextStyleSpan, index, index + trimmedPrefix.length(), 0 /* flags */);
+            return result;
+        } else {
+            return text;
+        }
+    }
+}
diff --git a/src/com/android/contacts/group/GroupMembersAdapter.java b/src/com/android/contacts/group/GroupMembersAdapter.java
index c501984..78dae65 100644
--- a/src/com/android/contacts/group/GroupMembersAdapter.java
+++ b/src/com/android/contacts/group/GroupMembersAdapter.java
@@ -27,11 +27,10 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.R;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.MultiSelectEntryContactListAdapter;
-import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.R;
+import com.android.contacts.list.ContactListItemView;
+import com.android.contacts.list.MultiSelectEntryContactListAdapter;
+import com.android.contacts.preference.ContactsPreferences;
 
 /** Group members cursor adapter. */
 public class GroupMembersAdapter extends MultiSelectEntryContactListAdapter {
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index 44bda74..5ca1e9b 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -18,17 +18,21 @@
 import android.app.Activity;
 import android.app.LoaderManager.LoaderCallbacks;
 import android.content.ContentResolver;
+import android.content.Context;
 import android.content.CursorLoader;
 import android.content.Intent;
 import android.content.Loader;
 import android.database.Cursor;
 import android.database.CursorWrapper;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Contacts;
+import android.support.v4.content.ContextCompat;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Gravity;
@@ -46,23 +50,23 @@
 
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.ContactsDrawerActivity;
+import com.android.contacts.ContactsUtils;
 import com.android.contacts.GroupMetaDataLoader;
 import com.android.contacts.R;
 import com.android.contacts.activities.ActionBarAdapter;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.list.ContactsSectionIndexer;
-import com.android.contacts.common.list.MultiSelectEntryContactListAdapter.DeleteContactListener;
-import com.android.contacts.common.logging.ListEvent;
-import com.android.contacts.common.logging.ListEvent.ListType;
-import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.logging.ScreenEvent;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
 import com.android.contacts.group.GroupMembersAdapter.GroupMembersQuery;
 import com.android.contacts.interactions.GroupDeletionDialogFragment;
 import com.android.contacts.list.ContactsRequest;
+import com.android.contacts.list.ContactsSectionIndexer;
 import com.android.contacts.list.MultiSelectContactsListFragment;
+import com.android.contacts.list.MultiSelectEntryContactListAdapter.DeleteContactListener;
 import com.android.contacts.list.UiIntentActions;
+import com.android.contacts.logging.ListEvent;
+import com.android.contacts.logging.ListEvent.ListType;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.logging.ScreenEvent;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.ImplicitIntentsUtil;
 import com.android.contactsbind.FeedbackHelper;
 import com.google.common.primitives.Longs;
 
@@ -266,25 +270,33 @@
         final boolean isGroupEditable = mGroupMetaData != null && mGroupMetaData.editable;
         final boolean isGroupReadOnly = mGroupMetaData != null && mGroupMetaData.readOnly;
 
-        setVisible(menu, R.id.menu_multi_send_email, !mIsEditMode && !isGroupEmpty());
-        setVisible(menu, R.id.menu_multi_send_message, !mIsEditMode && !isGroupEmpty());
-        setVisible(menu, R.id.menu_add, isGroupEditable && !isSelectionMode);
-        setVisible(menu, R.id.menu_rename_group, !isGroupReadOnly && !isSelectionMode);
-        setVisible(menu, R.id.menu_delete_group, !isGroupReadOnly && !isSelectionMode);
-        setVisible(menu, R.id.menu_edit_group, isGroupEditable && !mIsEditMode && !isSelectionMode
-                && !isGroupEmpty());
-        setVisible(menu, R.id.menu_remove_from_group, isGroupEditable && isSelectionMode &&
-                !mIsEditMode);
+        setVisible(getContext(), menu, R.id.menu_multi_send_email, !mIsEditMode && !isGroupEmpty());
+        setVisible(getContext(), menu, R.id.menu_multi_send_message,
+                !mIsEditMode && !isGroupEmpty());
+        setVisible(getContext(), menu, R.id.menu_add, isGroupEditable && !isSelectionMode);
+        setVisible(getContext(), menu, R.id.menu_rename_group,
+                !isGroupReadOnly && !isSelectionMode);
+        setVisible(getContext(), menu, R.id.menu_delete_group,
+                !isGroupReadOnly && !isSelectionMode);
+        setVisible(getContext(), menu, R.id.menu_edit_group,
+                isGroupEditable && !mIsEditMode && !isSelectionMode && !isGroupEmpty());
+        setVisible(getContext(), menu, R.id.menu_remove_from_group,
+                isGroupEditable && isSelectionMode && !mIsEditMode);
     }
 
     private boolean isGroupEmpty() {
         return getAdapter() != null && getAdapter().isEmpty();
     }
 
-    private static void setVisible(Menu menu, int id, boolean visible) {
+    private static void setVisible(Context context, Menu menu, int id, boolean visible) {
         final MenuItem menuItem = menu.findItem(id);
         if (menuItem != null) {
             menuItem.setVisible(visible);
+            final Drawable icon = menuItem.getIcon();
+            if (icon != null) {
+                icon.mutate().setColorFilter(ContextCompat.getColor(context,
+                        R.color.actionbar_icon_color), PorterDuff.Mode.SRC_ATOP);
+            }
         }
     }
 
@@ -449,57 +461,43 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home: {
-                mActivity.onBackPressed();
-                return true;
-            }
-            case R.id.menu_add: {
-                startGroupAddMemberActivity();
-                return true;
-            }
-            case R.id.menu_multi_send_email: {
-                final long[] ids = mActionBarAdapter.isSelectionMode()
-                        ? getAdapter().getSelectedContactIdsArray()
-                        : GroupUtil.convertStringSetToLongArray(mGroupMemberContactIds);
-                sendToGroup(ids, ContactsUtils.SCHEME_MAILTO,
-                        getString(R.string.menu_sendEmailOption));
-                return true;
-            }
-            case R.id.menu_multi_send_message: {
-                final long[] ids = mActionBarAdapter.isSelectionMode()
-                        ? getAdapter().getSelectedContactIdsArray()
-                        : GroupUtil.convertStringSetToLongArray(mGroupMemberContactIds);
-                sendToGroup(ids, ContactsUtils.SCHEME_SMSTO,
-                        getString(R.string.menu_sendMessageOption));
-                return true;
-            }
-            case R.id.menu_rename_group: {
-                GroupNameEditDialogFragment.newInstanceForUpdate(
-                        new AccountWithDataSet(mGroupMetaData.accountName,
-                                mGroupMetaData.accountType, mGroupMetaData.dataSet),
-                        GroupUtil.ACTION_UPDATE_GROUP, mGroupMetaData.groupId,
-                        mGroupMetaData.groupName).show(getFragmentManager(),
-                        TAG_GROUP_NAME_EDIT_DIALOG);
-                return true;
-            }
-            case R.id.menu_delete_group: {
-                deleteGroup();
-                return true;
-            }
-            case R.id.menu_edit_group: {
-                mIsEditMode = true;
-                mActionBarAdapter.setSelectionMode(true);
-                displayDeleteButtons(true);
-                return true;
-            }
-            case R.id.menu_remove_from_group: {
-                logListEvent();
-                removeSelectedContacts();
-                return true;
-            }
+        final int id = item.getItemId();
+        if (id == android.R.id.home) {
+            mActivity.onBackPressed();
+        } else if (id == R.id.menu_add) {
+            startGroupAddMemberActivity();
+        } else if (id == R.id.menu_multi_send_email) {
+            final long[] ids = mActionBarAdapter.isSelectionMode()
+                    ? getAdapter().getSelectedContactIdsArray()
+                    : GroupUtil.convertStringSetToLongArray(mGroupMemberContactIds);
+            sendToGroup(ids, ContactsUtils.SCHEME_MAILTO,
+                    getString(R.string.menu_sendEmailOption));
+        } else if (id == R.id.menu_multi_send_message) {
+            final long[] ids = mActionBarAdapter.isSelectionMode()
+                    ? getAdapter().getSelectedContactIdsArray()
+                    : GroupUtil.convertStringSetToLongArray(mGroupMemberContactIds);
+            sendToGroup(ids, ContactsUtils.SCHEME_SMSTO,
+                    getString(R.string.menu_sendMessageOption));
+        } else if (id == R.id.menu_rename_group) {
+            GroupNameEditDialogFragment.newInstanceForUpdate(
+                    new AccountWithDataSet(mGroupMetaData.accountName,
+                            mGroupMetaData.accountType, mGroupMetaData.dataSet),
+                    GroupUtil.ACTION_UPDATE_GROUP, mGroupMetaData.groupId,
+                    mGroupMetaData.groupName).show(getFragmentManager(),
+                    TAG_GROUP_NAME_EDIT_DIALOG);
+        } else if (id == R.id.menu_delete_group) {
+            deleteGroup();
+        } else if (id == R.id.menu_edit_group) {
+            mIsEditMode = true;
+            mActionBarAdapter.setSelectionMode(true);
+            displayDeleteButtons(true);
+        } else if (id == R.id.menu_remove_from_group) {
+            logListEvent();
+            removeSelectedContacts();
+        } else {
+            return super.onOptionsItemSelected(item);
         }
-        return super.onOptionsItemSelected(item);
+        return true;
     }
 
     private void removeSelectedContacts() {
diff --git a/src/com/android/contacts/group/GroupMetaData.java b/src/com/android/contacts/group/GroupMetaData.java
index d9c0c27..4a8cb0f 100644
--- a/src/com/android/contacts/group/GroupMetaData.java
+++ b/src/com/android/contacts/group/GroupMetaData.java
@@ -25,8 +25,8 @@
 import android.text.TextUtils;
 
 import com.android.contacts.GroupMetaDataLoader;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
 
 import com.google.common.base.MoreObjects;
 
diff --git a/src/com/android/contacts/group/GroupNameEditDialogFragment.java b/src/com/android/contacts/group/GroupNameEditDialogFragment.java
index da76c68..80d184b 100644
--- a/src/com/android/contacts/group/GroupNameEditDialogFragment.java
+++ b/src/com/android/contacts/group/GroupNameEditDialogFragment.java
@@ -41,7 +41,8 @@
 
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.R;
-import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.AccountWithDataSet;
+
 import com.google.common.base.Strings;
 
 import java.util.Collections;
diff --git a/src/com/android/contacts/group/GroupUtil.java b/src/com/android/contacts/group/GroupUtil.java
index 3b79546..a4a02a6 100644
--- a/src/com/android/contacts/group/GroupUtil.java
+++ b/src/com/android/contacts/group/GroupUtil.java
@@ -28,12 +28,12 @@
 import android.provider.ContactsContract.Groups;
 import android.text.TextUtils;
 
+import com.android.contacts.ContactsUtils;
 import com.android.contacts.GroupListLoader;
 import com.android.contacts.activities.ContactSelectionActivity;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.list.ContactsSectionIndexer;
-import com.android.contacts.common.model.account.GoogleAccountType;
+import com.android.contacts.list.ContactsSectionIndexer;
 import com.android.contacts.list.UiIntentActions;
+import com.android.contacts.model.account.GoogleAccountType;
 
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/src/com/android/contacts/interactions/AccountFiltersFragment.java b/src/com/android/contacts/interactions/AccountFiltersFragment.java
index 8d92327..e1d882e 100644
--- a/src/com/android/contacts/interactions/AccountFiltersFragment.java
+++ b/src/com/android/contacts/interactions/AccountFiltersFragment.java
@@ -21,8 +21,8 @@
 import android.content.Loader;
 import android.os.Bundle;
 
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.util.AccountFilterUtil;
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.util.AccountFilterUtil;
 
 import java.util.List;
 
diff --git a/src/com/android/contacts/interactions/CalendarInteraction.java b/src/com/android/contacts/interactions/CalendarInteraction.java
index e249e4f..9b7ab31 100644
--- a/src/com/android/contacts/interactions/CalendarInteraction.java
+++ b/src/com/android/contacts/interactions/CalendarInteraction.java
@@ -1,20 +1,17 @@
 package com.android.contacts.interactions;
 
-import com.android.contacts.R;
-
-import android.content.ContentValues;
 import android.content.ContentUris;
+import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
-import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
-import android.net.Uri;
 import android.provider.CalendarContract.Attendees;
 import android.provider.CalendarContract.Events;
 import android.text.Spannable;
 import android.text.TextUtils;
 import android.text.format.Time;
-import android.util.Log;
+
+import com.android.contacts.R;
 
 /**
  * Represents a calendar event interaction, wrapping the columns in
@@ -23,7 +20,7 @@
 public class CalendarInteraction implements ContactInteraction {
     private static final String TAG = CalendarInteraction.class.getSimpleName();
 
-    private static final int CALENDAR_ICON_RES = R.drawable.ic_event_24dp;
+    private static final int CALENDAR_ICON_RES = R.drawable.quantum_ic_event_vd_theme_24;
 
     private ContentValues mValues;
 
diff --git a/src/com/android/contacts/interactions/CalendarInteractionUtils.java b/src/com/android/contacts/interactions/CalendarInteractionUtils.java
index c7943f0..36a5621 100644
--- a/src/com/android/contacts/interactions/CalendarInteractionUtils.java
+++ b/src/com/android/contacts/interactions/CalendarInteractionUtils.java
@@ -1,13 +1,13 @@
 package com.android.contacts.interactions;
 
-import com.android.contacts.R;
-
 import android.content.Context;
 import android.content.res.Resources;
 import android.text.format.DateFormat;
 import android.text.format.DateUtils;
 import android.text.format.Time;
 
+import com.android.contacts.R;
+
 import java.util.Formatter;
 import java.util.Locale;
 
diff --git a/src/com/android/contacts/interactions/CalendarInteractionsLoader.java b/src/com/android/contacts/interactions/CalendarInteractionsLoader.java
index 4813866..bc102e5 100644
--- a/src/com/android/contacts/interactions/CalendarInteractionsLoader.java
+++ b/src/com/android/contacts/interactions/CalendarInteractionsLoader.java
@@ -1,16 +1,5 @@
 package com.android.contacts.interactions;
 
-import com.google.common.base.Preconditions;
-
-import com.android.contacts.common.util.PermissionsUtil;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
 import android.Manifest.permission;
 import android.content.AsyncTaskLoader;
 import android.content.ContentValues;
@@ -21,6 +10,17 @@
 import android.provider.CalendarContract.Calendars;
 import android.util.Log;
 
+import com.android.contacts.util.PermissionsUtil;
+
+import com.google.common.base.Preconditions;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 
 /**
  * Loads a list of calendar interactions showing shared calendar events with everyone passed in
diff --git a/src/com/android/contacts/interactions/CallLogInteraction.java b/src/com/android/contacts/interactions/CallLogInteraction.java
index e207b29..8890478 100644
--- a/src/com/android/contacts/interactions/CallLogInteraction.java
+++ b/src/com/android/contacts/interactions/CallLogInteraction.java
@@ -15,12 +15,6 @@
  */
 package com.android.contacts.interactions;
 
-import com.android.contacts.R;
-import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.util.BitmapUtil;
-import com.android.contacts.common.util.ContactDisplayUtils;
-
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
@@ -34,6 +28,12 @@
 import android.text.Spannable;
 import android.text.TextDirectionHeuristics;
 
+import com.android.contacts.GeoUtil;
+import com.android.contacts.R;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.util.BitmapUtil;
+import com.android.contacts.util.ContactDisplayUtils;
+
 /**
  * Represents a call log event interaction, wrapping the columns in
  * {@link android.provider.CallLog.Calls}.
@@ -49,7 +49,7 @@
 public class CallLogInteraction implements ContactInteraction {
 
     private static final String URI_TARGET_PREFIX = "tel:";
-    private static final int CALL_LOG_ICON_RES = R.drawable.ic_phone_24dp;
+    private static final int CALL_LOG_ICON_RES = R.drawable.quantum_ic_phone_vd_theme_24;
     private static final int CALL_ARROW_ICON_RES = R.drawable.ic_call_arrow;
     private static BidiFormatter sBidiFormatter = BidiFormatter.getInstance();
 
diff --git a/src/com/android/contacts/interactions/CallLogInteractionsLoader.java b/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
index 020d581..8813ecc 100644
--- a/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
+++ b/src/com/android/contacts/interactions/CallLogInteractionsLoader.java
@@ -26,10 +26,10 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.google.common.annotations.VisibleForTesting;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.util.PermissionsUtil;
 
-import com.android.contacts.common.compat.PhoneNumberUtilsCompat;
-import com.android.contacts.common.util.PermissionsUtil;
+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 9b3d0f8..161571c 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -38,10 +38,11 @@
 
 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 com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.common.util.ContactDisplayUtils;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.ContactDisplayUtils;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Sets;
 
diff --git a/src/com/android/contacts/interactions/ContactInteraction.java b/src/com/android/contacts/interactions/ContactInteraction.java
index bf00132..6bca0af 100644
--- a/src/com/android/contacts/interactions/ContactInteraction.java
+++ b/src/com/android/contacts/interactions/ContactInteraction.java
@@ -18,7 +18,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
-import android.net.Uri;
 import android.text.Spannable;
 
 /**
diff --git a/src/com/android/contacts/interactions/ContactInteractionUtil.java b/src/com/android/contacts/interactions/ContactInteractionUtil.java
index 8de55da..e7a7a6d 100644
--- a/src/com/android/contacts/interactions/ContactInteractionUtil.java
+++ b/src/com/android/contacts/interactions/ContactInteractionUtil.java
@@ -15,17 +15,16 @@
  */
 package com.android.contacts.interactions;
 
-import com.google.common.base.Preconditions;
-
 import android.content.Context;
 import android.text.format.DateUtils;
 
-import java.text.DateFormat;
-
-import java.util.Calendar;
-
 import com.android.contacts.R;
 
+import com.google.common.base.Preconditions;
+
+import java.text.DateFormat;
+import java.util.Calendar;
+
 /**
  * Utility methods for interactions and their loaders
  */
diff --git a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
index a649f2b..695e9f6 100644
--- a/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactMultiDeletionInteraction.java
@@ -16,15 +16,6 @@
 
 package com.android.contacts.interactions;
 
-import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.common.util.ContactDisplayUtils;
-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;
@@ -41,6 +32,15 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.ContactDisplayUtils;
+
+import com.google.common.collect.Sets;
+
 import java.util.HashSet;
 import java.util.TreeSet;
 
diff --git a/src/com/android/contacts/interactions/ExportDialogFragment.java b/src/com/android/contacts/interactions/ExportDialogFragment.java
new file mode 100644
index 0000000..c7ce072
--- /dev/null
+++ b/src/com/android/contacts/interactions/ExportDialogFragment.java
@@ -0,0 +1,234 @@
+/*
+ * 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.interactions;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract.Contacts;
+import android.telephony.SubscriptionManager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.vcard.ExportVCardActivity;
+import com.android.contacts.vcard.ShareVCardActivity;
+import com.android.contacts.vcard.VCardCommonArguments;
+
+/**
+ * An dialog invoked to import/export contacts.
+ */
+public class ExportDialogFragment extends DialogFragment {
+    public static final String TAG = "ExportDialogFragment";
+
+    public static final int EXPORT_MODE_FAVORITES = 0;
+    public static final int EXPORT_MODE_ALL_CONTACTS = 1;
+    public static final int EXPORT_MODE_DEFAULT = -1;
+
+    private static int mExportMode = EXPORT_MODE_DEFAULT;
+
+    private final String[] LOOKUP_PROJECTION = new String[] {
+            Contacts.LOOKUP_KEY
+    };
+
+    private SubscriptionManager mSubscriptionManager;
+
+    /** Preferred way to show this dialog */
+    public static void show(FragmentManager fragmentManager, Class callingActivity,
+            int exportMode) {
+        final ExportDialogFragment fragment = new ExportDialogFragment();
+        Bundle args = new Bundle();
+        args.putString(VCardCommonArguments.ARG_CALLING_ACTIVITY, callingActivity.getName());
+        fragment.setArguments(args);
+        fragment.show(fragmentManager, TAG);
+        mExportMode = exportMode;
+    }
+
+    @Override
+    public Context getContext() {
+        return getActivity();
+    }
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // Wrap our context to inflate list items using the correct theme
+        final Resources res = getActivity().getResources();
+        final LayoutInflater dialogInflater = (LayoutInflater)getActivity()
+                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        final String callingActivity = getArguments().getString(
+                VCardCommonArguments.ARG_CALLING_ACTIVITY);
+
+        // Adapter that shows a list of string resources
+        final ArrayAdapter<AdapterEntry> adapter = new ArrayAdapter<AdapterEntry>(getActivity(),
+                R.layout.select_dialog_item) {
+            @Override
+            public View getView(int position, View convertView, ViewGroup parent) {
+                final View result = convertView != null ? convertView :
+                        dialogInflater.inflate(R.layout.select_dialog_item, parent, false);
+
+                final TextView text = (TextView) result.findViewById(R.id.primary_text);
+                final View secondaryText = result.findViewById(R.id.secondary_text);
+                secondaryText.setVisibility(View.GONE);
+
+                text.setText(getItem(position).mLabel);
+                return result;
+            }
+        };
+
+        if (res.getBoolean(R.bool.config_allow_export)) {
+                adapter.add(new AdapterEntry(getString(R.string.export_to_vcf_file),
+                        R.string.export_to_vcf_file));
+        }
+        if (res.getBoolean(R.bool.config_allow_share_contacts)) {
+            if (mExportMode == EXPORT_MODE_FAVORITES) {
+                // share favorite and frequently contacted contacts from Favorites tab
+                adapter.add(new AdapterEntry(getString(R.string.share_favorite_contacts),
+                        R.string.share_contacts));
+            } else {
+                // share "all" contacts (in groups selected in "Customize") from All tab for now
+                // TODO: change the string to share_visible_contacts if implemented
+                adapter.add(new AdapterEntry(getString(R.string.share_contacts),
+                        R.string.share_contacts));
+            }
+        }
+
+        final DialogInterface.OnClickListener clickListener =
+                new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                boolean dismissDialog;
+                final int resId = adapter.getItem(which).mChoiceResourceId;
+                if (resId == R.string.export_to_vcf_file) {
+                    dismissDialog = true;
+                    final Intent exportIntent = new Intent(
+                            getActivity(), ExportVCardActivity.class);
+                    exportIntent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY,
+                            callingActivity);
+                    getActivity().startActivity(exportIntent);
+                } else if (resId == R.string.share_contacts) {
+                    dismissDialog = true;
+                    if (mExportMode == EXPORT_MODE_FAVORITES) {
+                        doShareFavoriteContacts();
+                    } else { // EXPORT_MODE_ALL_CONTACTS
+                        final Intent exportIntent = new Intent(
+                                getActivity(), ShareVCardActivity.class);
+                        exportIntent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY,
+                                callingActivity);
+                        getActivity().startActivity(exportIntent);
+                    }
+                } else {
+                    dismissDialog = true;
+                    Log.e(TAG, "Unexpected resource: "
+                            + getActivity().getResources().getResourceEntryName(resId));
+                }
+                if (dismissDialog) {
+                    dialog.dismiss();
+                }
+            }
+        };
+        final TextView title = (TextView) View.inflate(getActivity(), R.layout.dialog_title, null);
+        title.setText(R.string.dialog_export);
+        return new AlertDialog.Builder(getActivity())
+                .setCustomTitle(title)
+                .setSingleChoiceItems(adapter, -1, clickListener)
+                .create();
+    }
+
+    private void doShareFavoriteContacts() {
+        try{
+            final Cursor cursor = getActivity().getContentResolver().query(
+                    Contacts.CONTENT_STREQUENT_URI, LOOKUP_PROJECTION, null, null,
+                    Contacts.DISPLAY_NAME + " COLLATE NOCASE ASC");
+            if (cursor != null) {
+                try {
+                    if (!cursor.moveToFirst()) {
+                        Toast.makeText(getActivity(), R.string.no_contact_to_share,
+                                Toast.LENGTH_SHORT).show();
+                        return;
+                    }
+
+                    // Build multi-vcard Uri for sharing
+                    final StringBuilder uriListBuilder = new StringBuilder();
+                    int index = 0;
+                    do {
+                        if (index != 0)
+                            uriListBuilder.append(':');
+                        uriListBuilder.append(cursor.getString(0));
+                        index++;
+                    } while (cursor.moveToNext());
+                    final Uri uri = Uri.withAppendedPath(
+                            Contacts.CONTENT_MULTI_VCARD_URI,
+                            Uri.encode(uriListBuilder.toString()));
+
+                    final Intent intent = new Intent(Intent.ACTION_SEND);
+                    intent.setType(Contacts.CONTENT_VCARD_TYPE);
+                    intent.putExtra(Intent.EXTRA_STREAM, uri);
+                    ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
+                } finally {
+                    cursor.close();
+                }
+            }
+        } catch (Exception e) {
+            Log.e(TAG, "Sharing contacts failed", e);
+            getActivity().runOnUiThread(new Runnable() {
+                @Override
+                public void run() {
+                    Toast.makeText(getContext(), R.string.share_contacts_failure,
+                            Toast.LENGTH_SHORT).show();
+                }
+            });
+        }
+    }
+
+    private static class AdapterEntry {
+        public final CharSequence mLabel;
+        public final int mChoiceResourceId;
+        public final int mSubscriptionId;
+
+        public AdapterEntry(CharSequence label, int resId, int subId) {
+            mLabel = label;
+            mChoiceResourceId = resId;
+            mSubscriptionId = subId;
+        }
+
+        public AdapterEntry(String label, int resId) {
+            // Store a nonsense value for mSubscriptionId. If this constructor is used,
+            // the mSubscriptionId value should not be read later.
+            this(label, resId, /* subId = */ -1);
+        }
+    }
+}
diff --git a/src/com/android/contacts/interactions/ImportDialogFragment.java b/src/com/android/contacts/interactions/ImportDialogFragment.java
new file mode 100644
index 0000000..7f5ce4e
--- /dev/null
+++ b/src/com/android/contacts/interactions/ImportDialogFragment.java
@@ -0,0 +1,291 @@
+/*
+ * 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.interactions;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.FragmentManager;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.SimImportActivity;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.editor.SelectAccountDialogFragment;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.AccountSelectionUtil;
+import com.android.contacts.util.AccountsListAdapter.AccountListFilter;
+
+import java.util.List;
+
+/**
+ * An dialog invoked to import/export contacts.
+ */
+public class ImportDialogFragment extends DialogFragment {
+    public static final String TAG = "ImportDialogFragment";
+
+    public static final String KEY_RES_ID = "resourceId";
+    public static final String KEY_SUBSCRIPTION_ID = "subscriptionId";
+
+    public static final String EXTRA_SIM_ONLY = "extraSimOnly";
+
+    public static final String EXTRA_SIM_CONTACT_COUNT_PREFIX = "simContactCount_";
+
+    private boolean mSimOnly = false;
+    private SimContactDao mSimDao;
+
+    /** Preferred way to show this dialog */
+    public static void show(FragmentManager fragmentManager) {
+        final ImportDialogFragment fragment = new ImportDialogFragment();
+        fragment.show(fragmentManager, TAG);
+    }
+
+    public static void show(FragmentManager fragmentManager, List<SimCard> sims,
+            boolean includeVcf) {
+        final ImportDialogFragment fragment = new ImportDialogFragment();
+        final Bundle args = new Bundle();
+        args.putBoolean(EXTRA_SIM_ONLY, !includeVcf);
+        for (SimCard sim : sims) {
+            final List<SimContact> contacts = sim.getContacts();
+            if (contacts == null) {
+                continue;
+            }
+            args.putInt(EXTRA_SIM_CONTACT_COUNT_PREFIX + sim.getSimId(), contacts.size());
+        }
+
+        fragment.setArguments(args);
+        fragment.show(fragmentManager, TAG);
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setStyle(STYLE_NORMAL, R.style.ContactsAlertDialogTheme);
+
+        final Bundle args = getArguments();
+        mSimOnly = args != null && args.getBoolean(EXTRA_SIM_ONLY, false);
+        mSimDao = SimContactDao.create(getContext());
+    }
+
+    @Override
+    public Context getContext() {
+        return getActivity();
+    }
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        final LayoutInflater dialogInflater = (LayoutInflater)
+                getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+        // Adapter that shows a list of string resources
+        final ArrayAdapter<AdapterEntry> adapter = new ArrayAdapter<AdapterEntry>(getActivity(),
+                R.layout.select_dialog_item) {
+
+            @Override
+            public View getView(int position, View convertView, ViewGroup parent) {
+                final View result = convertView != null ? convertView :
+                        dialogInflater.inflate(R.layout.select_dialog_item, parent, false);
+                final TextView primaryText = (TextView) result.findViewById(R.id.primary_text);
+                final TextView secondaryText = (TextView) result.findViewById(R.id.secondary_text);
+                final AdapterEntry entry = getItem(position);
+                secondaryText.setVisibility(View.GONE);
+                if (entry.mChoiceResourceId == R.string.import_from_sim) {
+                    final CharSequence secondary = getSimSecondaryText(entry.mSim);
+                    if (TextUtils.isEmpty(secondary)) {
+                        secondaryText.setVisibility(View.GONE);
+                    } else {
+                        secondaryText.setText(secondary);
+                        secondaryText.setVisibility(View.VISIBLE);
+                    }
+                }
+                primaryText.setText(entry.mLabel);
+                return result;
+            }
+
+            CharSequence getSimSecondaryText(SimCard sim) {
+                int count = getSimContactCount(sim);
+
+                CharSequence phone = sim.getFormattedPhone();
+                if (phone == null) {
+                    phone = sim.getPhone();
+                }
+                if (phone != null) {
+                    phone = PhoneNumberUtilsCompat.createTtsSpannable(phone);
+                }
+
+                if (count != -1 && phone != null) {
+                    // We use a template instead of format string so that the TTS span is preserved
+                    final CharSequence template = getResources()
+                            .getQuantityString(R.plurals.import_from_sim_secondary_template, count);
+                    return TextUtils.expandTemplate(template, String.valueOf(count), phone);
+                } else if (phone != null) {
+                    return phone;
+                } else if (count != -1) {
+                    // count != -1
+                    return getResources()
+                            .getQuantityString(
+                                    R.plurals.import_from_sim_secondary_contact_count_fmt, count,
+                                    count);
+                } else {
+                    return null;
+                }
+            }
+        };
+
+        addItems(adapter);
+
+        final DialogInterface.OnClickListener clickListener =
+                new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                final int resId = adapter.getItem(which).mChoiceResourceId;
+                if (resId == R.string.import_from_sim) {
+                    handleSimImportRequest(adapter.getItem(which).mSim);
+                } else if (resId == R.string.import_from_vcf_file) {
+                    handleImportRequest(resId, SimCard.NO_SUBSCRIPTION_ID);
+                } else {
+                    Log.e(TAG, "Unexpected resource: "
+                            + getActivity().getResources().getResourceEntryName(resId));
+                }
+                dialog.dismiss();
+            }
+        };
+
+        final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), getTheme())
+                .setTitle(R.string.dialog_import)
+                .setNegativeButton(android.R.string.cancel, null);
+        if (adapter.isEmpty()) {
+            // Handle edge case; e.g. SIM card was removed.
+            builder.setMessage(R.string.nothing_to_import_message);
+        } else {
+            builder.setSingleChoiceItems(adapter, -1, clickListener);
+        }
+
+        return builder.create();
+    }
+
+    private int getSimContactCount(SimCard sim) {
+        if (sim.getContacts() != null) {
+            return sim.getContacts().size();
+        }
+        final Bundle args = getArguments();
+        if (args == null) {
+            return -1;
+        }
+        return args.getInt(EXTRA_SIM_CONTACT_COUNT_PREFIX + sim.getSimId(), -1);
+    }
+
+    private void addItems(ArrayAdapter<AdapterEntry> adapter) {
+        final Resources res = getActivity().getResources();
+        if (res.getBoolean(R.bool.config_allow_import_from_vcf_file) && !mSimOnly) {
+            adapter.add(new AdapterEntry(getString(R.string.import_from_vcf_file),
+                    R.string.import_from_vcf_file));
+        }
+        final List<SimCard> sims = mSimDao.getSimCards();
+
+        if (sims.size() == 1) {
+            adapter.add(new AdapterEntry(getString(R.string.import_from_sim),
+                    R.string.import_from_sim, sims.get(0)));
+            return;
+        }
+        for (int i = 0; i < sims.size(); i++) {
+            final SimCard sim = sims.get(i);
+            adapter.add(new AdapterEntry(getSimDescription(sim, i), R.string.import_from_sim, sim));
+        }
+    }
+
+    private void handleSimImportRequest(SimCard sim) {
+        startActivity(new Intent(getActivity(), SimImportActivity.class)
+                .putExtra(SimImportActivity.EXTRA_SUBSCRIPTION_ID, sim.getSubscriptionId()));
+    }
+
+    /**
+     * Handle "import from SD".
+     */
+    private void handleImportRequest(int resId, int subscriptionId) {
+        // There are three possibilities:
+        // - more than one accounts -> ask the user
+        // - just one account -> use the account without asking the user
+        // - no account -> use phone-local storage without asking the user
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(getActivity());
+        final List<AccountWithDataSet> accountList = accountTypes.getAccounts(true);
+        final int size = accountList.size();
+        if (size > 1) {
+            // Send over to the account selector
+            final Bundle args = new Bundle();
+            args.putInt(KEY_RES_ID, resId);
+            args.putInt(KEY_SUBSCRIPTION_ID, subscriptionId);
+            SelectAccountDialogFragment.show(
+                    getFragmentManager(), R.string.dialog_new_contact_account,
+                    AccountListFilter.ACCOUNTS_CONTACT_WRITABLE, args);
+        } else {
+            AccountSelectionUtil.doImport(getActivity(), resId,
+                    (size == 1 ? accountList.get(0) : null),
+                    (CompatUtils.isMSIMCompatible() ? subscriptionId : -1));
+        }
+    }
+
+    private CharSequence getSimDescription(SimCard sim, int index) {
+        final CharSequence name = sim.getDisplayName();
+        if (name != null) {
+            return getString(R.string.import_from_sim_summary_fmt, name);
+        } else {
+            return getString(R.string.import_from_sim_summary_fmt, String.valueOf(index));
+        }
+    }
+
+    private static class AdapterEntry {
+        public final CharSequence mLabel;
+        public final int mChoiceResourceId;
+        public final SimCard mSim;
+
+        public AdapterEntry(CharSequence label, int resId, SimCard sim) {
+            mLabel = label;
+            mChoiceResourceId = resId;
+            mSim = sim;
+        }
+
+        public AdapterEntry(String label, int resId) {
+            // Store a nonsense value for mSubscriptionId. If this constructor is used,
+            // the mSubscriptionId value should not be read later.
+            this(label, resId, /* sim= */ null);
+        }
+    }
+}
diff --git a/src/com/android/contacts/interactions/SmsInteraction.java b/src/com/android/contacts/interactions/SmsInteraction.java
index ba0070c..4aad07b 100644
--- a/src/com/android/contacts/interactions/SmsInteraction.java
+++ b/src/com/android/contacts/interactions/SmsInteraction.java
@@ -15,9 +15,6 @@
  */
 package com.android.contacts.interactions;
 
-import com.android.contacts.R;
-import com.android.contacts.common.util.ContactDisplayUtils;
-
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
@@ -28,6 +25,9 @@
 import android.text.Spannable;
 import android.text.TextDirectionHeuristics;
 
+import com.android.contacts.R;
+import com.android.contacts.util.ContactDisplayUtils;
+
 /**
  * Represents an sms interaction, wrapping the columns in
  * {@link android.provider.Telephony.Sms}.
@@ -35,7 +35,7 @@
 public class SmsInteraction implements ContactInteraction {
 
     private static final String URI_TARGET_PREFIX = "smsto:";
-    private static final int SMS_ICON_RES = R.drawable.ic_message_24dp_mirrored;
+    private static final int SMS_ICON_RES = R.drawable.quantum_ic_message_vd_theme_24;
     private static BidiFormatter sBidiFormatter = BidiFormatter.getInstance();
 
     private ContentValues mValues;
diff --git a/src/com/android/contacts/interactions/SmsInteractionsLoader.java b/src/com/android/contacts/interactions/SmsInteractionsLoader.java
index 5c7d5e3..1de7ca3 100644
--- a/src/com/android/contacts/interactions/SmsInteractionsLoader.java
+++ b/src/com/android/contacts/interactions/SmsInteractionsLoader.java
@@ -24,7 +24,7 @@
 import android.provider.Telephony;
 import android.util.Log;
 
-import com.android.contacts.common.compat.TelephonyThreadsCompat;
+import com.android.contacts.compat.TelephonyThreadsCompat;
 
 import java.util.ArrayList;
 import java.util.Collections;
diff --git a/src/com/android/contacts/interactions/TouchPointManager.java b/src/com/android/contacts/interactions/TouchPointManager.java
new file mode 100644
index 0000000..67387e5
--- /dev/null
+++ b/src/com/android/contacts/interactions/TouchPointManager.java
@@ -0,0 +1,46 @@
+package com.android.contacts.interactions;
+
+import android.graphics.Point;
+
+/**
+ * Singleton class to keep track of where the user last touched the screen.
+ *
+ * Used to pass on to the InCallUI for animation.
+ */
+public class TouchPointManager {
+    public static final String TOUCH_POINT = "touchPoint";
+
+    private static TouchPointManager sInstance = new TouchPointManager();
+
+    private Point mPoint = new Point();
+
+    /**
+     * Private constructor.  Instance should only be acquired through getInstance().
+     */
+    private TouchPointManager() {
+    }
+
+    public static TouchPointManager getInstance() {
+        return sInstance;
+    }
+
+    public Point getPoint() {
+        return mPoint;
+    }
+
+    public void setPoint(int x, int y) {
+        mPoint.set(x, y);
+    }
+
+    /**
+     * When a point is initialized, its value is (0,0). Since it is highly unlikely a user will
+     * touch at that exact point, if the point in TouchPointManager is (0,0), it is safe to assume
+     * that the TouchPointManager has not yet collected a touch.
+     *
+     * @return True if there is a valid point saved. Define a valid point as any point that is
+     * not (0,0).
+     */
+    public boolean hasValidPoint() {
+        return mPoint.x != 0 || mPoint.y != 0;
+    }
+}
diff --git a/src/com/android/contacts/lettertiles/LetterTileDrawable.java b/src/com/android/contacts/lettertiles/LetterTileDrawable.java
new file mode 100644
index 0000000..f5b4c75
--- /dev/null
+++ b/src/com/android/contacts/lettertiles/LetterTileDrawable.java
@@ -0,0 +1,287 @@
+/*
+ * Copyright (C) 2013 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.lettertiles;
+
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.Paint;
+import android.graphics.Paint.Align;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.graphics.drawable.Drawable;
+import android.text.TextUtils;
+
+import com.android.contacts.R;
+
+import junit.framework.Assert;
+
+/**
+ * A drawable that encapsulates all the functionality needed to display a letter tile to
+ * represent a contact image.
+ */
+public class LetterTileDrawable extends Drawable {
+
+    private final String TAG = LetterTileDrawable.class.getSimpleName();
+
+    private final Paint mPaint;
+
+    /** Letter tile */
+    private static TypedArray sColors;
+    private static int sDefaultColor;
+    private static int sTileFontColor;
+    private static float sLetterToTileRatio;
+    private static Bitmap DEFAULT_PERSON_AVATAR;
+    private static Bitmap DEFAULT_BUSINESS_AVATAR;
+    private static Bitmap DEFAULT_VOICEMAIL_AVATAR;
+
+    /** Reusable components to avoid new allocations */
+    private static final Paint sPaint = new Paint();
+    private static final Rect sRect = new Rect();
+    private static final char[] sFirstChar = new char[1];
+
+    /** Contact type constants */
+    public static final int TYPE_PERSON = 1;
+    public static final int TYPE_BUSINESS = 2;
+    public static final int TYPE_VOICEMAIL = 3;
+    public static final int TYPE_DEFAULT = TYPE_PERSON;
+
+    /** 54% opacity */
+    private static final int ALPHA = 138;
+
+    private int mContactType = TYPE_DEFAULT;
+    private float mScale = 1.0f;
+    private float mOffset = 0.0f;
+    private boolean mIsCircle = false;
+
+    private int mColor;
+    private Character mLetter = null;
+
+    public LetterTileDrawable(final Resources res) {
+        if (sColors == null) {
+            sColors = res.obtainTypedArray(R.array.letter_tile_colors);
+            sDefaultColor = res.getColor(R.color.letter_tile_default_color);
+            sTileFontColor = res.getColor(R.color.letter_tile_font_color);
+            sLetterToTileRatio = res.getFraction(R.dimen.letter_to_tile_ratio, 1, 1);
+            DEFAULT_PERSON_AVATAR = BitmapFactory.decodeResource(res,
+                    R.drawable.ic_person_avatar);
+            DEFAULT_BUSINESS_AVATAR = BitmapFactory.decodeResource(res,
+                    R.drawable.ic_business_white_120dp);
+            DEFAULT_VOICEMAIL_AVATAR = BitmapFactory.decodeResource(res,
+                    R.drawable.ic_voicemail_avatar);
+            sPaint.setTypeface(Typeface.create(
+                    res.getString(R.string.letter_tile_letter_font_family), Typeface.NORMAL));
+            sPaint.setTextAlign(Align.CENTER);
+            sPaint.setAntiAlias(true);
+        }
+        mPaint = new Paint();
+        mPaint.setFilterBitmap(true);
+        mPaint.setDither(true);
+        mColor = sDefaultColor;
+    }
+
+    @Override
+    public void draw(final Canvas canvas) {
+        final Rect bounds = getBounds();
+        if (!isVisible() || bounds.isEmpty()) {
+            return;
+        }
+        // Draw letter tile.
+        drawLetterTile(canvas);
+    }
+
+    /**
+     * Draw the bitmap onto the canvas at the current bounds taking into account the current scale.
+     */
+    private void drawBitmap(final Bitmap bitmap, final int width, final int height,
+            final Canvas canvas) {
+        // The bitmap should be drawn in the middle of the canvas without changing its width to
+        // height ratio.
+        final Rect destRect = copyBounds();
+
+        // Crop the destination bounds into a square, scaled and offset as appropriate
+        final int halfLength = (int) (mScale * Math.min(destRect.width(), destRect.height()) / 2);
+
+        destRect.set(destRect.centerX() - halfLength,
+                (int) (destRect.centerY() - halfLength + mOffset * destRect.height()),
+                destRect.centerX() + halfLength,
+                (int) (destRect.centerY() + halfLength + mOffset * destRect.height()));
+
+        // Source rectangle remains the entire bounds of the source bitmap.
+        sRect.set(0, 0, width, height);
+
+        sPaint.setTextAlign(Align.CENTER);
+        sPaint.setAntiAlias(true);
+        sPaint.setAlpha(ALPHA);
+
+        canvas.drawBitmap(bitmap, sRect, destRect, sPaint);
+    }
+
+    private void drawLetterTile(final Canvas canvas) {
+        // Draw background color.
+        sPaint.setColor(mColor);
+
+        sPaint.setAlpha(mPaint.getAlpha());
+        final Rect bounds = getBounds();
+        final int minDimension = Math.min(bounds.width(), bounds.height());
+
+        if (mIsCircle) {
+            canvas.drawCircle(bounds.centerX(), bounds.centerY(), minDimension / 2, sPaint);
+        } else {
+            canvas.drawRect(bounds, sPaint);
+        }
+
+        // Draw letter/digit only if the first character is an english letter or there's a override
+
+        if (mLetter != null) {
+            // Draw letter or digit.
+            sFirstChar[0] = mLetter;
+
+            // Scale text by canvas bounds and user selected scaling factor
+            sPaint.setTextSize(mScale * sLetterToTileRatio * minDimension);
+            sPaint.getTextBounds(sFirstChar, 0, 1, sRect);
+            sPaint.setTypeface(Typeface.create("sans-serif", Typeface.NORMAL));
+            sPaint.setColor(sTileFontColor);
+            sPaint.setAlpha(ALPHA);
+
+            // Draw the letter in the canvas, vertically shifted up or down by the user-defined
+            // offset
+            canvas.drawText(sFirstChar, 0, 1, bounds.centerX(),
+                    bounds.centerY() + mOffset * bounds.height() - sRect.exactCenterY(),
+                    sPaint);
+        } else {
+            // Draw the default image if there is no letter/digit to be drawn
+            final Bitmap bitmap = getBitmapForContactType(mContactType);
+            drawBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(),
+                    canvas);
+        }
+    }
+
+    public int getColor() {
+        return mColor;
+    }
+
+    /**
+     * Returns a deterministic color based on the provided contact identifier string.
+     */
+    private int pickColor(final String identifier) {
+        if (TextUtils.isEmpty(identifier) || mContactType == TYPE_VOICEMAIL) {
+            return sDefaultColor;
+        }
+        // String.hashCode() implementation is not supposed to change across java versions, so
+        // this should guarantee the same email address always maps to the same color.
+        // The email should already have been normalized by the ContactRequest.
+        final int color = Math.abs(identifier.hashCode()) % sColors.length();
+        return sColors.getColor(color, sDefaultColor);
+    }
+
+    private static Bitmap getBitmapForContactType(int contactType) {
+        switch (contactType) {
+            case TYPE_PERSON:
+                return DEFAULT_PERSON_AVATAR;
+            case TYPE_BUSINESS:
+                return DEFAULT_BUSINESS_AVATAR;
+            case TYPE_VOICEMAIL:
+                return DEFAULT_VOICEMAIL_AVATAR;
+            default:
+                return DEFAULT_PERSON_AVATAR;
+        }
+    }
+
+    private static boolean isEnglishLetter(final char c) {
+        return ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z');
+    }
+
+    @Override
+    public void setAlpha(final int alpha) {
+        mPaint.setAlpha(alpha);
+    }
+
+    @Override
+    public void setColorFilter(final ColorFilter cf) {
+        mPaint.setColorFilter(cf);
+    }
+
+    @Override
+    public int getOpacity() {
+        return android.graphics.PixelFormat.OPAQUE;
+    }
+
+    /**
+     * Scale the drawn letter tile to a ratio of its default size
+     *
+     * @param scale The ratio the letter tile should be scaled to as a percentage of its default
+     * size, from a scale of 0 to 2.0f. The default is 1.0f.
+     */
+    public LetterTileDrawable setScale(float scale) {
+        mScale = scale;
+        return this;
+    }
+
+    /**
+     * Assigns the vertical offset of the position of the letter tile to the ContactDrawable
+     *
+     * @param offset The provided offset must be within the range of -0.5f to 0.5f.
+     * If set to -0.5f, the letter will be shifted upwards by 0.5 times the height of the canvas
+     * it is being drawn on, which means it will be drawn with the center of the letter starting
+     * at the top edge of the canvas.
+     * If set to 0.5f, the letter will be shifted downwards by 0.5 times the height of the canvas
+     * it is being drawn on, which means it will be drawn with the center of the letter starting
+     * at the bottom edge of the canvas.
+     * The default is 0.0f.
+     */
+    public LetterTileDrawable setOffset(float offset) {
+        Assert.assertTrue(offset >= -0.5f && offset <= 0.5f);
+        mOffset = offset;
+        return this;
+    }
+
+    public LetterTileDrawable setLetter(Character letter){
+        mLetter = letter;
+        return this;
+    }
+
+    public LetterTileDrawable setColor(int color){
+        mColor = color;
+        return this;
+    }
+
+    public LetterTileDrawable setLetterAndColorFromContactDetails(final String displayName,
+            final String identifier) {
+        if (displayName != null && displayName.length() > 0
+                && isEnglishLetter(displayName.charAt(0))) {
+            mLetter = Character.toUpperCase(displayName.charAt(0));
+        }else{
+            mLetter = null;
+        }
+        mColor = pickColor(identifier);
+        return this;
+    }
+
+    public LetterTileDrawable setContactType(int contactType) {
+        mContactType = contactType;
+        return this;
+    }
+
+    public LetterTileDrawable setIsCircular(boolean isCircle) {
+        mIsCircle = isCircle;
+        return this;
+    }
+}
diff --git a/src/com/android/contacts/list/AccountFilterActivity.java b/src/com/android/contacts/list/AccountFilterActivity.java
new file mode 100644
index 0000000..6559489
--- /dev/null
+++ b/src/com/android/contacts/list/AccountFilterActivity.java
@@ -0,0 +1,199 @@
+/*
+ * 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.list;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.ListView;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Shows a list of all available accounts, letting the user select under which account to view
+ * contacts.
+ */
+public class AccountFilterActivity extends Activity implements AdapterView.OnItemClickListener {
+
+    private static final int SUBACTIVITY_CUSTOMIZE_FILTER = 0;
+
+    public static final String EXTRA_CONTACT_LIST_FILTER = "contactListFilter";
+
+    private ListView mListView;
+
+    // The default contact list type, it should be either FILTER_TYPE_ALL_ACCOUNTS or
+    // FILTER_TYPE_CUSTOM, since those are the only two options we give the user.
+    private int mCurrentFilterType;
+
+    private ContactListFilterView mCustomFilterView; // the "Customize" filter
+
+    private boolean mIsCustomFilterViewSelected;
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        setContentView(R.layout.contact_list_filter);
+
+        mListView = (ListView) findViewById(android.R.id.list);
+        mListView.setOnItemClickListener(this);
+
+        ActionBar actionBar = getActionBar();
+        if (actionBar != null) {
+            actionBar.setDisplayHomeAsUpEnabled(true);
+        }
+
+        mCurrentFilterType = ContactListFilterController.getInstance(this).isCustomFilterPersisted()
+                ? ContactListFilter.FILTER_TYPE_CUSTOM
+                : ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
+
+        // We don't need to use AccountFilterUtil.FilterLoader since we only want to show
+        // the "All contacts" and "Customize" options.
+        final List<ContactListFilter> filters = new ArrayList<>();
+        filters.add(ContactListFilter.createFilterWithType(
+                ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS));
+        filters.add(ContactListFilter.createFilterWithType(
+                ContactListFilter.FILTER_TYPE_CUSTOM));
+        mListView.setAdapter(new FilterListAdapter(this, filters, mCurrentFilterType));
+    }
+
+    @Override
+    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+        final ContactListFilterView listFilterView = (ContactListFilterView) view;
+        final ContactListFilter filter = (ContactListFilter) view.getTag();
+        if (filter == null) return; // Just in case
+        if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+            mCustomFilterView = listFilterView;
+            mIsCustomFilterViewSelected = listFilterView.isChecked();
+            final Intent intent = new Intent(this, CustomContactListFilterActivity.class)
+                    .putExtra(CustomContactListFilterActivity.EXTRA_CURRENT_LIST_FILTER_TYPE,
+                            mCurrentFilterType);
+            listFilterView.setActivated(true);
+            // Switching activity has the highest priority. So when we open another activity, the
+            // announcement that indicates an account is checked will be interrupted. This is the
+            // way to overcome -- View.announceForAccessibility(CharSequence text);
+            listFilterView.announceForAccessibility(listFilterView.generateContentDescription());
+            startActivityForResult(intent, SUBACTIVITY_CUSTOMIZE_FILTER);
+        } else {
+            listFilterView.setActivated(true);
+            listFilterView.announceForAccessibility(listFilterView.generateContentDescription());
+            final Intent intent = new Intent();
+            intent.putExtra(EXTRA_CONTACT_LIST_FILTER, filter);
+            setResult(Activity.RESULT_OK, intent);
+            finish();
+        }
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (resultCode == Activity.RESULT_CANCELED && mCustomFilterView != null &&
+                !mIsCustomFilterViewSelected) {
+            mCustomFilterView.setActivated(false);
+            return;
+        }
+
+        if (resultCode != Activity.RESULT_OK) {
+            return;
+        }
+
+        switch (requestCode) {
+            case SUBACTIVITY_CUSTOMIZE_FILTER: {
+                final Intent intent = new Intent();
+                ContactListFilter filter = ContactListFilter.createFilterWithType(
+                        ContactListFilter.FILTER_TYPE_CUSTOM);
+                intent.putExtra(EXTRA_CONTACT_LIST_FILTER, filter);
+                setResult(Activity.RESULT_OK, intent);
+                finish();
+                break;
+            }
+        }
+    }
+
+    private static class FilterListAdapter extends BaseAdapter {
+        private final List<ContactListFilter> mFilters;
+        private final LayoutInflater mLayoutInflater;
+        private final AccountTypeManager mAccountTypes;
+        private final int mCurrentFilter;
+
+        public FilterListAdapter(
+                Context context, List<ContactListFilter> filters, int current) {
+            mLayoutInflater = (LayoutInflater) context.getSystemService
+                    (Context.LAYOUT_INFLATER_SERVICE);
+            mFilters = filters;
+            mCurrentFilter = current;
+            mAccountTypes = AccountTypeManager.getInstance(context);
+        }
+
+        @Override
+        public int getCount() {
+            return mFilters.size();
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return position;
+        }
+
+        @Override
+        public ContactListFilter getItem(int position) {
+            return mFilters.get(position);
+        }
+
+        public View getView(int position, View convertView, ViewGroup parent) {
+            final ContactListFilterView view;
+            if (convertView != null) {
+                view = (ContactListFilterView) convertView;
+            } else {
+                view = (ContactListFilterView) mLayoutInflater.inflate(
+                        R.layout.contact_list_filter_item, parent, false);
+            }
+            view.setSingleAccount(mFilters.size() == 1);
+            final ContactListFilter filter = mFilters.get(position);
+            view.setContactListFilter(filter);
+            view.bindView(mAccountTypes);
+            view.setTag(filter);
+            view.setActivated(filter.filterType == mCurrentFilter);
+            return view;
+        }
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        switch (item.getItemId()) {
+            case android.R.id.home:
+                // We have two logical "up" Activities: People and Phone.
+                // Instead of having one static "up" direction, behave like back as an
+                // exceptional case.
+                onBackPressed();
+                return true;
+            default:
+                break;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+}
diff --git a/src/com/android/contacts/list/AutoScrollListView.java b/src/com/android/contacts/list/AutoScrollListView.java
new file mode 100644
index 0000000..f3bc7a2
--- /dev/null
+++ b/src/com/android/contacts/list/AutoScrollListView.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.list;
+
+import android.content.Context;
+import android.os.Build;
+import android.util.AttributeSet;
+import android.widget.ListView;
+
+/**
+ * A ListView that can be asked to scroll (smoothly or otherwise) to a specific
+ * position.  This class takes advantage of similar functionality that exists
+ * in {@link ListView} and enhances it.
+ */
+public class AutoScrollListView extends ListView {
+
+    /**
+     * Position the element at about 1/3 of the list height
+     */
+    private static final float PREFERRED_SELECTION_OFFSET_FROM_TOP = 0.33f;
+
+    private int mRequestedScrollPosition = -1;
+    private boolean mSmoothScrollRequested;
+
+    public AutoScrollListView(Context context) {
+        super(context);
+    }
+
+    public AutoScrollListView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public AutoScrollListView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    /**
+     * Brings the specified position to view by optionally performing a jump-scroll maneuver:
+     * first it jumps to some position near the one requested and then does a smooth
+     * scroll to the requested position.  This creates an impression of full smooth
+     * scrolling without actually traversing the entire list.  If smooth scrolling is
+     * not requested, instantly positions the requested item at a preferred offset.
+     */
+    public void requestPositionToScreen(int position, boolean smoothScroll) {
+        mRequestedScrollPosition = position;
+        mSmoothScrollRequested = smoothScroll;
+        requestLayout();
+    }
+
+    @Override
+    protected void layoutChildren() {
+        super.layoutChildren();
+        if (mRequestedScrollPosition == -1) {
+            return;
+        }
+
+        final int position = mRequestedScrollPosition;
+        mRequestedScrollPosition = -1;
+
+        int firstPosition = getFirstVisiblePosition() + 1;
+        int lastPosition = getLastVisiblePosition();
+        if (position >= firstPosition && position <= lastPosition) {
+            return; // Already on screen
+        }
+
+        final int offset = (int) (getHeight() * PREFERRED_SELECTION_OFFSET_FROM_TOP);
+        if (!mSmoothScrollRequested) {
+            setSelectionFromTop(position, offset);
+
+            // Since we have changed the scrolling position, we need to redo child layout
+            // Calling "requestLayout" in the middle of a layout pass has no effect,
+            // so we call layoutChildren explicitly
+            super.layoutChildren();
+
+        } else {
+            // We will first position the list a couple of screens before or after
+            // the new selection and then scroll smoothly to it.
+            int twoScreens = (lastPosition - firstPosition) * 2;
+            int preliminaryPosition;
+            if (position < firstPosition) {
+                preliminaryPosition = position + twoScreens;
+                if (preliminaryPosition >= getCount()) {
+                    preliminaryPosition = getCount() - 1;
+                }
+                if (preliminaryPosition < firstPosition) {
+                    setSelection(preliminaryPosition);
+                    super.layoutChildren();
+                }
+            } else {
+                preliminaryPosition = position - twoScreens;
+                if (preliminaryPosition < 0) {
+                    preliminaryPosition = 0;
+                }
+                if (preliminaryPosition > lastPosition) {
+                    setSelection(preliminaryPosition);
+                    super.layoutChildren();
+                }
+            }
+
+
+            smoothScrollToPositionFromTop(position, offset);
+        }
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        super.onLayout(changed, l, t, r, b);
+
+        // Workaround for b/31160338.
+        if (android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.N
+            || android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.N_MR1) {
+            layoutChildren();
+        }
+    }
+}
diff --git a/src/com/android/contacts/list/ContactBrowseListFragment.java b/src/com/android/contacts/list/ContactBrowseListFragment.java
index bf4f891..8a6e081 100644
--- a/src/com/android/contacts/list/ContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/ContactBrowseListFragment.java
@@ -35,12 +35,7 @@
 import android.util.Log;
 
 import com.android.common.widget.CompositeCursorAdapter.Partition;
-import com.android.contacts.common.list.AutoScrollListView;
-import com.android.contacts.common.list.ContactListAdapter;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.DirectoryPartition;
-import com.android.contacts.common.logging.ListEvent.ListType;
-import com.android.contacts.common.util.ContactLoaderUtils;
+import com.android.contacts.util.ContactLoaderUtils;
 
 import java.util.List;
 
diff --git a/src/com/android/contacts/list/ContactEntry.java b/src/com/android/contacts/list/ContactEntry.java
new file mode 100644
index 0000000..18a44ca
--- /dev/null
+++ b/src/com/android/contacts/list/ContactEntry.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2013 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 android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.provider.ContactsContract.PinnedPositions;
+import android.text.TextUtils;
+
+import com.android.contacts.preference.ContactsPreferences;
+
+/**
+ * Class to hold contact information
+ */
+public class ContactEntry {
+
+    private static final int UNSET_DISPLAY_ORDER_PREFERENCE = -1;
+
+    /**
+     * Primary name for a Contact
+     */
+    public String namePrimary;
+    /**
+     * Alternative name for a Contact, e.g. last name first
+     */
+    public String nameAlternative;
+    /**
+     * The user's preference on name display order, last name first or first time first.
+     * {@see ContactsPreferences}
+     */
+    public int nameDisplayOrder = UNSET_DISPLAY_ORDER_PREFERENCE;
+
+    public String status;
+    public String phoneLabel;
+    public String phoneNumber;
+    public Uri photoUri;
+    public Uri lookupUri;
+    public String lookupKey;
+    public Drawable presenceIcon;
+    public long id;
+    public int pinned = PinnedPositions.UNPINNED;
+    public boolean isFavorite = false;
+    public boolean isDefaultNumber = false;
+
+    public static final ContactEntry BLANK_ENTRY = new ContactEntry();
+
+    public String getPreferredDisplayName() {
+        if (nameDisplayOrder == UNSET_DISPLAY_ORDER_PREFERENCE
+                || nameDisplayOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY
+                || TextUtils.isEmpty(nameAlternative)) {
+            return namePrimary;
+        }
+        return nameAlternative;
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
new file mode 100644
index 0000000..b508dda
--- /dev/null
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -0,0 +1,786 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Directory;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.QuickContactBadge;
+import android.widget.SectionIndexer;
+import android.widget.TextView;
+
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.DirectoryCompat;
+import com.android.contacts.util.SearchUtil;
+
+import java.util.HashSet;
+
+/**
+ * Common base class for various contact-related lists, e.g. contact list, phone number list
+ * etc.
+ */
+public abstract class ContactEntryListAdapter extends IndexerListAdapter {
+
+    private static final String TAG = "ContactEntryListAdapter";
+
+    /**
+     * Indicates whether the {@link Directory#LOCAL_INVISIBLE} directory should
+     * be included in the search.
+     */
+    public static final boolean LOCAL_INVISIBLE_DIRECTORY_ENABLED = false;
+
+    private int mDisplayOrder;
+    private int mSortOrder;
+
+    private boolean mDisplayPhotos;
+    private boolean mCircularPhotos = true;
+    private boolean mQuickContactEnabled;
+    private boolean mAdjustSelectionBoundsEnabled;
+
+    /**
+     * indicates if contact queries include favorites
+     */
+    private boolean mIncludeFavorites;
+
+    private int mNumberOfFavorites;
+
+    /**
+     * The root view of the fragment that this adapter is associated with.
+     */
+    private View mFragmentRootView;
+
+    private ContactPhotoManager mPhotoLoader;
+
+    private String mQueryString;
+    private String mUpperCaseQueryString;
+    private boolean mSearchMode;
+    private int mDirectorySearchMode;
+    private int mDirectoryResultLimit = Integer.MAX_VALUE;
+
+    private boolean mEmptyListEnabled = true;
+
+    private boolean mSelectionVisible;
+
+    private ContactListFilter mFilter;
+    private boolean mDarkTheme = false;
+
+    /** Resource used to provide header-text for default filter. */
+    private CharSequence mDefaultFilterHeaderText;
+
+    public ContactEntryListAdapter(Context context) {
+        super(context);
+        setDefaultFilterHeaderText(R.string.local_search_label);
+        addPartitions();
+    }
+
+    /**
+     * @param fragmentRootView Root view of the fragment. This is used to restrict the scope of
+     * image loading requests that get cancelled on cursor changes.
+     */
+    protected void setFragmentRootView(View fragmentRootView) {
+        mFragmentRootView = fragmentRootView;
+    }
+
+    protected void setDefaultFilterHeaderText(int resourceId) {
+        mDefaultFilterHeaderText = getContext().getResources().getText(resourceId);
+    }
+
+    @Override
+    protected ContactListItemView newView(
+            Context context, int partition, Cursor cursor, int position, ViewGroup parent) {
+        final ContactListItemView view = new ContactListItemView(context, null);
+        view.setIsSectionHeaderEnabled(isSectionHeaderDisplayEnabled());
+        view.setAdjustSelectionBoundsEnabled(isAdjustSelectionBoundsEnabled());
+        return view;
+    }
+
+    @Override
+    protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+        final ContactListItemView view = (ContactListItemView) itemView;
+        view.setIsSectionHeaderEnabled(isSectionHeaderDisplayEnabled());
+        bindWorkProfileIcon(view, partition);
+    }
+
+    @Override
+    protected View createPinnedSectionHeaderView(Context context, ViewGroup parent) {
+        return new ContactListPinnedHeaderView(context, null, parent);
+    }
+
+    @Override
+    protected void setPinnedSectionTitle(View pinnedHeaderView, String title) {
+        ((ContactListPinnedHeaderView) pinnedHeaderView).setSectionHeaderTitle(title);
+    }
+
+    protected void addPartitions() {
+        addPartition(createDefaultDirectoryPartition());
+    }
+
+    protected DirectoryPartition createDefaultDirectoryPartition() {
+        DirectoryPartition partition = new DirectoryPartition(true, true);
+        partition.setDirectoryId(Directory.DEFAULT);
+        partition.setDirectoryType(getContext().getString(R.string.contactsList));
+        partition.setPriorityDirectory(true);
+        partition.setPhotoSupported(true);
+        partition.setLabel(mDefaultFilterHeaderText.toString());
+        return partition;
+    }
+
+    /**
+     * Remove all directories after the default directory. This is typically used when contacts
+     * list screens are asked to exit the search mode and thus need to remove all remote directory
+     * results for the search.
+     *
+     * This code assumes that the default directory and directories before that should not be
+     * deleted (e.g. Join screen has "suggested contacts" directory before the default director,
+     * and we should not remove the directory).
+     */
+    public void removeDirectoriesAfterDefault() {
+        final int partitionCount = getPartitionCount();
+        for (int i = partitionCount - 1; i >= 0; i--) {
+            final Partition partition = getPartition(i);
+            if ((partition instanceof DirectoryPartition)
+                    && ((DirectoryPartition) partition).getDirectoryId() == Directory.DEFAULT) {
+                break;
+            } else {
+                removePartition(i);
+            }
+        }
+    }
+
+    protected int getPartitionByDirectoryId(long id) {
+        int count = getPartitionCount();
+        for (int i = 0; i < count; i++) {
+            Partition partition = getPartition(i);
+            if (partition instanceof DirectoryPartition) {
+                if (((DirectoryPartition)partition).getDirectoryId() == id) {
+                    return i;
+                }
+            }
+        }
+        return -1;
+    }
+
+    protected DirectoryPartition getDirectoryById(long id) {
+        int count = getPartitionCount();
+        for (int i = 0; i < count; i++) {
+            Partition partition = getPartition(i);
+            if (partition instanceof DirectoryPartition) {
+                final DirectoryPartition directoryPartition = (DirectoryPartition) partition;
+                if (directoryPartition.getDirectoryId() == id) {
+                    return directoryPartition;
+                }
+            }
+        }
+        return null;
+    }
+
+    public abstract String getContactDisplayName(int position);
+    public abstract void configureLoader(CursorLoader loader, long directoryId);
+
+    /**
+     * Marks all partitions as "loading"
+     */
+    public void onDataReload() {
+        boolean notify = false;
+        int count = getPartitionCount();
+        for (int i = 0; i < count; i++) {
+            Partition partition = getPartition(i);
+            if (partition instanceof DirectoryPartition) {
+                DirectoryPartition directoryPartition = (DirectoryPartition)partition;
+                if (!directoryPartition.isLoading()) {
+                    notify = true;
+                }
+                directoryPartition.setStatus(DirectoryPartition.STATUS_NOT_LOADED);
+            }
+        }
+        if (notify) {
+            notifyDataSetChanged();
+        }
+    }
+
+    @Override
+    public void clearPartitions() {
+        int count = getPartitionCount();
+        for (int i = 0; i < count; i++) {
+            Partition partition = getPartition(i);
+            if (partition instanceof DirectoryPartition) {
+                DirectoryPartition directoryPartition = (DirectoryPartition)partition;
+                directoryPartition.setStatus(DirectoryPartition.STATUS_NOT_LOADED);
+            }
+        }
+        super.clearPartitions();
+    }
+
+    public boolean isSearchMode() {
+        return mSearchMode;
+    }
+
+    public void setSearchMode(boolean flag) {
+        mSearchMode = flag;
+    }
+
+    public String getQueryString() {
+        return mQueryString;
+    }
+
+    public void setQueryString(String queryString) {
+        mQueryString = queryString;
+        if (TextUtils.isEmpty(queryString)) {
+            mUpperCaseQueryString = null;
+        } else {
+            mUpperCaseQueryString = SearchUtil
+                    .cleanStartAndEndOfSearchQuery(queryString.toUpperCase()) ;
+        }
+    }
+
+    public String getUpperCaseQueryString() {
+        return mUpperCaseQueryString;
+    }
+
+    public int getDirectorySearchMode() {
+        return mDirectorySearchMode;
+    }
+
+    public void setDirectorySearchMode(int mode) {
+        mDirectorySearchMode = mode;
+    }
+
+    public int getDirectoryResultLimit() {
+        return mDirectoryResultLimit;
+    }
+
+    public int getDirectoryResultLimit(DirectoryPartition directoryPartition) {
+        final int limit = directoryPartition.getResultLimit();
+        return limit == DirectoryPartition.RESULT_LIMIT_DEFAULT ? mDirectoryResultLimit : limit;
+    }
+
+    public void setDirectoryResultLimit(int limit) {
+        this.mDirectoryResultLimit = limit;
+    }
+
+    public int getContactNameDisplayOrder() {
+        return mDisplayOrder;
+    }
+
+    public void setContactNameDisplayOrder(int displayOrder) {
+        mDisplayOrder = displayOrder;
+    }
+
+    public int getSortOrder() {
+        return mSortOrder;
+    }
+
+    public void setSortOrder(int sortOrder) {
+        mSortOrder = sortOrder;
+    }
+
+    public void setPhotoLoader(ContactPhotoManager photoLoader) {
+        mPhotoLoader = photoLoader;
+    }
+
+    protected ContactPhotoManager getPhotoLoader() {
+        return mPhotoLoader;
+    }
+
+    public boolean getDisplayPhotos() {
+        return mDisplayPhotos;
+    }
+
+    public void setDisplayPhotos(boolean displayPhotos) {
+        mDisplayPhotos = displayPhotos;
+    }
+
+    public boolean getCircularPhotos() {
+        return mCircularPhotos;
+    }
+
+    public void setCircularPhotos(boolean circularPhotos) {
+        mCircularPhotos = circularPhotos;
+    }
+
+    public boolean isEmptyListEnabled() {
+        return mEmptyListEnabled;
+    }
+
+    public void setEmptyListEnabled(boolean flag) {
+        mEmptyListEnabled = flag;
+    }
+
+    public boolean isSelectionVisible() {
+        return mSelectionVisible;
+    }
+
+    public void setSelectionVisible(boolean flag) {
+        this.mSelectionVisible = flag;
+    }
+
+    public boolean isQuickContactEnabled() {
+        return mQuickContactEnabled;
+    }
+
+    public void setQuickContactEnabled(boolean quickContactEnabled) {
+        mQuickContactEnabled = quickContactEnabled;
+    }
+
+    public boolean isAdjustSelectionBoundsEnabled() {
+        return mAdjustSelectionBoundsEnabled;
+    }
+
+    public void setAdjustSelectionBoundsEnabled(boolean enabled) {
+        mAdjustSelectionBoundsEnabled = enabled;
+    }
+
+    public boolean shouldIncludeFavorites() {
+        return mIncludeFavorites;
+    }
+
+    public void setIncludeFavorites(boolean includeFavorites) {
+        mIncludeFavorites = includeFavorites;
+    }
+
+    public void setFavoritesSectionHeader(int numberOfFavorites) {
+        if (mIncludeFavorites) {
+            mNumberOfFavorites = numberOfFavorites;
+            setSectionHeader(numberOfFavorites);
+        }
+    }
+
+    public int getNumberOfFavorites() {
+        return mNumberOfFavorites;
+    }
+
+    private void setSectionHeader(int numberOfItems) {
+        SectionIndexer indexer = getIndexer();
+        if (indexer != null) {
+            ((ContactsSectionIndexer) indexer).setFavoritesHeader(numberOfItems);
+        }
+    }
+
+    public void setDarkTheme(boolean value) {
+        mDarkTheme = value;
+    }
+
+    /**
+     * Updates partitions according to the directory meta-data contained in the supplied
+     * cursor.
+     */
+    public void changeDirectories(Cursor cursor) {
+        if (cursor.getCount() == 0) {
+            // Directory table must have at least local directory, without which this adapter will
+            // enter very weird state.
+            Log.e(TAG, "Directory search loader returned an empty cursor, which implies we have " +
+                    "no directory entries.", new RuntimeException());
+            return;
+        }
+        HashSet<Long> directoryIds = new HashSet<Long>();
+
+        int idColumnIndex = cursor.getColumnIndex(Directory._ID);
+        int directoryTypeColumnIndex = cursor.getColumnIndex(DirectoryListLoader.DIRECTORY_TYPE);
+        int displayNameColumnIndex = cursor.getColumnIndex(Directory.DISPLAY_NAME);
+        int photoSupportColumnIndex = cursor.getColumnIndex(Directory.PHOTO_SUPPORT);
+
+        // TODO preserve the order of partition to match those of the cursor
+        // Phase I: add new directories
+        cursor.moveToPosition(-1);
+        while (cursor.moveToNext()) {
+            long id = cursor.getLong(idColumnIndex);
+            directoryIds.add(id);
+            if (getPartitionByDirectoryId(id) == -1) {
+                DirectoryPartition partition = new DirectoryPartition(false, true);
+                partition.setDirectoryId(id);
+                if (DirectoryCompat.isRemoteDirectoryId(id)) {
+                    if (DirectoryCompat.isEnterpriseDirectoryId(id)) {
+                        partition.setLabel(mContext.getString(R.string.directory_search_label_work));
+                    } else {
+                        partition.setLabel(mContext.getString(R.string.directory_search_label));
+                    }
+                } else {
+                    if (DirectoryCompat.isEnterpriseDirectoryId(id)) {
+                        partition.setLabel(mContext.getString(R.string.list_filter_phones_work));
+                    } else {
+                        partition.setLabel(mDefaultFilterHeaderText.toString());
+                    }
+                }
+                partition.setDirectoryType(cursor.getString(directoryTypeColumnIndex));
+                partition.setDisplayName(cursor.getString(displayNameColumnIndex));
+                int photoSupport = cursor.getInt(photoSupportColumnIndex);
+                partition.setPhotoSupported(photoSupport == Directory.PHOTO_SUPPORT_THUMBNAIL_ONLY
+                        || photoSupport == Directory.PHOTO_SUPPORT_FULL);
+                addPartition(partition);
+            }
+        }
+
+        // Phase II: remove deleted directories
+        int count = getPartitionCount();
+        for (int i = count; --i >= 0; ) {
+            Partition partition = getPartition(i);
+            if (partition instanceof DirectoryPartition) {
+                long id = ((DirectoryPartition)partition).getDirectoryId();
+                if (!directoryIds.contains(id)) {
+                    removePartition(i);
+                }
+            }
+        }
+
+        invalidate();
+        notifyDataSetChanged();
+    }
+
+    @Override
+    public void changeCursor(int partitionIndex, Cursor cursor) {
+        if (partitionIndex >= getPartitionCount()) {
+            // There is no partition for this data
+            return;
+        }
+
+        Partition partition = getPartition(partitionIndex);
+        if (partition instanceof DirectoryPartition) {
+            ((DirectoryPartition)partition).setStatus(DirectoryPartition.STATUS_LOADED);
+        }
+
+        if (mDisplayPhotos && mPhotoLoader != null && isPhotoSupported(partitionIndex)) {
+            mPhotoLoader.refreshCache();
+        }
+
+        super.changeCursor(partitionIndex, cursor);
+
+        if (isSectionHeaderDisplayEnabled() && partitionIndex == getIndexedPartition()) {
+            updateIndexer(cursor);
+        }
+
+        // When the cursor changes, cancel any pending asynchronous photo loads.
+        mPhotoLoader.cancelPendingRequests(mFragmentRootView);
+    }
+
+    public void changeCursor(Cursor cursor) {
+        changeCursor(0, cursor);
+    }
+
+    /**
+     * Updates the indexer, which is used to produce section headers.
+     */
+    private void updateIndexer(Cursor cursor) {
+        if (cursor == null || cursor.isClosed()) {
+            setIndexer(null);
+            return;
+        }
+
+        Bundle bundle = cursor.getExtras();
+        if (bundle.containsKey(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES) &&
+                bundle.containsKey(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS)) {
+            String sections[] =
+                    bundle.getStringArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES);
+            int counts[] = bundle.getIntArray(
+                    Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS);
+
+            if (getExtraStartingSection()) {
+                // Insert an additional unnamed section at the top of the list.
+                String allSections[] = new String[sections.length + 1];
+                int allCounts[] = new int[counts.length + 1];
+                for (int i = 0; i < sections.length; i++) {
+                    allSections[i + 1] = sections[i];
+                    allCounts[i + 1] = counts[i];
+                }
+                allCounts[0] = 1;
+                allSections[0] = "";
+                setIndexer(new ContactsSectionIndexer(allSections, allCounts));
+            } else {
+                setIndexer(new ContactsSectionIndexer(sections, counts));
+            }
+        } else {
+            setIndexer(null);
+        }
+    }
+
+    protected boolean getExtraStartingSection() {
+        return false;
+    }
+
+    @Override
+    public int getViewTypeCount() {
+        // We need a separate view type for each item type, plus another one for
+        // each type with header, plus one for "other".
+        return getItemViewTypeCount() * 2 + 1;
+    }
+
+    @Override
+    public int getItemViewType(int partitionIndex, int position) {
+        int type = super.getItemViewType(partitionIndex, position);
+        if (isSectionHeaderDisplayEnabled() && partitionIndex == getIndexedPartition()) {
+            Placement placement = getItemPlacementInSection(position);
+            return placement.firstInSection ? type : getItemViewTypeCount() + type;
+        } else {
+            return type;
+        }
+    }
+
+    @Override
+    public boolean isEmpty() {
+        // TODO
+//        if (contactsListActivity.mProviderStatus != ProviderStatus.STATUS_NORMAL) {
+//            return true;
+//        }
+
+        if (!mEmptyListEnabled) {
+            return false;
+        } else if (isSearchMode()) {
+            return TextUtils.isEmpty(getQueryString());
+        } else {
+            return super.isEmpty();
+        }
+    }
+
+    public boolean isLoading() {
+        int count = getPartitionCount();
+        for (int i = 0; i < count; i++) {
+            Partition partition = getPartition(i);
+            if (partition instanceof DirectoryPartition
+                    && ((DirectoryPartition) partition).isLoading()) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean areAllPartitionsEmpty() {
+        int count = getPartitionCount();
+        for (int i = 0; i < count; i++) {
+            if (!isPartitionEmpty(i)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Changes visibility parameters for the default directory partition.
+     */
+    public void configureDefaultPartition(boolean showIfEmpty, boolean hasHeader) {
+        int defaultPartitionIndex = -1;
+        int count = getPartitionCount();
+        for (int i = 0; i < count; i++) {
+            Partition partition = getPartition(i);
+            if (partition instanceof DirectoryPartition &&
+                    ((DirectoryPartition)partition).getDirectoryId() == Directory.DEFAULT) {
+                defaultPartitionIndex = i;
+                break;
+            }
+        }
+        if (defaultPartitionIndex != -1) {
+            setShowIfEmpty(defaultPartitionIndex, showIfEmpty);
+            setHasHeader(defaultPartitionIndex, hasHeader);
+        }
+    }
+
+    @Override
+    protected View newHeaderView(Context context, int partition, Cursor cursor,
+            ViewGroup parent) {
+        LayoutInflater inflater = LayoutInflater.from(context);
+        View view = inflater.inflate(R.layout.directory_header, parent, false);
+        if (!getPinnedPartitionHeadersEnabled()) {
+            // If the headers are unpinned, there is no need for their background
+            // color to be non-transparent. Setting this transparent reduces maintenance for
+            // non-pinned headers. We don't need to bother synchronizing the activity's
+            // background color with the header background color.
+            view.setBackground(null);
+        }
+        return view;
+    }
+
+    protected void bindWorkProfileIcon(final ContactListItemView view, int partitionId) {
+        final Partition partition = getPartition(partitionId);
+        if (partition instanceof DirectoryPartition) {
+            final DirectoryPartition directoryPartition = (DirectoryPartition) partition;
+            final long directoryId = directoryPartition.getDirectoryId();
+            final long userType = ContactsUtils.determineUserType(directoryId, null);
+            view.setWorkProfileIconEnabled(userType == ContactsUtils.USER_TYPE_WORK);
+        }
+    }
+
+    @Override
+    protected void bindHeaderView(View view, int partitionIndex, Cursor cursor) {
+        Partition partition = getPartition(partitionIndex);
+        if (!(partition instanceof DirectoryPartition)) {
+            return;
+        }
+
+        DirectoryPartition directoryPartition = (DirectoryPartition)partition;
+        long directoryId = directoryPartition.getDirectoryId();
+        TextView labelTextView = (TextView)view.findViewById(R.id.label);
+        TextView displayNameTextView = (TextView)view.findViewById(R.id.display_name);
+        labelTextView.setText(directoryPartition.getLabel());
+        if (!DirectoryCompat.isRemoteDirectoryId(directoryId)) {
+            displayNameTextView.setText(null);
+        } else {
+            String directoryName = directoryPartition.getDisplayName();
+            String displayName = !TextUtils.isEmpty(directoryName)
+                    ? directoryName
+                    : directoryPartition.getDirectoryType();
+            displayNameTextView.setText(displayName);
+        }
+
+        final Resources res = getContext().getResources();
+        final int headerPaddingTop = partitionIndex == 1 && getPartition(0).isEmpty()?
+                0 : res.getDimensionPixelOffset(R.dimen.directory_header_extra_top_padding);
+        // There should be no extra padding at the top of the first directory header
+        view.setPaddingRelative(view.getPaddingStart(), headerPaddingTop, view.getPaddingEnd(),
+                view.getPaddingBottom());
+    }
+
+    // Default implementation simply returns number of rows in the cursor.
+    // Broken out into its own routine so can be overridden by child classes
+    // for eg number of unique contacts for a phone list.
+    protected int getResultCount(Cursor cursor) {
+        return cursor == null ? 0 : cursor.getCount();
+    }
+
+    // TODO: fix PluralRules to handle zero correctly and use Resources.getQuantityText directly
+    public String getQuantityText(int count, int zeroResourceId, int pluralResourceId) {
+        if (count == 0) {
+            return getContext().getString(zeroResourceId);
+        } else {
+            String format = getContext().getResources()
+                    .getQuantityText(pluralResourceId, count).toString();
+            return String.format(format, count);
+        }
+    }
+
+    public boolean isPhotoSupported(int partitionIndex) {
+        Partition partition = getPartition(partitionIndex);
+        if (partition instanceof DirectoryPartition) {
+            return ((DirectoryPartition) partition).isPhotoSupported();
+        }
+        return true;
+    }
+
+    /**
+     * Returns the currently selected filter.
+     */
+    public ContactListFilter getFilter() {
+        return mFilter;
+    }
+
+    public void setFilter(ContactListFilter filter) {
+        mFilter = filter;
+    }
+
+    // TODO: move sharable logic (bindXX() methods) to here with extra arguments
+
+    /**
+     * Loads the photo for the quick contact view and assigns the contact uri.
+     * @param photoIdColumn Index of the photo id column
+     * @param photoUriColumn Index of the photo uri column. Optional: Can be -1
+     * @param contactIdColumn Index of the contact id column
+     * @param lookUpKeyColumn Index of the lookup key column
+     * @param displayNameColumn Index of the display name column
+     */
+    protected void bindQuickContact(final ContactListItemView view, int partitionIndex,
+            Cursor cursor, int photoIdColumn, int photoUriColumn, int contactIdColumn,
+            int lookUpKeyColumn, int displayNameColumn) {
+        long photoId = 0;
+        if (!cursor.isNull(photoIdColumn)) {
+            photoId = cursor.getLong(photoIdColumn);
+        }
+
+        QuickContactBadge quickContact = view.getQuickContact();
+        quickContact.assignContactUri(
+                getContactUri(partitionIndex, cursor, contactIdColumn, lookUpKeyColumn));
+        if (CompatUtils.hasPrioritizedMimeType()) {
+            // The Contacts app never uses the QuickContactBadge. Therefore, it is safe to assume
+            // that only Dialer will use this QuickContact badge. This means prioritizing the phone
+            // mimetype here is reasonable.
+            quickContact.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE);
+        }
+
+        if (photoId != 0 || photoUriColumn == -1) {
+            getPhotoLoader().loadThumbnail(quickContact, photoId, mDarkTheme, mCircularPhotos,
+                    null);
+        } else {
+            final String photoUriString = cursor.getString(photoUriColumn);
+            final Uri photoUri = photoUriString == null ? null : Uri.parse(photoUriString);
+            DefaultImageRequest request = null;
+            if (photoUri == null) {
+                request = getDefaultImageRequestFromCursor(cursor, displayNameColumn,
+                        lookUpKeyColumn);
+            }
+            getPhotoLoader().loadPhoto(quickContact, photoUri, -1, mDarkTheme, mCircularPhotos,
+                    request);
+        }
+
+    }
+
+    @Override
+    public boolean hasStableIds() {
+        // Whenever bindViewId() is called, the values passed into setId() are stable or
+        // stable-ish. For example, when one contact is modified we don't expect a second
+        // contact's Contact._ID values to change.
+        return true;
+    }
+
+    protected void bindViewId(final ContactListItemView view, Cursor cursor, int idColumn) {
+        // Set a semi-stable id, so that talkback won't get confused when the list gets
+        // refreshed. There is little harm in inserting the same ID twice.
+        long contactId = cursor.getLong(idColumn);
+        view.setId((int) (contactId % Integer.MAX_VALUE));
+
+    }
+
+    protected Uri getContactUri(int partitionIndex, Cursor cursor,
+            int contactIdColumn, int lookUpKeyColumn) {
+        long contactId = cursor.getLong(contactIdColumn);
+        String lookupKey = cursor.getString(lookUpKeyColumn);
+        long directoryId = ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
+        Uri uri = Contacts.getLookupUri(contactId, lookupKey);
+        if (uri != null && directoryId != Directory.DEFAULT) {
+            uri = uri.buildUpon().appendQueryParameter(
+                    ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build();
+        }
+        return uri;
+    }
+
+    /**
+     * Retrieves the lookup key and display name from a cursor, and returns a
+     * {@link DefaultImageRequest} containing these contact details
+     *
+     * @param cursor Contacts cursor positioned at the current row to retrieve contact details for
+     * @param displayNameColumn Column index of the display name
+     * @param lookupKeyColumn Column index of the lookup key
+     * @return {@link DefaultImageRequest} with the displayName and identifier fields set to the
+     * display name and lookup key of the contact.
+     */
+    public DefaultImageRequest getDefaultImageRequestFromCursor(Cursor cursor,
+            int displayNameColumn, int lookupKeyColumn) {
+        final String displayName = cursor.getString(displayNameColumn);
+        final String lookupKey = cursor.getString(lookupKeyColumn);
+        return new DefaultImageRequest(displayName, lookupKey, mCircularPhotos);
+    }
+}
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
new file mode 100644
index 0000000..6115b50
--- /dev/null
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -0,0 +1,987 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.list;
+
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.Intent;
+import android.content.Loader;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Parcelable;
+import android.provider.ContactsContract.Directory;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.View.OnFocusChangeListener;
+import android.view.View.OnTouchListener;
+import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.AbsListView;
+import android.widget.AbsListView.OnScrollListener;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.AdapterView.OnItemLongClickListener;
+import android.widget.ListView;
+
+import com.android.common.widget.CompositeCursorAdapter.Partition;
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.logging.ListEvent.ActionType;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.preference.ContactsPreferences;
+
+import java.util.Locale;
+
+/**
+ * Common base class for various contact-related list fragments.
+ */
+public abstract class ContactEntryListFragment<T extends ContactEntryListAdapter>
+        extends Fragment
+        implements OnItemClickListener, OnScrollListener, OnFocusChangeListener, OnTouchListener,
+                OnItemLongClickListener, LoaderCallbacks<Cursor> {
+    private static final String TAG = "ContactEntryListFragment";
+
+    // TODO: Make this protected. This should not be used from the PeopleActivity but
+    // instead use the new startActivityWithResultFromFragment API
+    public static final int ACTIVITY_REQUEST_CODE_PICKER = 1;
+
+    private static final String KEY_LIST_STATE = "liststate";
+    private static final String KEY_SECTION_HEADER_DISPLAY_ENABLED = "sectionHeaderDisplayEnabled";
+    private static final String KEY_PHOTO_LOADER_ENABLED = "photoLoaderEnabled";
+    private static final String KEY_QUICK_CONTACT_ENABLED = "quickContactEnabled";
+    private static final String KEY_ADJUST_SELECTION_BOUNDS_ENABLED =
+            "adjustSelectionBoundsEnabled";
+    private static final String KEY_SEARCH_MODE = "searchMode";
+    private static final String KEY_DISPLAY_DIRECTORY_HEADER = "displayDirectoryHeader";
+    private static final String KEY_VISIBLE_SCROLLBAR_ENABLED = "visibleScrollbarEnabled";
+    private static final String KEY_SCROLLBAR_POSITION = "scrollbarPosition";
+    private static final String KEY_QUERY_STRING = "queryString";
+    private static final String KEY_DIRECTORY_SEARCH_MODE = "directorySearchMode";
+    private static final String KEY_SELECTION_VISIBLE = "selectionVisible";
+    private static final String KEY_REQUEST = "request";
+    private static final String KEY_DARK_THEME = "darkTheme";
+    private static final String KEY_LEGACY_COMPATIBILITY = "legacyCompatibility";
+    private static final String KEY_DIRECTORY_RESULT_LIMIT = "directoryResultLimit";
+    private static final String KEY_LOGS_LIST_EVENTS = "logsListEvents";
+    private static final String KEY_DATA_LOADED = "dataLoaded";
+
+    private static final String DIRECTORY_ID_ARG_KEY = "directoryId";
+
+    private static final int DIRECTORY_LOADER_ID = -1;
+
+    private static final int DIRECTORY_SEARCH_DELAY_MILLIS = 300;
+    private static final int DIRECTORY_SEARCH_MESSAGE = 1;
+
+    private static final int DEFAULT_DIRECTORY_RESULT_LIMIT = 20;
+
+    private boolean mSectionHeaderDisplayEnabled;
+    private boolean mPhotoLoaderEnabled;
+    private boolean mQuickContactEnabled = true;
+    private boolean mAdjustSelectionBoundsEnabled = true;
+    private boolean mIncludeFavorites;
+    private boolean mSearchMode;
+    private boolean mDisplayDirectoryHeader = true;
+    private boolean mVisibleScrollbarEnabled;
+    private boolean mShowEmptyListForEmptyQuery;
+    private int mVerticalScrollbarPosition = getDefaultVerticalScrollbarPosition();
+    private String mQueryString;
+    private int mDirectorySearchMode = DirectoryListLoader.SEARCH_MODE_NONE;
+    private boolean mSelectionVisible;
+    private boolean mLegacyCompatibility;
+    // Whether we should log list LOAD events. It may be modified when list filter is changed.
+    private boolean mLogListEvents = true;
+    // Whether data has been loaded ever. It will stay true once it's set to true in the lifecycle.
+    // We use this flag to log LOAD events when the activity/fragment is initialized.
+    private boolean mDataLoaded;
+
+    private boolean mEnabled = true;
+
+    private T mAdapter;
+    protected View mView;
+    private ListView mListView;
+
+    /**
+     * Used to save the scrolling state of the list when the fragment is not recreated.
+     */
+    private int mListViewTopIndex;
+    private int mListViewTopOffset;
+
+    /**
+     * Used for keeping track of the scroll state of the list.
+     */
+    private Parcelable mListState;
+
+    /**
+     * The type of the contacts list.
+     */
+    private int mListType;
+
+    private int mDisplayOrder;
+    private int mSortOrder;
+    private int mDirectoryResultLimit = DEFAULT_DIRECTORY_RESULT_LIMIT;
+
+    private ContactPhotoManager mPhotoManager;
+    private ContactsPreferences mContactsPrefs;
+
+    private boolean mForceLoad;
+
+    private boolean mDarkTheme;
+
+    private static final int STATUS_NOT_LOADED = 0;
+    private static final int STATUS_LOADING = 1;
+    private static final int STATUS_LOADED = 2;
+
+    private int mDirectoryListStatus = STATUS_NOT_LOADED;
+
+    /**
+     * Indicates whether we are doing the initial complete load of data (false) or
+     * a refresh caused by a change notification (true)
+     */
+    private boolean mLoadPriorityDirectoriesOnly;
+
+    private Context mContext;
+
+    private LoaderManager mLoaderManager;
+
+    private Handler mDelayedDirectorySearchHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            if (msg.what == DIRECTORY_SEARCH_MESSAGE) {
+                loadDirectoryPartition(msg.arg1, (DirectoryPartition) msg.obj);
+            }
+        }
+    };
+    private int defaultVerticalScrollbarPosition;
+
+    protected abstract View inflateView(LayoutInflater inflater, ViewGroup container);
+    protected abstract T createListAdapter();
+
+    /**
+     * @param position Please note that the position is already adjusted for
+     *            header views, so "0" means the first list item below header
+     *            views.
+     */
+    protected abstract void onItemClick(int position, long id);
+
+    /**
+     * @param position Please note that the position is already adjusted for
+     *            header views, so "0" means the first list item below header
+     *            views.
+     */
+    protected boolean onItemLongClick(int position, long id) {
+        return false;
+    }
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        setContext(activity);
+        setLoaderManager(super.getLoaderManager());
+    }
+
+    /**
+     * Sets a context for the fragment in the unit test environment.
+     */
+    public void setContext(Context context) {
+        mContext = context;
+        configurePhotoLoader();
+    }
+
+    public Context getContext() {
+        return mContext;
+    }
+
+    public void setEnabled(boolean enabled) {
+        if (mEnabled != enabled) {
+            mEnabled = enabled;
+            if (mAdapter != null) {
+                if (mEnabled) {
+                    reloadData();
+                } else {
+                    mAdapter.clearPartitions();
+                }
+            }
+        }
+    }
+
+    /**
+     * Overrides a loader manager for use in unit tests.
+     */
+    public void setLoaderManager(LoaderManager loaderManager) {
+        mLoaderManager = loaderManager;
+    }
+
+    @Override
+    public LoaderManager getLoaderManager() {
+        return mLoaderManager;
+    }
+
+    public T getAdapter() {
+        return mAdapter;
+    }
+
+    @Override
+    public View getView() {
+        return mView;
+    }
+
+    public ListView getListView() {
+        return mListView;
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putBoolean(KEY_SECTION_HEADER_DISPLAY_ENABLED, mSectionHeaderDisplayEnabled);
+        outState.putBoolean(KEY_PHOTO_LOADER_ENABLED, mPhotoLoaderEnabled);
+        outState.putBoolean(KEY_QUICK_CONTACT_ENABLED, mQuickContactEnabled);
+        outState.putBoolean(KEY_ADJUST_SELECTION_BOUNDS_ENABLED, mAdjustSelectionBoundsEnabled);
+        outState.putBoolean(KEY_SEARCH_MODE, mSearchMode);
+        outState.putBoolean(KEY_DISPLAY_DIRECTORY_HEADER, mDisplayDirectoryHeader);
+        outState.putBoolean(KEY_VISIBLE_SCROLLBAR_ENABLED, mVisibleScrollbarEnabled);
+        outState.putInt(KEY_SCROLLBAR_POSITION, mVerticalScrollbarPosition);
+        outState.putInt(KEY_DIRECTORY_SEARCH_MODE, mDirectorySearchMode);
+        outState.putBoolean(KEY_SELECTION_VISIBLE, mSelectionVisible);
+        outState.putBoolean(KEY_LEGACY_COMPATIBILITY, mLegacyCompatibility);
+        outState.putString(KEY_QUERY_STRING, mQueryString);
+        outState.putInt(KEY_DIRECTORY_RESULT_LIMIT, mDirectoryResultLimit);
+        outState.putBoolean(KEY_DARK_THEME, mDarkTheme);
+        outState.putBoolean(KEY_LOGS_LIST_EVENTS, mLogListEvents);
+        outState.putBoolean(KEY_DATA_LOADED, mDataLoaded);
+
+        if (mListView != null) {
+            outState.putParcelable(KEY_LIST_STATE, mListView.onSaveInstanceState());
+        }
+    }
+
+    @Override
+    public void onCreate(Bundle savedState) {
+        super.onCreate(savedState);
+        restoreSavedState(savedState);
+        mAdapter = createListAdapter();
+        mContactsPrefs = new ContactsPreferences(mContext);
+    }
+
+    public void restoreSavedState(Bundle savedState) {
+        if (savedState == null) {
+            return;
+        }
+
+        mSectionHeaderDisplayEnabled = savedState.getBoolean(KEY_SECTION_HEADER_DISPLAY_ENABLED);
+        mPhotoLoaderEnabled = savedState.getBoolean(KEY_PHOTO_LOADER_ENABLED);
+        mQuickContactEnabled = savedState.getBoolean(KEY_QUICK_CONTACT_ENABLED);
+        mAdjustSelectionBoundsEnabled = savedState.getBoolean(KEY_ADJUST_SELECTION_BOUNDS_ENABLED);
+        mSearchMode = savedState.getBoolean(KEY_SEARCH_MODE);
+        mDisplayDirectoryHeader = savedState.getBoolean(KEY_DISPLAY_DIRECTORY_HEADER);
+        mVisibleScrollbarEnabled = savedState.getBoolean(KEY_VISIBLE_SCROLLBAR_ENABLED);
+        mVerticalScrollbarPosition = savedState.getInt(KEY_SCROLLBAR_POSITION);
+        mDirectorySearchMode = savedState.getInt(KEY_DIRECTORY_SEARCH_MODE);
+        mSelectionVisible = savedState.getBoolean(KEY_SELECTION_VISIBLE);
+        mLegacyCompatibility = savedState.getBoolean(KEY_LEGACY_COMPATIBILITY);
+        mQueryString = savedState.getString(KEY_QUERY_STRING);
+        mDirectoryResultLimit = savedState.getInt(KEY_DIRECTORY_RESULT_LIMIT);
+        mDarkTheme = savedState.getBoolean(KEY_DARK_THEME);
+
+        // Retrieve list state. This will be applied in onLoadFinished
+        mListState = savedState.getParcelable(KEY_LIST_STATE);
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        mContactsPrefs.registerChangeListener(mPreferencesChangeListener);
+
+        mForceLoad = loadPreferences();
+
+        mDirectoryListStatus = STATUS_NOT_LOADED;
+        mLoadPriorityDirectoriesOnly = true;
+
+        startLoading();
+    }
+
+    protected void startLoading() {
+        if (mAdapter == null) {
+            // The method was called before the fragment was started
+            return;
+        }
+
+        configureAdapter();
+        int partitionCount = mAdapter.getPartitionCount();
+        for (int i = 0; i < partitionCount; i++) {
+            Partition partition = mAdapter.getPartition(i);
+            if (partition instanceof DirectoryPartition) {
+                DirectoryPartition directoryPartition = (DirectoryPartition)partition;
+                if (directoryPartition.getStatus() == DirectoryPartition.STATUS_NOT_LOADED) {
+                    if (directoryPartition.isPriorityDirectory() || !mLoadPriorityDirectoriesOnly) {
+                        startLoadingDirectoryPartition(i);
+                    }
+                }
+            } else {
+                getLoaderManager().initLoader(i, null, this);
+            }
+        }
+
+        // Next time this method is called, we should start loading non-priority directories
+        mLoadPriorityDirectoriesOnly = false;
+    }
+
+    @Override
+    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+        if (id == DIRECTORY_LOADER_ID) {
+            DirectoryListLoader loader = new DirectoryListLoader(mContext);
+            loader.setDirectorySearchMode(mAdapter.getDirectorySearchMode());
+            loader.setLocalInvisibleDirectoryEnabled(
+                    ContactEntryListAdapter.LOCAL_INVISIBLE_DIRECTORY_ENABLED);
+            return loader;
+        } else {
+            CursorLoader loader = createCursorLoader(mContext);
+            long directoryId = args != null && args.containsKey(DIRECTORY_ID_ARG_KEY)
+                    ? args.getLong(DIRECTORY_ID_ARG_KEY)
+                    : Directory.DEFAULT;
+            mAdapter.configureLoader(loader, directoryId);
+            return loader;
+        }
+    }
+
+    public CursorLoader createCursorLoader(Context context) {
+        return new CursorLoader(context, null, null, null, null, null) {
+            @Override
+            protected Cursor onLoadInBackground() {
+                try {
+                    return super.onLoadInBackground();
+                } catch (RuntimeException e) {
+                    // We don't even know what the projection should be, so no point trying to
+                    // return an empty MatrixCursor with the correct projection here.
+                    Log.w(TAG, "RuntimeException while trying to query ContactsProvider.");
+                    return null;
+                }
+            }
+        };
+    }
+
+    private void startLoadingDirectoryPartition(int partitionIndex) {
+        DirectoryPartition partition = (DirectoryPartition)mAdapter.getPartition(partitionIndex);
+        partition.setStatus(DirectoryPartition.STATUS_LOADING);
+        long directoryId = partition.getDirectoryId();
+        if (mForceLoad) {
+            if (directoryId == Directory.DEFAULT) {
+                loadDirectoryPartition(partitionIndex, partition);
+            } else {
+                loadDirectoryPartitionDelayed(partitionIndex, partition);
+            }
+        } else {
+            Bundle args = new Bundle();
+            args.putLong(DIRECTORY_ID_ARG_KEY, directoryId);
+            getLoaderManager().initLoader(partitionIndex, args, this);
+        }
+    }
+
+    /**
+     * Queues up a delayed request to search the specified directory. Since
+     * directory search will likely introduce a lot of network traffic, we want
+     * to wait for a pause in the user's typing before sending a directory request.
+     */
+    private void loadDirectoryPartitionDelayed(int partitionIndex, DirectoryPartition partition) {
+        mDelayedDirectorySearchHandler.removeMessages(DIRECTORY_SEARCH_MESSAGE, partition);
+        Message msg = mDelayedDirectorySearchHandler.obtainMessage(
+                DIRECTORY_SEARCH_MESSAGE, partitionIndex, 0, partition);
+        mDelayedDirectorySearchHandler.sendMessageDelayed(msg, DIRECTORY_SEARCH_DELAY_MILLIS);
+    }
+
+    /**
+     * Loads the directory partition.
+     */
+    protected void loadDirectoryPartition(int partitionIndex, DirectoryPartition partition) {
+        Bundle args = new Bundle();
+        args.putLong(DIRECTORY_ID_ARG_KEY, partition.getDirectoryId());
+        getLoaderManager().restartLoader(partitionIndex, args, this);
+    }
+
+    /**
+     * Cancels all queued directory loading requests.
+     */
+    private void removePendingDirectorySearchRequests() {
+        mDelayedDirectorySearchHandler.removeMessages(DIRECTORY_SEARCH_MESSAGE);
+    }
+
+    @Override
+    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+        if (!mEnabled) {
+            return;
+        }
+
+        getListView().setVisibility(View.VISIBLE);
+        getView().setVisibility(View.VISIBLE);
+
+        int loaderId = loader.getId();
+        if (loaderId == DIRECTORY_LOADER_ID) {
+            mDirectoryListStatus = STATUS_LOADED;
+            mAdapter.changeDirectories(data);
+            startLoading();
+        } else {
+            onPartitionLoaded(loaderId, data);
+            if (isSearchMode()) {
+                int directorySearchMode = getDirectorySearchMode();
+                if (directorySearchMode != DirectoryListLoader.SEARCH_MODE_NONE) {
+                    if (mDirectoryListStatus == STATUS_NOT_LOADED) {
+                        mDirectoryListStatus = STATUS_LOADING;
+                        getLoaderManager().initLoader(DIRECTORY_LOADER_ID, null, this);
+                    } else {
+                        startLoading();
+                    }
+                }
+            } else {
+                maybeLogListEvent();
+                mDirectoryListStatus = STATUS_NOT_LOADED;
+                getLoaderManager().destroyLoader(DIRECTORY_LOADER_ID);
+            }
+        }
+    }
+
+    protected void maybeLogListEvent() {
+        if (!mDataLoaded || mLogListEvents) {
+            Logger.logListEvent(ActionType.LOAD, getListType(), getAdapter().getCount(),
+                        /* clickedIndex */ -1, /* numSelected */ 0);
+            mLogListEvents = false;
+            mDataLoaded = true;
+        }
+    }
+
+    public void onLoaderReset(Loader<Cursor> loader) {
+    }
+
+    protected void onPartitionLoaded(int partitionIndex, Cursor data) {
+        if (partitionIndex >= mAdapter.getPartitionCount()) {
+            // When we get unsolicited data, ignore it.  This could happen
+            // when we are switching from search mode to the default mode.
+            return;
+        }
+
+        mAdapter.changeCursor(partitionIndex, data);
+        setListHeader();
+
+        if (!isLoading()) {
+            completeRestoreInstanceState();
+        }
+    }
+
+    public boolean isLoading() {
+        if (mAdapter != null && mAdapter.isLoading()) {
+            return true;
+        }
+
+        if (isLoadingDirectoryList()) {
+            return true;
+        }
+
+        return false;
+    }
+
+    public boolean isLoadingDirectoryList() {
+        return isSearchMode() && getDirectorySearchMode() != DirectoryListLoader.SEARCH_MODE_NONE
+                && (mDirectoryListStatus == STATUS_NOT_LOADED
+                        || mDirectoryListStatus == STATUS_LOADING);
+    }
+
+    @Override
+    public void onStop() {
+        super.onStop();
+        mContactsPrefs.unregisterChangeListener();
+        mAdapter.clearPartitions();
+    }
+
+    protected void reloadData() {
+        removePendingDirectorySearchRequests();
+        mAdapter.onDataReload();
+        mLoadPriorityDirectoriesOnly = true;
+        mForceLoad = true;
+        startLoading();
+    }
+
+    /**
+     * Shows a view at the top of the list.
+     */
+    protected void setListHeader() {}
+
+    /**
+     * Provides logic that dismisses this fragment. The default implementation
+     * does nothing.
+     */
+    protected void finish() {
+    }
+
+    public void setSectionHeaderDisplayEnabled(boolean flag) {
+        if (mSectionHeaderDisplayEnabled != flag) {
+            mSectionHeaderDisplayEnabled = flag;
+            if (mAdapter != null) {
+                mAdapter.setSectionHeaderDisplayEnabled(flag);
+            }
+            configureVerticalScrollbar();
+        }
+    }
+
+    public boolean isSectionHeaderDisplayEnabled() {
+        return mSectionHeaderDisplayEnabled;
+    }
+
+    public void setVisibleScrollbarEnabled(boolean flag) {
+        if (mVisibleScrollbarEnabled != flag) {
+            mVisibleScrollbarEnabled = flag;
+            configureVerticalScrollbar();
+        }
+    }
+
+    public boolean isVisibleScrollbarEnabled() {
+        return mVisibleScrollbarEnabled;
+    }
+
+    public void setVerticalScrollbarPosition(int position) {
+        if (mVerticalScrollbarPosition != position) {
+            mVerticalScrollbarPosition = position;
+            configureVerticalScrollbar();
+        }
+    }
+
+    private void configureVerticalScrollbar() {
+        boolean hasScrollbar = isVisibleScrollbarEnabled() && isSectionHeaderDisplayEnabled();
+
+        if (mListView != null) {
+            mListView.setFastScrollEnabled(hasScrollbar);
+            mListView.setVerticalScrollbarPosition(mVerticalScrollbarPosition);
+            mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
+        }
+    }
+
+    public void setPhotoLoaderEnabled(boolean flag) {
+        mPhotoLoaderEnabled = flag;
+        configurePhotoLoader();
+    }
+
+    public boolean isPhotoLoaderEnabled() {
+        return mPhotoLoaderEnabled;
+    }
+
+    /**
+     * Returns true if the list is supposed to visually highlight the selected item.
+     */
+    public boolean isSelectionVisible() {
+        return mSelectionVisible;
+    }
+
+    public void setSelectionVisible(boolean flag) {
+        this.mSelectionVisible = flag;
+    }
+
+    public void setQuickContactEnabled(boolean flag) {
+        this.mQuickContactEnabled = flag;
+    }
+
+    public void setAdjustSelectionBoundsEnabled(boolean flag) {
+        mAdjustSelectionBoundsEnabled = flag;
+    }
+
+    public void setIncludeFavorites(boolean flag) {
+        mIncludeFavorites = flag;
+        if (mAdapter != null) {
+            mAdapter.setIncludeFavorites(flag);
+        }
+    }
+
+    public void setDisplayDirectoryHeader(boolean flag) {
+        mDisplayDirectoryHeader = flag;
+    }
+
+    /**
+     * Enter/exit search mode. This is method is tightly related to the current query, and should
+     * only be called by {@link #setQueryString}.
+     *
+     * Also note this method doesn't call {@link #reloadData()}; {@link #setQueryString} does it.
+     */
+    protected void setSearchMode(boolean flag) {
+        if (mSearchMode != flag) {
+            mSearchMode = flag;
+            setSectionHeaderDisplayEnabled(!mSearchMode);
+
+            if (!flag) {
+                mDirectoryListStatus = STATUS_NOT_LOADED;
+                getLoaderManager().destroyLoader(DIRECTORY_LOADER_ID);
+            }
+
+            if (mAdapter != null) {
+                mAdapter.setSearchMode(flag);
+
+                mAdapter.clearPartitions();
+                if (!flag) {
+                    // If we are switching from search to regular display, remove all directory
+                    // partitions after default one, assuming they are remote directories which
+                    // should be cleaned up on exiting the search mode.
+                    mAdapter.removeDirectoriesAfterDefault();
+                }
+                mAdapter.configureDefaultPartition(false, shouldDisplayDirectoryHeader());
+            }
+
+            if (mListView != null) {
+                mListView.setFastScrollEnabled(!flag);
+            }
+        }
+    }
+
+    /**
+     * When not in search mode, directory header should always be hidden.
+     * When in search mode, directory header should be displayed when mDisplayDirectoryHeader is
+     * set to true. (mDisplayDirectoryHeader default value is true)
+     */
+    private boolean shouldDisplayDirectoryHeader() {
+        if (!mSearchMode) {
+            return false;
+        }
+        return mDisplayDirectoryHeader;
+    }
+
+    public final boolean isSearchMode() {
+        return mSearchMode;
+    }
+
+    public final String getQueryString() {
+        return mQueryString;
+    }
+
+    // TODO: the paramter delaySelection is not in use, and let's remove it.
+    public void setQueryString(String queryString, boolean delaySelection) {
+        if (!TextUtils.equals(mQueryString, queryString)) {
+            if (mShowEmptyListForEmptyQuery && mAdapter != null && mListView != null) {
+                if (TextUtils.isEmpty(mQueryString)) {
+                    // Restore the adapter if the query used to be empty.
+                    mListView.setAdapter(mAdapter);
+                } else if (TextUtils.isEmpty(queryString)) {
+                    // Instantly clear the list view if the new query is empty.
+                    mListView.setAdapter(null);
+                }
+            }
+
+            mQueryString = queryString;
+            setSearchMode(!TextUtils.isEmpty(mQueryString) || mShowEmptyListForEmptyQuery);
+
+            if (mAdapter != null) {
+                mAdapter.setQueryString(queryString);
+                reloadData();
+            }
+        }
+    }
+
+    public void setShowEmptyListForNullQuery(boolean show) {
+        mShowEmptyListForEmptyQuery = show;
+    }
+
+    public int getDirectoryLoaderId() {
+        return DIRECTORY_LOADER_ID;
+    }
+
+    public int getDirectorySearchMode() {
+        return mDirectorySearchMode;
+    }
+
+    public void setDirectorySearchMode(int mode) {
+        mDirectorySearchMode = mode;
+    }
+
+    public boolean isLegacyCompatibilityMode() {
+        return mLegacyCompatibility;
+    }
+
+    public void setLegacyCompatibilityMode(boolean flag) {
+        mLegacyCompatibility = flag;
+    }
+
+    protected int getContactNameDisplayOrder() {
+        return mDisplayOrder;
+    }
+
+    protected void setContactNameDisplayOrder(int displayOrder) {
+        mDisplayOrder = displayOrder;
+        if (mAdapter != null) {
+            mAdapter.setContactNameDisplayOrder(displayOrder);
+        }
+    }
+
+    public int getSortOrder() {
+        return mSortOrder;
+    }
+
+    public void setSortOrder(int sortOrder) {
+        mSortOrder = sortOrder;
+        if (mAdapter != null) {
+            mAdapter.setSortOrder(sortOrder);
+        }
+    }
+
+    public void setDirectoryResultLimit(int limit) {
+        mDirectoryResultLimit = limit;
+    }
+
+    protected boolean loadPreferences() {
+        boolean changed = false;
+        if (getContactNameDisplayOrder() != mContactsPrefs.getDisplayOrder()) {
+            setContactNameDisplayOrder(mContactsPrefs.getDisplayOrder());
+            changed = true;
+        }
+
+        if (getSortOrder() != mContactsPrefs.getSortOrder()) {
+            setSortOrder(mContactsPrefs.getSortOrder());
+            changed = true;
+        }
+
+        return changed;
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        onCreateView(inflater, container);
+
+        boolean searchMode = isSearchMode();
+        mAdapter.setSearchMode(searchMode);
+        mAdapter.configureDefaultPartition(false, shouldDisplayDirectoryHeader());
+        mAdapter.setPhotoLoader(mPhotoManager);
+        mListView.setAdapter(mAdapter);
+
+        if (!isSearchMode()) {
+            mListView.setFocusableInTouchMode(true);
+            mListView.requestFocus();
+        }
+
+        if (savedInstanceState != null) {
+            mLogListEvents = savedInstanceState.getBoolean(KEY_LOGS_LIST_EVENTS, true);
+            mDataLoaded = savedInstanceState.getBoolean(KEY_DATA_LOADED, false);
+        }
+
+        return mView;
+    }
+
+    protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
+        mView = inflateView(inflater, container);
+
+        mListView = (ListView)mView.findViewById(android.R.id.list);
+        if (mListView == null) {
+            throw new RuntimeException(
+                    "Your content must have a ListView whose id attribute is " +
+                    "'android.R.id.list'");
+        }
+
+        View emptyView = mView.findViewById(android.R.id.empty);
+        if (emptyView != null) {
+            mListView.setEmptyView(emptyView);
+        }
+
+        mListView.setOnItemClickListener(this);
+        mListView.setOnItemLongClickListener(this);
+        mListView.setOnFocusChangeListener(this);
+        mListView.setOnTouchListener(this);
+        mListView.setFastScrollEnabled(!isSearchMode());
+
+        // Tell list view to not show dividers. We'll do it ourself so that we can *not* show
+        // them when an A-Z headers is visible.
+        mListView.setDividerHeight(0);
+
+        // We manually save/restore the listview state
+        mListView.setSaveEnabled(false);
+
+        configureVerticalScrollbar();
+        configurePhotoLoader();
+
+        getAdapter().setFragmentRootView(getView());
+    }
+
+    protected void configurePhotoLoader() {
+        if (isPhotoLoaderEnabled() && mContext != null) {
+            if (mPhotoManager == null) {
+                mPhotoManager = ContactPhotoManager.getInstance(mContext);
+            }
+            if (mListView != null) {
+                mListView.setOnScrollListener(this);
+            }
+            if (mAdapter != null) {
+                mAdapter.setPhotoLoader(mPhotoManager);
+            }
+        }
+    }
+
+    protected void configureAdapter() {
+        if (mAdapter == null) {
+            return;
+        }
+
+        mAdapter.setQuickContactEnabled(mQuickContactEnabled);
+        mAdapter.setAdjustSelectionBoundsEnabled(mAdjustSelectionBoundsEnabled);
+        mAdapter.setIncludeFavorites(mIncludeFavorites);
+        mAdapter.setQueryString(mQueryString);
+        mAdapter.setDirectorySearchMode(mDirectorySearchMode);
+        mAdapter.setPinnedPartitionHeadersEnabled(false);
+        mAdapter.setContactNameDisplayOrder(mDisplayOrder);
+        mAdapter.setSortOrder(mSortOrder);
+        mAdapter.setSectionHeaderDisplayEnabled(mSectionHeaderDisplayEnabled);
+        mAdapter.setSelectionVisible(mSelectionVisible);
+        mAdapter.setDirectoryResultLimit(mDirectoryResultLimit);
+        mAdapter.setDarkTheme(mDarkTheme);
+    }
+
+    @Override
+    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
+            int totalItemCount) {
+    }
+
+    @Override
+    public void onScrollStateChanged(AbsListView view, int scrollState) {
+        if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {
+            mPhotoManager.pause();
+        } else if (isPhotoLoaderEnabled()) {
+            mPhotoManager.resume();
+        }
+    }
+
+    @Override
+    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+        hideSoftKeyboard();
+
+        int adjPosition = position - mListView.getHeaderViewsCount();
+        if (adjPosition >= 0) {
+            onItemClick(adjPosition, id);
+        }
+    }
+
+    @Override
+    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
+        int adjPosition = position - mListView.getHeaderViewsCount();
+
+        if (adjPosition >= 0) {
+            return onItemLongClick(adjPosition, id);
+        }
+        return false;
+    }
+
+    private void hideSoftKeyboard() {
+        // Hide soft keyboard, if visible
+        InputMethodManager inputMethodManager = (InputMethodManager)
+                mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
+        inputMethodManager.hideSoftInputFromWindow(mListView.getWindowToken(), 0);
+    }
+
+    /**
+     * Dismisses the soft keyboard when the list takes focus.
+     */
+    @Override
+    public void onFocusChange(View view, boolean hasFocus) {
+        if (view == mListView && hasFocus) {
+            hideSoftKeyboard();
+        }
+    }
+
+    /**
+     * Dismisses the soft keyboard when the list is touched.
+     */
+    @Override
+    public boolean onTouch(View view, MotionEvent event) {
+        if (view == mListView) {
+            hideSoftKeyboard();
+        }
+        return false;
+    }
+
+    @Override
+    public void onPause() {
+        // Save the scrolling state of the list view
+        mListViewTopIndex = mListView.getFirstVisiblePosition();
+        View v = mListView.getChildAt(0);
+        mListViewTopOffset = (v == null) ? 0 : (v.getTop() - mListView.getPaddingTop());
+
+        super.onPause();
+        removePendingDirectorySearchRequests();
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        // Restore the selection of the list view. See b/19982820.
+        // This has to be done manually because if the list view has its emptyView set,
+        // the scrolling state will be reset when clearPartitions() is called on the adapter.
+        mListView.setSelectionFromTop(mListViewTopIndex, mListViewTopOffset);
+    }
+
+    /**
+     * Restore the list state after the adapter is populated.
+     */
+    protected void completeRestoreInstanceState() {
+        if (mListState != null) {
+            mListView.onRestoreInstanceState(mListState);
+            mListState = null;
+        }
+    }
+
+    public void setDarkTheme(boolean value) {
+        mDarkTheme = value;
+        if (mAdapter != null) mAdapter.setDarkTheme(value);
+    }
+
+    /**
+     * Processes a result returned by the contact picker.
+     */
+    public void onPickerResult(Intent data) {
+        throw new UnsupportedOperationException("Picker result handler is not implemented.");
+    }
+
+    private ContactsPreferences.ChangeListener mPreferencesChangeListener =
+            new ContactsPreferences.ChangeListener() {
+        @Override
+        public void onChange() {
+            loadPreferences();
+            reloadData();
+        }
+    };
+
+    private int getDefaultVerticalScrollbarPosition() {
+        final Locale locale = Locale.getDefault();
+        final int layoutDirection = TextUtils.getLayoutDirectionFromLocale(locale);
+        switch (layoutDirection) {
+            case View.LAYOUT_DIRECTION_RTL:
+                return View.SCROLLBAR_POSITION_LEFT;
+            case View.LAYOUT_DIRECTION_LTR:
+            default:
+                return View.SCROLLBAR_POSITION_RIGHT;
+        }
+    }
+
+    public void setListType(int listType) {
+        mListType = listType;
+    }
+
+    public int getListType() {
+        return mListType;
+    }
+
+    public void setLogListEvents(boolean logListEvents) {
+        mLogListEvents = logListEvents;
+    }
+}
diff --git a/src/com/android/contacts/list/ContactListAdapter.java b/src/com/android/contacts/list/ContactListAdapter.java
new file mode 100644
index 0000000..cb63f53
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListAdapter.java
@@ -0,0 +1,444 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.provider.ContactsContract.SearchSnippets;
+import android.text.TextUtils;
+import android.view.ViewGroup;
+import android.widget.ListView;
+
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.R;
+import com.android.contacts.compat.ContactsCompat;
+import com.android.contacts.preference.ContactsPreferences;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * A cursor adapter for the {@link ContactsContract.Contacts#CONTENT_TYPE} content type.
+ */
+public abstract class ContactListAdapter extends MultiSelectEntryContactListAdapter {
+
+    public static class ContactQuery {
+        public static final String[] CONTACT_PROJECTION_PRIMARY = new String[] {
+            Contacts._ID,                           // 0
+            Contacts.DISPLAY_NAME_PRIMARY,          // 1
+            Contacts.CONTACT_PRESENCE,              // 2
+            Contacts.CONTACT_STATUS,                // 3
+            Contacts.PHOTO_ID,                      // 4
+            Contacts.PHOTO_THUMBNAIL_URI,           // 5
+            Contacts.LOOKUP_KEY,                    // 6
+            Contacts.PHONETIC_NAME,                 // 7
+            Contacts.STARRED,                       // 9
+        };
+
+        private static final String[] CONTACT_PROJECTION_ALTERNATIVE = new String[] {
+            Contacts._ID,                           // 0
+            Contacts.DISPLAY_NAME_ALTERNATIVE,      // 1
+            Contacts.CONTACT_PRESENCE,              // 2
+            Contacts.CONTACT_STATUS,                // 3
+            Contacts.PHOTO_ID,                      // 4
+            Contacts.PHOTO_THUMBNAIL_URI,           // 5
+            Contacts.LOOKUP_KEY,                    // 6
+            Contacts.PHONETIC_NAME,                 // 7
+            Contacts.STARRED,                       // 8
+        };
+
+        private static final String[] FILTER_PROJECTION_PRIMARY = new String[] {
+            Contacts._ID,                           // 0
+            Contacts.DISPLAY_NAME_PRIMARY,          // 1
+            Contacts.CONTACT_PRESENCE,              // 2
+            Contacts.CONTACT_STATUS,                // 3
+            Contacts.PHOTO_ID,                      // 4
+            Contacts.PHOTO_THUMBNAIL_URI,           // 5
+            Contacts.LOOKUP_KEY,                    // 6
+            Contacts.PHONETIC_NAME,                 // 7
+            Contacts.STARRED,                       // 8
+            SearchSnippets.SNIPPET,                 // 9
+        };
+
+        private static final String[] FILTER_PROJECTION_ALTERNATIVE = new String[] {
+            Contacts._ID,                           // 0
+            Contacts.DISPLAY_NAME_ALTERNATIVE,      // 1
+            Contacts.CONTACT_PRESENCE,              // 2
+            Contacts.CONTACT_STATUS,                // 3
+            Contacts.PHOTO_ID,                      // 4
+            Contacts.PHOTO_THUMBNAIL_URI,           // 5
+            Contacts.LOOKUP_KEY,                    // 6
+            Contacts.PHONETIC_NAME,                 // 7
+            Contacts.STARRED,                       // 8
+            SearchSnippets.SNIPPET,                 // 9
+        };
+
+        public static final int CONTACT_ID               = 0;
+        public static final int CONTACT_DISPLAY_NAME     = 1;
+        public static final int CONTACT_PRESENCE_STATUS  = 2;
+        public static final int CONTACT_CONTACT_STATUS   = 3;
+        public static final int CONTACT_PHOTO_ID         = 4;
+        public static final int CONTACT_PHOTO_URI        = 5;
+        public static final int CONTACT_LOOKUP_KEY       = 6;
+        public static final int CONTACT_PHONETIC_NAME    = 7;
+        public static final int CONTACT_STARRED          = 8;
+        public static final int CONTACT_SNIPPET          = 9;
+    }
+
+    private CharSequence mUnknownNameText;
+
+    private long mSelectedContactDirectoryId;
+    private String mSelectedContactLookupKey;
+    private long mSelectedContactId;
+    private ContactListItemView.PhotoPosition mPhotoPosition;
+
+    public ContactListAdapter(Context context) {
+        super(context, ContactQuery.CONTACT_ID);
+
+        mUnknownNameText = context.getText(R.string.missing_name);
+    }
+
+    public void setPhotoPosition(ContactListItemView.PhotoPosition photoPosition) {
+        mPhotoPosition = photoPosition;
+    }
+
+    public ContactListItemView.PhotoPosition getPhotoPosition() {
+        return mPhotoPosition;
+    }
+
+    public CharSequence getUnknownNameText() {
+        return mUnknownNameText;
+    }
+
+    public long getSelectedContactDirectoryId() {
+        return mSelectedContactDirectoryId;
+    }
+
+    public String getSelectedContactLookupKey() {
+        return mSelectedContactLookupKey;
+    }
+
+    public long getSelectedContactId() {
+        return mSelectedContactId;
+    }
+
+    public void setSelectedContact(long selectedDirectoryId, String lookupKey, long contactId) {
+        mSelectedContactDirectoryId = selectedDirectoryId;
+        mSelectedContactLookupKey = lookupKey;
+        mSelectedContactId = contactId;
+    }
+
+    protected static Uri buildSectionIndexerUri(Uri uri) {
+        return uri.buildUpon()
+                .appendQueryParameter(Contacts.EXTRA_ADDRESS_BOOK_INDEX, "true").build();
+    }
+
+    @Override
+    public String getContactDisplayName(int position) {
+        return ((Cursor) getItem(position)).getString(ContactQuery.CONTACT_DISPLAY_NAME);
+    }
+
+    /**
+     * Builds the {@link Contacts#CONTENT_LOOKUP_URI} for the given
+     * {@link ListView} position.
+     */
+    public Uri getContactUri(int position) {
+        int partitionIndex = getPartitionForPosition(position);
+        Cursor item = (Cursor)getItem(position);
+        return item != null ? getContactUri(partitionIndex, item) : null;
+    }
+
+    public Uri getContactUri(int partitionIndex, Cursor cursor) {
+        long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
+        String lookupKey = cursor.getString(ContactQuery.CONTACT_LOOKUP_KEY);
+        Uri uri = Contacts.getLookupUri(contactId, lookupKey);
+        long directoryId = ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
+        if (uri != null && directoryId != Directory.DEFAULT) {
+            uri = uri.buildUpon().appendQueryParameter(
+                    ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)).build();
+        }
+        return uri;
+    }
+
+    /**
+     * Returns the {@link Contacts#_ID} for the given {@link ListView} position.
+     */
+    public long getContactId(int position) {
+        final Cursor cursor = (Cursor) getItem(position);
+        return cursor == null ? -1 : cursor.getLong(ContactQuery.CONTACT_ID);
+    }
+
+    public boolean isEnterpriseContact(int position) {
+        final Cursor cursor = (Cursor) getItem(position);
+        if (cursor != null) {
+            final long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
+            return ContactsCompat.isEnterpriseContactId(contactId);
+        }
+        return false;
+    }
+
+    /**
+     * Returns true if the specified contact is selected in the list. For a
+     * contact to be shown as selected, we need both the directory and and the
+     * lookup key to be the same. We are paying no attention to the contactId,
+     * because it is volatile, especially in the case of directories.
+     */
+    public boolean isSelectedContact(int partitionIndex, Cursor cursor) {
+        long directoryId = ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
+        if (getSelectedContactDirectoryId() != directoryId) {
+            return false;
+        }
+        String lookupKey = getSelectedContactLookupKey();
+        if (lookupKey != null && TextUtils.equals(lookupKey,
+                cursor.getString(ContactQuery.CONTACT_LOOKUP_KEY))) {
+            return true;
+        }
+
+        return directoryId != Directory.DEFAULT && directoryId != Directory.LOCAL_INVISIBLE
+                && getSelectedContactId() == cursor.getLong(ContactQuery.CONTACT_ID);
+    }
+
+    @Override
+    protected ContactListItemView newView(
+            Context context, int partition, Cursor cursor, int position, ViewGroup parent) {
+        ContactListItemView view = super.newView(context, partition, cursor, position, parent);
+        view.setUnknownNameText(mUnknownNameText);
+        view.setQuickContactEnabled(isQuickContactEnabled());
+        view.setAdjustSelectionBoundsEnabled(isAdjustSelectionBoundsEnabled());
+        view.setActivatedStateSupported(isSelectionVisible());
+        if (mPhotoPosition != null) {
+            view.setPhotoPosition(mPhotoPosition);
+        }
+        return view;
+    }
+
+    protected void bindSectionHeaderAndDivider(ContactListItemView view, int position,
+            Cursor cursor) {
+        view.setIsSectionHeaderEnabled(isSectionHeaderDisplayEnabled());
+        if (isSectionHeaderDisplayEnabled()) {
+            Placement placement = getItemPlacementInSection(position);
+            view.setSectionHeader(placement.sectionHeader);
+        } else {
+            view.setSectionHeader(null);
+        }
+    }
+
+    protected void bindPhoto(final ContactListItemView view, int partitionIndex, Cursor cursor) {
+        if (!isPhotoSupported(partitionIndex)) {
+            view.removePhotoView();
+            return;
+        }
+
+        // Set the photo, if available
+        long photoId = 0;
+        if (!cursor.isNull(ContactQuery.CONTACT_PHOTO_ID)) {
+            photoId = cursor.getLong(ContactQuery.CONTACT_PHOTO_ID);
+        }
+
+        if (photoId != 0) {
+            getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, false,
+                    getCircularPhotos(), null);
+        } else {
+            final String photoUriString = cursor.getString(ContactQuery.CONTACT_PHOTO_URI);
+            final Uri photoUri = photoUriString == null ? null : Uri.parse(photoUriString);
+            DefaultImageRequest request = null;
+            if (photoUri == null) {
+                request = getDefaultImageRequestFromCursor(cursor,
+                        ContactQuery.CONTACT_DISPLAY_NAME,
+                        ContactQuery.CONTACT_LOOKUP_KEY);
+            }
+            getPhotoLoader().loadDirectoryPhoto(view.getPhotoView(), photoUri, false,
+                    getCircularPhotos(), request);
+        }
+    }
+
+    protected void bindNameAndViewId(final ContactListItemView view, Cursor cursor) {
+        view.showDisplayName(
+                cursor, ContactQuery.CONTACT_DISPLAY_NAME, getContactNameDisplayOrder());
+        // Note: we don't show phonetic any more (See issue 5265330)
+
+        bindViewId(view, cursor, ContactQuery.CONTACT_ID);
+    }
+
+    protected void bindPresenceAndStatusMessage(final ContactListItemView view, Cursor cursor) {
+        view.showPresenceAndStatusMessage(cursor, ContactQuery.CONTACT_PRESENCE_STATUS,
+                ContactQuery.CONTACT_CONTACT_STATUS);
+    }
+
+    protected void bindSearchSnippet(final ContactListItemView view, Cursor cursor) {
+        view.showSnippet(cursor, ContactQuery.CONTACT_SNIPPET);
+    }
+
+    public int getSelectedContactPosition() {
+        if (mSelectedContactLookupKey == null && mSelectedContactId == 0) {
+            return -1;
+        }
+
+        Cursor cursor = null;
+        int partitionIndex = -1;
+        int partitionCount = getPartitionCount();
+        for (int i = 0; i < partitionCount; i++) {
+            DirectoryPartition partition = (DirectoryPartition) getPartition(i);
+            if (partition.getDirectoryId() == mSelectedContactDirectoryId) {
+                partitionIndex = i;
+                break;
+            }
+        }
+        if (partitionIndex == -1) {
+            return -1;
+        }
+
+        cursor = getCursor(partitionIndex);
+        if (cursor == null) {
+            return -1;
+        }
+
+        cursor.moveToPosition(-1);      // Reset cursor
+        int offset = -1;
+        while (cursor.moveToNext()) {
+            if (mSelectedContactLookupKey != null) {
+                String lookupKey = cursor.getString(ContactQuery.CONTACT_LOOKUP_KEY);
+                if (mSelectedContactLookupKey.equals(lookupKey)) {
+                    offset = cursor.getPosition();
+                    break;
+                }
+            }
+            if (mSelectedContactId != 0 && (mSelectedContactDirectoryId == Directory.DEFAULT
+                    || mSelectedContactDirectoryId == Directory.LOCAL_INVISIBLE)) {
+                long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
+                if (contactId == mSelectedContactId) {
+                    offset = cursor.getPosition();
+                    break;
+                }
+            }
+        }
+        if (offset == -1) {
+            return -1;
+        }
+
+        int position = getPositionForPartition(partitionIndex) + offset;
+        if (hasHeader(partitionIndex)) {
+            position++;
+        }
+        return position;
+    }
+
+    public boolean hasValidSelection() {
+        return getSelectedContactPosition() != -1;
+    }
+
+    public Uri getFirstContactUri() {
+        int partitionCount = getPartitionCount();
+        for (int i = 0; i < partitionCount; i++) {
+            DirectoryPartition partition = (DirectoryPartition) getPartition(i);
+            if (partition.isLoading()) {
+                continue;
+            }
+
+            Cursor cursor = getCursor(i);
+            if (cursor == null) {
+                continue;
+            }
+
+            if (!cursor.moveToFirst()) {
+                continue;
+            }
+
+            return getContactUri(i, cursor);
+        }
+
+        return null;
+    }
+
+    @Override
+    public void changeCursor(int partitionIndex, Cursor cursor) {
+        super.changeCursor(partitionIndex, cursor);
+
+        if (cursor == null || !cursor.moveToFirst()) {
+            return;
+        }
+
+        if (shouldIncludeFavorites()) {
+            if (cursor.getInt(ContactQuery.CONTACT_STARRED) == 1) {
+                final Set<Integer> favorites = new HashSet<>();
+                favorites.add(cursor.getInt(ContactQuery.CONTACT_ID));
+                while (cursor != null && cursor.moveToNext()) {
+                    if (cursor.getInt(ContactQuery.CONTACT_STARRED) != 1
+                            || favorites.contains(cursor.getInt(ContactQuery.CONTACT_ID))) {
+                        break;
+                    }
+                    favorites.add(cursor.getInt(ContactQuery.CONTACT_ID));
+                }
+                setFavoritesSectionHeader(favorites.size());
+            }
+        }
+    }
+
+    /**
+     * @return Projection useful for children.
+     */
+    protected final String[] getProjection(boolean forSearch) {
+        final int sortOrder = getContactNameDisplayOrder();
+        if (forSearch) {
+            if (sortOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+                return ContactQuery.FILTER_PROJECTION_PRIMARY;
+            } else {
+                return ContactQuery.FILTER_PROJECTION_ALTERNATIVE;
+            }
+        } else {
+            if (sortOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+                return ContactQuery.CONTACT_PROJECTION_PRIMARY;
+            } else {
+                return ContactQuery.CONTACT_PROJECTION_ALTERNATIVE;
+            }
+        }
+    }
+
+    /**
+     * @return Projection from Data that is useful for children.
+     */
+    protected final String[] getDataProjectionForContacts(boolean forSearch) {
+        final int sortOrder = getContactNameDisplayOrder();
+        if (forSearch) {
+            if (sortOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+                return replaceFirstString(ContactQuery.FILTER_PROJECTION_PRIMARY);
+            } else {
+                return replaceFirstString(ContactQuery.FILTER_PROJECTION_ALTERNATIVE);
+            }
+        } else {
+            if (sortOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+                return replaceFirstString(ContactQuery.CONTACT_PROJECTION_PRIMARY);
+            } else {
+                return replaceFirstString(ContactQuery.CONTACT_PROJECTION_ALTERNATIVE);
+            }
+        }
+    }
+
+    /**
+     * @param sourceProjection
+     * @return Replace the first String of sourceProjection with Data.CONTACT_ID.
+     */
+    private String[] replaceFirstString(String[] sourceProjection) {
+        String[] result = sourceProjection.clone();
+        result[0] = Data.CONTACT_ID;
+        return result;
+    }
+}
diff --git a/src/com/android/contacts/list/ContactListFilter.java b/src/com/android/contacts/list/ContactListFilter.java
new file mode 100644
index 0000000..4245be4
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListFilter.java
@@ -0,0 +1,460 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.list;
+
+import android.accounts.Account;
+import android.content.SharedPreferences;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.ContactsContract.RawContacts;
+import android.text.TextUtils;
+
+import com.android.contacts.logging.ListEvent;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Contact list filter parameters.
+ */
+public final class ContactListFilter implements Comparable<ContactListFilter>, Parcelable {
+
+    public static final int FILTER_TYPE_DEFAULT = -1;
+    public static final int FILTER_TYPE_ALL_ACCOUNTS = -2;
+    public static final int FILTER_TYPE_CUSTOM = -3;
+    public static final int FILTER_TYPE_STARRED = -4;
+    public static final int FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY = -5;
+    public static final int FILTER_TYPE_SINGLE_CONTACT = -6;
+    public static final int FILTER_TYPE_GROUP_MEMBERS = -7;
+    public static final int FILTER_TYPE_DEVICE_CONTACTS = -8;
+
+    public static final int FILTER_TYPE_ACCOUNT = 0;
+
+    /**
+     * Obsolete filter which had been used in Honeycomb. This may be stored in
+     * {@link SharedPreferences}, but should be replaced with ALL filter when it is found.
+     *
+     * TODO: "group" filter and relevant variables are all obsolete. Remove them.
+     */
+    private static final int FILTER_TYPE_GROUP = 1;
+
+    private static final String KEY_FILTER_TYPE = "filter.type";
+    private static final String KEY_ACCOUNT_NAME = "filter.accountName";
+    private static final String KEY_ACCOUNT_TYPE = "filter.accountType";
+    private static final String KEY_DATA_SET = "filter.dataSet";
+
+    public final int filterType;
+    public final String accountType;
+    public final String accountName;
+    public final String dataSet;
+    public final Drawable icon;
+    private String mId;
+
+    public ContactListFilter(int filterType, String accountType, String accountName, String dataSet,
+            Drawable icon) {
+        this.filterType = filterType;
+        this.accountType = accountType;
+        this.accountName = accountName;
+        this.dataSet = dataSet;
+        this.icon = icon;
+    }
+
+    public static ContactListFilter createFilterWithType(int filterType) {
+        return new ContactListFilter(filterType, null, null, null, null);
+    }
+
+    public static ContactListFilter createAccountFilter(String accountType, String accountName,
+            String dataSet, Drawable icon) {
+        return new ContactListFilter(ContactListFilter.FILTER_TYPE_ACCOUNT, accountType,
+                accountName, dataSet, icon);
+    }
+
+    public static ContactListFilter createGroupMembersFilter(String accountType, String accountName,
+            String dataSet) {
+        return new ContactListFilter(ContactListFilter.FILTER_TYPE_GROUP_MEMBERS, accountType,
+                accountName, dataSet, /* icon */ null);
+    }
+
+    public static ContactListFilter createDeviceContactsFilter(Drawable icon) {
+        return new ContactListFilter(ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS,
+                /* accountType= */ null, /* accountName= */ null, /* dataSet= */ null, icon);
+    }
+
+    public static ContactListFilter createDeviceContactsFilter(Drawable icon,
+            AccountWithDataSet account) {
+        return new ContactListFilter(ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS,
+                account.type, account.name, account.dataSet, icon);
+    }
+
+    /**
+     * Whether the given {@link ContactListFilter} has a filter type that should be displayed as
+     * the default contacts list view.
+     */
+    public boolean isContactsFilterType() {
+        return filterType == ContactListFilter.FILTER_TYPE_DEFAULT
+                || filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+                || filterType == ContactListFilter.FILTER_TYPE_CUSTOM;
+    }
+
+    /** Returns the {@link ListEvent.ListType} for the type of this filter. */
+    public int toListType() {
+        switch (filterType) {
+            case FILTER_TYPE_DEFAULT:
+                // Fall through
+            case FILTER_TYPE_ALL_ACCOUNTS:
+                return ListEvent.ListType.ALL_CONTACTS;
+            case FILTER_TYPE_CUSTOM:
+                return ListEvent.ListType.CUSTOM;
+            case FILTER_TYPE_STARRED:
+                return ListEvent.ListType.STARRED;
+            case FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
+                return ListEvent.ListType.PHONE_NUMBERS;
+            case FILTER_TYPE_SINGLE_CONTACT:
+                return ListEvent.ListType.SINGLE_CONTACT;
+            case FILTER_TYPE_ACCOUNT:
+                return ListEvent.ListType.ACCOUNT;
+            case FILTER_TYPE_GROUP_MEMBERS:
+                return ListEvent.ListType.GROUP;
+            case FILTER_TYPE_DEVICE_CONTACTS:
+                return ListEvent.ListType.DEVICE;
+        }
+        return ListEvent.ListType.UNKNOWN_LIST;
+    }
+
+
+    /**
+     * Returns true if this filter is based on data and may become invalid over time.
+     */
+    public boolean isValidationRequired() {
+        return filterType == FILTER_TYPE_ACCOUNT;
+    }
+
+    @Override
+    public String toString() {
+        switch (filterType) {
+            case FILTER_TYPE_DEFAULT:
+                return "default";
+            case FILTER_TYPE_ALL_ACCOUNTS:
+                return "all_accounts";
+            case FILTER_TYPE_CUSTOM:
+                return "custom";
+            case FILTER_TYPE_STARRED:
+                return "starred";
+            case FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
+                return "with_phones";
+            case FILTER_TYPE_SINGLE_CONTACT:
+                return "single";
+            case FILTER_TYPE_ACCOUNT:
+                return "account: " + accountType + (dataSet != null ? "/" + dataSet : "")
+                        + " " + accountName;
+            case FILTER_TYPE_GROUP_MEMBERS:
+                return "group_members";
+            case FILTER_TYPE_DEVICE_CONTACTS:
+                return "device_contacts";
+        }
+        return super.toString();
+    }
+
+    @Override
+    public int compareTo(ContactListFilter another) {
+        int res = accountName.compareTo(another.accountName);
+        if (res != 0) {
+            return res;
+        }
+
+        res = accountType.compareTo(another.accountType);
+        if (res != 0) {
+            return res;
+        }
+
+        return filterType - another.filterType;
+    }
+
+    @Override
+    public int hashCode() {
+        int code = filterType;
+        if (accountType != null) {
+            code = code * 31 + accountType.hashCode();
+        }
+        if (accountName != null) {
+            code = code * 31 + accountName.hashCode();
+        }
+        if (dataSet != null) {
+            code = code * 31 + dataSet.hashCode();
+        }
+        return code;
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (this == other) {
+            return true;
+        }
+
+        if (!(other instanceof ContactListFilter)) {
+            return false;
+        }
+
+        ContactListFilter otherFilter = (ContactListFilter) other;
+        if (filterType != otherFilter.filterType
+                || !TextUtils.equals(accountName, otherFilter.accountName)
+                || !TextUtils.equals(accountType, otherFilter.accountType)
+                || !TextUtils.equals(dataSet, otherFilter.dataSet)) {
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Store the given {@link ContactListFilter} to preferences. If the requested filter is
+     * of type {@link #FILTER_TYPE_SINGLE_CONTACT} then do not save it to preferences because
+     * it is a temporary state.
+     */
+    public static void storeToPreferences(SharedPreferences prefs, ContactListFilter filter) {
+        if (filter != null && filter.filterType == FILTER_TYPE_SINGLE_CONTACT) {
+            return;
+        }
+        prefs.edit()
+            .putInt(KEY_FILTER_TYPE, filter == null ? FILTER_TYPE_DEFAULT : filter.filterType)
+            .putString(KEY_ACCOUNT_NAME, filter == null ? null : filter.accountName)
+            .putString(KEY_ACCOUNT_TYPE, filter == null ? null : filter.accountType)
+            .putString(KEY_DATA_SET, filter == null ? null : filter.dataSet)
+            .apply();
+    }
+
+    /**
+     * Try to obtain ContactListFilter object saved in SharedPreference.
+     * If there's no info there, return ALL filter instead.
+     */
+    public static ContactListFilter restoreDefaultPreferences(SharedPreferences prefs) {
+        ContactListFilter filter = restoreFromPreferences(prefs);
+        if (filter == null) {
+            filter = ContactListFilter.createFilterWithType(FILTER_TYPE_ALL_ACCOUNTS);
+        }
+        // "Group" filter is obsolete and thus is not exposed anymore. The "single contact mode"
+        // should also not be stored in preferences anymore since it is a temporary state.
+        if (filter.filterType == FILTER_TYPE_GROUP ||
+                filter.filterType == FILTER_TYPE_SINGLE_CONTACT) {
+            filter = ContactListFilter.createFilterWithType(FILTER_TYPE_ALL_ACCOUNTS);
+        }
+        return filter;
+    }
+
+    private static ContactListFilter restoreFromPreferences(SharedPreferences prefs) {
+        int filterType = prefs.getInt(KEY_FILTER_TYPE, FILTER_TYPE_DEFAULT);
+        if (filterType == FILTER_TYPE_DEFAULT) {
+            return null;
+        }
+
+        String accountName = prefs.getString(KEY_ACCOUNT_NAME, null);
+        String accountType = prefs.getString(KEY_ACCOUNT_TYPE, null);
+        String dataSet = prefs.getString(KEY_DATA_SET, null);
+        return new ContactListFilter(filterType, accountType, accountName, dataSet, null);
+    }
+
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(filterType);
+        dest.writeString(accountName);
+        dest.writeString(accountType);
+        dest.writeString(dataSet);
+    }
+
+    public static final Parcelable.Creator<ContactListFilter> CREATOR =
+            new Parcelable.Creator<ContactListFilter>() {
+        @Override
+        public ContactListFilter createFromParcel(Parcel source) {
+            int filterType = source.readInt();
+            String accountName = source.readString();
+            String accountType = source.readString();
+            String dataSet = source.readString();
+            return new ContactListFilter(filterType, accountType, accountName, dataSet, null);
+        }
+
+        @Override
+        public ContactListFilter[] newArray(int size) {
+            return new ContactListFilter[size];
+        }
+    };
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * Returns a string that can be used as a stable persistent identifier for this filter.
+     */
+    public String getId() {
+        if (mId == null) {
+            StringBuilder sb = new StringBuilder();
+            sb.append(filterType);
+            if (accountType != null) {
+                sb.append('-').append(accountType);
+            }
+            if (dataSet != null) {
+                sb.append('/').append(dataSet);
+            }
+            if (accountName != null) {
+                sb.append('-').append(accountName.replace('-', '_'));
+            }
+            mId = sb.toString();
+        }
+        return mId;
+    }
+
+    /**
+     * Adds the account query parameters to the given {@code uriBuilder}.
+     *
+     * @throws IllegalStateException if the filter type is not {@link #FILTER_TYPE_ACCOUNT} or
+     * {@link #FILTER_TYPE_GROUP_MEMBERS}.
+     */
+    public Uri.Builder addAccountQueryParameterToUrl(Uri.Builder uriBuilder) {
+        if (filterType != FILTER_TYPE_ACCOUNT
+                && filterType != FILTER_TYPE_GROUP_MEMBERS) {
+            throw new IllegalStateException(
+                    "filterType must be FILTER_TYPE_ACCOUNT or FILER_TYPE_GROUP_MEMBERS");
+        }
+        // null account names are not valid, see ContactsProvider2#appendAccountFromParameter
+        if (accountName != null) {
+            uriBuilder.appendQueryParameter(RawContacts.ACCOUNT_NAME, accountName);
+            uriBuilder.appendQueryParameter(RawContacts.ACCOUNT_TYPE, accountType);
+        }
+        if (dataSet != null) {
+            uriBuilder.appendQueryParameter(RawContacts.DATA_SET, dataSet);
+        }
+        return uriBuilder;
+    }
+
+    public AccountWithDataSet toAccountWithDataSet() {
+        if (filterType == FILTER_TYPE_ACCOUNT || filterType == FILTER_TYPE_DEVICE_CONTACTS) {
+            return new AccountWithDataSet(accountName, accountType, dataSet);
+        } else {
+            throw new IllegalStateException("Cannot create Account from filter type " +
+                    filterTypeToString(filterType));
+        }
+    }
+
+    public String toDebugString() {
+        final StringBuilder builder = new StringBuilder();
+        builder.append("[filter type: " + filterType + " (" + filterTypeToString(filterType) + ")");
+        if (filterType == FILTER_TYPE_ACCOUNT) {
+            builder.append(", accountType: " + accountType)
+                    .append(", accountName: " + accountName)
+                    .append(", dataSet: " + dataSet);
+        }
+        builder.append(", icon: " + icon + "]");
+        return builder.toString();
+    }
+
+    public static final String filterTypeToString(int filterType) {
+        switch (filterType) {
+            case FILTER_TYPE_DEFAULT:
+                return "FILTER_TYPE_DEFAULT";
+            case FILTER_TYPE_ALL_ACCOUNTS:
+                return "FILTER_TYPE_ALL_ACCOUNTS";
+            case FILTER_TYPE_CUSTOM:
+                return "FILTER_TYPE_CUSTOM";
+            case FILTER_TYPE_STARRED:
+                return "FILTER_TYPE_STARRED";
+            case FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
+                return "FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY";
+            case FILTER_TYPE_SINGLE_CONTACT:
+                return "FILTER_TYPE_SINGLE_CONTACT";
+            case FILTER_TYPE_ACCOUNT:
+                return "FILTER_TYPE_ACCOUNT";
+            case FILTER_TYPE_GROUP_MEMBERS:
+                return "FILTER_TYPE_GROUP_MEMBERS";
+            case FILTER_TYPE_DEVICE_CONTACTS:
+                return "FILTER_TYPE_DEVICE_CONTACTS";
+            default:
+                return "(unknown)";
+        }
+    }
+
+    /**
+     * Returns true if this ContactListFilter contains at least one Google account.
+     * (see {@link #isGoogleAccountType)
+     */
+    public boolean isSyncable(List<AccountWithDataSet> accounts) {
+        if (isGoogleAccountType() && filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
+            return true;
+        }
+        // Since we don't know which group is selected until the actual contacts loading, we
+        // consider a custom filter syncable as long as there is a Google account on the device,
+        // and don't check if there is any group that belongs to a Google account is selected.
+        if (filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+                || filterType == ContactListFilter.FILTER_TYPE_CUSTOM
+                || filterType == ContactListFilter.FILTER_TYPE_DEFAULT) {
+            if (accounts != null && accounts.size() > 0) {
+                // If we're showing all contacts and there is any Google account on the device then
+                // we're syncable.
+                for (AccountWithDataSet account : accounts) {
+                    if (GoogleAccountType.ACCOUNT_TYPE.equals(account.type)
+                            && account.dataSet == null) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    public boolean shouldShowSyncState() {
+        return (isGoogleAccountType() && filterType == ContactListFilter.FILTER_TYPE_ACCOUNT)
+                || filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+                || filterType == ContactListFilter.FILTER_TYPE_CUSTOM
+                || filterType == ContactListFilter.FILTER_TYPE_DEFAULT;
+    }
+
+    /**
+     * Returns the Google accounts (see {@link #isGoogleAccountType) for this ContactListFilter.
+     */
+    public List<Account> getSyncableAccounts(List<AccountWithDataSet> accounts) {
+        final List<Account> syncableAccounts = new ArrayList<>();
+
+        if (isGoogleAccountType() && filterType == ContactListFilter.FILTER_TYPE_ACCOUNT) {
+            syncableAccounts.add(new Account(accountName, accountType));
+        } else if (filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS
+                || filterType == ContactListFilter.FILTER_TYPE_CUSTOM
+                || filterType == ContactListFilter.FILTER_TYPE_DEFAULT) {
+            if (accounts != null && accounts.size() > 0) {
+                for (AccountWithDataSet account : accounts) {
+                    if (GoogleAccountType.ACCOUNT_TYPE.equals(account.type)
+                            && account.dataSet == null) {
+                        syncableAccounts.add(new Account(account.name, account.type));
+                    }
+                }
+            }
+        }
+        return syncableAccounts;
+    }
+
+    /**
+     * Returns true if this ContactListFilter is Google account type. (i.e. where
+     * accountType = "com.google" and dataSet = null)
+     */
+    public boolean isGoogleAccountType() {
+        return GoogleAccountType.ACCOUNT_TYPE.equals(accountType) && dataSet == null;
+    }
+}
diff --git a/src/com/android/contacts/list/ContactListFilterController.java b/src/com/android/contacts/list/ContactListFilterController.java
new file mode 100644
index 0000000..3a4596d
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListFilterController.java
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+
+import com.android.contacts.logging.ListEvent;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Manages {@link ContactListFilter}. All methods must be called from UI thread.
+ */
+public abstract class ContactListFilterController {
+
+    // singleton to cache the filter controller
+    private static ContactListFilterControllerImpl sFilterController = null;
+
+    public interface ContactListFilterListener {
+        void onContactListFilterChanged();
+    }
+
+    public static ContactListFilterController getInstance(Context context) {
+        // We may need to synchronize this in the future if background task will call this.
+        if (sFilterController == null) {
+            sFilterController = new ContactListFilterControllerImpl(context);
+        }
+        return sFilterController;
+    }
+
+    public abstract void addListener(ContactListFilterListener listener);
+
+    public abstract void removeListener(ContactListFilterListener listener);
+
+    /**
+     * Return the currently-active filter.
+     */
+    public abstract ContactListFilter getFilter();
+
+    public abstract int getFilterListType();
+
+    /** Whether the persisted filter is a custom filter. */
+    public abstract boolean isCustomFilterPersisted();
+
+    /** Returns the persisted filter. */
+    public abstract ContactListFilter getPersistedFilter();
+
+    /**
+     * @param filter the filter
+     * @param persistent True when the given filter should be saved soon. False when the filter
+     * should not be saved. The latter case may happen when some Intent requires a certain type of
+     * UI (e.g. single contact) temporarily.
+     */
+    public abstract void setContactListFilter(ContactListFilter filter, boolean persistent);
+
+    public abstract void selectCustomFilter();
+
+    /**
+     * Checks if the current filter is valid and reset the filter if not. It may happen when
+     * an account is removed while the filter points to the account with
+     * {@link ContactListFilter#FILTER_TYPE_ACCOUNT} type, for example. It may also happen if
+     * the current filter is {@link ContactListFilter#FILTER_TYPE_SINGLE_CONTACT}, in
+     * which case, we should switch to the last saved filter in {@link SharedPreferences}.
+     */
+    public abstract void checkFilterValidity(boolean notifyListeners);
+}
+
+/**
+ * Stores the {@link ContactListFilter} selected by the user and saves it to
+ * {@link SharedPreferences} if necessary.
+ */
+class ContactListFilterControllerImpl extends ContactListFilterController {
+    private final Context mContext;
+    private final List<ContactListFilterListener> mListeners =
+            new ArrayList<ContactListFilterListener>();
+    private ContactListFilter mFilter;
+
+    public ContactListFilterControllerImpl(Context context) {
+        mContext = context.getApplicationContext();
+        mFilter = ContactListFilter.restoreDefaultPreferences(getSharedPreferences());
+        checkFilterValidity(true /* notify listeners */);
+    }
+
+    @Override
+    public void addListener(ContactListFilterListener listener) {
+        mListeners.add(listener);
+    }
+
+    @Override
+    public void removeListener(ContactListFilterListener listener) {
+        mListeners.remove(listener);
+    }
+
+    @Override
+    public ContactListFilter getFilter() {
+        return mFilter;
+    }
+
+    @Override
+    public int getFilterListType() {
+        return mFilter == null ? ListEvent.ListType.UNKNOWN_LIST : mFilter.toListType();
+    }
+
+    @Override
+    public boolean isCustomFilterPersisted() {
+        final ContactListFilter filter = getPersistedFilter();
+        return filter != null && filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM;
+    }
+
+    @Override
+    public ContactListFilter getPersistedFilter() {
+        return ContactListFilter.restoreDefaultPreferences(getSharedPreferences());
+    }
+
+    private SharedPreferences getSharedPreferences() {
+        return PreferenceManager.getDefaultSharedPreferences(mContext);
+    }
+
+    @Override
+    public void setContactListFilter(ContactListFilter filter, boolean persistent) {
+        setContactListFilter(filter, persistent, /* notifyListeners */ true);
+    }
+
+    private void setContactListFilter(ContactListFilter filter, boolean persistent,
+            boolean notifyListeners) {
+        if (!filter.equals(mFilter)) {
+            mFilter = filter;
+            if (persistent) {
+                ContactListFilter.storeToPreferences(getSharedPreferences(), mFilter);
+            }
+            if (notifyListeners && !mListeners.isEmpty()) {
+                notifyContactListFilterChanged();
+            }
+        }
+    }
+
+    @Override
+    public void selectCustomFilter() {
+        setContactListFilter(ContactListFilter.createFilterWithType(
+                ContactListFilter.FILTER_TYPE_CUSTOM), /* persistent */ true);
+    }
+
+    private void notifyContactListFilterChanged() {
+        for (ContactListFilterListener listener : mListeners) {
+            listener.onContactListFilterChanged();
+        }
+    }
+
+    @Override
+    public void checkFilterValidity(boolean notifyListeners) {
+        if (mFilter == null) {
+            return;
+        }
+
+        switch (mFilter.filterType) {
+            case ContactListFilter.FILTER_TYPE_SINGLE_CONTACT:
+                setContactListFilter(
+                        ContactListFilter.restoreDefaultPreferences(getSharedPreferences()),
+                        false, notifyListeners);
+                break;
+            case ContactListFilter.FILTER_TYPE_ACCOUNT:
+                if (!filterAccountExists()) {
+                    // The current account filter points to invalid account. Use "all" filter
+                    // instead.
+                    setContactListFilter(ContactListFilter.createFilterWithType(
+                            ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS), true, notifyListeners);
+                }
+                break;
+        }
+    }
+
+    /**
+     * @return true if the Account for the current filter exists.
+     */
+    private boolean filterAccountExists() {
+        final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(mContext);
+        final AccountWithDataSet filterAccount = new AccountWithDataSet(
+                mFilter.accountName, mFilter.accountType, mFilter.dataSet);
+        return accountTypeManager.contains(filterAccount, /* contactWritableOnly */ false);
+    }
+}
diff --git a/src/com/android/contacts/list/ContactListFilterView.java b/src/com/android/contacts/list/ContactListFilterView.java
new file mode 100644
index 0000000..d4b83c6
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListFilterView.java
@@ -0,0 +1,164 @@
+/*
+ * 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.list;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.RadioButton;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+
+/**
+ * Contact list filter parameters.
+ */
+public class ContactListFilterView extends LinearLayout {
+
+    private static final String TAG = ContactListFilterView.class.getSimpleName();
+
+    private ImageView mIcon;
+    private TextView mAccountType;
+    private TextView mAccountUserName;
+    private RadioButton mRadioButton;
+    private ContactListFilter mFilter;
+    private boolean mSingleAccount;
+
+    public ContactListFilterView(Context context) {
+        super(context);
+    }
+
+    public ContactListFilterView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public void setContactListFilter(ContactListFilter filter) {
+        mFilter = filter;
+    }
+
+    public ContactListFilter getContactListFilter() {
+        return mFilter;
+    }
+
+    public void setSingleAccount(boolean flag) {
+        this.mSingleAccount = flag;
+    }
+
+    @Override
+    public void setActivated(boolean activated) {
+        super.setActivated(activated);
+        if (mRadioButton != null) {
+            mRadioButton.setChecked(activated);
+        } else {
+            // We're guarding against null-pointer exceptions,
+            // but otherwise this code is not expected to work
+            // properly if the button hasn't been initialized.
+            Log.wtf(TAG, "radio-button cannot be activated because it is null");
+        }
+        setContentDescription(generateContentDescription());
+    }
+
+    public boolean isChecked() {
+        return mRadioButton.isChecked();
+    }
+
+    public void bindView(AccountTypeManager accountTypes) {
+        if (mAccountType == null) {
+            mIcon = (ImageView) findViewById(R.id.icon);
+            mAccountType = (TextView) findViewById(R.id.accountType);
+            mAccountUserName = (TextView) findViewById(R.id.accountUserName);
+            mRadioButton = (RadioButton) findViewById(R.id.radioButton);
+            mRadioButton.setChecked(isActivated());
+        }
+
+        if (mFilter == null) {
+            mAccountType.setText(R.string.contactsList);
+            return;
+        }
+
+        mAccountUserName.setVisibility(View.GONE);
+        switch (mFilter.filterType) {
+            case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS: {
+                bindView(0, R.string.list_filter_all_accounts);
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_STARRED: {
+                bindView(R.drawable.quantum_ic_star_vd_theme_24, R.string.list_filter_all_starred);
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_CUSTOM: {
+                bindView(0, R.string.list_filter_customize);
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY: {
+                bindView(0, R.string.list_filter_phones);
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_SINGLE_CONTACT: {
+                bindView(0, R.string.list_filter_single);
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_ACCOUNT: {
+                mAccountUserName.setVisibility(View.VISIBLE);
+                mIcon.setVisibility(View.VISIBLE);
+                if (mFilter.icon != null) {
+                    mIcon.setImageDrawable(mFilter.icon);
+                } else {
+                    mIcon.setImageResource(R.drawable.unknown_source);
+                }
+                final AccountType accountType =
+                        accountTypes.getAccountType(mFilter.accountType, mFilter.dataSet);
+                mAccountUserName.setText(mFilter.accountName);
+                mAccountType.setText(accountType.getDisplayLabel(getContext()));
+                break;
+            }
+        }
+        setContentDescription(generateContentDescription());
+    }
+
+    private void bindView(int iconResource, int textResource) {
+        if (iconResource != 0) {
+            mIcon.setVisibility(View.VISIBLE);
+            mIcon.setImageResource(iconResource);
+        } else {
+            mIcon.setVisibility(View.GONE);
+        }
+
+        mAccountType.setText(textResource);
+    }
+
+    String generateContentDescription() {
+        final StringBuilder sb = new StringBuilder();
+        if (!TextUtils.isEmpty(mAccountType.getText())) {
+            sb.append(mAccountType.getText());
+        }
+        if (!TextUtils.isEmpty(mAccountUserName.getText())) {
+            if (sb.length() > 0) {
+                sb.append(" ");
+            }
+            sb.append(mAccountUserName.getText());
+        }
+        return getContext().getString(isActivated() ? R.string.account_filter_view_checked :
+                R.string.account_filter_view_not_checked, sb.toString());
+    }
+}
diff --git a/src/com/android/contacts/list/ContactListItemView.java b/src/com/android/contacts/list/ContactListItemView.java
new file mode 100644
index 0000000..4f42a0f
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListItemView.java
@@ -0,0 +1,1896 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.list;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.content.res.TypedArray;
+import android.database.CharArrayBuffer;
+import android.database.Cursor;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.SearchSnippets;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.content.res.ResourcesCompat;
+import android.support.v4.graphics.drawable.DrawableCompat;
+import android.support.v7.widget.AppCompatCheckBox;
+import android.support.v7.widget.AppCompatImageButton;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.TextUtils;
+import android.text.TextUtils.TruncateAt;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AbsListView.SelectionBoundsAdjuster;
+import android.widget.ImageView;
+import android.widget.ImageView.ScaleType;
+import android.widget.QuickContactBadge;
+import android.widget.TextView;
+
+import com.android.contacts.ContactPresenceIconUtil;
+import com.android.contacts.ContactStatusUtil;
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.format.TextHighlighter;
+import com.android.contacts.util.ContactDisplayUtils;
+import com.android.contacts.util.SearchUtil;
+import com.android.contacts.util.ViewUtil;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * A custom view for an item in the contact list.
+ * The view contains the contact's photo, a set of text views (for name, status, etc...) and
+ * icons for presence and call.
+ * The view uses no XML file for layout and all the measurements and layouts are done
+ * in the onMeasure and onLayout methods.
+ *
+ * The layout puts the contact's photo on the right side of the view, the call icon (if present)
+ * to the left of the photo, the text lines are aligned to the left and the presence icon (if
+ * present) is set to the left of the status line.
+ *
+ * The layout also supports a header (used as a header of a group of contacts) that is above the
+ * contact's data and a divider between contact view.
+ */
+
+public class ContactListItemView extends ViewGroup
+        implements SelectionBoundsAdjuster {
+
+    private static final String TAG = "ContactListItemView";
+
+    // Style values for layout and appearance
+    // The initialized values are defaults if none is provided through xml.
+    private int mPreferredHeight = 0;
+    private int mGapBetweenImageAndText = 0;
+    private int mGapBetweenIndexerAndImage = 0;
+    private int mGapBetweenLabelAndData = 0;
+    private int mPresenceIconMargin = 4;
+    private int mPresenceIconSize = 16;
+    private int mTextIndent = 0;
+    private int mTextOffsetTop;
+    private int mAvatarOffsetTop;
+    private int mNameTextViewTextSize;
+    private int mHeaderWidth;
+    private Drawable mActivatedBackgroundDrawable;
+    private int mVideoCallIconSize = 32;
+    private int mVideoCallIconMargin = 16;
+    private int mGapFromScrollBar = 20;
+
+    // Set in onLayout. Represent left and right position of the View on the screen.
+    private int mLeftOffset;
+    private int mRightOffset;
+
+    /**
+     * Used with {@link #mLabelView}, specifying the width ratio between label and data.
+     */
+    private int mLabelViewWidthWeight = 3;
+    /**
+     * Used with {@link #mDataView}, specifying the width ratio between label and data.
+     */
+    private int mDataViewWidthWeight = 5;
+
+    protected static class HighlightSequence {
+        private final int start;
+        private final int end;
+
+        HighlightSequence(int start, int end) {
+            this.start = start;
+            this.end = end;
+        }
+    }
+
+    private ArrayList<HighlightSequence> mNameHighlightSequence;
+    private ArrayList<HighlightSequence> mNumberHighlightSequence;
+
+    // Highlighting prefix for names.
+    private String mHighlightedPrefix;
+
+    /**
+     * Used to notify listeners when a video call icon is clicked.
+     */
+    private PhoneNumberListAdapter.Listener mPhoneNumberListAdapterListener;
+
+    /**
+     * Indicates whether to show the "video call" icon, used to initiate a video call.
+     */
+    private boolean mShowVideoCallIcon = false;
+
+    /**
+     * Indicates whether the view should leave room for the "video call" icon.
+     */
+    private boolean mSupportVideoCallIcon = false;
+
+    /**
+     * Where to put contact photo. This affects the other Views' layout or look-and-feel.
+     *
+     * TODO: replace enum with int constants
+     */
+    public enum PhotoPosition {
+        LEFT,
+        RIGHT
+    }
+
+    static public final PhotoPosition getDefaultPhotoPosition(boolean opposite) {
+        final Locale locale = Locale.getDefault();
+        final int layoutDirection = TextUtils.getLayoutDirectionFromLocale(locale);
+        switch (layoutDirection) {
+            case View.LAYOUT_DIRECTION_RTL:
+                return (opposite ? PhotoPosition.LEFT : PhotoPosition.RIGHT);
+            case View.LAYOUT_DIRECTION_LTR:
+            default:
+                return (opposite ? PhotoPosition.RIGHT : PhotoPosition.LEFT);
+        }
+    }
+
+    private PhotoPosition mPhotoPosition = getDefaultPhotoPosition(false /* normal/non opposite */);
+
+    // Header layout data
+    private View mHeaderView;
+    private boolean mIsSectionHeaderEnabled;
+
+    // The views inside the contact view
+    private boolean mQuickContactEnabled = true;
+    private QuickContactBadge mQuickContact;
+    private ImageView mPhotoView;
+    private TextView mNameTextView;
+    private TextView mPhoneticNameTextView;
+    private TextView mLabelView;
+    private TextView mDataView;
+    private TextView mSnippetView;
+    private TextView mStatusView;
+    private ImageView mPresenceIcon;
+    private AppCompatCheckBox mCheckBox;
+    private AppCompatImageButton mDeleteImageButton;
+    private ImageView mVideoCallIcon;
+    private ImageView mWorkProfileIcon;
+
+    private ColorStateList mSecondaryTextColor;
+
+    private int mDefaultPhotoViewSize = 0;
+    /**
+     * Can be effective even when {@link #mPhotoView} is null, as we want to have horizontal padding
+     * to align other data in this View.
+     */
+    private int mPhotoViewWidth;
+    /**
+     * Can be effective even when {@link #mPhotoView} is null, as we want to have vertical padding.
+     */
+    private int mPhotoViewHeight;
+
+    /**
+     * Only effective when {@link #mPhotoView} is null.
+     * When true all the Views on the right side of the photo should have horizontal padding on
+     * those left assuming there is a photo.
+     */
+    private boolean mKeepHorizontalPaddingForPhotoView;
+    /**
+     * Only effective when {@link #mPhotoView} is null.
+     */
+    private boolean mKeepVerticalPaddingForPhotoView;
+
+    /**
+     * True when {@link #mPhotoViewWidth} and {@link #mPhotoViewHeight} are ready for being used.
+     * False indicates those values should be updated before being used in position calculation.
+     */
+    private boolean mPhotoViewWidthAndHeightAreReady = false;
+
+    private int mNameTextViewHeight;
+    private int mNameTextViewTextColor = Color.BLACK;
+    private int mPhoneticNameTextViewHeight;
+    private int mLabelViewHeight;
+    private int mDataViewHeight;
+    private int mSnippetTextViewHeight;
+    private int mStatusTextViewHeight;
+    private int mCheckBoxHeight;
+    private int mCheckBoxWidth;
+    private int mDeleteImageButtonHeight;
+    private int mDeleteImageButtonWidth;
+
+    // Holds Math.max(mLabelTextViewHeight, mDataViewHeight), assuming Label and Data share the
+    // same row.
+    private int mLabelAndDataViewMaxHeight;
+
+    // TODO: some TextView fields are using CharArrayBuffer while some are not. Determine which is
+    // more efficient for each case or in general, and simplify the whole implementation.
+    // Note: if we're sure MARQUEE will be used every time, there's no reason to use
+    // CharArrayBuffer, since MARQUEE requires Span and thus we need to copy characters inside the
+    // buffer to Spannable once, while CharArrayBuffer is for directly applying char array to
+    // TextView without any modification.
+    private final CharArrayBuffer mDataBuffer = new CharArrayBuffer(128);
+    private final CharArrayBuffer mPhoneticNameBuffer = new CharArrayBuffer(128);
+
+    private boolean mActivatedStateSupported;
+    private boolean mAdjustSelectionBoundsEnabled = true;
+
+    private Rect mBoundsWithoutHeader = new Rect();
+
+    /** A helper used to highlight a prefix in a text field. */
+    private final TextHighlighter mTextHighlighter;
+    private CharSequence mUnknownNameText;
+    private int mPosition;
+
+    public ContactListItemView(Context context) {
+        super(context);
+
+        mTextHighlighter = new TextHighlighter(Typeface.BOLD);
+        mNameHighlightSequence = new ArrayList<HighlightSequence>();
+        mNumberHighlightSequence = new ArrayList<HighlightSequence>();
+    }
+
+    public ContactListItemView(Context context, AttributeSet attrs, boolean supportVideoCallIcon) {
+        this(context, attrs);
+
+        mSupportVideoCallIcon = supportVideoCallIcon;
+    }
+
+    public ContactListItemView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+        TypedArray a;
+
+        if (R.styleable.ContactListItemView != null) {
+            // Read all style values
+            a = getContext().obtainStyledAttributes(attrs, R.styleable.ContactListItemView);
+            mPreferredHeight = a.getDimensionPixelSize(
+                    R.styleable.ContactListItemView_list_item_height, mPreferredHeight);
+            mActivatedBackgroundDrawable = a.getDrawable(
+                    R.styleable.ContactListItemView_activated_background);
+
+            mGapBetweenImageAndText = a.getDimensionPixelOffset(
+                    R.styleable.ContactListItemView_list_item_gap_between_image_and_text,
+                    mGapBetweenImageAndText);
+            mGapBetweenIndexerAndImage = a.getDimensionPixelOffset(
+                    R.styleable.ContactListItemView_list_item_gap_between_indexer_and_image,
+                    mGapBetweenIndexerAndImage);
+            mGapBetweenLabelAndData = a.getDimensionPixelOffset(
+                    R.styleable.ContactListItemView_list_item_gap_between_label_and_data,
+                    mGapBetweenLabelAndData);
+            mPresenceIconMargin = a.getDimensionPixelOffset(
+                    R.styleable.ContactListItemView_list_item_presence_icon_margin,
+                    mPresenceIconMargin);
+            mPresenceIconSize = a.getDimensionPixelOffset(
+                    R.styleable.ContactListItemView_list_item_presence_icon_size,
+                    mPresenceIconSize);
+            mDefaultPhotoViewSize = a.getDimensionPixelOffset(
+                    R.styleable.ContactListItemView_list_item_photo_size, mDefaultPhotoViewSize);
+            mTextIndent = a.getDimensionPixelOffset(
+                    R.styleable.ContactListItemView_list_item_text_indent, mTextIndent);
+            mTextOffsetTop = a.getDimensionPixelOffset(
+                    R.styleable.ContactListItemView_list_item_text_offset_top, mTextOffsetTop);
+            mAvatarOffsetTop = a.getDimensionPixelOffset(
+                    R.styleable.ContactListItemView_list_item_avatar_offset_top, mAvatarOffsetTop);
+            mDataViewWidthWeight = a.getInteger(
+                    R.styleable.ContactListItemView_list_item_data_width_weight,
+                    mDataViewWidthWeight);
+            mLabelViewWidthWeight = a.getInteger(
+                    R.styleable.ContactListItemView_list_item_label_width_weight,
+                    mLabelViewWidthWeight);
+            mNameTextViewTextColor = a.getColor(
+                    R.styleable.ContactListItemView_list_item_name_text_color,
+                    mNameTextViewTextColor);
+            mNameTextViewTextSize = (int) a.getDimension(
+                    R.styleable.ContactListItemView_list_item_name_text_size,
+                    (int) getResources().getDimension(R.dimen.contact_browser_list_item_text_size));
+            mVideoCallIconSize = a.getDimensionPixelOffset(
+                    R.styleable.ContactListItemView_list_item_video_call_icon_size,
+                    mVideoCallIconSize);
+            mVideoCallIconMargin = a.getDimensionPixelOffset(
+                    R.styleable.ContactListItemView_list_item_video_call_icon_margin,
+                    mVideoCallIconMargin);
+
+
+            setPaddingRelative(
+                    a.getDimensionPixelOffset(
+                            R.styleable.ContactListItemView_list_item_padding_left, 0),
+                    a.getDimensionPixelOffset(
+                            R.styleable.ContactListItemView_list_item_padding_top, 0),
+                    a.getDimensionPixelOffset(
+                            R.styleable.ContactListItemView_list_item_padding_right, 0),
+                    a.getDimensionPixelOffset(
+                            R.styleable.ContactListItemView_list_item_padding_bottom, 0));
+
+            a.recycle();
+        }
+
+        mTextHighlighter = new TextHighlighter(Typeface.BOLD);
+
+        if (R.styleable.Theme != null) {
+            a = getContext().obtainStyledAttributes(R.styleable.Theme);
+            mSecondaryTextColor = a.getColorStateList(R.styleable.Theme_android_textColorSecondary);
+            a.recycle();
+        }
+
+        mHeaderWidth =
+                getResources().getDimensionPixelSize(R.dimen.contact_list_section_header_width);
+
+        if (mActivatedBackgroundDrawable != null) {
+            mActivatedBackgroundDrawable.setCallback(this);
+        }
+
+        mNameHighlightSequence = new ArrayList<HighlightSequence>();
+        mNumberHighlightSequence = new ArrayList<HighlightSequence>();
+
+        setLayoutDirection(View.LAYOUT_DIRECTION_LOCALE);
+    }
+
+    public void setUnknownNameText(CharSequence unknownNameText) {
+        mUnknownNameText = unknownNameText;
+    }
+
+    public void setQuickContactEnabled(boolean flag) {
+        mQuickContactEnabled = flag;
+    }
+
+    /**
+     * Sets whether the video calling icon is shown.  For the video calling icon to be shown,
+     * {@link #mSupportVideoCallIcon} must be {@code true}.
+     *
+     * @param showVideoCallIcon {@code true} if the video calling icon is shown, {@code false}
+     *      otherwise.
+     * @param listener Listener to notify when the video calling icon is clicked.
+     * @param position The position in the adapater of the video calling icon.
+     */
+    public void setShowVideoCallIcon(boolean showVideoCallIcon,
+            PhoneNumberListAdapter.Listener listener, int position) {
+        mShowVideoCallIcon = showVideoCallIcon;
+        mPhoneNumberListAdapterListener = listener;
+        mPosition = position;
+
+        if (mShowVideoCallIcon) {
+            if (mVideoCallIcon == null) {
+                mVideoCallIcon = new ImageView(getContext());
+                addView(mVideoCallIcon);
+            }
+            mVideoCallIcon.setContentDescription(getContext().getString(
+                    R.string.description_search_video_call));
+            mVideoCallIcon.setImageResource(R.drawable.quantum_ic_videocam_vd_theme_24);
+            mVideoCallIcon.setScaleType(ScaleType.CENTER);
+            mVideoCallIcon.setVisibility(View.VISIBLE);
+            mVideoCallIcon.setOnClickListener(new OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    // Inform the adapter that the video calling icon was clicked.
+                    if (mPhoneNumberListAdapterListener != null) {
+                        mPhoneNumberListAdapterListener.onVideoCallIconClicked(mPosition);
+                    }
+                }
+            });
+        } else {
+            if (mVideoCallIcon != null) {
+                mVideoCallIcon.setVisibility(View.GONE);
+            }
+        }
+    }
+
+    /**
+     * Sets whether the view supports a video calling icon.  This is independent of whether the view
+     * is actually showing an icon.  Support for the video calling icon ensures that the layout
+     * leaves space for the video icon, should it be shown.
+     *
+     * @param supportVideoCallIcon {@code true} if the video call icon is supported, {@code false}
+     *      otherwise.
+     */
+    public void setSupportVideoCallIcon(boolean supportVideoCallIcon) {
+        mSupportVideoCallIcon = supportVideoCallIcon;
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        // We will match parent's width and wrap content vertically, but make sure
+        // height is no less than listPreferredItemHeight.
+        final int specWidth = resolveSize(0, widthMeasureSpec);
+        final int preferredHeight = mPreferredHeight;
+
+        mNameTextViewHeight = 0;
+        mPhoneticNameTextViewHeight = 0;
+        mLabelViewHeight = 0;
+        mDataViewHeight = 0;
+        mLabelAndDataViewMaxHeight = 0;
+        mSnippetTextViewHeight = 0;
+        mStatusTextViewHeight = 0;
+        mCheckBoxWidth = 0;
+        mCheckBoxHeight = 0;
+        mDeleteImageButtonWidth = 0;
+        mDeleteImageButtonHeight = 0;
+
+        ensurePhotoViewSize();
+
+        // Width each TextView is able to use.
+        int effectiveWidth;
+        // All the other Views will honor the photo, so available width for them may be shrunk.
+        if (mPhotoViewWidth > 0 || mKeepHorizontalPaddingForPhotoView) {
+            effectiveWidth = specWidth - getPaddingLeft() - getPaddingRight()
+                    - (mPhotoViewWidth + mGapBetweenImageAndText + mGapBetweenIndexerAndImage);
+        } else {
+            effectiveWidth = specWidth - getPaddingLeft() - getPaddingRight();
+        }
+
+        if (mIsSectionHeaderEnabled) {
+            effectiveWidth -= mHeaderWidth;
+        }
+
+        if (mSupportVideoCallIcon) {
+            effectiveWidth -= (mVideoCallIconSize + mVideoCallIconMargin);
+        }
+
+        // Go over all visible text views and measure actual width of each of them.
+        // Also calculate their heights to get the total height for this entire view.
+
+        if (isVisible(mCheckBox)) {
+            mCheckBox.measure(
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+            mCheckBoxWidth = mCheckBox.getMeasuredWidth();
+            mCheckBoxHeight = mCheckBox.getMeasuredHeight();
+            effectiveWidth -= mCheckBoxWidth + mGapBetweenImageAndText;
+        }
+
+        if (isVisible(mDeleteImageButton)) {
+            mDeleteImageButton.measure(
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+            mDeleteImageButtonWidth = mDeleteImageButton.getMeasuredWidth();
+            mDeleteImageButtonHeight = mDeleteImageButton.getMeasuredHeight();
+            effectiveWidth -= mDeleteImageButtonWidth + mGapBetweenImageAndText;
+        }
+
+        if (isVisible(mNameTextView)) {
+            // Calculate width for name text - this parallels similar measurement in onLayout.
+            int nameTextWidth = effectiveWidth;
+            if (mPhotoPosition != PhotoPosition.LEFT) {
+                nameTextWidth -= mTextIndent;
+            }
+            mNameTextView.measure(
+                    MeasureSpec.makeMeasureSpec(nameTextWidth, MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+            mNameTextViewHeight = mNameTextView.getMeasuredHeight();
+        }
+
+        if (isVisible(mPhoneticNameTextView)) {
+            mPhoneticNameTextView.measure(
+                    MeasureSpec.makeMeasureSpec(effectiveWidth, MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+            mPhoneticNameTextViewHeight = mPhoneticNameTextView.getMeasuredHeight();
+        }
+
+        // If both data (phone number/email address) and label (type like "MOBILE") are quite long,
+        // we should ellipsize both using appropriate ratio.
+        final int dataWidth;
+        final int labelWidth;
+        if (isVisible(mDataView)) {
+            if (isVisible(mLabelView)) {
+                final int totalWidth = effectiveWidth - mGapBetweenLabelAndData;
+                dataWidth = ((totalWidth * mDataViewWidthWeight)
+                        / (mDataViewWidthWeight + mLabelViewWidthWeight));
+                labelWidth = ((totalWidth * mLabelViewWidthWeight) /
+                        (mDataViewWidthWeight + mLabelViewWidthWeight));
+            } else {
+                dataWidth = effectiveWidth;
+                labelWidth = 0;
+            }
+        } else {
+            dataWidth = 0;
+            if (isVisible(mLabelView)) {
+                labelWidth = effectiveWidth;
+            } else {
+                labelWidth = 0;
+            }
+        }
+
+        if (isVisible(mDataView)) {
+            mDataView.measure(MeasureSpec.makeMeasureSpec(dataWidth, MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+            mDataViewHeight = mDataView.getMeasuredHeight();
+        }
+
+        if (isVisible(mLabelView)) {
+            mLabelView.measure(MeasureSpec.makeMeasureSpec(labelWidth, MeasureSpec.AT_MOST),
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+            mLabelViewHeight = mLabelView.getMeasuredHeight();
+        }
+        mLabelAndDataViewMaxHeight = Math.max(mLabelViewHeight, mDataViewHeight);
+
+        if (isVisible(mSnippetView)) {
+            mSnippetView.measure(
+                    MeasureSpec.makeMeasureSpec(effectiveWidth, MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+            mSnippetTextViewHeight = mSnippetView.getMeasuredHeight();
+        }
+
+        // Status view height is the biggest of the text view and the presence icon
+        if (isVisible(mPresenceIcon)) {
+            mPresenceIcon.measure(
+                    MeasureSpec.makeMeasureSpec(mPresenceIconSize, MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(mPresenceIconSize, MeasureSpec.EXACTLY));
+            mStatusTextViewHeight = mPresenceIcon.getMeasuredHeight();
+        }
+
+        if (mSupportVideoCallIcon && isVisible(mVideoCallIcon)) {
+            mVideoCallIcon.measure(
+                    MeasureSpec.makeMeasureSpec(mVideoCallIconSize, MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(mVideoCallIconSize, MeasureSpec.EXACTLY));
+        }
+
+        if (isVisible(mWorkProfileIcon)) {
+            mWorkProfileIcon.measure(
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+            mNameTextViewHeight =
+                    Math.max(mNameTextViewHeight, mWorkProfileIcon.getMeasuredHeight());
+        }
+
+        if (isVisible(mStatusView)) {
+            // Presence and status are in a same row, so status will be affected by icon size.
+            final int statusWidth;
+            if (isVisible(mPresenceIcon)) {
+                statusWidth = (effectiveWidth - mPresenceIcon.getMeasuredWidth()
+                        - mPresenceIconMargin);
+            } else {
+                statusWidth = effectiveWidth;
+            }
+            mStatusView.measure(MeasureSpec.makeMeasureSpec(statusWidth, MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+            mStatusTextViewHeight =
+                    Math.max(mStatusTextViewHeight, mStatusView.getMeasuredHeight());
+        }
+
+        // Calculate height including padding.
+        int height = (mNameTextViewHeight + mPhoneticNameTextViewHeight +
+                mLabelAndDataViewMaxHeight +
+                mSnippetTextViewHeight + mStatusTextViewHeight);
+
+        // Make sure the height is at least as high as the photo
+        height = Math.max(height, mPhotoViewHeight + getPaddingBottom() + getPaddingTop());
+
+        // Make sure height is at least the preferred height
+        height = Math.max(height, preferredHeight);
+
+        // Measure the header if it is visible.
+        if (mHeaderView != null && mHeaderView.getVisibility() == VISIBLE) {
+            mHeaderView.measure(
+                    MeasureSpec.makeMeasureSpec(mHeaderWidth, MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
+        }
+
+        setMeasuredDimension(specWidth, height);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        final int height = bottom - top;
+        final int width = right - left;
+
+        // Determine the vertical bounds by laying out the header first.
+        int topBound = 0;
+        int bottomBound = height;
+        int leftBound = getPaddingLeft();
+        int rightBound = width - getPaddingRight();
+
+        final boolean isLayoutRtl = ViewUtil.isViewLayoutRtl(this);
+
+        // Put the section header on the left side of the contact view.
+        if (mIsSectionHeaderEnabled) {
+            if (mHeaderView != null) {
+                int headerHeight = mHeaderView.getMeasuredHeight();
+                int headerTopBound = (bottomBound + topBound - headerHeight) / 2 + mTextOffsetTop;
+
+                mHeaderView.layout(
+                        isLayoutRtl ? rightBound - mHeaderWidth : leftBound,
+                        headerTopBound,
+                        isLayoutRtl ? rightBound : leftBound + mHeaderWidth,
+                        headerTopBound + headerHeight);
+            }
+            if (isLayoutRtl) {
+                rightBound -= mHeaderWidth;
+            } else {
+                leftBound += mHeaderWidth;
+            }
+        }
+
+        mBoundsWithoutHeader.set(left + leftBound, topBound, left + rightBound, bottomBound);
+        mLeftOffset = left + leftBound;
+        mRightOffset = left + rightBound;
+        if (isLayoutRtl) {
+            rightBound -= mGapBetweenIndexerAndImage;
+        } else {
+            leftBound += mGapBetweenIndexerAndImage;
+        }
+
+        if (mActivatedStateSupported && isActivated()) {
+            mActivatedBackgroundDrawable.setBounds(mBoundsWithoutHeader);
+        }
+
+        if (isVisible(mCheckBox)) {
+            final int photoTop = topBound + (bottomBound - topBound - mCheckBoxHeight) / 2;
+            if (mPhotoPosition == PhotoPosition.LEFT) {
+                mCheckBox.layout(rightBound - mGapFromScrollBar - mCheckBoxWidth,
+                        photoTop,
+                        rightBound - mGapFromScrollBar,
+                        photoTop + mCheckBoxHeight);
+            } else {
+                mCheckBox.layout(leftBound + mGapFromScrollBar,
+                        photoTop,
+                        leftBound + mGapFromScrollBar + mCheckBoxWidth,
+                        photoTop + mCheckBoxHeight);
+            }
+        }
+
+        if (isVisible(mDeleteImageButton)) {
+            final int photoTop = topBound + (bottomBound - topBound - mDeleteImageButtonHeight) / 2;
+            final int mDeleteImageButtonSize = mDeleteImageButtonHeight > mDeleteImageButtonWidth
+                    ? mDeleteImageButtonHeight : mDeleteImageButtonWidth;
+            if (mPhotoPosition == PhotoPosition.LEFT) {
+                mDeleteImageButton.layout(rightBound - mDeleteImageButtonSize,
+                        photoTop,
+                        rightBound,
+                        photoTop + mDeleteImageButtonSize);
+                rightBound -= mDeleteImageButtonSize;
+            } else {
+                mDeleteImageButton.layout(leftBound,
+                        photoTop,
+                        leftBound + mDeleteImageButtonSize,
+                        photoTop + mDeleteImageButtonSize);
+                leftBound += mDeleteImageButtonSize;
+            }
+        }
+
+        final View photoView = mQuickContact != null ? mQuickContact : mPhotoView;
+        if (mPhotoPosition == PhotoPosition.LEFT) {
+            // Photo is the left most view. All the other Views should on the right of the photo.
+            if (photoView != null) {
+                // Center the photo vertically
+                final int photoTop = topBound + (bottomBound - topBound - mPhotoViewHeight) / 2
+                        + mAvatarOffsetTop;
+                photoView.layout(
+                        leftBound,
+                        photoTop,
+                        leftBound + mPhotoViewWidth,
+                        photoTop + mPhotoViewHeight);
+                leftBound += mPhotoViewWidth + mGapBetweenImageAndText;
+            } else if (mKeepHorizontalPaddingForPhotoView) {
+                // Draw nothing but keep the padding.
+                leftBound += mPhotoViewWidth + mGapBetweenImageAndText;
+            }
+        } else {
+            // Photo is the right most view. Right bound should be adjusted that way.
+            if (photoView != null) {
+                // Center the photo vertically
+                final int photoTop = topBound + (bottomBound - topBound - mPhotoViewHeight) / 2
+                        + mAvatarOffsetTop;
+                photoView.layout(
+                        rightBound - mPhotoViewWidth,
+                        photoTop,
+                        rightBound,
+                        photoTop + mPhotoViewHeight);
+                rightBound -= (mPhotoViewWidth + mGapBetweenImageAndText);
+            } else if (mKeepHorizontalPaddingForPhotoView) {
+                // Draw nothing but keep the padding.
+                rightBound -= (mPhotoViewWidth + mGapBetweenImageAndText);
+            }
+
+            // Add indent between left-most padding and texts.
+            leftBound += mTextIndent;
+        }
+
+        if (mSupportVideoCallIcon) {
+            // Place the video call button at the end of the list (e.g. take into account RTL mode).
+            if (isVisible(mVideoCallIcon)) {
+                // Center the video icon vertically
+                final int videoIconTop = topBound +
+                        (bottomBound - topBound - mVideoCallIconSize) / 2;
+
+                if (!isLayoutRtl) {
+                    // When photo is on left, video icon is placed on the right edge.
+                    mVideoCallIcon.layout(rightBound - mVideoCallIconSize,
+                            videoIconTop,
+                            rightBound,
+                            videoIconTop + mVideoCallIconSize);
+                } else {
+                    // When photo is on right, video icon is placed on the left edge.
+                    mVideoCallIcon.layout(leftBound,
+                            videoIconTop,
+                            leftBound + mVideoCallIconSize,
+                            videoIconTop + mVideoCallIconSize);
+                }
+            }
+
+            if (mPhotoPosition == PhotoPosition.LEFT) {
+                rightBound -= (mVideoCallIconSize + mVideoCallIconMargin);
+            } else {
+                leftBound += mVideoCallIconSize + mVideoCallIconMargin;
+            }
+        }
+
+
+        // Center text vertically, then apply the top offset.
+        final int totalTextHeight = mNameTextViewHeight + mPhoneticNameTextViewHeight +
+                mLabelAndDataViewMaxHeight + mSnippetTextViewHeight + mStatusTextViewHeight;
+        int textTopBound = (bottomBound + topBound - totalTextHeight) / 2 + mTextOffsetTop;
+
+        // Work Profile icon align top
+        int workProfileIconWidth = 0;
+        if (isVisible(mWorkProfileIcon)) {
+            workProfileIconWidth = mWorkProfileIcon.getMeasuredWidth();
+            final int distanceFromEnd = mCheckBoxWidth > 0
+                    ? mCheckBoxWidth + mGapBetweenImageAndText : 0;
+            if (mPhotoPosition == PhotoPosition.LEFT) {
+                // When photo is on left, label is placed on the right edge of the list item.
+                mWorkProfileIcon.layout(rightBound - workProfileIconWidth - distanceFromEnd,
+                        textTopBound,
+                        rightBound - distanceFromEnd,
+                        textTopBound + mNameTextViewHeight);
+            } else {
+                // When photo is on right, label is placed on the left of data view.
+                mWorkProfileIcon.layout(leftBound + distanceFromEnd,
+                        textTopBound,
+                        leftBound + workProfileIconWidth + distanceFromEnd,
+                        textTopBound + mNameTextViewHeight);
+            }
+        }
+
+        // Layout all text view and presence icon
+        // Put name TextView first
+        if (isVisible(mNameTextView)) {
+            final int distanceFromEnd = workProfileIconWidth
+                    + (mCheckBoxWidth > 0 ? mCheckBoxWidth + mGapBetweenImageAndText : 0);
+            if (mPhotoPosition == PhotoPosition.LEFT) {
+                mNameTextView.layout(leftBound,
+                        textTopBound,
+                        rightBound - distanceFromEnd,
+                        textTopBound + mNameTextViewHeight);
+            } else {
+                mNameTextView.layout(leftBound + distanceFromEnd,
+                        textTopBound,
+                        rightBound,
+                        textTopBound + mNameTextViewHeight);
+            }
+        }
+
+        if (isVisible(mNameTextView) || isVisible(mWorkProfileIcon)) {
+            textTopBound += mNameTextViewHeight;
+        }
+
+        // Presence and status
+        if (isLayoutRtl) {
+            int statusRightBound = rightBound;
+            if (isVisible(mPresenceIcon)) {
+                int iconWidth = mPresenceIcon.getMeasuredWidth();
+                mPresenceIcon.layout(
+                        rightBound - iconWidth,
+                        textTopBound,
+                        rightBound,
+                        textTopBound + mStatusTextViewHeight);
+                statusRightBound -= (iconWidth + mPresenceIconMargin);
+            }
+
+            if (isVisible(mStatusView)) {
+                mStatusView.layout(leftBound,
+                        textTopBound,
+                        statusRightBound,
+                        textTopBound + mStatusTextViewHeight);
+            }
+        } else {
+            int statusLeftBound = leftBound;
+            if (isVisible(mPresenceIcon)) {
+                int iconWidth = mPresenceIcon.getMeasuredWidth();
+                mPresenceIcon.layout(
+                        leftBound,
+                        textTopBound,
+                        leftBound + iconWidth,
+                        textTopBound + mStatusTextViewHeight);
+                statusLeftBound += (iconWidth + mPresenceIconMargin);
+            }
+
+            if (isVisible(mStatusView)) {
+                mStatusView.layout(statusLeftBound,
+                        textTopBound,
+                        rightBound,
+                        textTopBound + mStatusTextViewHeight);
+            }
+        }
+
+        if (isVisible(mStatusView) || isVisible(mPresenceIcon)) {
+            textTopBound += mStatusTextViewHeight;
+        }
+
+        // Rest of text views
+        int dataLeftBound = leftBound;
+        if (isVisible(mPhoneticNameTextView)) {
+            mPhoneticNameTextView.layout(leftBound,
+                    textTopBound,
+                    rightBound,
+                    textTopBound + mPhoneticNameTextViewHeight);
+            textTopBound += mPhoneticNameTextViewHeight;
+        }
+
+        // Label and Data align bottom.
+        if (isVisible(mLabelView)) {
+            if (!isLayoutRtl) {
+                mLabelView.layout(dataLeftBound,
+                        textTopBound + mLabelAndDataViewMaxHeight - mLabelViewHeight,
+                        rightBound,
+                        textTopBound + mLabelAndDataViewMaxHeight);
+                dataLeftBound += mLabelView.getMeasuredWidth() + mGapBetweenLabelAndData;
+            } else {
+                dataLeftBound = leftBound + mLabelView.getMeasuredWidth();
+                mLabelView.layout(rightBound - mLabelView.getMeasuredWidth(),
+                        textTopBound + mLabelAndDataViewMaxHeight - mLabelViewHeight,
+                        rightBound,
+                        textTopBound + mLabelAndDataViewMaxHeight);
+                rightBound -= (mLabelView.getMeasuredWidth() + mGapBetweenLabelAndData);
+            }
+        }
+
+        if (isVisible(mDataView)) {
+            if (!isLayoutRtl) {
+                mDataView.layout(dataLeftBound,
+                        textTopBound + mLabelAndDataViewMaxHeight - mDataViewHeight,
+                        rightBound,
+                        textTopBound + mLabelAndDataViewMaxHeight);
+            } else {
+                mDataView.layout(rightBound - mDataView.getMeasuredWidth(),
+                        textTopBound + mLabelAndDataViewMaxHeight - mDataViewHeight,
+                        rightBound,
+                        textTopBound + mLabelAndDataViewMaxHeight);
+            }
+        }
+        if (isVisible(mLabelView) || isVisible(mDataView)) {
+            textTopBound += mLabelAndDataViewMaxHeight;
+        }
+
+        if (isVisible(mSnippetView)) {
+            mSnippetView.layout(leftBound,
+                    textTopBound,
+                    rightBound,
+                    textTopBound + mSnippetTextViewHeight);
+        }
+    }
+
+    @Override
+    public void adjustListItemSelectionBounds(Rect bounds) {
+        if (mAdjustSelectionBoundsEnabled) {
+            bounds.top += mBoundsWithoutHeader.top;
+            bounds.bottom = bounds.top + mBoundsWithoutHeader.height();
+            bounds.left = mBoundsWithoutHeader.left;
+            bounds.right = mBoundsWithoutHeader.right;
+        }
+    }
+
+    protected boolean isVisible(View view) {
+        return view != null && view.getVisibility() == View.VISIBLE;
+    }
+
+    /**
+     * Extracts width and height from the style
+     */
+    private void ensurePhotoViewSize() {
+        if (!mPhotoViewWidthAndHeightAreReady) {
+            mPhotoViewWidth = mPhotoViewHeight = getDefaultPhotoViewSize();
+            if (!mQuickContactEnabled && mPhotoView == null) {
+                if (!mKeepHorizontalPaddingForPhotoView) {
+                    mPhotoViewWidth = 0;
+                }
+                if (!mKeepVerticalPaddingForPhotoView) {
+                    mPhotoViewHeight = 0;
+                }
+            }
+
+            mPhotoViewWidthAndHeightAreReady = true;
+        }
+    }
+
+    protected int getDefaultPhotoViewSize() {
+        return mDefaultPhotoViewSize;
+    }
+
+    /**
+     * Gets a LayoutParam that corresponds to the default photo size.
+     *
+     * @return A new LayoutParam.
+     */
+    private LayoutParams getDefaultPhotoLayoutParams() {
+        LayoutParams params = generateDefaultLayoutParams();
+        params.width = getDefaultPhotoViewSize();
+        params.height = params.width;
+        return params;
+    }
+
+    @Override
+    protected void drawableStateChanged() {
+        super.drawableStateChanged();
+        if (mActivatedStateSupported) {
+            mActivatedBackgroundDrawable.setState(getDrawableState());
+        }
+    }
+
+    @Override
+    protected boolean verifyDrawable(Drawable who) {
+        return who == mActivatedBackgroundDrawable || super.verifyDrawable(who);
+    }
+
+    @Override
+    public void jumpDrawablesToCurrentState() {
+        super.jumpDrawablesToCurrentState();
+        if (mActivatedStateSupported) {
+            mActivatedBackgroundDrawable.jumpToCurrentState();
+        }
+    }
+
+    @Override
+    public void dispatchDraw(Canvas canvas) {
+        if (mActivatedStateSupported && isActivated()) {
+            mActivatedBackgroundDrawable.draw(canvas);
+        }
+
+        super.dispatchDraw(canvas);
+    }
+
+    /**
+     * Sets section header or makes it invisible if the title is null.
+     */
+    public void setSectionHeader(String title) {
+        if (title != null) {
+            // Empty section title is the favorites so show the star here.
+            if (title.isEmpty()) {
+                if (mHeaderView == null) {
+                    addStarImageHeader();
+                } else if (mHeaderView instanceof TextView) {
+                    removeView(mHeaderView);
+                    addStarImageHeader();
+                } else {
+                    mHeaderView.setVisibility(View.VISIBLE);
+                }
+            } else {
+                if (mHeaderView == null) {
+                    addTextHeader(title);
+                } else if (mHeaderView instanceof ImageView) {
+                    removeView(mHeaderView);
+                    addTextHeader(title);
+                } else {
+                    updateHeaderText((TextView) mHeaderView, title);
+                }
+            }
+        } else if (mHeaderView != null) {
+            mHeaderView.setVisibility(View.GONE);
+        }
+    }
+
+    private void addTextHeader(String title) {
+        mHeaderView = new TextView(getContext());
+        final TextView headerTextView = (TextView) mHeaderView;
+        headerTextView.setTextAppearance(getContext(), R.style.SectionHeaderStyle);
+        headerTextView.setGravity(Gravity.CENTER_HORIZONTAL);
+        updateHeaderText(headerTextView, title);
+        addView(headerTextView);
+    }
+
+    private void updateHeaderText(TextView headerTextView, String title) {
+        setMarqueeText(headerTextView, title);
+        headerTextView.setAllCaps(true);
+        if (ContactsSectionIndexer.BLANK_HEADER_STRING.equals(title)) {
+            headerTextView.setContentDescription(
+                    getContext().getString(R.string.description_no_name_header));
+        } else {
+            headerTextView.setContentDescription(title);
+        }
+        headerTextView.setVisibility(View.VISIBLE);
+    }
+
+    private void addStarImageHeader() {
+        mHeaderView = new ImageView(getContext());
+        final ImageView headerImageView = (ImageView) mHeaderView;
+        headerImageView.setImageDrawable(
+                getResources().getDrawable(R.drawable.quantum_ic_star_vd_theme_24,
+                        getContext().getTheme()));
+        headerImageView.setImageTintList(ColorStateList.valueOf(getResources()
+                .getColor(R.color.material_star_pink)));
+        headerImageView.setContentDescription(
+                getContext().getString(R.string.contactsFavoritesLabel));
+        headerImageView.setVisibility(View.VISIBLE);
+        addView(headerImageView);
+    }
+
+    public void setIsSectionHeaderEnabled(boolean isSectionHeaderEnabled) {
+        mIsSectionHeaderEnabled = isSectionHeaderEnabled;
+    }
+
+    /**
+     * Returns the quick contact badge, creating it if necessary.
+     */
+    public QuickContactBadge getQuickContact() {
+        if (!mQuickContactEnabled) {
+            throw new IllegalStateException("QuickContact is disabled for this view");
+        }
+        if (mQuickContact == null) {
+            mQuickContact = new QuickContactBadge(getContext());
+            if (CompatUtils.isLollipopCompatible()) {
+                mQuickContact.setOverlay(null);
+            }
+            mQuickContact.setLayoutParams(getDefaultPhotoLayoutParams());
+            if (mNameTextView != null) {
+                mQuickContact.setContentDescription(getContext().getString(
+                        R.string.description_quick_contact_for, mNameTextView.getText()));
+            }
+
+            addView(mQuickContact);
+            mPhotoViewWidthAndHeightAreReady = false;
+        }
+        return mQuickContact;
+    }
+
+    /**
+     * Returns the photo view, creating it if necessary.
+     */
+    public ImageView getPhotoView() {
+        if (mPhotoView == null) {
+            mPhotoView = new ImageView(getContext());
+            mPhotoView.setLayoutParams(getDefaultPhotoLayoutParams());
+            // Quick contact style used above will set a background - remove it
+            mPhotoView.setBackground(null);
+            addView(mPhotoView);
+            mPhotoViewWidthAndHeightAreReady = false;
+        }
+        return mPhotoView;
+    }
+
+    /**
+     * Removes the photo view.
+     */
+    public void removePhotoView() {
+        removePhotoView(false, true);
+    }
+
+    /**
+     * Removes the photo view.
+     *
+     * @param keepHorizontalPadding True means data on the right side will have
+     *            padding on left, pretending there is still a photo view.
+     * @param keepVerticalPadding True means the View will have some height
+     *            enough for accommodating a photo view.
+     */
+    public void removePhotoView(boolean keepHorizontalPadding, boolean keepVerticalPadding) {
+        mPhotoViewWidthAndHeightAreReady = false;
+        mKeepHorizontalPaddingForPhotoView = keepHorizontalPadding;
+        mKeepVerticalPaddingForPhotoView = keepVerticalPadding;
+        if (mPhotoView != null) {
+            removeView(mPhotoView);
+            mPhotoView = null;
+        }
+        if (mQuickContact != null) {
+            removeView(mQuickContact);
+            mQuickContact = null;
+        }
+    }
+
+    /**
+     * Sets a word prefix that will be highlighted if encountered in fields like
+     * name and search snippet. This will disable the mask highlighting for names.
+     * <p>
+     * NOTE: must be all upper-case
+     */
+    public void setHighlightedPrefix(String upperCasePrefix) {
+        mHighlightedPrefix = upperCasePrefix;
+    }
+
+    /**
+     * Clears previously set highlight sequences for the view.
+     */
+    public void clearHighlightSequences() {
+        mNameHighlightSequence.clear();
+        mNumberHighlightSequence.clear();
+        mHighlightedPrefix = null;
+    }
+
+    /**
+     * Adds a highlight sequence to the name highlighter.
+     * @param start The start position of the highlight sequence.
+     * @param end The end position of the highlight sequence.
+     */
+    public void addNameHighlightSequence(int start, int end) {
+        mNameHighlightSequence.add(new HighlightSequence(start, end));
+    }
+
+    /**
+     * Adds a highlight sequence to the number highlighter.
+     * @param start The start position of the highlight sequence.
+     * @param end The end position of the highlight sequence.
+     */
+    public void addNumberHighlightSequence(int start, int end) {
+        mNumberHighlightSequence.add(new HighlightSequence(start, end));
+    }
+
+    /**
+     * Returns the text view for the contact name, creating it if necessary.
+     */
+    public TextView getNameTextView() {
+        if (mNameTextView == null) {
+            mNameTextView = new TextView(getContext());
+            mNameTextView.setSingleLine(true);
+            mNameTextView.setEllipsize(getTextEllipsis());
+            mNameTextView.setTextColor(ResourcesCompat.getColorStateList(getResources(),
+                    R.color.contact_list_name_text_color, getContext().getTheme()));
+            mNameTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mNameTextViewTextSize);
+            // Manually call setActivated() since this view may be added after the first
+            // setActivated() call toward this whole item view.
+            mNameTextView.setActivated(isActivated());
+            mNameTextView.setGravity(Gravity.CENTER_VERTICAL);
+            mNameTextView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
+            mNameTextView.setId(R.id.cliv_name_textview);
+            if (CompatUtils.isLollipopCompatible()) {
+                mNameTextView.setElegantTextHeight(false);
+            }
+            addView(mNameTextView);
+        }
+        return mNameTextView;
+    }
+
+    /**
+     * Adds or updates a text view for the phonetic name.
+     */
+    public void setPhoneticName(char[] text, int size) {
+        if (text == null || size == 0) {
+            if (mPhoneticNameTextView != null) {
+                mPhoneticNameTextView.setVisibility(View.GONE);
+            }
+        } else {
+            getPhoneticNameTextView();
+            setMarqueeText(mPhoneticNameTextView, text, size);
+            mPhoneticNameTextView.setVisibility(VISIBLE);
+        }
+    }
+
+    /**
+     * Returns the text view for the phonetic name, creating it if necessary.
+     */
+    public TextView getPhoneticNameTextView() {
+        if (mPhoneticNameTextView == null) {
+            mPhoneticNameTextView = new TextView(getContext());
+            mPhoneticNameTextView.setSingleLine(true);
+            mPhoneticNameTextView.setEllipsize(getTextEllipsis());
+            mPhoneticNameTextView.setTextAppearance(getContext(), android.R.style.TextAppearance_Small);
+            mPhoneticNameTextView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
+            mPhoneticNameTextView.setTypeface(mPhoneticNameTextView.getTypeface(), Typeface.BOLD);
+            mPhoneticNameTextView.setActivated(isActivated());
+            mPhoneticNameTextView.setId(R.id.cliv_phoneticname_textview);
+            addView(mPhoneticNameTextView);
+        }
+        return mPhoneticNameTextView;
+    }
+
+    /**
+     * Adds or updates a text view for the data label.
+     */
+    public void setLabel(CharSequence text) {
+        if (TextUtils.isEmpty(text)) {
+            if (mLabelView != null) {
+                mLabelView.setVisibility(View.GONE);
+            }
+        } else {
+            getLabelView();
+            setMarqueeText(mLabelView, text);
+            mLabelView.setVisibility(VISIBLE);
+        }
+    }
+
+    /**
+     * Returns the text view for the data label, creating it if necessary.
+     */
+    public TextView getLabelView() {
+        if (mLabelView == null) {
+            mLabelView = new TextView(getContext());
+            mLabelView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
+                    LayoutParams.WRAP_CONTENT));
+
+            mLabelView.setSingleLine(true);
+            mLabelView.setEllipsize(getTextEllipsis());
+            mLabelView.setTextAppearance(getContext(), R.style.TextAppearanceSmall);
+            if (mPhotoPosition == PhotoPosition.LEFT) {
+                mLabelView.setAllCaps(true);
+            } else {
+                mLabelView.setTypeface(mLabelView.getTypeface(), Typeface.BOLD);
+            }
+            mLabelView.setActivated(isActivated());
+            mLabelView.setId(R.id.cliv_label_textview);
+            addView(mLabelView);
+        }
+        return mLabelView;
+    }
+
+    /**
+     * Adds or updates a text view for the data element.
+     */
+    public void setData(char[] text, int size) {
+        if (text == null || size == 0) {
+            if (mDataView != null) {
+                mDataView.setVisibility(View.GONE);
+            }
+        } else {
+            getDataView();
+            setMarqueeText(mDataView, text, size);
+            mDataView.setVisibility(VISIBLE);
+        }
+    }
+
+    /**
+     * Sets phone number for a list item. This takes care of number highlighting if the highlight
+     * mask exists.
+     */
+    public void setPhoneNumber(String text, String countryIso) {
+        if (text == null) {
+            if (mDataView != null) {
+                mDataView.setVisibility(View.GONE);
+            }
+        } else {
+            getDataView();
+
+            // TODO: Format number using PhoneNumberUtils.formatNumber before assigning it to
+            // mDataView. Make sure that determination of the highlight sequences are done only
+            // after number formatting.
+
+            // Sets phone number texts for display after highlighting it, if applicable.
+            // CharSequence textToSet = text;
+            final SpannableString textToSet = new SpannableString(text);
+
+            if (mNumberHighlightSequence.size() != 0) {
+                final HighlightSequence highlightSequence = mNumberHighlightSequence.get(0);
+                mTextHighlighter.applyMaskingHighlight(textToSet, highlightSequence.start,
+                        highlightSequence.end);
+            }
+
+            setMarqueeText(mDataView, textToSet);
+            mDataView.setVisibility(VISIBLE);
+
+            // We have a phone number as "mDataView" so make it always LTR and VIEW_START
+            mDataView.setTextDirection(View.TEXT_DIRECTION_LTR);
+            mDataView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
+        }
+    }
+
+    private void setMarqueeText(TextView textView, char[] text, int size) {
+        if (getTextEllipsis() == TruncateAt.MARQUEE) {
+            setMarqueeText(textView, new String(text, 0, size));
+        } else {
+            textView.setText(text, 0, size);
+        }
+    }
+
+    private void setMarqueeText(TextView textView, CharSequence text) {
+        if (getTextEllipsis() == TruncateAt.MARQUEE) {
+            // To show MARQUEE correctly (with END effect during non-active state), we need
+            // to build Spanned with MARQUEE in addition to TextView's ellipsize setting.
+            final SpannableString spannable = new SpannableString(text);
+            spannable.setSpan(TruncateAt.MARQUEE, 0, spannable.length(),
+                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+            textView.setText(spannable);
+        } else {
+            textView.setText(text);
+        }
+    }
+
+    /**
+     * Returns the {@link AppCompatCheckBox} view, creating it if necessary.
+     */
+    public AppCompatCheckBox getCheckBox() {
+        if (mCheckBox == null) {
+            mCheckBox = new AppCompatCheckBox(getContext());
+            // Make non-focusable, so the rest of the ContactListItemView can be clicked.
+            mCheckBox.setFocusable(false);
+            addView(mCheckBox);
+        }
+        return mCheckBox;
+    }
+
+    /**
+     * Returns the {@link AppCompatImageButton} delete button, creating it if necessary.
+     */
+    public AppCompatImageButton getDeleteImageButton(
+            final MultiSelectEntryContactListAdapter.DeleteContactListener listener,
+            final int position) {
+        if (mDeleteImageButton == null) {
+            mDeleteImageButton = new AppCompatImageButton(getContext());
+            mDeleteImageButton.setImageResource(R.drawable.quantum_ic_cancel_vd_theme_24);
+            mDeleteImageButton.setScaleType(ScaleType.CENTER);
+            mDeleteImageButton.setBackgroundColor(Color.TRANSPARENT);
+            mDeleteImageButton.setContentDescription(
+                    getResources().getString(R.string.description_delete_contact));
+            if (CompatUtils. isLollipopCompatible()) {
+                final TypedValue typedValue = new TypedValue();
+                getContext().getTheme().resolveAttribute(
+                        android.R.attr.selectableItemBackgroundBorderless, typedValue, true);
+                mDeleteImageButton.setBackgroundResource(typedValue.resourceId);
+            }
+            addView(mDeleteImageButton);
+        }
+        // Reset onClickListener because after reloading the view, position might be changed.
+        mDeleteImageButton.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                // Inform the adapter that delete icon was clicked.
+                if (listener != null) {
+                    listener.onContactDeleteClicked(position);
+                }
+            }
+        });
+        return mDeleteImageButton;
+    }
+
+    /**
+     * Returns the text view for the data text, creating it if necessary.
+     */
+    public TextView getDataView() {
+        if (mDataView == null) {
+            mDataView = new TextView(getContext());
+            mDataView.setSingleLine(true);
+            mDataView.setEllipsize(getTextEllipsis());
+            mDataView.setTextAppearance(getContext(), R.style.TextAppearanceSmall);
+            mDataView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
+            mDataView.setActivated(isActivated());
+            mDataView.setId(R.id.cliv_data_view);
+            if (CompatUtils.isLollipopCompatible()) {
+                mDataView.setElegantTextHeight(false);
+            }
+            addView(mDataView);
+        }
+        return mDataView;
+    }
+
+    /**
+     * Adds or updates a text view for the search snippet.
+     */
+    public void setSnippet(String text) {
+        if (TextUtils.isEmpty(text)) {
+            if (mSnippetView != null) {
+                mSnippetView.setVisibility(View.GONE);
+            }
+        } else {
+            mTextHighlighter.setPrefixText(getSnippetView(), text, mHighlightedPrefix);
+            mSnippetView.setVisibility(VISIBLE);
+            if (ContactDisplayUtils.isPossiblePhoneNumber(text)) {
+                // Give the text-to-speech engine a hint that it's a phone number
+                mSnippetView.setContentDescription(
+                        PhoneNumberUtilsCompat.createTtsSpannable(text));
+            } else {
+                mSnippetView.setContentDescription(null);
+            }
+        }
+    }
+
+    /**
+     * Returns the text view for the search snippet, creating it if necessary.
+     */
+    public TextView getSnippetView() {
+        if (mSnippetView == null) {
+            mSnippetView = new TextView(getContext());
+            mSnippetView.setSingleLine(true);
+            mSnippetView.setEllipsize(getTextEllipsis());
+            mSnippetView.setTextAppearance(getContext(), android.R.style.TextAppearance_Small);
+            mSnippetView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
+            mSnippetView.setActivated(isActivated());
+            addView(mSnippetView);
+        }
+        return mSnippetView;
+    }
+
+    /**
+     * Returns the text view for the status, creating it if necessary.
+     */
+    public TextView getStatusView() {
+        if (mStatusView == null) {
+            mStatusView = new TextView(getContext());
+            mStatusView.setSingleLine(true);
+            mStatusView.setEllipsize(getTextEllipsis());
+            mStatusView.setTextAppearance(getContext(), android.R.style.TextAppearance_Small);
+            mStatusView.setTextColor(mSecondaryTextColor);
+            mStatusView.setActivated(isActivated());
+            mStatusView.setTextAlignment(View.TEXT_ALIGNMENT_VIEW_START);
+            addView(mStatusView);
+        }
+        return mStatusView;
+    }
+
+    /**
+     * Adds or updates a text view for the status.
+     */
+    public void setStatus(CharSequence text) {
+        if (TextUtils.isEmpty(text)) {
+            if (mStatusView != null) {
+                mStatusView.setVisibility(View.GONE);
+            }
+        } else {
+            getStatusView();
+            setMarqueeText(mStatusView, text);
+            mStatusView.setVisibility(VISIBLE);
+        }
+    }
+
+    /**
+     * Adds or updates the presence icon view.
+     */
+    public void setPresence(Drawable icon) {
+        if (icon != null) {
+            if (mPresenceIcon == null) {
+                mPresenceIcon = new ImageView(getContext());
+                addView(mPresenceIcon);
+            }
+            mPresenceIcon.setImageDrawable(icon);
+            mPresenceIcon.setScaleType(ScaleType.CENTER);
+            mPresenceIcon.setVisibility(View.VISIBLE);
+        } else {
+            if (mPresenceIcon != null) {
+                mPresenceIcon.setVisibility(View.GONE);
+            }
+        }
+    }
+
+    /**
+     * Set to display work profile icon or not
+     *
+     * @param enabled set to display work profile icon or not
+     */
+    public void setWorkProfileIconEnabled(boolean enabled) {
+        if (mWorkProfileIcon != null) {
+            mWorkProfileIcon.setVisibility(enabled ? View.VISIBLE : View.GONE);
+        } else if (enabled) {
+            mWorkProfileIcon = new ImageView(getContext());
+            addView(mWorkProfileIcon);
+            mWorkProfileIcon.setImageResource(R.drawable.ic_work_profile);
+            mWorkProfileIcon.setScaleType(ScaleType.CENTER_INSIDE);
+            mWorkProfileIcon.setVisibility(View.VISIBLE);
+        }
+    }
+
+    private TruncateAt getTextEllipsis() {
+        return TruncateAt.MARQUEE;
+    }
+
+    public void showDisplayName(Cursor cursor, int nameColumnIndex, int displayOrder) {
+        CharSequence name = cursor.getString(nameColumnIndex);
+        setDisplayName(name);
+
+        // Since the quick contact content description is derived from the display name and there is
+        // no guarantee that when the quick contact is initialized the display name is already set,
+        // do it here too.
+        if (mQuickContact != null) {
+            mQuickContact.setContentDescription(getContext().getString(
+                    R.string.description_quick_contact_for, mNameTextView.getText()));
+        }
+    }
+
+    public void setDisplayName(CharSequence name, boolean highlight) {
+        if (!TextUtils.isEmpty(name) && highlight) {
+            clearHighlightSequences();
+            addNameHighlightSequence(0, name.length());
+        }
+        setDisplayName(name);
+    }
+
+    public void setDisplayName(CharSequence name) {
+        if (!TextUtils.isEmpty(name)) {
+            // Chooses the available highlighting method for highlighting.
+            if (mHighlightedPrefix != null) {
+                name = mTextHighlighter.applyPrefixHighlight(name, mHighlightedPrefix);
+            } else if (mNameHighlightSequence.size() != 0) {
+                final SpannableString spannableName = new SpannableString(name);
+                for (HighlightSequence highlightSequence : mNameHighlightSequence) {
+                    mTextHighlighter.applyMaskingHighlight(spannableName, highlightSequence.start,
+                            highlightSequence.end);
+                }
+                name = spannableName;
+            }
+        } else {
+            name = mUnknownNameText;
+        }
+        setMarqueeText(getNameTextView(), name);
+
+        if (ContactDisplayUtils.isPossiblePhoneNumber(name)) {
+            // Give the text-to-speech engine a hint that it's a phone number
+            mNameTextView.setTextDirection(View.TEXT_DIRECTION_LTR);
+            mNameTextView.setContentDescription(
+                    PhoneNumberUtilsCompat.createTtsSpannable(name.toString()));
+        } else {
+            // Remove span tags of highlighting for talkback to avoid reading highlighting and rest
+            // of the name into two separate parts.
+            mNameTextView.setContentDescription(name.toString());
+        }
+    }
+
+    public void hideCheckBox() {
+        if (mCheckBox != null) {
+            removeView(mCheckBox);
+            mCheckBox = null;
+        }
+    }
+
+    public void hideDeleteImageButton() {
+        if (mDeleteImageButton != null) {
+            removeView(mDeleteImageButton);
+            mDeleteImageButton = null;
+        }
+    }
+
+    public void hideDisplayName() {
+        if (mNameTextView != null) {
+            removeView(mNameTextView);
+            mNameTextView = null;
+        }
+    }
+
+    public void showPhoneticName(Cursor cursor, int phoneticNameColumnIndex) {
+        cursor.copyStringToBuffer(phoneticNameColumnIndex, mPhoneticNameBuffer);
+        int phoneticNameSize = mPhoneticNameBuffer.sizeCopied;
+        if (phoneticNameSize != 0) {
+            setPhoneticName(mPhoneticNameBuffer.data, phoneticNameSize);
+        } else {
+            setPhoneticName(null, 0);
+        }
+    }
+
+    public void hidePhoneticName() {
+        if (mPhoneticNameTextView != null) {
+            removeView(mPhoneticNameTextView);
+            mPhoneticNameTextView = null;
+        }
+    }
+
+    /**
+     * Sets the proper icon (star or presence or nothing) and/or status message.
+     */
+    public void showPresenceAndStatusMessage(Cursor cursor, int presenceColumnIndex,
+            int contactStatusColumnIndex) {
+        Drawable icon = null;
+        int presence = 0;
+        if (!cursor.isNull(presenceColumnIndex)) {
+            presence = cursor.getInt(presenceColumnIndex);
+            icon = ContactPresenceIconUtil.getPresenceIcon(getContext(), presence);
+        }
+        setPresence(icon);
+
+        String statusMessage = null;
+        if (contactStatusColumnIndex != 0 && !cursor.isNull(contactStatusColumnIndex)) {
+            statusMessage = cursor.getString(contactStatusColumnIndex);
+        }
+        // If there is no status message from the contact, but there was a presence value, then use
+        // the default status message string
+        if (statusMessage == null && presence != 0) {
+            statusMessage = ContactStatusUtil.getStatusString(getContext(), presence);
+        }
+        setStatus(statusMessage);
+    }
+
+    /**
+     * Shows search snippet for email and phone number matches.
+     */
+    public void showSnippet(Cursor cursor, String query, int snippetColumn) {
+        // TODO: this does not properly handle phone numbers with control characters
+        // For example if the phone number is 444-5555, the search query 4445 will match the
+        // number since we normalize it before querying CP2 but the snippet will fail since
+        // the portion to be highlighted is 444-5 not 4445.
+        final String snippet = cursor.getString(snippetColumn);
+        if (snippet == null) {
+            setSnippet(null);
+            return;
+        }
+        final String displayName = cursor.getColumnIndex(Contacts.DISPLAY_NAME) >= 0
+                ? cursor.getString(cursor.getColumnIndex(Contacts.DISPLAY_NAME)) : null;
+        if (snippet.equals(displayName)) {
+            // If the snippet exactly matches the display name (i.e. the phone number or email
+            // address is being used as the display name) then no snippet is necessary
+            setSnippet(null);
+            return;
+        }
+        // Show the snippet with the part of the query that matched it
+        setSnippet(updateSnippet(snippet, query, displayName));
+    }
+
+    /**
+     * Shows search snippet.
+     */
+    public void showSnippet(Cursor cursor, int summarySnippetColumnIndex) {
+        if (cursor.getColumnCount() <= summarySnippetColumnIndex
+            || !SearchSnippets.SNIPPET.equals(cursor.getColumnName(summarySnippetColumnIndex))) {
+            setSnippet(null);
+            return;
+        }
+
+        String snippet = cursor.getString(summarySnippetColumnIndex);
+
+        // Do client side snippeting if provider didn't do it
+        final Bundle extras = cursor.getExtras();
+        if (extras.getBoolean(ContactsContract.DEFERRED_SNIPPETING)) {
+
+            final String query = extras.getString(ContactsContract.DEFERRED_SNIPPETING_QUERY);
+
+            String displayName = null;
+            int displayNameIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
+            if (displayNameIndex >= 0) {
+                displayName = cursor.getString(displayNameIndex);
+            }
+
+            snippet = updateSnippet(snippet, query, displayName);
+
+        } else {
+            if (snippet != null) {
+                int from = 0;
+                int to = snippet.length();
+                int start = snippet.indexOf(DefaultContactListAdapter.SNIPPET_START_MATCH);
+                if (start == -1) {
+                    snippet = null;
+                } else {
+                    int firstNl = snippet.lastIndexOf('\n', start);
+                    if (firstNl != -1) {
+                        from = firstNl + 1;
+                    }
+                    int end = snippet.lastIndexOf(DefaultContactListAdapter.SNIPPET_END_MATCH);
+                    if (end != -1) {
+                        int lastNl = snippet.indexOf('\n', end);
+                        if (lastNl != -1) {
+                            to = lastNl;
+                        }
+                    }
+
+                    StringBuilder sb = new StringBuilder();
+                    for (int i = from; i < to; i++) {
+                        char c = snippet.charAt(i);
+                        if (c != DefaultContactListAdapter.SNIPPET_START_MATCH &&
+                                c != DefaultContactListAdapter.SNIPPET_END_MATCH) {
+                            sb.append(c);
+                        }
+                    }
+                    snippet = sb.toString();
+                }
+            }
+        }
+
+        setSnippet(snippet);
+    }
+
+    /**
+     * Used for deferred snippets from the database. The contents come back as large strings which
+     * need to be extracted for display.
+     *
+     * @param snippet The snippet from the database.
+     * @param query The search query substring.
+     * @param displayName The contact display name.
+     * @return The proper snippet to display.
+     */
+    private String updateSnippet(String snippet, String query, String displayName) {
+
+        if (TextUtils.isEmpty(snippet) || TextUtils.isEmpty(query)) {
+            return null;
+        }
+        query = SearchUtil.cleanStartAndEndOfSearchQuery(query.toLowerCase());
+
+        // If the display name already contains the query term, return empty - snippets should
+        // not be needed in that case.
+        if (!TextUtils.isEmpty(displayName)) {
+            final String lowerDisplayName = displayName.toLowerCase();
+            final List<String> nameTokens = split(lowerDisplayName);
+            for (String nameToken : nameTokens) {
+                if (nameToken.startsWith(query)) {
+                    return null;
+                }
+            }
+        }
+
+        // The snippet may contain multiple data lines.
+        // Show the first line that matches the query.
+        final SearchUtil.MatchedLine matched = SearchUtil.findMatchingLine(snippet, query);
+
+        if (matched != null && matched.line != null) {
+            // Tokenize for long strings since the match may be at the end of it.
+            // Skip this part for short strings since the whole string will be displayed.
+            // Most contact strings are short so the snippetize method will be called infrequently.
+            final int lengthThreshold = getResources().getInteger(
+                    R.integer.snippet_length_before_tokenize);
+            if (matched.line.length() > lengthThreshold) {
+                return snippetize(matched.line, matched.startIndex, lengthThreshold);
+            } else {
+                return matched.line;
+            }
+        }
+
+        // No match found.
+        return null;
+    }
+
+    private String snippetize(String line, int matchIndex, int maxLength) {
+        // Show up to maxLength characters. But we only show full tokens so show the last full token
+        // up to maxLength characters. So as many starting tokens as possible before trying ending
+        // tokens.
+        int remainingLength = maxLength;
+        int tempRemainingLength = remainingLength;
+
+        // Start the end token after the matched query.
+        int index = matchIndex;
+        int endTokenIndex = index;
+
+        // Find the match token first.
+        while (index < line.length()) {
+            if (!Character.isLetterOrDigit(line.charAt(index))) {
+                endTokenIndex = index;
+                remainingLength = tempRemainingLength;
+                break;
+            }
+            tempRemainingLength--;
+            index++;
+        }
+
+        // Find as much content before the match.
+        index = matchIndex - 1;
+        tempRemainingLength = remainingLength;
+        int startTokenIndex = matchIndex;
+        while (index > -1 && tempRemainingLength > 0) {
+            if (!Character.isLetterOrDigit(line.charAt(index))) {
+                startTokenIndex = index;
+                remainingLength = tempRemainingLength;
+            }
+            tempRemainingLength--;
+            index--;
+        }
+
+        index = endTokenIndex;
+        tempRemainingLength = remainingLength;
+        // Find remaining content at after match.
+        while (index < line.length() && tempRemainingLength > 0) {
+            if (!Character.isLetterOrDigit(line.charAt(index))) {
+                endTokenIndex = index;
+            }
+            tempRemainingLength--;
+            index++;
+        }
+        // Append ellipse if there is content before or after.
+        final StringBuilder sb = new StringBuilder();
+        if (startTokenIndex > 0) {
+            sb.append("...");
+        }
+        sb.append(line.substring(startTokenIndex, endTokenIndex));
+        if (endTokenIndex < line.length()) {
+            sb.append("...");
+        }
+        return sb.toString();
+    }
+
+    private static final Pattern SPLIT_PATTERN = Pattern.compile(
+            "([\\w-\\.]+)@((?:[\\w]+\\.)+)([a-zA-Z]{2,4})|[\\w]+");
+
+    /**
+     * Helper method for splitting a string into tokens.  The lists passed in are populated with
+     * the
+     * tokens and offsets into the content of each token.  The tokenization function parses e-mail
+     * addresses as a single token; otherwise it splits on any non-alphanumeric character.
+     *
+     * @param content Content to split.
+     * @return List of token strings.
+     */
+    private static List<String> split(String content) {
+        final Matcher matcher = SPLIT_PATTERN.matcher(content);
+        final ArrayList<String> tokens = Lists.newArrayList();
+        while (matcher.find()) {
+            tokens.add(matcher.group());
+        }
+        return tokens;
+    }
+
+    /**
+     * Shows data element.
+     */
+    public void showData(Cursor cursor, int dataColumnIndex) {
+        cursor.copyStringToBuffer(dataColumnIndex, mDataBuffer);
+        setData(mDataBuffer.data, mDataBuffer.sizeCopied);
+    }
+
+    public void setActivatedStateSupported(boolean flag) {
+        this.mActivatedStateSupported = flag;
+    }
+
+    public void setAdjustSelectionBoundsEnabled(boolean enabled) {
+        mAdjustSelectionBoundsEnabled = enabled;
+    }
+
+    @Override
+    public void requestLayout() {
+        // We will assume that once measured this will not need to resize
+        // itself, so there is no need to pass the layout request to the parent
+        // view (ListView).
+        forceLayout();
+    }
+
+    public void setPhotoPosition(PhotoPosition photoPosition) {
+        mPhotoPosition = photoPosition;
+    }
+
+    public PhotoPosition getPhotoPosition() {
+        return mPhotoPosition;
+    }
+
+    /**
+     * Set drawable resources directly for the drawable resource of the photo view.
+     *
+     * @param drawableId Id of drawable resource.
+     */
+    public void setDrawableResource(int drawableId) {
+        ImageView photo = getPhotoView();
+        photo.setScaleType(ImageView.ScaleType.CENTER);
+        final Drawable drawable = ContextCompat.getDrawable(getContext(), drawableId);
+        final int iconColor =
+                ContextCompat.getColor(getContext(), R.color.search_shortcut_icon_color);
+        if (CompatUtils.isLollipopCompatible()) {
+            photo.setImageDrawable(drawable);
+            photo.setImageTintList(ColorStateList.valueOf(iconColor));
+        } else {
+            final Drawable drawableWrapper = DrawableCompat.wrap(drawable).mutate();
+            DrawableCompat.setTint(drawableWrapper, iconColor);
+            photo.setImageDrawable(drawableWrapper);
+        }
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        final float x = event.getX();
+        final float y = event.getY();
+        // If the touch event's coordinates are not within the view's header, then delegate
+        // to super.onTouchEvent so that regular view behavior is preserved. Otherwise, consume
+        // and ignore the touch event.
+        if (mBoundsWithoutHeader.contains((int) x, (int) y) || !pointIsInView(x, y)) {
+            return super.onTouchEvent(event);
+        } else {
+            return true;
+        }
+    }
+
+    private final boolean pointIsInView(float localX, float localY) {
+        return localX >= mLeftOffset && localX < mRightOffset
+                && localY >= 0 && localY < (getBottom() - getTop());
+    }
+}
diff --git a/src/com/android/contacts/list/ContactListPinnedHeaderView.java b/src/com/android/contacts/list/ContactListPinnedHeaderView.java
new file mode 100644
index 0000000..e65dea0
--- /dev/null
+++ b/src/com/android/contacts/list/ContactListPinnedHeaderView.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.list;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Color;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.LinearLayout.LayoutParams;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+
+/**
+ * A custom view for the pinned section header shown at the top of the contact list.
+ */
+public class ContactListPinnedHeaderView extends TextView {
+
+    public ContactListPinnedHeaderView(Context context, AttributeSet attrs, View parent) {
+        super(context, attrs);
+
+        if (R.styleable.ContactListItemView == null) {
+            return;
+        }
+        TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ContactListItemView);
+        int backgroundColor = a.getColor(
+                R.styleable.ContactListItemView_list_item_background_color, Color.WHITE);
+        int textOffsetTop = a.getDimensionPixelSize(
+                R.styleable.ContactListItemView_list_item_text_offset_top, 0);
+        int paddingStartOffset = a.getDimensionPixelSize(
+                R.styleable.ContactListItemView_list_item_padding_left, 0);
+        int textWidth = getResources().getDimensionPixelSize(
+                R.dimen.contact_list_section_header_width);
+        int widthIncludingPadding = paddingStartOffset + textWidth;
+        a.recycle();
+
+        setBackgroundColor(backgroundColor);
+        setTextAppearance(getContext(), R.style.SectionHeaderStyle);
+        setLayoutParams(new LayoutParams(widthIncludingPadding, LayoutParams.WRAP_CONTENT));
+        setLayoutDirection(parent.getLayoutDirection());
+        setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
+
+        // Apply text top offset. Multiply by two, because we are implementing this by padding for a
+        // vertically centered view, rather than adjusting the position directly via a layout.
+        setPaddingRelative(
+                getPaddingStart() + paddingStartOffset,
+                getPaddingTop() + (textOffsetTop * 2),
+                getPaddingEnd(),
+                getPaddingBottom());
+    }
+
+    /**
+     * Sets section header or makes it invisible if the title is null.
+     */
+    public void setSectionHeaderTitle(String title) {
+        if (title != null) {
+            setText(title);
+            setVisibility(View.VISIBLE);
+        } else {
+            setVisibility(View.GONE);
+        }
+    }
+}
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index 4e81389..e1f33b4 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -24,13 +24,7 @@
 import android.widget.AdapterView;
 
 import com.android.contacts.R;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.ContactListAdapter;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.DirectoryListLoader;
-import com.android.contacts.common.list.ShortcutIntentBuilder;
-import com.android.contacts.common.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
+import com.android.contacts.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
 
 /**
  * Fragment for the contact list used for browsing contacts (as compared to
@@ -60,18 +54,10 @@
         mListener = listener;
     }
 
-    public boolean isCreateContactEnabled() {
-        return mCreateContactEnabled;
-    }
-
     public void setCreateContactEnabled(boolean flag) {
         this.mCreateContactEnabled = flag;
     }
 
-    public boolean isEditMode() {
-        return mEditMode;
-    }
-
     public void setEditMode(boolean flag) {
         mEditMode = flag;
     }
@@ -102,16 +88,6 @@
     }
 
     @Override
-    protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
-        super.onCreateView(inflater, container);
-        if (mCreateContactEnabled && isLegacyCompatibilityMode()) {
-            // Since we are using the legacy adapter setShowCreateContact(true) isn't supported.
-            // So we need to add an ugly header above the list.
-            getListView().addHeaderView(inflater.inflate(R.layout.create_new_contact, null, false));
-        }
-    }
-
-    @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         if (position == 0 && mCreateContactEnabled && mListener != null) {
             mListener.onCreateNewContactAction();
@@ -141,12 +117,6 @@
         }
     }
 
-    public void createNewContact() {
-        if (mListener != null) {
-            mListener.onCreateNewContactAction();
-        }
-    }
-
     public void editContact(Uri contactUri) {
         if (mListener != null) {
             mListener.onEditContactAction(contactUri);
@@ -180,16 +150,6 @@
     }
 
     @Override
-    protected void configureAdapter() {
-        super.configureAdapter();
-
-        ContactEntryListAdapter adapter = getAdapter();
-
-        // If "Create new contact" is shown, don't display the empty list UI
-        adapter.setEmptyListEnabled(!isCreateContactEnabled());
-    }
-
-    @Override
     protected View inflateView(LayoutInflater inflater, ViewGroup container) {
         return inflater.inflate(R.layout.contact_picker_content, null);
     }
diff --git a/src/com/android/contacts/list/ContactTileAdapter.java b/src/com/android/contacts/list/ContactTileAdapter.java
new file mode 100644
index 0000000..c184e38
--- /dev/null
+++ b/src/com/android/contacts/list/ContactTileAdapter.java
@@ -0,0 +1,632 @@
+/*
+ * 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.list;
+
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.provider.ContactsContract.Contacts;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.ContactPresenceIconUtil;
+import com.android.contacts.ContactStatusUtil;
+import com.android.contacts.ContactTileLoaderFactory;
+import com.android.contacts.MoreContactUtils;
+import com.android.contacts.R;
+import com.android.contacts.util.ViewUtil;
+
+import java.util.ArrayList;
+
+/**
+ * Arranges contacts favorites according to provided {@link DisplayType}.
+ * Also allows for a configurable number of columns and {@link DisplayType}
+ */
+public class ContactTileAdapter extends BaseAdapter {
+    private static final String TAG = ContactTileAdapter.class.getSimpleName();
+
+    private DisplayType mDisplayType;
+    private ContactTileView.Listener mListener;
+    private Context mContext;
+    private Resources mResources;
+    protected Cursor mContactCursor = null;
+    private ContactPhotoManager mPhotoManager;
+    protected int mNumFrequents;
+
+    /**
+     * Index of the first NON starred contact in the {@link Cursor}
+     * Only valid when {@link DisplayType#STREQUENT} is true
+     */
+    private int mDividerPosition;
+    protected int mColumnCount;
+    private int mStarredIndex;
+
+    protected int mIdIndex;
+    protected int mLookupIndex;
+    protected int mPhotoUriIndex;
+    protected int mNameIndex;
+    protected int mPresenceIndex;
+    protected int mStatusIndex;
+
+    private boolean mIsQuickContactEnabled = false;
+    private final int mPaddingInPixels;
+    private final int mWhitespaceStartEnd;
+
+    /**
+     * Configures the adapter to filter and display contacts using different view types.
+     * TODO: Create Uris to support getting Starred_only and Frequent_only cursors.
+     */
+    public enum DisplayType {
+        /**
+         * Displays a mixed view type of starred and frequent contacts
+         */
+        STREQUENT,
+
+        /**
+         * Display only starred contacts
+         */
+        STARRED_ONLY,
+
+        /**
+         * Display only most frequently contacted
+         */
+        FREQUENT_ONLY,
+
+        /**
+         * Display all contacts from a group in the cursor
+         */
+        GROUP_MEMBERS
+    }
+
+    public ContactTileAdapter(Context context, ContactTileView.Listener listener, int numCols,
+            DisplayType displayType) {
+        mListener = listener;
+        mContext = context;
+        mResources = context.getResources();
+        mColumnCount = (displayType == DisplayType.FREQUENT_ONLY ? 1 : numCols);
+        mDisplayType = displayType;
+        mNumFrequents = 0;
+
+        // Converting padding in dips to padding in pixels
+        mPaddingInPixels = mContext.getResources()
+                .getDimensionPixelSize(R.dimen.contact_tile_divider_padding);
+        mWhitespaceStartEnd = mContext.getResources()
+                .getDimensionPixelSize(R.dimen.contact_tile_start_end_whitespace);
+
+        bindColumnIndices();
+    }
+
+    public void setPhotoLoader(ContactPhotoManager photoLoader) {
+        mPhotoManager = photoLoader;
+    }
+
+    public void setColumnCount(int columnCount) {
+        mColumnCount = columnCount;
+    }
+
+    public void setDisplayType(DisplayType displayType) {
+        mDisplayType = displayType;
+    }
+
+    public void enableQuickContact(boolean enableQuickContact) {
+        mIsQuickContactEnabled = enableQuickContact;
+    }
+
+    /**
+     * Sets the column indices for expected {@link Cursor}
+     * based on {@link DisplayType}.
+     */
+    protected void bindColumnIndices() {
+        mIdIndex = ContactTileLoaderFactory.CONTACT_ID;
+        mLookupIndex = ContactTileLoaderFactory.LOOKUP_KEY;
+        mPhotoUriIndex = ContactTileLoaderFactory.PHOTO_URI;
+        mNameIndex = ContactTileLoaderFactory.DISPLAY_NAME;
+        mStarredIndex = ContactTileLoaderFactory.STARRED;
+        mPresenceIndex = ContactTileLoaderFactory.CONTACT_PRESENCE;
+        mStatusIndex = ContactTileLoaderFactory.CONTACT_STATUS;
+    }
+
+    private static boolean cursorIsValid(Cursor cursor) {
+        return cursor != null && !cursor.isClosed();
+    }
+
+    /**
+     * Gets the number of frequents from the passed in cursor.
+     *
+     * This methods is needed so the GroupMemberTileAdapter can override this.
+     *
+     * @param cursor The cursor to get number of frequents from.
+     */
+    protected void saveNumFrequentsFromCursor(Cursor cursor) {
+
+        // count the number of frequents
+        switch (mDisplayType) {
+            case STARRED_ONLY:
+                mNumFrequents = 0;
+                break;
+            case STREQUENT:
+                mNumFrequents = cursorIsValid(cursor) ?
+                    cursor.getCount() - mDividerPosition : 0;
+                break;
+            case FREQUENT_ONLY:
+                mNumFrequents = cursorIsValid(cursor) ? cursor.getCount() : 0;
+                break;
+            default:
+                throw new IllegalArgumentException("Unrecognized DisplayType " + mDisplayType);
+        }
+    }
+
+    /**
+     * Creates {@link ContactTileView}s for each item in {@link Cursor}.
+     *
+     * Else use {@link ContactTileLoaderFactory}
+     */
+    public void setContactCursor(Cursor cursor) {
+        mContactCursor = cursor;
+        mDividerPosition = getDividerPosition(cursor);
+
+        saveNumFrequentsFromCursor(cursor);
+
+        // cause a refresh of any views that rely on this data
+        notifyDataSetChanged();
+    }
+
+    /**
+     * Iterates over the {@link Cursor}
+     * Returns position of the first NON Starred Contact
+     * Returns -1 if {@link DisplayType#STARRED_ONLY}
+     * Returns 0 if {@link DisplayType#FREQUENT_ONLY}
+     */
+    protected int getDividerPosition(Cursor cursor) {
+        switch (mDisplayType) {
+            case STREQUENT:
+                if (!cursorIsValid(cursor)) {
+                    return 0;
+                }
+                cursor.moveToPosition(-1);
+                while (cursor.moveToNext()) {
+                    if (cursor.getInt(mStarredIndex) == 0) {
+                        return cursor.getPosition();
+                    }
+                }
+
+                // There are not NON Starred contacts in cursor
+                // Set divider positon to end
+                return cursor.getCount();
+            case STARRED_ONLY:
+                // There is no divider
+                return -1;
+            case FREQUENT_ONLY:
+                // Divider is first
+                return 0;
+            default:
+                throw new IllegalStateException("Unrecognized DisplayType " + mDisplayType);
+        }
+    }
+
+    protected ContactEntry createContactEntryFromCursor(Cursor cursor, int position) {
+        // If the loader was canceled we will be given a null cursor.
+        // In that case, show an empty list of contacts.
+        if (!cursorIsValid(cursor) || cursor.getCount() <= position) {
+            return null;
+        }
+
+        cursor.moveToPosition(position);
+        long id = cursor.getLong(mIdIndex);
+        String photoUri = cursor.getString(mPhotoUriIndex);
+        String lookupKey = cursor.getString(mLookupIndex);
+
+        ContactEntry contact = new ContactEntry();
+        String name = cursor.getString(mNameIndex);
+        contact.namePrimary = (name != null) ? name : mResources.getString(R.string.missing_name);
+        contact.status = cursor.getString(mStatusIndex);
+        contact.photoUri = (photoUri != null ? Uri.parse(photoUri) : null);
+        contact.lookupKey = lookupKey;
+        contact.lookupUri = ContentUris.withAppendedId(
+                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), id);
+        contact.isFavorite = cursor.getInt(mStarredIndex) > 0;
+
+        // Set presence icon and status message
+        Drawable icon = null;
+        int presence = 0;
+        if (!cursor.isNull(mPresenceIndex)) {
+            presence = cursor.getInt(mPresenceIndex);
+            icon = ContactPresenceIconUtil.getPresenceIcon(mContext, presence);
+        }
+        contact.presenceIcon = icon;
+
+        String statusMessage = null;
+        if (mStatusIndex != 0 && !cursor.isNull(mStatusIndex)) {
+            statusMessage = cursor.getString(mStatusIndex);
+        }
+        // If there is no status message from the contact, but there was a presence value,
+        // then use the default status message string
+        if (statusMessage == null && presence != 0) {
+            statusMessage = ContactStatusUtil.getStatusString(mContext, presence);
+        }
+        contact.status = statusMessage;
+
+        return contact;
+    }
+
+    /**
+     * Returns the number of frequents that will be displayed in the list.
+     */
+    public int getNumFrequents() {
+        return mNumFrequents;
+    }
+
+    @Override
+    public int getCount() {
+        if (!cursorIsValid(mContactCursor)) {
+            return 0;
+        }
+
+        switch (mDisplayType) {
+            case STARRED_ONLY:
+                return getRowCount(mContactCursor.getCount());
+            case STREQUENT:
+                // Takes numbers of rows the Starred Contacts Occupy
+                int starredRowCount = getRowCount(mDividerPosition);
+
+                // Compute the frequent row count which is 1 plus the number of frequents
+                // (to account for the divider) or 0 if there are no frequents.
+                int frequentRowCount = mNumFrequents == 0 ? 0 : mNumFrequents + 1;
+
+                // Return the number of starred plus frequent rows
+                return starredRowCount + frequentRowCount;
+            case FREQUENT_ONLY:
+                // Number of frequent contacts
+                return mContactCursor.getCount();
+            default:
+                throw new IllegalArgumentException("Unrecognized DisplayType " + mDisplayType);
+        }
+    }
+
+    /**
+     * Returns the number of rows required to show the provided number of entries
+     * with the current number of columns.
+     */
+    protected int getRowCount(int entryCount) {
+        return entryCount == 0 ? 0 : ((entryCount - 1) / mColumnCount) + 1;
+    }
+
+    public int getColumnCount() {
+        return mColumnCount;
+    }
+
+    /**
+     * Returns an ArrayList of the {@link ContactEntry}s that are to appear
+     * on the row for the given position.
+     */
+    @Override
+    public ArrayList<ContactEntry> getItem(int position) {
+        ArrayList<ContactEntry> resultList = new ArrayList<ContactEntry>(mColumnCount);
+        int contactIndex = position * mColumnCount;
+
+        switch (mDisplayType) {
+            case FREQUENT_ONLY:
+                resultList.add(createContactEntryFromCursor(mContactCursor, position));
+                break;
+            case STARRED_ONLY:
+                for (int columnCounter = 0; columnCounter < mColumnCount; columnCounter++) {
+                    resultList.add(createContactEntryFromCursor(mContactCursor, contactIndex));
+                    contactIndex++;
+                }
+                break;
+            case STREQUENT:
+                if (position < getRowCount(mDividerPosition)) {
+                    for (int columnCounter = 0; columnCounter < mColumnCount &&
+                            contactIndex != mDividerPosition; columnCounter++) {
+                        resultList.add(createContactEntryFromCursor(mContactCursor, contactIndex));
+                        contactIndex++;
+                    }
+                } else {
+                    /*
+                     * Current position minus how many rows are before the divider and
+                     * Minus 1 for the divider itself provides the relative index of the frequent
+                     * contact being displayed. Then add the dividerPostion to give the offset
+                     * into the contacts cursor to get the absoulte index.
+                     */
+                    contactIndex = position - getRowCount(mDividerPosition) - 1 + mDividerPosition;
+                    resultList.add(createContactEntryFromCursor(mContactCursor, contactIndex));
+                }
+                break;
+            default:
+                throw new IllegalStateException("Unrecognized DisplayType " + mDisplayType);
+        }
+        return resultList;
+    }
+
+    @Override
+    public long getItemId(int position) {
+        // As we show several selectable items for each ListView row,
+        // we can not determine a stable id. But as we don't rely on ListView's selection,
+        // this should not be a problem.
+        return position;
+    }
+
+    @Override
+    public boolean areAllItemsEnabled() {
+        return (mDisplayType != DisplayType.STREQUENT);
+    }
+
+    @Override
+    public boolean isEnabled(int position) {
+        return position != getRowCount(mDividerPosition);
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        int itemViewType = getItemViewType(position);
+
+        if (itemViewType == ViewTypes.DIVIDER) {
+            // Checking For Divider First so not to cast convertView
+            final TextView textView = (TextView) (convertView == null ? getDivider() : convertView);
+            setDividerPadding(textView, position == 0);
+            return textView;
+        }
+
+        ContactTileRow contactTileRowView = (ContactTileRow) convertView;
+        ArrayList<ContactEntry> contactList = getItem(position);
+
+        if (contactTileRowView == null) {
+            // Creating new row if needed
+            contactTileRowView = new ContactTileRow(mContext, itemViewType);
+        }
+
+        contactTileRowView.configureRow(contactList, position == getCount() - 1);
+        return contactTileRowView;
+    }
+
+    /**
+     * Divider uses a list_seperator.xml along with text to denote
+     * the most frequently contacted contacts.
+     */
+    private TextView getDivider() {
+        return MoreContactUtils.createHeaderView(mContext, R.string.favoritesFrequentContacted);
+    }
+
+    private void setDividerPadding(TextView headerTextView, boolean isFirstRow) {
+        MoreContactUtils.setHeaderViewBottomPadding(mContext, headerTextView, isFirstRow);
+    }
+
+    private int getLayoutResourceId(int viewType) {
+        switch (viewType) {
+            case ViewTypes.STARRED:
+                return mIsQuickContactEnabled ?
+                        R.layout.contact_tile_starred_quick_contact : R.layout.contact_tile_starred;
+            case ViewTypes.FREQUENT:
+                return R.layout.contact_tile_frequent;
+            default:
+                throw new IllegalArgumentException("Unrecognized viewType " + viewType);
+        }
+    }
+    @Override
+    public int getViewTypeCount() {
+        return ViewTypes.COUNT;
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        /*
+         * Returns view type based on {@link DisplayType}.
+         * {@link DisplayType#STARRED_ONLY} and {@link DisplayType#GROUP_MEMBERS}
+         * are {@link ViewTypes#STARRED}.
+         * {@link DisplayType#FREQUENT_ONLY} is {@link ViewTypes#FREQUENT}.
+         * {@link DisplayType#STREQUENT} mixes both {@link ViewTypes}
+         * and also adds in {@link ViewTypes#DIVIDER}.
+         */
+        switch (mDisplayType) {
+            case STREQUENT:
+                if (position < getRowCount(mDividerPosition)) {
+                    return ViewTypes.STARRED;
+                } else if (position == getRowCount(mDividerPosition)) {
+                    return ViewTypes.DIVIDER;
+                } else {
+                    return ViewTypes.FREQUENT;
+                }
+            case STARRED_ONLY:
+                return ViewTypes.STARRED;
+            case FREQUENT_ONLY:
+                return ViewTypes.FREQUENT;
+            default:
+                throw new IllegalStateException("Unrecognized DisplayType " + mDisplayType);
+        }
+    }
+
+    /**
+     * Returns the "frequent header" position. Only available when STREQUENT or
+     * STREQUENT_PHONE_ONLY is used for its display type.
+     */
+    public int getFrequentHeaderPosition() {
+        return getRowCount(mDividerPosition);
+    }
+
+    /**
+     * Acts as a row item composed of {@link ContactTileView}
+     *
+     * TODO: FREQUENT doesn't really need it.  Just let {@link #getView} return
+     */
+    private class ContactTileRow extends FrameLayout {
+        private int mItemViewType;
+        private int mLayoutResId;
+
+        public ContactTileRow(Context context, int itemViewType) {
+            super(context);
+            mItemViewType = itemViewType;
+            mLayoutResId = getLayoutResourceId(mItemViewType);
+
+            // Remove row (but not children) from accessibility node tree.
+            setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
+        }
+
+        /**
+         * Configures the row to add {@link ContactEntry}s information to the views
+         */
+        public void configureRow(ArrayList<ContactEntry> list, boolean isLastRow) {
+            int columnCount = mItemViewType == ViewTypes.FREQUENT ? 1 : mColumnCount;
+
+            // Adding tiles to row and filling in contact information
+            for (int columnCounter = 0; columnCounter < columnCount; columnCounter++) {
+                ContactEntry entry =
+                        columnCounter < list.size() ? list.get(columnCounter) : null;
+                addTileFromEntry(entry, columnCounter, isLastRow);
+            }
+        }
+
+        private void addTileFromEntry(ContactEntry entry, int childIndex, boolean isLastRow) {
+            final ContactTileView contactTile;
+
+            if (getChildCount() <= childIndex) {
+                contactTile = (ContactTileView) inflate(mContext, mLayoutResId, null);
+                // Note: the layoutparam set here is only actually used for FREQUENT.
+                // We override onMeasure() for STARRED and we don't care the layout param there.
+                Resources resources = mContext.getResources();
+                FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
+                        ViewGroup.LayoutParams.MATCH_PARENT,
+                        ViewGroup.LayoutParams.WRAP_CONTENT);
+                params.setMargins(
+                        mWhitespaceStartEnd,
+                        0,
+                        mWhitespaceStartEnd,
+                        0);
+                contactTile.setLayoutParams(params);
+                contactTile.setPhotoManager(mPhotoManager);
+                contactTile.setListener(mListener);
+                addView(contactTile);
+            } else {
+                contactTile = (ContactTileView) getChildAt(childIndex);
+            }
+            contactTile.loadFromContact(entry);
+
+            switch (mItemViewType) {
+                case ViewTypes.STARRED:
+                    // Set padding between tiles. Divide mPaddingInPixels between left and right
+                    // tiles as evenly as possible.
+                    contactTile.setPaddingRelative(
+                            (mPaddingInPixels + 1) / 2, 0,
+                            mPaddingInPixels
+                            / 2, 0);
+                    break;
+                case ViewTypes.FREQUENT:
+                    contactTile.setHorizontalDividerVisibility(
+                            isLastRow ? View.GONE : View.VISIBLE);
+                    break;
+                default:
+                    break;
+            }
+        }
+
+        @Override
+        protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+            switch (mItemViewType) {
+                case ViewTypes.STARRED:
+                    onLayoutForTiles();
+                    return;
+                default:
+                    super.onLayout(changed, left, top, right, bottom);
+                    return;
+            }
+        }
+
+        private void onLayoutForTiles() {
+            final int count = getChildCount();
+
+            // Amount of margin needed on the left is based on difference between offset and padding
+            int childLeft = mWhitespaceStartEnd - (mPaddingInPixels + 1) / 2;
+
+            // Just line up children horizontally.
+            for (int i = 0; i < count; i++) {
+                final int rtlAdjustedIndex = ViewUtil.isViewLayoutRtl(this) ? count - i - 1 : i;
+                final View child = getChildAt(rtlAdjustedIndex);
+
+                // Note MeasuredWidth includes the padding.
+                final int childWidth = child.getMeasuredWidth();
+                child.layout(childLeft, 0, childLeft + childWidth, child.getMeasuredHeight());
+                childLeft += childWidth;
+            }
+        }
+
+        @Override
+        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+            switch (mItemViewType) {
+                case ViewTypes.STARRED:
+                    onMeasureForTiles(widthMeasureSpec);
+                    return;
+                default:
+                    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+                    return;
+            }
+        }
+
+        private void onMeasureForTiles(int widthMeasureSpec) {
+            final int width = MeasureSpec.getSize(widthMeasureSpec);
+
+            final int childCount = getChildCount();
+            if (childCount == 0) {
+                // Just in case...
+                setMeasuredDimension(width, 0);
+                return;
+            }
+
+            // 1. Calculate image size.
+            //      = ([total width] - [total whitespace]) / [child count]
+            //
+            // 2. Set it to width/height of each children.
+            //    If we have a remainder, some tiles will have 1 pixel larger width than its height.
+            //
+            // 3. Set the dimensions of itself.
+            //    Let width = given width.
+            //    Let height = wrap content.
+
+            final int totalWhitespaceInPixels = (mColumnCount - 1) * mPaddingInPixels
+                    + mWhitespaceStartEnd * 2;
+
+            // Preferred width / height for images (excluding the padding).
+            // The actual width may be 1 pixel larger than this if we have a remainder.
+            final int imageSize = (width - totalWhitespaceInPixels) / mColumnCount;
+            final int remainder = width - (imageSize * mColumnCount) - totalWhitespaceInPixels;
+
+            for (int i = 0; i < childCount; i++) {
+                final View child = getChildAt(i);
+                final int childWidth = imageSize + child.getPaddingRight() + child.getPaddingLeft()
+                        // Compensate for the remainder
+                        + (i < remainder ? 1 : 0);
+
+                child.measure(
+                        MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY),
+                        MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)
+                        );
+            }
+            setMeasuredDimension(width, getChildAt(0).getMeasuredHeight());
+        }
+    }
+
+    protected static class ViewTypes {
+        public static final int COUNT = 4;
+        public static final int STARRED = 0;
+        public static final int DIVIDER = 1;
+        public static final int FREQUENT = 2;
+    }
+}
diff --git a/src/com/android/contacts/list/ContactTileFrequentView.java b/src/com/android/contacts/list/ContactTileFrequentView.java
new file mode 100644
index 0000000..41a972f
--- /dev/null
+++ b/src/com/android/contacts/list/ContactTileFrequentView.java
@@ -0,0 +1,40 @@
+/*
+ * 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.list;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import com.android.contacts.util.ViewUtil;
+
+/**
+ * A {@link com.android.contacts.list.ContactTileView} that is used for most frequently contacted in the People app
+ */
+public class ContactTileFrequentView extends ContactTileView {
+    public ContactTileFrequentView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected boolean isDarkTheme() {
+        return false;
+    }
+
+    @Override
+    protected int getApproximateImageSize() {
+        return ViewUtil.getConstantPreLayoutWidth(getPhotoView());
+    }
+}
diff --git a/src/com/android/contacts/list/ContactTilePhoneFrequentView.java b/src/com/android/contacts/list/ContactTilePhoneFrequentView.java
new file mode 100644
index 0000000..048907d
--- /dev/null
+++ b/src/com/android/contacts/list/ContactTilePhoneFrequentView.java
@@ -0,0 +1,79 @@
+/*
+ * 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.list;
+
+import android.content.Context;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.View;
+
+import com.android.contacts.MoreContactUtils;
+import com.android.contacts.util.ViewUtil;
+
+/**
+ * A dark version of the {@link com.android.contacts.list.ContactTileView} that is used in Dialtacts
+ * for frequently called contacts. Slightly different behavior from superclass...
+ * when you tap it, you want to call the frequently-called number for the
+ * contact, even if that is not the default number for that contact.
+ */
+public class ContactTilePhoneFrequentView extends ContactTileView {
+    private String mPhoneNumberString;
+
+    public ContactTilePhoneFrequentView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected boolean isDarkTheme() {
+        return true;
+    }
+
+    @Override
+    protected int getApproximateImageSize() {
+        return ViewUtil.getConstantPreLayoutWidth(getQuickContact());
+    }
+
+    @Override
+    public void loadFromContact(ContactEntry entry) {
+        super.loadFromContact(entry);
+        mPhoneNumberString = null; // ... in case we're reusing the view
+        if (entry != null) {
+            // Grab the phone-number to call directly... see {@link onClick()}
+            mPhoneNumberString = entry.phoneNumber;
+        }
+    }
+
+    @Override
+    protected OnClickListener createClickListener() {
+        return new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (mListener == null) return;
+                if (TextUtils.isEmpty(mPhoneNumberString)) {
+                    // Copy "superclass" implementation
+                    mListener.onContactSelected(getLookupUri(), MoreContactUtils
+                            .getTargetRectFromView(ContactTilePhoneFrequentView.this));
+                } else {
+                    // When you tap a frequently-called contact, you want to
+                    // call them at the number that you usually talk to them
+                    // at (i.e. the one displayed in the UI), regardless of
+                    // whether that's their default number.
+                    mListener.onCallNumberDirectly(mPhoneNumberString);
+                }
+            }
+        };
+    }
+}
diff --git a/src/com/android/contacts/list/ContactTileStarredView.java b/src/com/android/contacts/list/ContactTileStarredView.java
new file mode 100644
index 0000000..63531ba
--- /dev/null
+++ b/src/com/android/contacts/list/ContactTileStarredView.java
@@ -0,0 +1,56 @@
+/*
+ * 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.list;
+
+import android.content.Context;
+import android.util.AttributeSet;
+
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+
+/**
+ * A {@link ContactTileStarredView} displays the contact's picture overlayed with their name
+ * in a square. The actual dimensions are set by
+ * {@link com.android.contacts.list.ContactTileAdapter.ContactTileRow}.
+ */
+public class ContactTileStarredView extends ContactTileView {
+
+    /**
+     * The photo manager should display the default image/letter at 80% of its normal size.
+     */
+    private static final float DEFAULT_IMAGE_LETTER_SCALE = 0.8f;
+
+    public ContactTileStarredView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected boolean isDarkTheme() {
+        return false;
+    }
+
+    @Override
+    protected int getApproximateImageSize() {
+        // The picture is the full size of the tile (minus some padding, but we can be generous)
+        return mListener.getApproximateTileWidth();
+    }
+
+    @Override
+    protected DefaultImageRequest getDefaultImageRequest(String displayName, String lookupKey) {
+        return new DefaultImageRequest(displayName, lookupKey, ContactPhotoManager.TYPE_DEFAULT,
+                DEFAULT_IMAGE_LETTER_SCALE, /* offset = */ 0, /* isCircular = */ true);
+    }
+}
diff --git a/src/com/android/contacts/list/ContactTileView.java b/src/com/android/contacts/list/ContactTileView.java
new file mode 100644
index 0000000..2760dbf
--- /dev/null
+++ b/src/com/android/contacts/list/ContactTileView.java
@@ -0,0 +1,241 @@
+/*
+ * 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.list;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.QuickContactBadge;
+import android.widget.TextView;
+
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.MoreContactUtils;
+import com.android.contacts.R;
+
+/**
+ * A ContactTile displays a contact's picture and name
+ */
+public abstract class ContactTileView extends FrameLayout {
+    private final static String TAG = ContactTileView.class.getSimpleName();
+
+    private Uri mLookupUri;
+    private ImageView mPhoto;
+    private QuickContactBadge mQuickContact;
+    private TextView mName;
+    private TextView mStatus;
+    private TextView mPhoneLabel;
+    private TextView mPhoneNumber;
+    private ContactPhotoManager mPhotoManager = null;
+    private View mPushState;
+    private View mHorizontalDivider;
+    protected Listener mListener;
+
+    public ContactTileView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mName = (TextView) findViewById(R.id.contact_tile_name);
+
+        mQuickContact = (QuickContactBadge) findViewById(R.id.contact_tile_quick);
+        mPhoto = (ImageView) findViewById(R.id.contact_tile_image);
+        mStatus = (TextView) findViewById(R.id.contact_tile_status);
+        mPhoneLabel = (TextView) findViewById(R.id.contact_tile_phone_type);
+        mPhoneNumber = (TextView) findViewById(R.id.contact_tile_phone_number);
+        mPushState = findViewById(R.id.contact_tile_push_state);
+        mHorizontalDivider = findViewById(R.id.contact_tile_horizontal_divider);
+
+        OnClickListener listener = createClickListener();
+        setOnClickListener(listener);
+    }
+
+    protected OnClickListener createClickListener() {
+        return new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (mListener == null) return;
+                mListener.onContactSelected(
+                        getLookupUri(),
+                        MoreContactUtils.getTargetRectFromView(ContactTileView.this));
+            }
+        };
+    }
+
+    public void setPhotoManager(ContactPhotoManager photoManager) {
+        mPhotoManager = photoManager;
+    }
+
+    /**
+     * Populates the data members to be displayed from the
+     * fields in {@link com.android.contacts.list.ContactEntry}
+     */
+    public void loadFromContact(ContactEntry entry) {
+
+        if (entry != null) {
+            mName.setText(getNameForView(entry));
+            mLookupUri = entry.lookupUri;
+
+            if (mStatus != null) {
+                if (entry.status == null) {
+                    mStatus.setVisibility(View.GONE);
+                } else {
+                    mStatus.setText(entry.status);
+                    mStatus.setCompoundDrawablesWithIntrinsicBounds(entry.presenceIcon,
+                            null, null, null);
+                    mStatus.setVisibility(View.VISIBLE);
+                }
+            }
+
+            if (mPhoneLabel != null) {
+                if (TextUtils.isEmpty(entry.phoneLabel)) {
+                    mPhoneLabel.setVisibility(View.GONE);
+                } else {
+                    mPhoneLabel.setVisibility(View.VISIBLE);
+                    mPhoneLabel.setText(entry.phoneLabel);
+                }
+            }
+
+            if (mPhoneNumber != null) {
+                // TODO: Format number correctly
+                mPhoneNumber.setText(entry.phoneNumber);
+            }
+
+            setVisibility(View.VISIBLE);
+
+            if (mPhotoManager != null) {
+                DefaultImageRequest request = getDefaultImageRequest(entry.namePrimary,
+                        entry.lookupKey);
+                configureViewForImage(entry.photoUri == null);
+                if (mPhoto != null) {
+                    mPhotoManager.loadPhoto(mPhoto, entry.photoUri, getApproximateImageSize(),
+                            isDarkTheme(), isContactPhotoCircular(), request);
+
+                    if (mQuickContact != null) {
+                        mQuickContact.assignContactUri(mLookupUri);
+                    }
+                } else if (mQuickContact != null) {
+                    mQuickContact.assignContactUri(mLookupUri);
+                    mPhotoManager.loadPhoto(mQuickContact, entry.photoUri,
+                            getApproximateImageSize(), isDarkTheme(), isContactPhotoCircular(),
+                            request);
+                }
+            } else {
+                Log.w(TAG, "contactPhotoManager not set");
+            }
+
+            if (mPushState != null) {
+                mPushState.setContentDescription(entry.namePrimary);
+            } else if (mQuickContact != null) {
+                mQuickContact.setContentDescription(entry.namePrimary);
+            }
+        } else {
+            setVisibility(View.INVISIBLE);
+        }
+    }
+
+    public void setListener(Listener listener) {
+        mListener = listener;
+    }
+
+    public void setHorizontalDividerVisibility(int visibility) {
+        if (mHorizontalDivider != null) mHorizontalDivider.setVisibility(visibility);
+    }
+
+    public Uri getLookupUri() {
+        return mLookupUri;
+    }
+
+    protected QuickContactBadge getQuickContact() {
+        return mQuickContact;
+    }
+
+    protected View getPhotoView() {
+        return mPhoto;
+    }
+
+    /**
+     * Returns the string that should actually be displayed as the contact's name. Subclasses
+     * can override this to return formatted versions of the name - i.e. first name only.
+     */
+    protected String getNameForView(ContactEntry contactEntry) {
+        return contactEntry.namePrimary;
+    }
+
+    /**
+     * Implemented by subclasses to estimate the size of the picture. This can return -1 if only
+     * a thumbnail is shown anyway
+     */
+    protected abstract int getApproximateImageSize();
+
+    protected abstract boolean isDarkTheme();
+
+    /**
+     * Implemented by subclasses to reconfigure the view's layout and subviews, based on whether
+     * or not the contact has a user-defined photo.
+     *
+     * @param isDefaultImage True if the contact does not have a user-defined contact photo
+     * (which means a default contact image will be applied by the {@link ContactPhotoManager}
+     */
+    protected void configureViewForImage(boolean isDefaultImage) {
+        // No-op by default.
+    }
+
+    /**
+     * Implemented by subclasses to allow them to return a {@link DefaultImageRequest} with the
+     * various image parameters defined to match their own layouts.
+     *
+     * @param displayName The display name of the contact
+     * @param lookupKey The lookup key of the contact
+     * @return A {@link DefaultImageRequest} object with each field configured by the subclass
+     * as desired, or {@code null}.
+     */
+    protected DefaultImageRequest getDefaultImageRequest(String displayName, String lookupKey) {
+        return new DefaultImageRequest(displayName, lookupKey, isContactPhotoCircular());
+    }
+
+    /**
+     * Whether contact photo should be displayed as a circular image. Implemented by subclasses
+     * so they can change which drawables to fetch.
+     */
+    protected boolean isContactPhotoCircular() {
+        return true;
+    }
+
+    public interface Listener {
+        /**
+         * Notification that the contact was selected; no specific action is dictated.
+         */
+        void onContactSelected(Uri contactLookupUri, Rect viewRect);
+        /**
+         * Notification that the specified number is to be called.
+         */
+        void onCallNumberDirectly(String phoneNumber);
+        /**
+         * @return The width of each tile. This doesn't have to be a precise number (e.g. paddings
+         *         can be ignored), but is used to load the correct picture size from the database
+         */
+        int getApproximateTileWidth();
+    }
+}
diff --git a/src/com/android/contacts/list/ContactsIntentResolver.java b/src/com/android/contacts/list/ContactsIntentResolver.java
index b110605..7cf9f5a 100644
--- a/src/com/android/contacts/list/ContactsIntentResolver.java
+++ b/src/com/android/contacts/list/ContactsIntentResolver.java
@@ -34,8 +34,8 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.group.GroupUtil;
+import com.android.contacts.model.account.AccountWithDataSet;
 
 /**
  * Parses a Contacts intent, extracting all relevant parts and packaging them
diff --git a/src/com/android/contacts/list/ContactsRequest.java b/src/com/android/contacts/list/ContactsRequest.java
index 70ce80d..f581b0a 100644
--- a/src/com/android/contacts/list/ContactsRequest.java
+++ b/src/com/android/contacts/list/ContactsRequest.java
@@ -18,7 +18,7 @@
 
 import android.net.Uri;
 
-import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.AccountWithDataSet;
 
 import java.util.ArrayList;
 
diff --git a/src/com/android/contacts/list/ContactsSectionIndexer.java b/src/com/android/contacts/list/ContactsSectionIndexer.java
new file mode 100644
index 0000000..9d20bfe
--- /dev/null
+++ b/src/com/android/contacts/list/ContactsSectionIndexer.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.list;
+
+import android.text.TextUtils;
+import android.widget.SectionIndexer;
+
+import java.util.Arrays;
+
+/**
+ * A section indexer that is configured with precomputed section titles and
+ * their respective counts.
+ */
+public class ContactsSectionIndexer implements SectionIndexer {
+
+    protected static final String BLANK_HEADER_STRING = "\u2026"; // ellipsis
+
+    private String[] mSections;
+    private int[] mPositions;
+    private int mCount;
+
+    /**
+     * Constructor.
+     *
+     * @param sections a non-null array
+     * @param counts a non-null array of the same size as <code>sections</code>
+     */
+    public ContactsSectionIndexer(String[] sections, int[] counts) {
+        if (sections == null || counts == null) {
+            throw new NullPointerException();
+        }
+
+        if (sections.length != counts.length) {
+            throw new IllegalArgumentException(
+                    "The sections and counts arrays must have the same length");
+        }
+
+        // TODO process sections/counts based on current locale and/or specific section titles
+
+        this.mSections = sections;
+        mPositions = new int[counts.length];
+        int position = 0;
+        for (int i = 0; i < counts.length; i++) {
+            // Enforce that there will be no null or empty sections.
+            if (TextUtils.isEmpty(mSections[i])) {
+                mSections[i] = BLANK_HEADER_STRING;
+            } else if (!mSections[i].equals(BLANK_HEADER_STRING)) {
+                mSections[i] = mSections[i].trim();
+            }
+
+            mPositions[i] = position;
+            position += counts[i];
+        }
+        mCount = position;
+    }
+
+    public Object[] getSections() {
+        return mSections;
+    }
+
+    public int[] getPositions() {
+        return mPositions;
+    }
+
+    public int getPositionForSection(int section) {
+        if (section < 0 || section >= mSections.length) {
+            return -1;
+        }
+
+        return mPositions[section];
+    }
+
+    public int getSectionForPosition(int position) {
+        if (position < 0 || position >= mCount) {
+            return -1;
+        }
+
+        int index = Arrays.binarySearch(mPositions, position);
+
+        /*
+         * Consider this example: section positions are 0, 3, 5; the supplied
+         * position is 4. The section corresponding to position 4 starts at
+         * position 3, so the expected return value is 1. Binary search will not
+         * find 4 in the array and thus will return -insertPosition-1, i.e. -3.
+         * To get from that number to the expected value of 1 we need to negate
+         * and subtract 2.
+         */
+        return index >= 0 ? index : -index - 2;
+    }
+
+    public void setFavoritesHeader(int numberOfItemsToAdd) {
+        if (mSections != null) {
+            // Don't do anything if the header is already set properly.
+            if (mSections.length > 0 && mSections[0].isEmpty()) {
+                return;
+            }
+
+            // Since the section indexer isn't aware of the profile at the top, we need to add a
+            // special section at the top for it and shift everything else down.
+            String[] tempSections = new String[mSections.length + 1];
+            int[] tempPositions = new int[mPositions.length + 1];
+            // Favorites section is empty to hide fast scroll preview.
+            tempSections[0] = "";
+            tempPositions[0] = 0;
+            for (int i = 1; i <= mPositions.length; i++) {
+                tempSections[i] = mSections[i - 1];
+                tempPositions[i] = mPositions[i - 1] + numberOfItemsToAdd;
+            }
+            mSections = tempSections;
+            mPositions = tempPositions;
+            mCount = mCount + numberOfItemsToAdd;
+        }
+    }
+}
diff --git a/src/com/android/contacts/list/ContactsUnavailableFragment.java b/src/com/android/contacts/list/ContactsUnavailableFragment.java
index dd9cbab..c13e475 100644
--- a/src/com/android/contacts/list/ContactsUnavailableFragment.java
+++ b/src/com/android/contacts/list/ContactsUnavailableFragment.java
@@ -21,7 +21,6 @@
 import android.content.res.Configuration;
 import android.graphics.PorterDuff;
 import android.os.Bundle;
-import android.provider.ContactsContract.ProviderStatus;
 import android.support.v4.content.ContextCompat;
 import android.view.Gravity;
 import android.view.LayoutInflater;
@@ -35,9 +34,9 @@
 import android.widget.TextView;
 
 import com.android.contacts.R;
-import com.android.contacts.common.compat.ProviderStatusCompat;
-import com.android.contacts.common.interactions.ImportDialogFragment;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
+import com.android.contacts.compat.ProviderStatusCompat;
+import com.android.contacts.interactions.ImportDialogFragment;
+import com.android.contacts.util.ImplicitIntentsUtil;
 
 /**
  * Fragment shown when contacts are unavailable. It contains provider status
@@ -130,14 +129,14 @@
 
     @Override
     public void onClick(View v) {
-        switch (v.getId()) {
-            case R.id.add_account_button:
-                final Intent intent = ImplicitIntentsUtil.getIntentForAddingGoogleAccount();
-                ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
-                break;
-            case R.id.import_contacts_button:
-                ImportDialogFragment.show(getFragmentManager());
-                break;
+        final int id = v.getId();
+        if (id == R.id.add_account_button) {
+            final Intent intent = ImplicitIntentsUtil.getIntentForAddingGoogleAccount();
+            ImplicitIntentsUtil.startActivityOutsideApp(getActivity(), intent);
+
+        } else if (id == R.id.import_contacts_button) {
+            ImportDialogFragment.show(getFragmentManager());
+
         }
     }
 
diff --git a/src/com/android/contacts/list/CustomContactListFilterActivity.java b/src/com/android/contacts/list/CustomContactListFilterActivity.java
new file mode 100644
index 0000000..2fe9e12
--- /dev/null
+++ b/src/com/android/contacts/list/CustomContactListFilterActivity.java
@@ -0,0 +1,991 @@
+/*
+ * 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.list;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.app.LoaderManager.LoaderCallbacks;
+import android.app.ProgressDialog;
+import android.content.ContentProviderOperation;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.Loader;
+import android.content.OperationApplicationException;
+import android.database.Cursor;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Groups;
+import android.provider.ContactsContract.Settings;
+import android.util.Log;
+import android.view.ContextMenu;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.MenuItem.OnMenuItemClickListener;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseExpandableListAdapter;
+import android.widget.CheckBox;
+import android.widget.ExpandableListAdapter;
+import android.widget.ExpandableListView;
+import android.widget.ExpandableListView.ExpandableListContextMenuInfo;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contacts.util.EmptyService;
+import com.android.contacts.util.LocalizedNameResolver;
+import com.android.contacts.util.WeakAsyncTask;
+import com.android.contacts.util.concurrent.ContactsExecutors;
+import com.android.contacts.util.concurrent.ListenableFutureLoader;
+import com.google.common.base.Function;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * Shows a list of all available {@link Groups} available, letting the user
+ * select which ones they want to be visible.
+ */
+public class CustomContactListFilterActivity extends Activity implements
+        ExpandableListView.OnChildClickListener,
+        LoaderCallbacks<CustomContactListFilterActivity.AccountSet> {
+    private static final String TAG = "CustomContactListFilterActivity";
+
+    public static final String EXTRA_CURRENT_LIST_FILTER_TYPE = "currentListFilterType";
+
+    private static final int ACCOUNT_SET_LOADER_ID = 1;
+
+    private ExpandableListView mList;
+    private DisplayAdapter mAdapter;
+
+    @Override
+    protected void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+        setContentView(R.layout.contact_list_filter_custom);
+
+        mList = (ExpandableListView) findViewById(android.R.id.list);
+        mList.setOnChildClickListener(this);
+        mList.setHeaderDividersEnabled(true);
+        mList.setChildDivider(new ColorDrawable(Color.TRANSPARENT));
+
+        mList.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+            @Override
+            public void onLayoutChange(final View v, final int left, final int top, final int right,
+                    final int bottom, final int oldLeft, final int oldTop, final int oldRight,
+                    final int oldBottom) {
+                mList.setIndicatorBounds(
+                        mList.getWidth() - getResources().getDimensionPixelSize(
+                                R.dimen.contact_filter_indicator_padding_end),
+                        mList.getWidth() - getResources().getDimensionPixelSize(
+                                R.dimen.contact_filter_indicator_padding_start));
+            }
+        });
+
+        mAdapter = new DisplayAdapter(this);
+
+        mList.setOnCreateContextMenuListener(this);
+
+        mList.setAdapter(mAdapter);
+
+        ActionBar actionBar = getActionBar();
+        if (actionBar != null) {
+            // android.R.id.home will be triggered in onOptionsItemSelected()
+            actionBar.setDisplayHomeAsUpEnabled(true);
+        }
+    }
+
+    public static class CustomFilterConfigurationLoader extends ListenableFutureLoader<AccountSet> {
+
+        private AccountTypeManager mAccountTypeManager;
+
+        public CustomFilterConfigurationLoader(Context context) {
+            super(context, new IntentFilter(AccountTypeManager.BROADCAST_ACCOUNTS_CHANGED));
+            mAccountTypeManager = AccountTypeManager.getInstance(context);
+        }
+
+        @Override
+        public ListenableFuture<AccountSet> loadData() {
+            return Futures.transform(mAccountTypeManager.getAccountsAsync(),
+                    new Function<List<AccountInfo>, AccountSet>() {
+                @Nullable
+                @Override
+                public AccountSet apply(@Nullable List<AccountInfo> input) {
+                    return createAccountSet(input);
+                }
+            }, ContactsExecutors.getDefaultThreadPoolExecutor());
+        }
+
+        private AccountSet createAccountSet(List<AccountInfo> sourceAccounts) {
+            final Context context = getContext();
+            final ContentResolver resolver = context.getContentResolver();
+
+            final AccountSet accounts = new AccountSet();
+
+            // Don't include the null account because it doesn't support writing to
+            // ContactsContract.Settings
+            for (AccountInfo info : sourceAccounts) {
+                final AccountWithDataSet account = info.getAccount();
+                final AccountDisplay accountDisplay = new AccountDisplay(resolver, info);
+
+                final Uri.Builder groupsUri = Groups.CONTENT_URI.buildUpon()
+                        .appendQueryParameter(Groups.ACCOUNT_NAME, account.name)
+                        .appendQueryParameter(Groups.ACCOUNT_TYPE, account.type);
+                if (account.dataSet != null) {
+                    groupsUri.appendQueryParameter(Groups.DATA_SET, account.dataSet).build();
+                }
+                final Cursor cursor = resolver.query(groupsUri.build(), null, null, null, null);
+                if (cursor == null) {
+                    continue;
+                }
+                android.content.EntityIterator iterator =
+                        ContactsContract.Groups.newEntityIterator(cursor);
+                try {
+                    boolean hasGroups = false;
+
+                    // Create entries for each known group
+                    while (iterator.hasNext()) {
+                        final ContentValues values = iterator.next().getEntityValues();
+                        final GroupDelta group = GroupDelta.fromBefore(values);
+                        accountDisplay.addGroup(group);
+                        hasGroups = true;
+                    }
+                    // Create single entry handling ungrouped status
+                    accountDisplay.mUngrouped =
+                        GroupDelta.fromSettings(resolver, account.name, account.type,
+                                account.dataSet, hasGroups);
+                    accountDisplay.addGroup(accountDisplay.mUngrouped);
+                } finally {
+                    iterator.close();
+                }
+
+                accounts.add(accountDisplay);
+            }
+
+            return accounts;
+        }
+    }
+
+    @Override
+    protected void onStart() {
+        getLoaderManager().initLoader(ACCOUNT_SET_LOADER_ID, null, this);
+        super.onStart();
+    }
+
+    @Override
+    public Loader<AccountSet> onCreateLoader(int id, Bundle args) {
+        return new CustomFilterConfigurationLoader(this);
+    }
+
+    @Override
+    public void onLoadFinished(Loader<AccountSet> loader, AccountSet data) {
+        mAdapter.setAccounts(data);
+    }
+
+    @Override
+    public void onLoaderReset(Loader<AccountSet> loader) {
+        mAdapter.setAccounts(null);
+    }
+
+    private static final int DEFAULT_SHOULD_SYNC = 1;
+    private static final int DEFAULT_VISIBLE = 0;
+
+    /**
+     * Entry holding any changes to {@link Groups} or {@link Settings} rows,
+     * such as {@link Groups#SHOULD_SYNC} or {@link Groups#GROUP_VISIBLE}.
+     */
+    protected static class GroupDelta extends ValuesDelta {
+        private boolean mUngrouped = false;
+        private boolean mAccountHasGroups;
+
+        private GroupDelta() {
+            super();
+        }
+
+        /**
+         * Build {@link GroupDelta} from the {@link Settings} row for the given
+         * {@link Settings#ACCOUNT_NAME}, {@link Settings#ACCOUNT_TYPE}, and
+         * {@link Settings#DATA_SET}.
+         */
+        public static GroupDelta fromSettings(ContentResolver resolver, String accountName,
+                String accountType, String dataSet, boolean accountHasGroups) {
+            final Uri.Builder settingsUri = Settings.CONTENT_URI.buildUpon()
+                    .appendQueryParameter(Settings.ACCOUNT_NAME, accountName)
+                    .appendQueryParameter(Settings.ACCOUNT_TYPE, accountType);
+            if (dataSet != null) {
+                settingsUri.appendQueryParameter(Settings.DATA_SET, dataSet);
+            }
+            final Cursor cursor = resolver.query(settingsUri.build(), new String[] {
+                    Settings.SHOULD_SYNC, Settings.UNGROUPED_VISIBLE
+            }, null, null, null);
+
+            try {
+                final ContentValues values = new ContentValues();
+                values.put(Settings.ACCOUNT_NAME, accountName);
+                values.put(Settings.ACCOUNT_TYPE, accountType);
+                values.put(Settings.DATA_SET, dataSet);
+
+                if (cursor != null && cursor.moveToFirst()) {
+                    // Read existing values when present
+                    values.put(Settings.SHOULD_SYNC, cursor.getInt(0));
+                    values.put(Settings.UNGROUPED_VISIBLE, cursor.getInt(1));
+                    return fromBefore(values).setUngrouped(accountHasGroups);
+                } else {
+                    // Nothing found, so treat as create
+                    values.put(Settings.SHOULD_SYNC, DEFAULT_SHOULD_SYNC);
+                    values.put(Settings.UNGROUPED_VISIBLE, DEFAULT_VISIBLE);
+                    return fromAfter(values).setUngrouped(accountHasGroups);
+                }
+            } finally {
+                if (cursor != null) cursor.close();
+            }
+        }
+
+        public static GroupDelta fromBefore(ContentValues before) {
+            final GroupDelta entry = new GroupDelta();
+            entry.mBefore = before;
+            entry.mAfter = new ContentValues();
+            return entry;
+        }
+
+        public static GroupDelta fromAfter(ContentValues after) {
+            final GroupDelta entry = new GroupDelta();
+            entry.mBefore = null;
+            entry.mAfter = after;
+            return entry;
+        }
+
+        protected GroupDelta setUngrouped(boolean accountHasGroups) {
+            mUngrouped = true;
+            mAccountHasGroups = accountHasGroups;
+            return this;
+        }
+
+        @Override
+        public boolean beforeExists() {
+            return mBefore != null;
+        }
+
+        public boolean getShouldSync() {
+            return getAsInteger(mUngrouped ? Settings.SHOULD_SYNC : Groups.SHOULD_SYNC,
+                    DEFAULT_SHOULD_SYNC) != 0;
+        }
+
+        public boolean getVisible() {
+            return getAsInteger(mUngrouped ? Settings.UNGROUPED_VISIBLE : Groups.GROUP_VISIBLE,
+                    DEFAULT_VISIBLE) != 0;
+        }
+
+        public void putShouldSync(boolean shouldSync) {
+            put(mUngrouped ? Settings.SHOULD_SYNC : Groups.SHOULD_SYNC, shouldSync ? 1 : 0);
+        }
+
+        public void putVisible(boolean visible) {
+            put(mUngrouped ? Settings.UNGROUPED_VISIBLE : Groups.GROUP_VISIBLE, visible ? 1 : 0);
+        }
+
+        private String getAccountType() {
+            return (mBefore == null ? mAfter : mBefore).getAsString(Settings.ACCOUNT_TYPE);
+        }
+
+        public CharSequence getTitle(Context context) {
+            if (mUngrouped) {
+                final String customAllContactsName =
+                        LocalizedNameResolver.getAllContactsName(context, getAccountType());
+                if (customAllContactsName != null) {
+                    return customAllContactsName;
+                }
+                if (mAccountHasGroups) {
+                    return context.getText(R.string.display_ungrouped);
+                } else {
+                    return context.getText(R.string.display_all_contacts);
+                }
+            } else {
+                final Integer titleRes = getAsInteger(Groups.TITLE_RES);
+                if (titleRes != null && titleRes != 0) {
+                    final String packageName = getAsString(Groups.RES_PACKAGE);
+                    if (packageName != null) {
+                        return context.getPackageManager().getText(packageName, titleRes, null);
+                    }
+                }
+                return getAsString(Groups.TITLE);
+            }
+        }
+
+        /**
+         * Build a possible {@link ContentProviderOperation} to persist any
+         * changes to the {@link Groups} or {@link Settings} row described by
+         * this {@link GroupDelta}.
+         */
+        public ContentProviderOperation buildDiff() {
+            if (isInsert()) {
+                // Only allow inserts for Settings
+                if (mUngrouped) {
+                    mAfter.remove(mIdColumn);
+                    return ContentProviderOperation.newInsert(Settings.CONTENT_URI)
+                            .withValues(mAfter)
+                            .build();
+                }
+                else {
+                    throw new IllegalStateException("Unexpected diff");
+                }
+            } else if (isUpdate()) {
+                if (mUngrouped) {
+                    String accountName = this.getAsString(Settings.ACCOUNT_NAME);
+                    String accountType = this.getAsString(Settings.ACCOUNT_TYPE);
+                    String dataSet = this.getAsString(Settings.DATA_SET);
+                    StringBuilder selection = new StringBuilder(Settings.ACCOUNT_NAME + "=? AND "
+                            + Settings.ACCOUNT_TYPE + "=?");
+                    String[] selectionArgs;
+                    if (dataSet == null) {
+                        selection.append(" AND " + Settings.DATA_SET + " IS NULL");
+                        selectionArgs = new String[] {accountName, accountType};
+                    } else {
+                        selection.append(" AND " + Settings.DATA_SET + "=?");
+                        selectionArgs = new String[] {accountName, accountType, dataSet};
+                    }
+                    return ContentProviderOperation.newUpdate(Settings.CONTENT_URI)
+                            .withSelection(selection.toString(), selectionArgs)
+                            .withValues(mAfter)
+                            .build();
+                } else {
+                    return ContentProviderOperation.newUpdate(
+                                    addCallerIsSyncAdapterParameter(Groups.CONTENT_URI))
+                            .withSelection(Groups._ID + "=" + this.getId(), null)
+                            .withValues(mAfter)
+                            .build();
+                }
+            } else {
+                return null;
+            }
+        }
+    }
+
+    private static Uri addCallerIsSyncAdapterParameter(Uri uri) {
+        return uri.buildUpon()
+            .appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true")
+            .build();
+    }
+
+    /**
+     * {@link Comparator} to sort by {@link Groups#_ID}.
+     */
+    private static Comparator<GroupDelta> sIdComparator = new Comparator<GroupDelta>() {
+        public int compare(GroupDelta object1, GroupDelta object2) {
+            final Long id1 = object1.getId();
+            final Long id2 = object2.getId();
+            if (id1 == null && id2 == null) {
+                return 0;
+            } else if (id1 == null) {
+                return -1;
+            } else if (id2 == null) {
+                return 1;
+            } else if (id1 < id2) {
+                return -1;
+            } else if (id1 > id2) {
+                return 1;
+            } else {
+                return 0;
+            }
+        }
+    };
+
+    /**
+     * Set of all {@link AccountDisplay} entries, one for each source.
+     */
+    protected static class AccountSet extends ArrayList<AccountDisplay> {
+        public ArrayList<ContentProviderOperation> buildDiff() {
+            final ArrayList<ContentProviderOperation> diff = Lists.newArrayList();
+            for (AccountDisplay account : this) {
+                account.buildDiff(diff);
+            }
+            return diff;
+        }
+    }
+
+    /**
+     * {@link GroupDelta} details for a single {@link AccountWithDataSet}, usually shown as
+     * children under a single expandable group.
+     */
+    protected static class AccountDisplay {
+        public final String mName;
+        public final String mType;
+        public final String mDataSet;
+        public final AccountInfo mAccountInfo;
+
+        public GroupDelta mUngrouped;
+        public ArrayList<GroupDelta> mSyncedGroups = Lists.newArrayList();
+        public ArrayList<GroupDelta> mUnsyncedGroups = Lists.newArrayList();
+
+        public GroupDelta getGroup(int position) {
+            if (position < mSyncedGroups.size()) {
+                return mSyncedGroups.get(position);
+            }
+            position -= mSyncedGroups.size();
+            return mUnsyncedGroups.get(position);
+        }
+
+        /**
+         * Build an {@link AccountDisplay} covering all {@link Groups} under the
+         * given {@link AccountWithDataSet}.
+         */
+        public AccountDisplay(ContentResolver resolver, AccountInfo accountInfo) {
+            mName = accountInfo.getAccount().name;
+            mType = accountInfo.getAccount().type;
+            mDataSet = accountInfo.getAccount().dataSet;
+            mAccountInfo = accountInfo;
+        }
+
+        /**
+         * Add the given {@link GroupDelta} internally, filing based on its
+         * {@link GroupDelta#getShouldSync()} status.
+         */
+        private void addGroup(GroupDelta group) {
+            if (group.getShouldSync()) {
+                mSyncedGroups.add(group);
+            } else {
+                mUnsyncedGroups.add(group);
+            }
+        }
+
+        /**
+         * Set the {@link GroupDelta#putShouldSync(boolean)} value for all
+         * children {@link GroupDelta} rows.
+         */
+        public void setShouldSync(boolean shouldSync) {
+            final Iterator<GroupDelta> oppositeChildren = shouldSync ?
+                    mUnsyncedGroups.iterator() : mSyncedGroups.iterator();
+            while (oppositeChildren.hasNext()) {
+                final GroupDelta child = oppositeChildren.next();
+                setShouldSync(child, shouldSync, false);
+                oppositeChildren.remove();
+            }
+        }
+
+        public void setShouldSync(GroupDelta child, boolean shouldSync) {
+            setShouldSync(child, shouldSync, true);
+        }
+
+        /**
+         * Set {@link GroupDelta#putShouldSync(boolean)}, and file internally
+         * based on updated state.
+         */
+        public void setShouldSync(GroupDelta child, boolean shouldSync, boolean attemptRemove) {
+            child.putShouldSync(shouldSync);
+            if (shouldSync) {
+                if (attemptRemove) {
+                    mUnsyncedGroups.remove(child);
+                }
+                mSyncedGroups.add(child);
+                Collections.sort(mSyncedGroups, sIdComparator);
+            } else {
+                if (attemptRemove) {
+                    mSyncedGroups.remove(child);
+                }
+                mUnsyncedGroups.add(child);
+            }
+        }
+
+        /**
+         * Build set of {@link ContentProviderOperation} to persist any user
+         * changes to {@link GroupDelta} rows under this {@link AccountWithDataSet}.
+         */
+        public void buildDiff(ArrayList<ContentProviderOperation> diff) {
+            for (GroupDelta group : mSyncedGroups) {
+                final ContentProviderOperation oper = group.buildDiff();
+                if (oper != null) diff.add(oper);
+            }
+            for (GroupDelta group : mUnsyncedGroups) {
+                final ContentProviderOperation oper = group.buildDiff();
+                if (oper != null) diff.add(oper);
+            }
+        }
+    }
+
+    /**
+     * {@link ExpandableListAdapter} that shows {@link GroupDelta} settings,
+     * grouped by {@link AccountWithDataSet} type. Shows footer row when any groups are
+     * unsynced, as determined through {@link AccountDisplay#mUnsyncedGroups}.
+     */
+    protected static class DisplayAdapter extends BaseExpandableListAdapter {
+        private Context mContext;
+        private LayoutInflater mInflater;
+        private AccountTypeManager mAccountTypes;
+        private AccountSet mAccounts;
+
+        private boolean mChildWithPhones = false;
+
+        public DisplayAdapter(Context context) {
+            mContext = context;
+            mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+            mAccountTypes = AccountTypeManager.getInstance(context);
+        }
+
+        public void setAccounts(AccountSet accounts) {
+            mAccounts = accounts;
+            notifyDataSetChanged();
+        }
+
+        /**
+         * In group descriptions, show the number of contacts with phone
+         * numbers, in addition to the total contacts.
+         */
+        public void setChildDescripWithPhones(boolean withPhones) {
+            mChildWithPhones = withPhones;
+        }
+
+        @Override
+        public View getGroupView(int groupPosition, boolean isExpanded, View convertView,
+                ViewGroup parent) {
+            if (convertView == null) {
+                convertView = mInflater.inflate(
+                        R.layout.custom_contact_list_filter_account, parent, false);
+            }
+
+            final TextView text1 = (TextView)convertView.findViewById(android.R.id.text1);
+            final TextView text2 = (TextView)convertView.findViewById(android.R.id.text2);
+
+            final AccountDisplay account = (AccountDisplay)this.getGroup(groupPosition);
+
+            text1.setText(account.mAccountInfo.getNameLabel());
+            text1.setVisibility(!account.mAccountInfo.isDeviceAccount()
+                    || account.mAccountInfo.hasDistinctName()
+                    ? View.VISIBLE : View.GONE);
+            text2.setText(account.mAccountInfo.getTypeLabel());
+
+            final int textColor = mContext.getResources().getColor(isExpanded
+                    ? R.color.dialtacts_theme_color
+                    : R.color.account_filter_text_color);
+            text1.setTextColor(textColor);
+            text2.setTextColor(textColor);
+
+            return convertView;
+        }
+
+        @Override
+        public View getChildView(int groupPosition, int childPosition, boolean isLastChild,
+                View convertView, ViewGroup parent) {
+            if (convertView == null) {
+                convertView = mInflater.inflate(
+                        R.layout.custom_contact_list_filter_group, parent, false);
+            }
+
+            final TextView text1 = (TextView)convertView.findViewById(android.R.id.text1);
+            final TextView text2 = (TextView)convertView.findViewById(android.R.id.text2);
+            final CheckBox checkbox = (CheckBox)convertView.findViewById(android.R.id.checkbox);
+
+            final AccountDisplay account = mAccounts.get(groupPosition);
+            final GroupDelta child = (GroupDelta)this.getChild(groupPosition, childPosition);
+            if (child != null) {
+                // Handle normal group, with title and checkbox
+                final boolean groupVisible = child.getVisible();
+                checkbox.setVisibility(View.VISIBLE);
+                checkbox.setChecked(groupVisible);
+
+                final CharSequence groupTitle = child.getTitle(mContext);
+                text1.setText(groupTitle);
+                text2.setVisibility(View.GONE);
+            } else {
+                // When unknown child, this is "more" footer view
+                checkbox.setVisibility(View.GONE);
+                text1.setText(R.string.display_more_groups);
+                text2.setVisibility(View.GONE);
+            }
+
+            // Show divider at bottom only for the last child.
+            final View dividerBottom = convertView.findViewById(R.id.adapter_divider_bottom);
+            dividerBottom.setVisibility(isLastChild ? View.VISIBLE : View.GONE);
+
+            return convertView;
+        }
+
+        @Override
+        public Object getChild(int groupPosition, int childPosition) {
+            final AccountDisplay account = mAccounts.get(groupPosition);
+            final boolean validChild = childPosition >= 0
+                    && childPosition < account.mSyncedGroups.size()
+                    + account.mUnsyncedGroups.size();
+            if (validChild) {
+                return account.getGroup(childPosition);
+            } else {
+                return null;
+            }
+        }
+
+        @Override
+        public long getChildId(int groupPosition, int childPosition) {
+            final GroupDelta child = (GroupDelta)getChild(groupPosition, childPosition);
+            if (child != null) {
+                final Long childId = child.getId();
+                return childId != null ? childId : Long.MIN_VALUE;
+            } else {
+                return Long.MIN_VALUE;
+            }
+        }
+
+        @Override
+        public int getChildrenCount(int groupPosition) {
+            // Count is any synced groups, plus possible footer
+            final AccountDisplay account = mAccounts.get(groupPosition);
+            return account.mSyncedGroups.size() + account.mUnsyncedGroups.size();
+        }
+
+        @Override
+        public Object getGroup(int groupPosition) {
+            return mAccounts.get(groupPosition);
+        }
+
+        @Override
+        public int getGroupCount() {
+            if (mAccounts == null) {
+                return 0;
+            }
+            return mAccounts.size();
+        }
+
+        @Override
+        public long getGroupId(int groupPosition) {
+            return groupPosition;
+        }
+
+        @Override
+        public boolean hasStableIds() {
+            return true;
+        }
+
+        @Override
+        public boolean isChildSelectable(int groupPosition, int childPosition) {
+            return true;
+        }
+    }
+
+    /**
+     * Handle any clicks on {@link ExpandableListAdapter} children, which
+     * usually mean toggling its visible state.
+     */
+    @Override
+    public boolean onChildClick(ExpandableListView parent, View view, int groupPosition,
+            int childPosition, long id) {
+        final CheckBox checkbox = (CheckBox)view.findViewById(android.R.id.checkbox);
+
+        final AccountDisplay account = (AccountDisplay)mAdapter.getGroup(groupPosition);
+        final GroupDelta child = (GroupDelta)mAdapter.getChild(groupPosition, childPosition);
+        if (child != null) {
+            checkbox.toggle();
+            child.putVisible(checkbox.isChecked());
+        } else {
+            // Open context menu for bringing back unsynced
+            this.openContextMenu(view);
+        }
+        return true;
+    }
+
+    // TODO: move these definitions to framework constants when we begin
+    // defining this mode through <sync-adapter> tags
+    private static final int SYNC_MODE_UNSUPPORTED = 0;
+    private static final int SYNC_MODE_UNGROUPED = 1;
+    private static final int SYNC_MODE_EVERYTHING = 2;
+
+    protected int getSyncMode(AccountDisplay account) {
+        // TODO: read sync mode through <sync-adapter> definition
+        if (GoogleAccountType.ACCOUNT_TYPE.equals(account.mType) && account.mDataSet == null) {
+            return SYNC_MODE_EVERYTHING;
+        } else {
+            return SYNC_MODE_UNSUPPORTED;
+        }
+    }
+
+    @Override
+    public void onCreateContextMenu(ContextMenu menu, View view,
+            ContextMenu.ContextMenuInfo menuInfo) {
+        super.onCreateContextMenu(menu, view, menuInfo);
+
+        // Bail if not working with expandable long-press, or if not child
+        if (!(menuInfo instanceof ExpandableListContextMenuInfo)) return;
+
+        final ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuInfo;
+        final int groupPosition = ExpandableListView.getPackedPositionGroup(info.packedPosition);
+        final int childPosition = ExpandableListView.getPackedPositionChild(info.packedPosition);
+
+        // Skip long-press on expandable parents
+        if (childPosition == -1) return;
+
+        final AccountDisplay account = (AccountDisplay)mAdapter.getGroup(groupPosition);
+        final GroupDelta child = (GroupDelta)mAdapter.getChild(groupPosition, childPosition);
+
+        // Ignore when selective syncing unsupported
+        final int syncMode = getSyncMode(account);
+        if (syncMode == SYNC_MODE_UNSUPPORTED) return;
+
+        if (child != null) {
+            showRemoveSync(menu, account, child, syncMode);
+        } else {
+            showAddSync(menu, account, syncMode);
+        }
+    }
+
+    protected void showRemoveSync(ContextMenu menu, final AccountDisplay account,
+            final GroupDelta child, final int syncMode) {
+        final CharSequence title = child.getTitle(this);
+
+        menu.setHeaderTitle(title);
+        menu.add(R.string.menu_sync_remove).setOnMenuItemClickListener(
+                new OnMenuItemClickListener() {
+                    public boolean onMenuItemClick(MenuItem item) {
+                        handleRemoveSync(account, child, syncMode, title);
+                        return true;
+                    }
+                });
+    }
+
+    protected void handleRemoveSync(final AccountDisplay account, final GroupDelta child,
+            final int syncMode, CharSequence title) {
+        final boolean shouldSyncUngrouped = account.mUngrouped.getShouldSync();
+        if (syncMode == SYNC_MODE_EVERYTHING && shouldSyncUngrouped
+                && !child.equals(account.mUngrouped)) {
+            // Warn before removing this group when it would cause ungrouped to stop syncing
+            final AlertDialog.Builder builder = new AlertDialog.Builder(this);
+            final CharSequence removeMessage = this.getString(
+                    R.string.display_warn_remove_ungrouped, title);
+            builder.setTitle(R.string.menu_sync_remove);
+            builder.setMessage(removeMessage);
+            builder.setNegativeButton(android.R.string.cancel, null);
+            builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+                public void onClick(DialogInterface dialog, int which) {
+                    // Mark both this group and ungrouped to stop syncing
+                    account.setShouldSync(account.mUngrouped, false);
+                    account.setShouldSync(child, false);
+                    mAdapter.notifyDataSetChanged();
+                }
+            });
+            builder.show();
+        } else {
+            // Mark this group to not sync
+            account.setShouldSync(child, false);
+            mAdapter.notifyDataSetChanged();
+        }
+    }
+
+    protected void showAddSync(ContextMenu menu, final AccountDisplay account, final int syncMode) {
+        menu.setHeaderTitle(R.string.dialog_sync_add);
+
+        // Create item for each available, unsynced group
+        for (final GroupDelta child : account.mUnsyncedGroups) {
+            if (!child.getShouldSync()) {
+                final CharSequence title = child.getTitle(this);
+                menu.add(title).setOnMenuItemClickListener(new OnMenuItemClickListener() {
+                    public boolean onMenuItemClick(MenuItem item) {
+                        // Adding specific group for syncing
+                        if (child.mUngrouped && syncMode == SYNC_MODE_EVERYTHING) {
+                            account.setShouldSync(true);
+                        } else {
+                            account.setShouldSync(child, true);
+                        }
+                        mAdapter.notifyDataSetChanged();
+                        return true;
+                    }
+                });
+            }
+        }
+    }
+
+    private boolean hasUnsavedChanges() {
+        if (mAdapter == null || mAdapter.mAccounts == null) {
+            return false;
+        }
+        if (getCurrentListFilterType() != ContactListFilter.FILTER_TYPE_CUSTOM) {
+            return true;
+        }
+        final ArrayList<ContentProviderOperation> diff = mAdapter.mAccounts.buildDiff();
+        if (diff.isEmpty()) {
+            return false;
+        }
+        return true;
+    }
+
+    @SuppressWarnings("unchecked")
+    private void doSaveAction() {
+        if (mAdapter == null || mAdapter.mAccounts == null) {
+            finish();
+            return;
+        }
+
+        setResult(RESULT_OK);
+
+        final ArrayList<ContentProviderOperation> diff = mAdapter.mAccounts.buildDiff();
+        if (diff.isEmpty()) {
+            finish();
+            return;
+        }
+
+        new UpdateTask(this).execute(diff);
+    }
+
+    /**
+     * Background task that persists changes to {@link Groups#GROUP_VISIBLE},
+     * showing spinner dialog to user while updating.
+     */
+    public static class UpdateTask extends
+            WeakAsyncTask<ArrayList<ContentProviderOperation>, Void, Void, Activity> {
+        private ProgressDialog mProgress;
+
+        public UpdateTask(Activity target) {
+            super(target);
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        protected void onPreExecute(Activity target) {
+            final Context context = target;
+
+            mProgress = ProgressDialog.show(
+                    context, null, context.getText(R.string.savingDisplayGroups));
+
+            // Before starting this task, start an empty service to protect our
+            // process from being reclaimed by the system.
+            context.startService(new Intent(context, EmptyService.class));
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        protected Void doInBackground(
+                Activity target, ArrayList<ContentProviderOperation>... params) {
+            final Context context = target;
+            final ContentValues values = new ContentValues();
+            final ContentResolver resolver = context.getContentResolver();
+
+            try {
+                final ArrayList<ContentProviderOperation> diff = params[0];
+                resolver.applyBatch(ContactsContract.AUTHORITY, diff);
+            } catch (RemoteException e) {
+                Log.e(TAG, "Problem saving display groups", e);
+            } catch (OperationApplicationException e) {
+                Log.e(TAG, "Problem saving display groups", e);
+            }
+
+            return null;
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        protected void onPostExecute(Activity target, Void result) {
+            final Context context = target;
+
+            try {
+                mProgress.dismiss();
+            } catch (Exception e) {
+                Log.e(TAG, "Error dismissing progress dialog", e);
+            }
+
+            target.finish();
+
+            // Stop the service that was protecting us
+            context.stopService(new Intent(context, EmptyService.class));
+        }
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        super.onCreateOptionsMenu(menu);
+
+        final MenuItem menuItem = menu.add(Menu.NONE, R.id.menu_save, Menu.NONE,
+                R.string.menu_custom_filter_save);
+        menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
+
+        return true;
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        final int id = item.getItemId();
+        if (id == android.R.id.home) {
+            confirmFinish();
+            return true;
+        } else if (id == R.id.menu_save) {
+            this.doSaveAction();
+            return true;
+        } else {
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    @Override
+    public void onBackPressed() {
+        confirmFinish();
+    }
+
+    private void confirmFinish() {
+        // Prompt the user whether they want to discard there customizations unless
+        // nothing will be changed.
+        if (hasUnsavedChanges()) {
+            new ConfirmNavigationDialogFragment().show(getFragmentManager(),
+                    "ConfirmNavigationDialog");
+        } else {
+            setResult(RESULT_CANCELED);
+            finish();
+        }
+    }
+
+    private int getCurrentListFilterType() {
+        return getIntent().getIntExtra(EXTRA_CURRENT_LIST_FILTER_TYPE,
+                ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
+    }
+
+    public static class ConfirmNavigationDialogFragment
+            extends DialogFragment implements DialogInterface.OnClickListener {
+
+        @Override
+        public Dialog onCreateDialog(Bundle savedInstanceState) {
+            return new AlertDialog.Builder(getActivity(), getTheme())
+                    .setMessage(R.string.leave_customize_confirmation_dialog_message)
+                    .setNegativeButton(android.R.string.no, null)
+                    .setPositiveButton(android.R.string.yes, this)
+                    .create();
+        }
+
+        @Override
+        public void onClick(DialogInterface dialogInterface, int i) {
+            if (i == DialogInterface.BUTTON_POSITIVE) {
+                getActivity().setResult(RESULT_CANCELED);
+                getActivity().finish();
+            }
+        }
+    }
+}
diff --git a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
index f7ae30d..855a530 100644
--- a/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
+++ b/src/com/android/contacts/list/DefaultContactBrowseListFragment.java
@@ -28,12 +28,15 @@
 import android.content.pm.ResolveInfo;
 import android.content.res.Resources;
 import android.database.Cursor;
+import android.graphics.PorterDuff;
 import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Directory;
+import android.support.v4.content.ContextCompat;
 import android.support.v4.widget.SwipeRefreshLayout;
 import android.text.TextUtils;
 import android.util.Log;
@@ -55,34 +58,26 @@
 
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.ContactsDrawerActivity;
+import com.android.contacts.Experiments;
 import com.android.contacts.R;
 import com.android.contacts.activities.ActionBarAdapter;
 import com.android.contacts.activities.PeopleActivity;
-import com.android.contacts.common.Experiments;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.ContactListAdapter;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.ContactListFilterController;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.DefaultContactListAdapter;
-import com.android.contacts.common.list.DirectoryListLoader;
-import com.android.contacts.common.list.FavoritesAndContactsLoader;
-import com.android.contacts.common.logging.ListEvent;
-import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.logging.ScreenEvent;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.util.AccountFilterUtil;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
+import com.android.contacts.compat.CompatUtils;
 import com.android.contacts.interactions.ContactDeletionInteraction;
 import com.android.contacts.interactions.ContactMultiDeletionInteraction;
 import com.android.contacts.interactions.ContactMultiDeletionInteraction.MultiContactDeleteListener;
+import com.android.contacts.logging.ListEvent;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.logging.ScreenEvent;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
 import com.android.contacts.quickcontact.QuickContactActivity;
+import com.android.contacts.util.AccountFilterUtil;
+import com.android.contacts.util.ImplicitIntentsUtil;
 import com.android.contacts.util.SharedPreferenceUtil;
 import com.android.contacts.util.SyncUtil;
-import com.android.contactsbind.experiments.Flags;
 import com.android.contactsbind.FeatureHighlightHelper;
+import com.android.contactsbind.experiments.Flags;
 
 import java.util.List;
 import java.util.Locale;
@@ -986,6 +981,15 @@
         // Debug options need to be visible even in search mode.
         makeMenuItemVisible(menu, R.id.export_database, mEnableDebugMenuOptions &&
                 hasExportIntentHandler());
+
+        // Light tint the icons for normal mode, dark tint for search or selection mode.
+        for (int i = 0; i < menu.size(); ++i) {
+            final Drawable icon = menu.getItem(i).getIcon();
+            if (icon != null && !isSearchOrSelectionMode) {
+                icon.mutate().setColorFilter(ContextCompat.getColor(getContext(),
+                        R.color.actionbar_icon_color), PorterDuff.Mode.SRC_ATOP);
+            }
+        }
     }
 
     private void makeMenuItemVisible(Menu menu, int itemId, boolean visible) {
@@ -1010,43 +1014,36 @@
             return false;
         }
 
-        switch (item.getItemId()) {
-            case android.R.id.home: {
-                // The home icon on the action bar is pressed
-                if (mActionBarAdapter.isUpShowing()) {
-                    // "UP" icon press -- should be treated as "back".
-                    mActivity.onBackPressed();
-                }
-                return true;
+        final int id = item.getItemId();
+        if (id == android.R.id.home) {
+            if (mActionBarAdapter.isUpShowing()) {
+                // "UP" icon press -- should be treated as "back".
+                mActivity.onBackPressed();
             }
-            case R.id.menu_search: {
-                if (!mActionBarAdapter.isSelectionMode()) {
-                    mActionBarAdapter.setSearchMode(true);
-                }
-                return true;
+            return true;
+        } else if (id == R.id.menu_search) {
+            if (!mActionBarAdapter.isSelectionMode()) {
+                mActionBarAdapter.setSearchMode(true);
             }
-            case R.id.menu_share: {
-                shareSelectedContacts();
-                return true;
-            }
-            case R.id.menu_join: {
-                Logger.logListEvent(ListEvent.ActionType.LINK,
+            return true;
+        } else if (id == R.id.menu_share) {
+            shareSelectedContacts();
+            return true;
+        } else if (id == R.id.menu_join) {
+            Logger.logListEvent(ListEvent.ActionType.LINK,
                         /* listType */ getListTypeIncludingSearch(),
                         /* count */ getAdapter().getCount(), /* clickedIndex */ -1,
                         /* numSelected */ getAdapter().getSelectedContactIds().size());
-                joinSelectedContacts();
-                return true;
-            }
-            case R.id.menu_delete: {
-                deleteSelectedContacts();
-                return true;
-            }
-            case R.id.export_database: {
-                final Intent intent = new Intent("com.android.providers.contacts.DUMP_DATABASE");
-                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
-                ImplicitIntentsUtil.startActivityOutsideApp(getContext(), intent);
-                return true;
-            }
+            joinSelectedContacts();
+            return true;
+        } else if (id == R.id.menu_delete) {
+            deleteSelectedContacts();
+            return true;
+        } else if (id == R.id.export_database) {
+            final Intent intent = new Intent("com.android.providers.contacts.DUMP_DATABASE");
+            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
+            ImplicitIntentsUtil.startActivityOutsideApp(getContext(), intent);
+            return true;
         }
         return super.onOptionsItemSelected(item);
     }
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
new file mode 100644
index 0000000..d8344c6
--- /dev/null
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -0,0 +1,312 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.net.Uri;
+import android.net.Uri.Builder;
+import android.preference.PreferenceManager;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.provider.ContactsContract.SearchSnippets;
+import android.text.TextUtils;
+import android.view.View;
+
+import com.android.contacts.Experiments;
+import com.android.contacts.compat.ContactsCompat;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contactsbind.experiments.Flags;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A cursor adapter for the {@link ContactsContract.Contacts#CONTENT_TYPE} content type.
+ */
+public class DefaultContactListAdapter extends ContactListAdapter {
+
+    public static final char SNIPPET_START_MATCH = '[';
+    public static final char SNIPPET_END_MATCH = ']';
+
+    // Contacts contacted within the last 3 days (in seconds)
+    private static final long LAST_TIME_USED_3_DAYS_SEC = 3L * 24 * 60 * 60;
+
+    // Contacts contacted within the last 7 days (in seconds)
+    private static final long LAST_TIME_USED_7_DAYS_SEC = 7L * 24 * 60 * 60;
+
+    // Contacts contacted within the last 14 days (in seconds)
+    private static final long LAST_TIME_USED_14_DAYS_SEC = 14L * 24 * 60 * 60;
+
+    // Contacts contacted within the last 30 days (in seconds)
+    private static final long LAST_TIME_USED_30_DAYS_SEC = 30L * 24 * 60 * 60;
+
+    private static final String TIME_SINCE_LAST_USED_SEC =
+            "(strftime('%s', 'now') - " + Contacts.LAST_TIME_CONTACTED + "/1000)";
+
+    private static final String STREQUENT_SORT =
+            "(CASE WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_3_DAYS_SEC +
+                    " THEN 0 " +
+                    " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_7_DAYS_SEC +
+                    " THEN 1 " +
+                    " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_14_DAYS_SEC +
+                    " THEN 2 " +
+                    " WHEN " + TIME_SINCE_LAST_USED_SEC + " < " + LAST_TIME_USED_30_DAYS_SEC +
+                    " THEN 3 " +
+                    " ELSE 4 END), " +
+                    Contacts.TIMES_CONTACTED + " DESC, " +
+                    Contacts.STARRED + " DESC";
+
+    public DefaultContactListAdapter(Context context) {
+        super(context);
+    }
+
+    @Override
+    public void configureLoader(CursorLoader loader, long directoryId) {
+        if (loader instanceof FavoritesAndContactsLoader) {
+            ((FavoritesAndContactsLoader) loader).setLoadFavorites(shouldIncludeFavorites());
+        }
+
+        String sortOrder = null;
+        if (isSearchMode()) {
+            String query = getQueryString();
+            if (query == null) query = "";
+            query = query.trim();
+            if (TextUtils.isEmpty(query)) {
+                // Regardless of the directory, we don't want anything returned,
+                // so let's just send a "nothing" query to the local directory.
+                loader.setUri(Contacts.CONTENT_URI);
+                loader.setProjection(getProjection(false));
+                loader.setSelection("0");
+            } else if (isGroupMembersFilter()) {
+                final ContactListFilter filter = getFilter();
+                configureUri(loader, directoryId, filter);
+                // TODO: This is not the normal type to filter URI so we load the non-search
+                // projection. Consider creating a specific group member adapter to make it more
+                // clear.
+                loader.setProjection(getProjection(/* forSearch */ false));
+                loader.setSelection(
+                        Contacts.DISPLAY_NAME_PRIMARY + " LIKE ?1 OR " +
+                        Contacts.DISPLAY_NAME_ALTERNATIVE + " LIKE ?1");
+                final String[] args = new String[1];
+                args[0] = query + "%";
+                loader.setSelectionArgs(args);
+            } else {
+                final Builder builder = ContactsCompat.getContentUri().buildUpon();
+                appendSearchParameters(builder, query, directoryId);
+                loader.setUri(builder.build());
+                loader.setProjection(getProjection(true));
+                sortOrder = STREQUENT_SORT;
+                if (Flags.getInstance().getBoolean(Experiments.SEARCH_YENTA)
+                        && loader instanceof FavoritesAndContactsLoader
+                        && directoryId == Directory.DEFAULT) {
+                    final FavoritesAndContactsLoader favoritesAndContactsLoader =
+                            (FavoritesAndContactsLoader) loader;
+                    favoritesAndContactsLoader.setAutocompleteQuery(query);
+                }
+            }
+        } else {
+            final ContactListFilter filter = getFilter();
+            configureUri(loader, directoryId, filter);
+            if (filter != null
+                    && filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS) {
+                loader.setProjection(getDataProjectionForContacts(false));
+            } else {
+                loader.setProjection(getProjection(false));
+            }
+            configureSelection(loader, directoryId, filter);
+        }
+
+        if (getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
+            if (sortOrder == null) {
+                sortOrder = Contacts.SORT_KEY_PRIMARY;
+            } else {
+                sortOrder += ", " + Contacts.SORT_KEY_PRIMARY;
+            }
+        } else {
+            if (sortOrder == null) {
+                sortOrder = Contacts.SORT_KEY_ALTERNATIVE;
+            } else {
+                sortOrder += ", " + Contacts.SORT_KEY_ALTERNATIVE;
+            }
+        }
+        loader.setSortOrder(sortOrder);
+    }
+
+    private boolean isGroupMembersFilter() {
+        final ContactListFilter filter = getFilter();
+        return filter != null && filter.filterType == ContactListFilter.FILTER_TYPE_GROUP_MEMBERS;
+    }
+
+    private void appendSearchParameters(Builder builder, String query, long directoryId) {
+        builder.appendPath(query); // Builder will encode the query
+        builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
+                String.valueOf(directoryId));
+        if (directoryId != Directory.DEFAULT && directoryId != Directory.LOCAL_INVISIBLE) {
+            builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
+                    String.valueOf(getDirectoryResultLimit(getDirectoryById(directoryId))));
+        }
+        builder.appendQueryParameter(SearchSnippets.DEFERRED_SNIPPETING_KEY, "1");
+    }
+
+    protected void configureUri(CursorLoader loader, long directoryId, ContactListFilter filter) {
+        Uri uri = Contacts.CONTENT_URI;
+        if (filter != null) {
+            if (filter.filterType == ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
+                String lookupKey = getSelectedContactLookupKey();
+                if (lookupKey != null) {
+                    uri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey);
+                } else {
+                    uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, getSelectedContactId());
+                }
+            } else if (filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS) {
+                uri = Data.CONTENT_URI;
+            }
+        }
+
+        if (directoryId == Directory.DEFAULT && isSectionHeaderDisplayEnabled()) {
+            uri = ContactListAdapter.buildSectionIndexerUri(uri);
+        }
+
+        // The "All accounts" filter is the same as the entire contents of Directory.DEFAULT
+        if (filter != null
+                && filter.filterType != ContactListFilter.FILTER_TYPE_CUSTOM
+                && filter.filterType != ContactListFilter.FILTER_TYPE_SINGLE_CONTACT) {
+            final Uri.Builder builder = uri.buildUpon();
+            builder.appendQueryParameter(
+                    ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT));
+            if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT
+                || filter.filterType == ContactListFilter.FILTER_TYPE_GROUP_MEMBERS) {
+                filter.addAccountQueryParameterToUrl(builder);
+            }
+            uri = builder.build();
+        }
+
+        loader.setUri(uri);
+    }
+
+    private void configureSelection(
+            CursorLoader loader, long directoryId, ContactListFilter filter) {
+        if (filter == null) {
+            return;
+        }
+
+        if (directoryId != Directory.DEFAULT) {
+            return;
+        }
+
+        StringBuilder selection = new StringBuilder();
+        List<String> selectionArgs = new ArrayList<String>();
+
+        switch (filter.filterType) {
+            case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS: {
+                // We have already added directory=0 to the URI, which takes care of this
+                // filter
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_SINGLE_CONTACT: {
+                // We have already added the lookup key to the URI, which takes care of this
+                // filter
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_STARRED: {
+                selection.append(Contacts.STARRED + "!=0");
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY: {
+                selection.append(Contacts.HAS_PHONE_NUMBER + "=1");
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_CUSTOM: {
+                selection.append(Contacts.IN_VISIBLE_GROUP + "=1");
+                if (isCustomFilterForPhoneNumbersOnly()) {
+                    selection.append(" AND " + Contacts.HAS_PHONE_NUMBER + "=1");
+                }
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_ACCOUNT: {
+                // We use query parameters for account filter, so no selection to add here.
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_GROUP_MEMBERS: {
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS: {
+                if (filter.accountType != null) {
+                    selection.append(ContactsContract.RawContacts.ACCOUNT_TYPE)
+                            .append("=?");
+                    selectionArgs.add(filter.accountType);
+                    if (filter.accountName != null) {
+                        selection.append(" AND ").append(ContactsContract.RawContacts.ACCOUNT_NAME)
+                                .append(("=?"));
+                        selectionArgs.add(filter.accountName);
+                    }
+                } else {
+                    selection.append(AccountWithDataSet.LOCAL_ACCOUNT_SELECTION);
+                }
+                break;
+            }
+        }
+        loader.setSelection(selection.toString());
+        loader.setSelectionArgs(selectionArgs.toArray(new String[0]));
+    }
+
+    @Override
+    protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+        super.bindView(itemView, partition, cursor, position);
+        final ContactListItemView view = (ContactListItemView)itemView;
+
+        view.setHighlightedPrefix(isSearchMode() ? getUpperCaseQueryString() : null);
+
+        if (isSelectionVisible()) {
+            view.setActivated(isSelectedContact(partition, cursor));
+        }
+
+        bindSectionHeaderAndDivider(view, position, cursor);
+
+        if (isQuickContactEnabled()) {
+            bindQuickContact(view, partition, cursor, ContactQuery.CONTACT_PHOTO_ID,
+                    ContactQuery.CONTACT_PHOTO_URI, ContactQuery.CONTACT_ID,
+                    ContactQuery.CONTACT_LOOKUP_KEY, ContactQuery.CONTACT_DISPLAY_NAME);
+        } else {
+            if (getDisplayPhotos()) {
+                bindPhoto(view, partition, cursor);
+            }
+        }
+
+        bindNameAndViewId(view, cursor);
+        bindPresenceAndStatusMessage(view, cursor);
+
+        if (isSearchMode()) {
+            bindSearchSnippet(view, cursor);
+        } else {
+            view.setSnippet(null);
+        }
+    }
+
+    private boolean isCustomFilterForPhoneNumbersOnly() {
+        // TODO: this flag should not be stored in shared prefs.  It needs to be in the db.
+        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
+        return prefs.getBoolean(ContactsPreferences.PREF_DISPLAY_ONLY_PHONES,
+                ContactsPreferences.PREF_DISPLAY_ONLY_PHONES_DEFAULT);
+    }
+}
diff --git a/src/com/android/contacts/list/DirectoryListLoader.java b/src/com/android/contacts/list/DirectoryListLoader.java
new file mode 100644
index 0000000..192c744
--- /dev/null
+++ b/src/com/android/contacts/list/DirectoryListLoader.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.content.AsyncTaskLoader;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.os.Handler;
+import android.provider.ContactsContract.Directory;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.contacts.R;
+import com.android.contacts.compat.DirectoryCompat;
+
+/**
+ * A specialized loader for the list of directories, see {@link Directory}.
+ */
+public class DirectoryListLoader extends AsyncTaskLoader<Cursor> {
+
+    private static final String TAG = "ContactEntryListAdapter";
+
+    public static final int SEARCH_MODE_NONE = 0;
+    public static final int SEARCH_MODE_DEFAULT = 1;
+    public static final int SEARCH_MODE_CONTACT_SHORTCUT = 2;
+    public static final int SEARCH_MODE_DATA_SHORTCUT = 3;
+
+    private static final class DirectoryQuery {
+        public static final String ORDER_BY = Directory._ID;
+
+        public static final String[] PROJECTION = {
+            Directory._ID,
+            Directory.PACKAGE_NAME,
+            Directory.TYPE_RESOURCE_ID,
+            Directory.DISPLAY_NAME,
+            Directory.PHOTO_SUPPORT,
+        };
+
+        public static final int ID = 0;
+        public static final int PACKAGE_NAME = 1;
+        public static final int TYPE_RESOURCE_ID = 2;
+        public static final int DISPLAY_NAME = 3;
+        public static final int PHOTO_SUPPORT = 4;
+
+        public static Uri getDirectoryUri(int mode) {
+            if (mode == SEARCH_MODE_DATA_SHORTCUT || mode == SEARCH_MODE_CONTACT_SHORTCUT) {
+                return Directory.CONTENT_URI;
+            } else {
+                return DirectoryCompat.getContentUri();
+            }
+        }
+    }
+
+    // This is a virtual column created for a MatrixCursor.
+    public static final String DIRECTORY_TYPE = "directoryType";
+
+    private static final String[] RESULT_PROJECTION = {
+        Directory._ID,
+        DIRECTORY_TYPE,
+        Directory.DISPLAY_NAME,
+        Directory.PHOTO_SUPPORT,
+    };
+
+    private final ContentObserver mObserver = new ContentObserver(new Handler()) {
+        @Override
+        public void onChange(boolean selfChange) {
+            forceLoad();
+        }
+    };
+
+    private int mDirectorySearchMode;
+    private boolean mLocalInvisibleDirectoryEnabled;
+
+    private MatrixCursor mDefaultDirectoryList;
+
+    public DirectoryListLoader(Context context) {
+        super(context);
+    }
+
+    public void setDirectorySearchMode(int mode) {
+        mDirectorySearchMode = mode;
+    }
+
+    /**
+     * A flag that indicates whether the {@link Directory#LOCAL_INVISIBLE} directory should
+     * be included in the results.
+     */
+    public void setLocalInvisibleDirectoryEnabled(boolean flag) {
+        this.mLocalInvisibleDirectoryEnabled = flag;
+    }
+
+    @Override
+    protected void onStartLoading() {
+        getContext().getContentResolver().
+                registerContentObserver(DirectoryQuery.getDirectoryUri(mDirectorySearchMode),
+                        false, mObserver);
+        forceLoad();
+    }
+
+    @Override
+    protected void onStopLoading() {
+        getContext().getContentResolver().unregisterContentObserver(mObserver);
+    }
+
+    @Override
+    public Cursor loadInBackground() {
+        if (mDirectorySearchMode == SEARCH_MODE_NONE) {
+            return getDefaultDirectories();
+        }
+
+        MatrixCursor result = new MatrixCursor(RESULT_PROJECTION);
+        Context context = getContext();
+        PackageManager pm = context.getPackageManager();
+        String selection;
+        switch (mDirectorySearchMode) {
+            case SEARCH_MODE_DEFAULT:
+                selection = null;
+                break;
+
+            case SEARCH_MODE_CONTACT_SHORTCUT:
+                selection = Directory.SHORTCUT_SUPPORT + "=" + Directory.SHORTCUT_SUPPORT_FULL;
+                break;
+
+            case SEARCH_MODE_DATA_SHORTCUT:
+                selection = Directory.SHORTCUT_SUPPORT + " IN ("
+                        + Directory.SHORTCUT_SUPPORT_FULL + ", "
+                        + Directory.SHORTCUT_SUPPORT_DATA_ITEMS_ONLY + ")";
+                break;
+
+            default:
+                throw new RuntimeException(
+                        "Unsupported directory search mode: " + mDirectorySearchMode);
+        }
+        Cursor cursor = null;
+        try {
+            cursor = context.getContentResolver().query(
+                    DirectoryQuery.getDirectoryUri(mDirectorySearchMode),
+                    DirectoryQuery.PROJECTION, selection, null, DirectoryQuery.ORDER_BY);
+
+            if (cursor == null) {
+                return result;
+            }
+
+            while(cursor.moveToNext()) {
+                long directoryId = cursor.getLong(DirectoryQuery.ID);
+                if (!mLocalInvisibleDirectoryEnabled
+                        && DirectoryCompat.isInvisibleDirectory(directoryId)) {
+                    continue;
+                }
+                String directoryType = null;
+
+                String packageName = cursor.getString(DirectoryQuery.PACKAGE_NAME);
+                int typeResourceId = cursor.getInt(DirectoryQuery.TYPE_RESOURCE_ID);
+                if (!TextUtils.isEmpty(packageName) && typeResourceId != 0) {
+                    try {
+                        directoryType = pm.getResourcesForApplication(packageName)
+                                .getString(typeResourceId);
+                    } catch (Exception e) {
+                        Log.e(TAG, "Cannot obtain directory type from package: " + packageName);
+                    }
+                }
+                String displayName = cursor.getString(DirectoryQuery.DISPLAY_NAME);
+                int photoSupport = cursor.getInt(DirectoryQuery.PHOTO_SUPPORT);
+                result.addRow(new Object[]{directoryId, directoryType, displayName, photoSupport});
+            }
+        } catch (RuntimeException e) {
+            Log.w(TAG, "Runtime Exception when querying directory");
+        } finally {
+            if (cursor != null) {
+                cursor.close();
+            }
+        }
+
+        return result;
+    }
+
+    private Cursor getDefaultDirectories() {
+        if (mDefaultDirectoryList == null) {
+            mDefaultDirectoryList = new MatrixCursor(RESULT_PROJECTION);
+            mDefaultDirectoryList.addRow(new Object[] {
+                    Directory.DEFAULT,
+                    getContext().getString(R.string.contactsList),
+                    null,
+                    null
+            });
+            mDefaultDirectoryList.addRow(new Object[] {
+                    Directory.LOCAL_INVISIBLE,
+                    getContext().getString(R.string.local_invisible_directory),
+                    null,
+                    null
+            });
+        }
+        return mDefaultDirectoryList;
+    }
+
+    @Override
+    protected void onReset() {
+        stopLoading();
+    }
+}
diff --git a/src/com/android/contacts/list/DirectoryPartition.java b/src/com/android/contacts/list/DirectoryPartition.java
new file mode 100644
index 0000000..bf0456b
--- /dev/null
+++ b/src/com/android/contacts/list/DirectoryPartition.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.provider.ContactsContract.Directory;
+
+import com.android.common.widget.CompositeCursorAdapter;
+
+/**
+ * Model object for a {@link Directory} row.
+ */
+public final class DirectoryPartition extends CompositeCursorAdapter.Partition {
+
+    public static final int STATUS_NOT_LOADED = 0;
+    public static final int STATUS_LOADING = 1;
+    public static final int STATUS_LOADED = 2;
+
+    public static final int RESULT_LIMIT_DEFAULT = -1;
+
+    private long mDirectoryId;
+    private String mContentUri;
+    private String mDirectoryType;
+    private String mDisplayName;
+    private int mStatus;
+    private boolean mPriorityDirectory;
+    private boolean mPhotoSupported;
+    private int mResultLimit = RESULT_LIMIT_DEFAULT;
+    private boolean mDisplayNumber = true;
+
+    private String mLabel;
+
+    public DirectoryPartition(boolean showIfEmpty, boolean hasHeader) {
+        super(showIfEmpty, hasHeader);
+    }
+
+    /**
+     * Directory ID, see {@link Directory}.
+     */
+    public long getDirectoryId() {
+        return mDirectoryId;
+    }
+
+    public void setDirectoryId(long directoryId) {
+        this.mDirectoryId = directoryId;
+    }
+
+    /**
+     * Directory type resolved from {@link Directory#PACKAGE_NAME} and
+     * {@link Directory#TYPE_RESOURCE_ID};
+     */
+    public String getDirectoryType() {
+        return mDirectoryType;
+    }
+
+    public void setDirectoryType(String directoryType) {
+        this.mDirectoryType = directoryType;
+    }
+
+    /**
+     * See {@link Directory#DISPLAY_NAME}.
+     */
+    public String getDisplayName() {
+        return mDisplayName;
+    }
+
+    public void setDisplayName(String displayName) {
+        this.mDisplayName = displayName;
+    }
+
+    public int getStatus() {
+        return mStatus;
+    }
+
+    public void setStatus(int status) {
+        mStatus = status;
+    }
+
+    public boolean isLoading() {
+        return mStatus == STATUS_NOT_LOADED || mStatus == STATUS_LOADING;
+    }
+
+    /**
+     * Returns true if this directory should be loaded before non-priority directories.
+     */
+    public boolean isPriorityDirectory() {
+        return mPriorityDirectory;
+    }
+
+    public void setPriorityDirectory(boolean priorityDirectory) {
+        mPriorityDirectory = priorityDirectory;
+    }
+
+    /**
+     * Returns true if this directory supports photos.
+     */
+    public boolean isPhotoSupported() {
+        return mPhotoSupported;
+    }
+
+    public void setPhotoSupported(boolean flag) {
+        this.mPhotoSupported = flag;
+    }
+
+    /**
+     * Max number of results for this directory. Defaults to {@link #RESULT_LIMIT_DEFAULT} which
+     * implies using the adapter's
+     * {@link com.android.contacts.list.ContactListAdapter#getDirectoryResultLimit()}
+     */
+    public int getResultLimit() {
+        return mResultLimit;
+    }
+
+    public void setResultLimit(int resultLimit) {
+        mResultLimit = resultLimit;
+    }
+
+    /**
+     * Used by extended directories to specify a custom content URI. Extended directories MUST have
+     * a content URI
+     */
+    public String getContentUri() {
+        return mContentUri;
+    }
+
+    public void setContentUri(String contentUri) {
+        mContentUri = contentUri;
+    }
+
+    /**
+     * A label to display in the header next to the display name.
+     */
+    public String getLabel() {
+        return mLabel;
+    }
+
+    public void setLabel(String label) {
+        mLabel = label;
+    }
+
+    @Override
+    public String toString() {
+        return "DirectoryPartition{" +
+                "mDirectoryId=" + mDirectoryId +
+                ", mContentUri='" + mContentUri + '\'' +
+                ", mDirectoryType='" + mDirectoryType + '\'' +
+                ", mDisplayName='" + mDisplayName + '\'' +
+                ", mStatus=" + mStatus +
+                ", mPriorityDirectory=" + mPriorityDirectory +
+                ", mPhotoSupported=" + mPhotoSupported +
+                ", mResultLimit=" + mResultLimit +
+                ", mLabel='" + mLabel + '\'' +
+                '}';
+    }
+
+    /**
+     * Whether or not to display the phone number in app that have that option - Dialer. If false,
+     * Phone Label should be used instead of Phone Number.
+     */
+    public boolean isDisplayNumber() {
+        return mDisplayNumber;
+    }
+
+    public void setDisplayNumber(boolean displayNumber) {
+        mDisplayNumber = displayNumber;
+    }
+}
diff --git a/src/com/android/contacts/list/EmailAddressListAdapter.java b/src/com/android/contacts/list/EmailAddressListAdapter.java
index d19f960..04297a4 100644
--- a/src/com/android/contacts/list/EmailAddressListAdapter.java
+++ b/src/com/android/contacts/list/EmailAddressListAdapter.java
@@ -28,10 +28,8 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.preference.ContactsPreferences;
 
 /**
  * A cursor adapter for the {@link Email#CONTENT_TYPE} content type.
diff --git a/src/com/android/contacts/list/EmailAddressPickerFragment.java b/src/com/android/contacts/list/EmailAddressPickerFragment.java
index f89f743..7dcc766 100644
--- a/src/com/android/contacts/list/EmailAddressPickerFragment.java
+++ b/src/com/android/contacts/list/EmailAddressPickerFragment.java
@@ -21,9 +21,6 @@
 import android.view.ViewGroup;
 
 import com.android.contacts.R;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.DirectoryListLoader;
 
 /**
  * Fragment containing an email list for picking.
diff --git a/src/com/android/contacts/list/EnableGlobalSyncDialogFragment.java b/src/com/android/contacts/list/EnableGlobalSyncDialogFragment.java
index 46df4ae..08822d1 100644
--- a/src/com/android/contacts/list/EnableGlobalSyncDialogFragment.java
+++ b/src/com/android/contacts/list/EnableGlobalSyncDialogFragment.java
@@ -23,7 +23,6 @@
 import android.os.Bundle;
 
 import com.android.contacts.R;
-import com.android.contacts.common.list.ContactListFilter;
 
 /**
  * Confirmation dialog for turning global auto-sync setting on.
diff --git a/src/com/android/contacts/list/FavoritesAndContactsLoader.java b/src/com/android/contacts/list/FavoritesAndContactsLoader.java
new file mode 100644
index 0000000..5868d29
--- /dev/null
+++ b/src/com/android/contacts/list/FavoritesAndContactsLoader.java
@@ -0,0 +1,156 @@
+/*
+ * 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.list;
+
+import android.content.Context;
+import android.content.CursorLoader;
+import android.database.Cursor;
+import android.database.MergeCursor;
+import android.database.sqlite.SQLiteException;
+import android.os.Bundle;
+import android.provider.ContactsContract.Contacts;
+import android.util.Log;
+
+import com.android.contacts.Experiments;
+import com.android.contactsbind.ObjectFactory;
+import com.android.contactsbind.experiments.Flags;
+import com.android.contactsbind.search.AutocompleteHelper;
+import com.google.common.collect.Lists;
+
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A loader for use in the default contact list, which will also query for favorite contacts
+ * if configured to do so.
+ */
+public class FavoritesAndContactsLoader extends CursorLoader implements
+        AutocompleteHelper.Listener {
+
+    private boolean mLoadFavorites;
+
+    private String[] mProjection;
+
+    private String mAutocompleteQuery;
+    private CountDownLatch mAutocompleteLatch = new CountDownLatch(1);
+    private Cursor mAutocompleteCursor;
+    private int mAutocompleteTimeout;
+
+    public FavoritesAndContactsLoader(Context context) {
+        super(context);
+        mAutocompleteTimeout = Flags.getInstance().getInteger(
+                Experiments.SEARCH_YENTA_TIMEOUT_MILLIS);
+    }
+
+    /** Whether to load favorites and merge results in before any other results. */
+    public void setLoadFavorites(boolean flag) {
+        mLoadFavorites = flag;
+    }
+
+    public void setAutocompleteQuery(String autocompleteQuery) {
+        mAutocompleteQuery = autocompleteQuery;
+    }
+
+    public void setProjection(String[] projection) {
+        super.setProjection(projection);
+        mProjection = projection;
+    }
+
+    @Override
+    public Cursor loadInBackground() {
+        List<Cursor> cursors = Lists.newArrayList();
+        if (mLoadFavorites) {
+            cursors.add(loadFavoritesContacts());
+        }
+
+        if (mAutocompleteQuery != null) {
+            final AutocompleteHelper autocompleteHelper =
+                    ObjectFactory.getAutocompleteHelper(getContext());
+            if (autocompleteHelper != null) {
+                autocompleteHelper.setListener(this);
+                autocompleteHelper.setProjection(mProjection);
+                autocompleteHelper.setQuery(mAutocompleteQuery);
+                try {
+                    if (!mAutocompleteLatch.await(mAutocompleteTimeout, TimeUnit.MILLISECONDS)) {
+                        logw("Timeout expired before receiving autocompletions");
+                    }
+                } catch (InterruptedException e) {
+                    logw("Interrupted while waiting for autocompletions");
+                }
+                if (mAutocompleteCursor != null) {
+                    cursors.add(mAutocompleteCursor);
+                    // TODO: exclude these results from the main loader results, see b/30742359
+                }
+            }
+        }
+
+        // TODO: if the autocomplete experiment in on, only show those results even if they're empty
+        final Cursor contactsCursor = mAutocompleteQuery == null ? loadContacts() : null;
+        if (mAutocompleteQuery == null) {
+            cursors.add(contactsCursor);
+        }
+        // Guard against passing an empty array to the MergeCursor constructor
+        if (cursors.isEmpty()) cursors.add(null);
+
+        return new MergeCursor(cursors.toArray(new Cursor[cursors.size()])) {
+            @Override
+            public Bundle getExtras() {
+                // Need to get the extras from the contacts cursor.
+                return contactsCursor == null ? new Bundle() : contactsCursor.getExtras();
+            }
+        };
+    }
+
+    private Cursor loadContacts() {
+        // ContactsCursor.loadInBackground() can return null; MergeCursor
+        // correctly handles null cursors.
+        try {
+            return super.loadInBackground();
+
+        } catch (NullPointerException | SQLiteException | SecurityException e) {
+            // Ignore NPEs, SQLiteExceptions and SecurityExceptions thrown by providers
+        }
+        return null;
+    }
+
+    private Cursor loadFavoritesContacts() {
+        final StringBuilder selection = new StringBuilder();
+        selection.append(Contacts.STARRED + "=?");
+        final ContactListFilter filter =
+                ContactListFilterController.getInstance(getContext()).getFilter();
+        if (filter != null && filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+            selection.append(" AND ").append(Contacts.IN_VISIBLE_GROUP + "=1");
+        }
+        return getContext().getContentResolver().query(
+                Contacts.CONTENT_URI, mProjection, selection.toString(), new String[]{"1"},
+                getSortOrder());
+    }
+
+    @Override
+    public void onAutocompletesAvailable(Cursor cursor) {
+        if (cursor != null && cursor.getCount() > 0) {
+            mAutocompleteCursor = cursor;
+            mAutocompleteLatch.countDown();
+        }
+    }
+
+    private static void logw(String message) {
+        if (Log.isLoggable(AutocompleteHelper.TAG, Log.WARN)) {
+            Log.w(AutocompleteHelper.TAG, message);
+        }
+    }
+}
diff --git a/src/com/android/contacts/list/GroupMemberPickerFragment.java b/src/com/android/contacts/list/GroupMemberPickerFragment.java
index a7e37d7..e94d73b 100644
--- a/src/com/android/contacts/list/GroupMemberPickerFragment.java
+++ b/src/com/android/contacts/list/GroupMemberPickerFragment.java
@@ -29,14 +29,11 @@
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.android.contacts.R;
 import com.android.contacts.activities.ContactSelectionActivity;
-import com.android.contacts.common.R;
-import com.android.contacts.common.list.ContactListAdapter.ContactQuery;
-import com.android.contacts.common.list.ContactListFilter;
-import com.android.contacts.common.list.ContactsSectionIndexer;
-import com.android.contacts.common.list.DefaultContactListAdapter;
-import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.group.GroupUtil;
+import com.android.contacts.list.ContactListAdapter.ContactQuery;
+import com.android.contacts.model.account.AccountWithDataSet;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -304,20 +301,18 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case android.R.id.home: {
-                final Activity activity = getActivity();
-                if (activity != null) {
-                    activity.onBackPressed();
-                }
-                return true;
+        final int id = item.getItemId();
+        if (id == android.R.id.home) {
+            final Activity activity = getActivity();
+            if (activity != null) {
+                activity.onBackPressed();
             }
-            case R.id.menu_select: {
-                if (mListener != null) {
-                    mListener.onSelectGroupMembers();
-                }
-                return true;
+            return true;
+        } else if (id == R.id.menu_select) {
+            if (mListener != null) {
+                mListener.onSelectGroupMembers();
             }
+            return true;
         }
         return super.onOptionsItemSelected(item);
     }
diff --git a/src/com/android/contacts/list/HeaderEntryContactListAdapter.java b/src/com/android/contacts/list/HeaderEntryContactListAdapter.java
index 9822b79..43c2428 100644
--- a/src/com/android/contacts/list/HeaderEntryContactListAdapter.java
+++ b/src/com/android/contacts/list/HeaderEntryContactListAdapter.java
@@ -15,15 +15,13 @@
  */
 package com.android.contacts.list;
 
-import com.android.contacts.R;
-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.ViewGroup;
 
+import com.android.contacts.R;
+
 /**
  * Equivalent to DefaultContactListAdapter, except with an optional header entry that has the same
  * formatting as the other entries in the list.
@@ -66,7 +64,7 @@
             } else {
                 itemView = (ContactListItemView) convertView;
             }
-            itemView.setDrawableResource(R.drawable.ic_search_add_contact);
+            itemView.setDrawableResource(R.drawable.quantum_ic_person_add_vd_theme_24);
             itemView.setDisplayName(getContext().getResources().getString(
                     R.string.header_entry_contact_list_adapter_header_title));
             return itemView;
diff --git a/src/com/android/contacts/list/IndexerListAdapter.java b/src/com/android/contacts/list/IndexerListAdapter.java
new file mode 100644
index 0000000..b4ac2b4
--- /dev/null
+++ b/src/com/android/contacts/list/IndexerListAdapter.java
@@ -0,0 +1,226 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ListView;
+import android.widget.SectionIndexer;
+
+/**
+ * A list adapter that supports section indexer and a pinned header.
+ */
+public abstract class IndexerListAdapter extends PinnedHeaderListAdapter implements SectionIndexer {
+
+    protected Context mContext;
+    private SectionIndexer mIndexer;
+    private int mIndexedPartition = 0;
+    private boolean mSectionHeaderDisplayEnabled;
+    private View mHeader;
+
+    /**
+     * An item view is displayed differently depending on whether it is placed
+     * at the beginning, middle or end of a section. It also needs to know the
+     * section header when it is at the beginning of a section. This object
+     * captures all this configuration.
+     */
+    public static final class Placement {
+        private int position = ListView.INVALID_POSITION;
+        public boolean firstInSection;
+        public boolean lastInSection;
+        public String sectionHeader;
+
+        public void invalidate() {
+            position = ListView.INVALID_POSITION;
+        }
+    }
+
+    private Placement mPlacementCache = new Placement();
+
+    /**
+     * Constructor.
+     */
+    public IndexerListAdapter(Context context) {
+        super(context);
+        mContext = context;
+    }
+
+    /**
+     * Creates a section header view that will be pinned at the top of the list
+     * as the user scrolls.
+     */
+    protected abstract View createPinnedSectionHeaderView(Context context, ViewGroup parent);
+
+    /**
+     * Sets the title in the pinned header as the user scrolls.
+     */
+    protected abstract void setPinnedSectionTitle(View pinnedHeaderView, String title);
+
+    public boolean isSectionHeaderDisplayEnabled() {
+        return mSectionHeaderDisplayEnabled;
+    }
+
+    public void setSectionHeaderDisplayEnabled(boolean flag) {
+        this.mSectionHeaderDisplayEnabled = flag;
+    }
+
+    public int getIndexedPartition() {
+        return mIndexedPartition;
+    }
+
+    public void setIndexedPartition(int partition) {
+        this.mIndexedPartition = partition;
+    }
+
+    public SectionIndexer getIndexer() {
+        return mIndexer;
+    }
+
+    public void setIndexer(SectionIndexer indexer) {
+        mIndexer = indexer;
+        mPlacementCache.invalidate();
+    }
+
+    public Object[] getSections() {
+        if (mIndexer == null) {
+            return new String[] { " " };
+        } else {
+            return mIndexer.getSections();
+        }
+    }
+
+    /**
+     * @return relative position of the section in the indexed partition
+     */
+    public int getPositionForSection(int sectionIndex) {
+        if (mIndexer == null) {
+            return -1;
+        }
+
+        return mIndexer.getPositionForSection(sectionIndex);
+    }
+
+    /**
+     * @param position relative position in the indexed partition
+     */
+    public int getSectionForPosition(int position) {
+        if (mIndexer == null) {
+            return -1;
+        }
+
+        return mIndexer.getSectionForPosition(position);
+    }
+
+    @Override
+    public int getPinnedHeaderCount() {
+        if (isSectionHeaderDisplayEnabled()) {
+            return super.getPinnedHeaderCount() + 1;
+        } else {
+            return super.getPinnedHeaderCount();
+        }
+    }
+
+    @Override
+    public View getPinnedHeaderView(int viewIndex, View convertView, ViewGroup parent) {
+        if (isSectionHeaderDisplayEnabled() && viewIndex == getPinnedHeaderCount() - 1) {
+            if (mHeader == null) {
+                mHeader = createPinnedSectionHeaderView(mContext, parent);
+            }
+            return mHeader;
+        } else {
+            return super.getPinnedHeaderView(viewIndex, convertView, parent);
+        }
+    }
+
+    @Override
+    public void configurePinnedHeaders(PinnedHeaderListView listView) {
+        super.configurePinnedHeaders(listView);
+
+        if (!isSectionHeaderDisplayEnabled()) {
+            return;
+        }
+
+        int index = getPinnedHeaderCount() - 1;
+        if (mIndexer == null || getCount() == 0) {
+            listView.setHeaderInvisible(index, false);
+        } else {
+            int listPosition = listView.getPositionAt(listView.getTotalTopPinnedHeaderHeight());
+            int position = listPosition - listView.getHeaderViewsCount();
+
+            int section = -1;
+            int partition = getPartitionForPosition(position);
+            if (partition == mIndexedPartition) {
+                int offset = getOffsetInPartition(position);
+                if (offset != -1) {
+                    section = getSectionForPosition(offset);
+                }
+            }
+
+            if (section == -1) {
+                listView.setHeaderInvisible(index, false);
+            } else {
+                View topChild = listView.getChildAt(listPosition);
+                if (topChild != null) {
+                    // Match the pinned header's height to the height of the list item.
+                    mHeader.setMinimumHeight(topChild.getMeasuredHeight());
+                }
+                setPinnedSectionTitle(mHeader, (String)mIndexer.getSections()[section]);
+
+                // Compute the item position where the current partition begins
+                int partitionStart = getPositionForPartition(mIndexedPartition);
+                if (hasHeader(mIndexedPartition)) {
+                    partitionStart++;
+                }
+
+                // Compute the item position where the next section begins
+                int nextSectionPosition = partitionStart + getPositionForSection(section + 1);
+                boolean isLastInSection = position == nextSectionPosition - 1;
+                listView.setFadingHeader(index, listPosition, isLastInSection);
+            }
+        }
+    }
+
+    /**
+     * Computes the item's placement within its section and populates the {@code placement}
+     * object accordingly.  Please note that the returned object is volatile and should be
+     * copied if the result needs to be used later.
+     */
+    public Placement getItemPlacementInSection(int position) {
+        if (mPlacementCache.position == position) {
+            return mPlacementCache;
+        }
+
+        mPlacementCache.position = position;
+        if (isSectionHeaderDisplayEnabled()) {
+            int section = getSectionForPosition(position);
+            if (section != -1 && getPositionForSection(section) == position) {
+                mPlacementCache.firstInSection = true;
+                mPlacementCache.sectionHeader = (String)getSections()[section];
+            } else {
+                mPlacementCache.firstInSection = false;
+                mPlacementCache.sectionHeader = null;
+            }
+
+            mPlacementCache.lastInSection = (getPositionForSection(section + 1) - 1 == position);
+        } else {
+            mPlacementCache.firstInSection = false;
+            mPlacementCache.lastInSection = false;
+            mPlacementCache.sectionHeader = null;
+        }
+        return mPlacementCache;
+    }
+}
diff --git a/src/com/android/contacts/list/JoinContactListAdapter.java b/src/com/android/contacts/list/JoinContactListAdapter.java
index f08fcbb..82da6f7 100644
--- a/src/com/android/contacts/list/JoinContactListAdapter.java
+++ b/src/com/android/contacts/list/JoinContactListAdapter.java
@@ -31,10 +31,7 @@
 import android.widget.TextView;
 
 import com.android.contacts.R;
-import com.android.contacts.common.list.ContactListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.DirectoryListLoader;
-import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.preference.ContactsPreferences;
 
 public class JoinContactListAdapter extends ContactListAdapter {
 
diff --git a/src/com/android/contacts/list/JoinContactListFragment.java b/src/com/android/contacts/list/JoinContactListFragment.java
index d827eb5..998f593 100644
--- a/src/com/android/contacts/list/JoinContactListFragment.java
+++ b/src/com/android/contacts/list/JoinContactListFragment.java
@@ -32,10 +32,8 @@
 import android.widget.TextView;
 
 import com.android.contacts.R;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.logging.ListEvent;
 import com.android.contacts.list.JoinContactLoader.JoinContactLoaderResult;
+import com.android.contacts.logging.ListEvent;
 
 /**
  * Fragment for the Join Contact list.
diff --git a/src/com/android/contacts/list/LegacyContactListAdapter.java b/src/com/android/contacts/list/LegacyContactListAdapter.java
index 837991b..a2f98de 100644
--- a/src/com/android/contacts/list/LegacyContactListAdapter.java
+++ b/src/com/android/contacts/list/LegacyContactListAdapter.java
@@ -24,9 +24,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-
 /**
  * A cursor adapter for the People.CONTENT_TYPE content type.
  */
diff --git a/src/com/android/contacts/list/LegacyPhoneNumberListAdapter.java b/src/com/android/contacts/list/LegacyPhoneNumberListAdapter.java
index b5c96df..63df215 100644
--- a/src/com/android/contacts/list/LegacyPhoneNumberListAdapter.java
+++ b/src/com/android/contacts/list/LegacyPhoneNumberListAdapter.java
@@ -26,9 +26,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-
 /**
  * A cursor adapter for the Phones.CONTENT_TYPE content type.
  */
diff --git a/src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java b/src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java
index 5b6e11f..10d189c 100644
--- a/src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java
+++ b/src/com/android/contacts/list/LegacyPhoneNumberPickerFragment.java
@@ -19,10 +19,6 @@
 import android.net.Uri;
 import android.util.Log;
 
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.PhoneNumberPickerFragment;
-
 /**
  * Version of PhoneNumberPickerFragment used specifically for legacy support.
  */
diff --git a/src/com/android/contacts/list/LegacyPostalAddressListAdapter.java b/src/com/android/contacts/list/LegacyPostalAddressListAdapter.java
index 4c598cd..c3fa57d 100644
--- a/src/com/android/contacts/list/LegacyPostalAddressListAdapter.java
+++ b/src/com/android/contacts/list/LegacyPostalAddressListAdapter.java
@@ -26,9 +26,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-
 /**
  * A cursor adapter for the ContactMethods.CONTENT_TYPE content type.
  */
diff --git a/src/com/android/contacts/list/MultiSelectContactsListFragment.java b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
index 7a6a64a..67c937c 100644
--- a/src/com/android/contacts/list/MultiSelectContactsListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
@@ -35,17 +35,15 @@
 
 import com.android.contacts.R;
 import com.android.contacts.activities.ActionBarAdapter;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.MultiSelectEntryContactListAdapter;
-import com.android.contacts.common.list.MultiSelectEntryContactListAdapter.SelectedContactsListener;
-import com.android.contacts.common.logging.ListEvent.ActionType;
-import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.logging.SearchState;
-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.model.account.GoogleAccountType;
 import com.android.contacts.group.GroupMembersFragment;
+import com.android.contacts.list.MultiSelectEntryContactListAdapter.SelectedContactsListener;
+import com.android.contacts.logging.ListEvent.ActionType;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.logging.SearchState;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/contacts/list/MultiSelectEmailAddressesListAdapter.java b/src/com/android/contacts/list/MultiSelectEmailAddressesListAdapter.java
index 7f4bb4b..ff2cbaf 100644
--- a/src/com/android/contacts/list/MultiSelectEmailAddressesListAdapter.java
+++ b/src/com/android/contacts/list/MultiSelectEmailAddressesListAdapter.java
@@ -23,17 +23,13 @@
 import android.net.Uri.Builder;
 import android.os.Bundle;
 import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
 import android.text.TextUtils;
 import android.view.View;
 import android.view.ViewGroup;
 
-import android.provider.ContactsContract.CommonDataKinds.Email;
-
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.MultiSelectEntryContactListAdapter;
-import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.contacts.group.GroupUtil;
+import com.android.contacts.preference.ContactsPreferences;
 
 /** Email addresses multi-select cursor adapter. */
 public class MultiSelectEmailAddressesListAdapter extends MultiSelectEntryContactListAdapter {
diff --git a/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java b/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java
index 64489a0..6f6a3c7 100644
--- a/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectEmailAddressesListFragment.java
@@ -26,8 +26,8 @@
 import android.view.ViewGroup;
 
 import com.android.contacts.R;
-import com.android.contacts.common.logging.ListEvent;
 import com.android.contacts.group.GroupUtil;
+import com.android.contacts.logging.ListEvent;
 
 import java.util.List;
 import java.util.TreeSet;
@@ -77,18 +77,16 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch(item.getItemId()) {
-            case R.id.menu_send: {
-                final String scheme = getActivity().getIntent().getStringExtra(
-                        UiIntentActions.SELECTION_SEND_SCHEME);
-                final String title= getActivity().getIntent().getStringExtra(
-                        UiIntentActions.SELECTION_SEND_TITLE);
-                final List<String> items = GroupUtil.getSendToDataForIds(
-                        getActivity(), getAdapter().getSelectedContactIdsArray(), scheme);
-                final String list = TextUtils.join(",", items);
-                GroupUtil.startSendToSelectionActivity(this, list, scheme, title);
-                return true;
-            }
+        if (item.getItemId() == R.id.menu_send) {
+            final String scheme = getActivity().getIntent().getStringExtra(
+                    UiIntentActions.SELECTION_SEND_SCHEME);
+            final String title = getActivity().getIntent().getStringExtra(
+                    UiIntentActions.SELECTION_SEND_TITLE);
+            final List<String> items = GroupUtil.getSendToDataForIds(
+                    getActivity(), getAdapter().getSelectedContactIdsArray(), scheme);
+            final String list = TextUtils.join(",", items);
+            GroupUtil.startSendToSelectionActivity(this, list, scheme, title);
+            return true;
         }
         return super.onOptionsItemSelected(item);
     }
@@ -137,6 +135,6 @@
 
     @Override
     protected View inflateView(LayoutInflater inflater, ViewGroup container) {
-        return inflater.inflate(com.android.contacts.common.R.layout.contact_list_content, null);
+        return inflater.inflate(com.android.contacts.R.layout.contact_list_content, null);
     }
 }
diff --git a/src/com/android/contacts/list/MultiSelectEntryContactListAdapter.java b/src/com/android/contacts/list/MultiSelectEntryContactListAdapter.java
new file mode 100644
index 0000000..a0b4f3c
--- /dev/null
+++ b/src/com/android/contacts/list/MultiSelectEntryContactListAdapter.java
@@ -0,0 +1,195 @@
+/*
+ * 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 android.content.Context;
+import android.database.Cursor;
+import android.provider.ContactsContract;
+import android.view.View;
+import android.widget.CheckBox;
+
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.group.GroupUtil;
+
+import java.util.TreeSet;
+
+/**
+ * An extension of the default contact adapter that adds checkboxes and the ability
+ * to select multiple contacts.
+ */
+public abstract class MultiSelectEntryContactListAdapter extends ContactEntryListAdapter {
+
+    private SelectedContactsListener mSelectedContactsListener;
+    private DeleteContactListener mDeleteContactListener;
+    private TreeSet<Long> mSelectedContactIds = new TreeSet<>();
+    private boolean mDisplayCheckBoxes;
+    private final int mContactIdColumnIndex;
+
+    public interface SelectedContactsListener {
+        void onSelectedContactsChanged();
+    }
+
+    public interface DeleteContactListener {
+        void onContactDeleteClicked(int position);
+    }
+
+    /**
+     * @param contactIdColumnIndex the column index of the contact ID in the underlying cursor;
+     *         it is passed in so that this adapter can support different kinds of contact
+     *         lists (e.g. aggregate contacts or raw contacts).
+     */
+    public MultiSelectEntryContactListAdapter(Context context, int contactIdColumnIndex) {
+        super(context);
+        mContactIdColumnIndex = contactIdColumnIndex;
+    }
+
+    /**
+     * Returns the column index of the contact ID in the underlying cursor; the contact ID
+     * retrieved using this index is the value that is selected by this adapter (and returned
+     * by {@link #getSelectedContactIds}).
+     */
+    public int getContactColumnIdIndex() {
+        return mContactIdColumnIndex;
+    }
+
+    public DeleteContactListener getDeleteContactListener() {
+        return mDeleteContactListener;
+    }
+
+    public void setDeleteContactListener(DeleteContactListener deleteContactListener) {
+        mDeleteContactListener = deleteContactListener;
+    }
+
+    public void setSelectedContactsListener(SelectedContactsListener listener) {
+        mSelectedContactsListener = listener;
+    }
+
+    /**
+     * Returns set of selected contacts.
+     */
+    public TreeSet<Long> getSelectedContactIds() {
+        return mSelectedContactIds;
+    }
+
+    public boolean hasSelectedItems() {
+        return mSelectedContactIds.size() > 0;
+    }
+
+    /**
+     * Returns the selected contacts as an array.
+     */
+    public long[] getSelectedContactIdsArray() {
+        return GroupUtil.convertLongSetToLongArray(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) {
+        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
+    public long getItemId(int position) {
+        Cursor cursor = (Cursor) getItem(position);
+        if (cursor != null) {
+            return cursor.getLong(getContactColumnIdIndex());
+        }
+        return 0;
+    }
+
+    @Override
+    protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+        super.bindView(itemView, partition, cursor, position);
+        final ContactListItemView view = (ContactListItemView) itemView;
+        bindViewId(view, cursor, getContactColumnIdIndex());
+        bindCheckBox(view, cursor, partition == ContactsContract.Directory.DEFAULT);
+    }
+
+    /**
+      * Loads the photo for the photo view.
+      * @param photoIdColumn Index of the photo id column
+      * @param lookUpKeyColumn Index of the lookup key column
+      * @param displayNameColumn Index of the display name column
+      */
+    protected void bindPhoto(final ContactListItemView view, final Cursor cursor,
+           final int photoIdColumn, final int lookUpKeyColumn, final int displayNameColumn) {
+        final long photoId = cursor.isNull(photoIdColumn)
+            ? 0 : cursor.getLong(photoIdColumn);
+        final ContactPhotoManager.DefaultImageRequest imageRequest = photoId == 0
+            ? getDefaultImageRequestFromCursor(cursor, displayNameColumn,
+            lookUpKeyColumn)
+            : null;
+        getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, false, getCircularPhotos(),
+                imageRequest);
+    }
+
+    private void bindCheckBox(ContactListItemView view, Cursor cursor, boolean isLocalDirectory) {
+        // Disable clicking on all contacts from remote directories when showing check boxes. We do
+        // this by telling the view to handle clicking itself.
+        view.setClickable(!isLocalDirectory && mDisplayCheckBoxes);
+        // Only show checkboxes if mDisplayCheckBoxes is enabled. Also, never show the
+        // checkbox for other directory contacts except local directory.
+        if (!mDisplayCheckBoxes || !isLocalDirectory) {
+            view.hideCheckBox();
+            return;
+        }
+        final CheckBox checkBox = view.getCheckBox();
+        final long contactId = cursor.getLong(mContactIdColumnIndex);
+        checkBox.setChecked(mSelectedContactIds.contains(contactId));
+        checkBox.setClickable(false);
+        checkBox.setTag(contactId);
+    }
+}
diff --git a/src/com/android/contacts/list/MultiSelectPhoneNumbersListAdapter.java b/src/com/android/contacts/list/MultiSelectPhoneNumbersListAdapter.java
index 6bf6d5e..30d5429 100644
--- a/src/com/android/contacts/list/MultiSelectPhoneNumbersListAdapter.java
+++ b/src/com/android/contacts/list/MultiSelectPhoneNumbersListAdapter.java
@@ -23,17 +23,13 @@
 import android.net.Uri.Builder;
 import android.os.Bundle;
 import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
 import android.text.TextUtils;
 import android.view.View;
 import android.view.ViewGroup;
 
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.MultiSelectEntryContactListAdapter;
-import com.android.contacts.common.preference.ContactsPreferences;
 import com.android.contacts.group.GroupUtil;
+import com.android.contacts.preference.ContactsPreferences;
 
 /** Phone Numbers multi-select cursor adapter. */
 public class MultiSelectPhoneNumbersListAdapter extends MultiSelectEntryContactListAdapter {
diff --git a/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java b/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java
index 96a1de6..2b7021e 100644
--- a/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectPhoneNumbersListFragment.java
@@ -26,8 +26,8 @@
 import android.view.ViewGroup;
 
 import com.android.contacts.R;
-import com.android.contacts.common.logging.ListEvent;
 import com.android.contacts.group.GroupUtil;
+import com.android.contacts.logging.ListEvent;
 
 import java.util.List;
 import java.util.TreeSet;
@@ -77,18 +77,16 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch(item.getItemId()) {
-            case R.id.menu_send: {
-                final String scheme = getActivity().getIntent().getStringExtra(
-                        UiIntentActions.SELECTION_SEND_SCHEME);
-                final String title= getActivity().getIntent().getStringExtra(
-                        UiIntentActions.SELECTION_SEND_TITLE);
-                final List<String> items = GroupUtil.getSendToDataForIds(
-                        getActivity(), getAdapter().getSelectedContactIdsArray(), scheme);
-                final String list = TextUtils.join(",", items);
-                GroupUtil.startSendToSelectionActivity(this, list, scheme, title);
-                return true;
-            }
+        if (item.getItemId() == R.id.menu_send) {
+            final String scheme = getActivity().getIntent().getStringExtra(
+                    UiIntentActions.SELECTION_SEND_SCHEME);
+            final String title = getActivity().getIntent().getStringExtra(
+                    UiIntentActions.SELECTION_SEND_TITLE);
+            final List<String> items = GroupUtil.getSendToDataForIds(
+                    getActivity(), getAdapter().getSelectedContactIdsArray(), scheme);
+            final String list = TextUtils.join(",", items);
+            GroupUtil.startSendToSelectionActivity(this, list, scheme, title);
+            return true;
         }
         return super.onOptionsItemSelected(item);
     }
@@ -122,6 +120,6 @@
 
     @Override
     protected View inflateView(LayoutInflater inflater, ViewGroup container) {
-        return inflater.inflate(com.android.contacts.common.R.layout.contact_list_content, null);
+        return inflater.inflate(com.android.contacts.R.layout.contact_list_content, null);
     }
 }
diff --git a/src/com/android/contacts/list/OnPhoneNumberPickerActionListener.java b/src/com/android/contacts/list/OnPhoneNumberPickerActionListener.java
new file mode 100644
index 0000000..616562c
--- /dev/null
+++ b/src/com/android/contacts/list/OnPhoneNumberPickerActionListener.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.app.ActionBar;
+import android.content.Intent;
+import android.net.Uri;
+
+/**
+ * Action callbacks that can be sent by a phone number picker.
+ */
+public interface OnPhoneNumberPickerActionListener  {
+    public static final int CALL_INITIATION_UNKNOWN = 0;
+
+    /**
+     * Returns the selected phone number uri to the requester.
+     */
+    void onPickDataUri(Uri dataUri, boolean isVideoCall, int callInitiationType);
+
+    /**
+     * Returns the specified phone number to the requester.
+     * May call the specified phone number, either as an audio or video call.
+     */
+    void onPickPhoneNumber(String phoneNumber, boolean isVideoCall, int callInitiationType);
+
+    /**
+     * Returns the selected number as a shortcut intent.
+     */
+    void onShortcutIntentCreated(Intent intent);
+
+    /**
+     * Called when home menu in {@link ActionBar} is clicked by the user.
+     */
+    void onHomeInActionBarSelected();
+}
diff --git a/src/com/android/contacts/list/PhoneNumberListAdapter.java b/src/com/android/contacts/list/PhoneNumberListAdapter.java
new file mode 100644
index 0000000..d459d47
--- /dev/null
+++ b/src/com/android/contacts/list/PhoneNumberListAdapter.java
@@ -0,0 +1,657 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.database.Cursor;
+import android.net.Uri;
+import android.net.Uri.Builder;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Callable;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.CallUtil;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.GeoUtil;
+import com.android.contacts.R;
+import com.android.contacts.compat.CallableCompat;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.DirectoryCompat;
+import com.android.contacts.compat.PhoneCompat;
+import com.android.contacts.extensions.ExtendedPhoneDirectoriesManager;
+import com.android.contacts.extensions.ExtensionsFactory;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.Constants;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A cursor adapter for the {@link Phone#CONTENT_ITEM_TYPE} and
+ * {@link SipAddress#CONTENT_ITEM_TYPE}.
+ *
+ * By default this adapter just handles phone numbers. When {@link #setUseCallableUri(boolean)} is
+ * called with "true", this adapter starts handling SIP addresses too, by using {@link Callable}
+ * API instead of {@link Phone}.
+ */
+public class PhoneNumberListAdapter extends ContactEntryListAdapter {
+
+    private static final String TAG = PhoneNumberListAdapter.class.getSimpleName();
+
+    public interface Listener {
+        void onVideoCallIconClicked(int position);
+    }
+
+    // A list of extended directories to add to the directories from the database
+    private final List<DirectoryPartition> mExtendedDirectories;
+
+    // Extended directories will have ID's that are higher than any of the id's from the database,
+    // so that we can identify them and set them up properly. If no extended directories
+    // exist, this will be Long.MAX_VALUE
+    private long mFirstExtendedDirectoryId = Long.MAX_VALUE;
+
+    public static class PhoneQuery {
+
+        /**
+         * Optional key used as part of a JSON lookup key to specify an analytics category
+         * associated with the row.
+         */
+        public static final String ANALYTICS_CATEGORY = "analytics_category";
+
+        /**
+         * Optional key used as part of a JSON lookup key to specify an analytics action associated
+         * with the row.
+         */
+        public static final String ANALYTICS_ACTION = "analytics_action";
+
+        /**
+         * Optional key used as part of a JSON lookup key to specify an analytics value associated
+         * with the row.
+         */
+        public static final String ANALYTICS_VALUE = "analytics_value";
+
+        public static final String[] PROJECTION_PRIMARY_INTERNAL = new String[] {
+            Phone._ID,                          // 0
+            Phone.TYPE,                         // 1
+            Phone.LABEL,                        // 2
+            Phone.NUMBER,                       // 3
+            Phone.CONTACT_ID,                   // 4
+            Phone.LOOKUP_KEY,                   // 5
+            Phone.PHOTO_ID,                     // 6
+            Phone.DISPLAY_NAME_PRIMARY,         // 7
+            Phone.PHOTO_THUMBNAIL_URI,          // 8
+        };
+
+        public static final String[] PROJECTION_PRIMARY;
+
+        static {
+            final List<String> projectionList = Lists.newArrayList(PROJECTION_PRIMARY_INTERNAL);
+            if (CompatUtils.isMarshmallowCompatible()) {
+                projectionList.add(Phone.CARRIER_PRESENCE); // 9
+            }
+            PROJECTION_PRIMARY = projectionList.toArray(new String[projectionList.size()]);
+        }
+
+        public static final String[] PROJECTION_ALTERNATIVE_INTERNAL = new String[] {
+            Phone._ID,                          // 0
+            Phone.TYPE,                         // 1
+            Phone.LABEL,                        // 2
+            Phone.NUMBER,                       // 3
+            Phone.CONTACT_ID,                   // 4
+            Phone.LOOKUP_KEY,                   // 5
+            Phone.PHOTO_ID,                     // 6
+            Phone.DISPLAY_NAME_ALTERNATIVE,     // 7
+            Phone.PHOTO_THUMBNAIL_URI,          // 8
+        };
+
+        public static final String[] PROJECTION_ALTERNATIVE;
+
+        static {
+            final List<String> projectionList = Lists.newArrayList(PROJECTION_ALTERNATIVE_INTERNAL);
+            if (CompatUtils.isMarshmallowCompatible()) {
+                projectionList.add(Phone.CARRIER_PRESENCE); // 9
+            }
+            PROJECTION_ALTERNATIVE = projectionList.toArray(new String[projectionList.size()]);
+        }
+
+        public static final int PHONE_ID                = 0;
+        public static final int PHONE_TYPE              = 1;
+        public static final int PHONE_LABEL             = 2;
+        public static final int PHONE_NUMBER            = 3;
+        public static final int CONTACT_ID              = 4;
+        public static final int LOOKUP_KEY              = 5;
+        public static final int PHOTO_ID                = 6;
+        public static final int DISPLAY_NAME            = 7;
+        public static final int PHOTO_URI               = 8;
+        public static final int CARRIER_PRESENCE        = 9;
+    }
+
+    private static final String IGNORE_NUMBER_TOO_LONG_CLAUSE =
+            "length(" + Phone.NUMBER + ") < 1000";
+
+    private final CharSequence mUnknownNameText;
+    private final String mCountryIso;
+
+    private ContactListItemView.PhotoPosition mPhotoPosition;
+
+    private boolean mUseCallableUri;
+
+    private Listener mListener;
+
+    private boolean mIsVideoEnabled;
+    private boolean mIsPresenceEnabled;
+
+    public PhoneNumberListAdapter(Context context) {
+        super(context);
+        setDefaultFilterHeaderText(R.string.list_filter_phones);
+        mUnknownNameText = context.getText(android.R.string.unknownName);
+        mCountryIso = GeoUtil.getCurrentCountryIso(context);
+
+        final ExtendedPhoneDirectoriesManager manager
+                = ExtensionsFactory.getExtendedPhoneDirectoriesManager();
+        if (manager != null) {
+            mExtendedDirectories = manager.getExtendedDirectories(mContext);
+        } else {
+            // Empty list to avoid sticky NPE's
+            mExtendedDirectories = new ArrayList<DirectoryPartition>();
+        }
+
+        int videoCapabilities = CallUtil.getVideoCallingAvailability(context);
+        mIsVideoEnabled = (videoCapabilities & CallUtil.VIDEO_CALLING_ENABLED) != 0;
+        mIsPresenceEnabled = (videoCapabilities & CallUtil.VIDEO_CALLING_PRESENCE) != 0;
+    }
+
+    protected CharSequence getUnknownNameText() {
+        return mUnknownNameText;
+    }
+
+    @Override
+    public void configureLoader(CursorLoader loader, long directoryId) {
+        String query = getQueryString();
+        if (query == null) {
+            query = "";
+        }
+        if (isExtendedDirectory(directoryId)) {
+            final DirectoryPartition directory = getExtendedDirectoryFromId(directoryId);
+            final String contentUri = directory.getContentUri();
+            if (contentUri == null) {
+                throw new IllegalStateException("Extended directory must have a content URL: "
+                        + directory);
+            }
+            final Builder builder = Uri.parse(contentUri).buildUpon();
+            builder.appendPath(query);
+            builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
+                    String.valueOf(getDirectoryResultLimit(directory)));
+            loader.setUri(builder.build());
+            loader.setProjection(PhoneQuery.PROJECTION_PRIMARY);
+        } else {
+            final boolean isRemoteDirectoryQuery
+                    = DirectoryCompat.isRemoteDirectoryId(directoryId);
+            final Builder builder;
+            if (isSearchMode()) {
+                final Uri baseUri;
+                if (isRemoteDirectoryQuery) {
+                    baseUri = PhoneCompat.getContentFilterUri();
+                } else if (mUseCallableUri) {
+                    baseUri = CallableCompat.getContentFilterUri();
+                } else {
+                    baseUri = PhoneCompat.getContentFilterUri();
+                }
+                builder = baseUri.buildUpon();
+                builder.appendPath(query);      // Builder will encode the query
+                builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
+                        String.valueOf(directoryId));
+                if (isRemoteDirectoryQuery) {
+                    builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
+                            String.valueOf(getDirectoryResultLimit(getDirectoryById(directoryId))));
+                }
+            } else {
+                Uri baseUri = mUseCallableUri ? Callable.CONTENT_URI : Phone.CONTENT_URI;
+                builder = baseUri.buildUpon().appendQueryParameter(
+                        ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT));
+                if (isSectionHeaderDisplayEnabled()) {
+                    builder.appendQueryParameter(Phone.EXTRA_ADDRESS_BOOK_INDEX, "true");
+                }
+                applyFilter(loader, builder, directoryId, getFilter());
+            }
+
+            // Ignore invalid phone numbers that are too long. These can potentially cause freezes
+            // in the UI and there is no reason to display them.
+            final String prevSelection = loader.getSelection();
+            final String newSelection;
+            if (!TextUtils.isEmpty(prevSelection)) {
+                newSelection = prevSelection + " AND " + IGNORE_NUMBER_TOO_LONG_CLAUSE;
+            } else {
+                newSelection = IGNORE_NUMBER_TOO_LONG_CLAUSE;
+            }
+            loader.setSelection(newSelection);
+
+            // Remove duplicates when it is possible.
+            builder.appendQueryParameter(ContactsContract.REMOVE_DUPLICATE_ENTRIES, "true");
+            loader.setUri(builder.build());
+
+            // TODO a projection that includes the search snippet
+            if (getContactNameDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+                loader.setProjection(PhoneQuery.PROJECTION_PRIMARY);
+            } else {
+                loader.setProjection(PhoneQuery.PROJECTION_ALTERNATIVE);
+            }
+
+            if (getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
+                loader.setSortOrder(Phone.SORT_KEY_PRIMARY);
+            } else {
+                loader.setSortOrder(Phone.SORT_KEY_ALTERNATIVE);
+            }
+        }
+    }
+
+    protected boolean isExtendedDirectory(long directoryId) {
+        return directoryId >= mFirstExtendedDirectoryId;
+    }
+
+    private DirectoryPartition getExtendedDirectoryFromId(long directoryId) {
+        final int directoryIndex = (int) (directoryId - mFirstExtendedDirectoryId);
+        return mExtendedDirectories.get(directoryIndex);
+    }
+
+    /**
+     * Configure {@code loader} and {@code uriBuilder} according to {@code directoryId} and {@code
+     * filter}.
+     */
+    private void applyFilter(CursorLoader loader, Uri.Builder uriBuilder, long directoryId,
+            ContactListFilter filter) {
+        if (filter == null || directoryId != Directory.DEFAULT) {
+            return;
+        }
+
+        final StringBuilder selection = new StringBuilder();
+        final List<String> selectionArgs = new ArrayList<String>();
+
+        switch (filter.filterType) {
+            case ContactListFilter.FILTER_TYPE_CUSTOM: {
+                selection.append(Contacts.IN_VISIBLE_GROUP + "=1");
+                selection.append(" AND " + Contacts.HAS_PHONE_NUMBER + "=1");
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_ACCOUNT: {
+                filter.addAccountQueryParameterToUrl(uriBuilder);
+                break;
+            }
+            case ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS:
+            case ContactListFilter.FILTER_TYPE_DEFAULT:
+                break; // No selection needed.
+            case ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY:
+                break; // This adapter is always "phone only", so no selection needed either.
+            default:
+                Log.w(TAG, "Unsupported filter type came " +
+                        "(type: " + filter.filterType + ", toString: " + filter + ")" +
+                        " showing all contacts.");
+                // No selection.
+                break;
+        }
+        loader.setSelection(selection.toString());
+        loader.setSelectionArgs(selectionArgs.toArray(new String[0]));
+    }
+
+    @Override
+    public String getContactDisplayName(int position) {
+        return ((Cursor) getItem(position)).getString(PhoneQuery.DISPLAY_NAME);
+    }
+
+    public String getPhoneNumber(int position) {
+        final Cursor item = (Cursor)getItem(position);
+        return item != null ? item.getString(PhoneQuery.PHONE_NUMBER) : null;
+    }
+
+    /**
+     * Builds a {@link Data#CONTENT_URI} for the given cursor position.
+     *
+     * @return Uri for the data. may be null if the cursor is not ready.
+     */
+    public Uri getDataUri(int position) {
+        final int partitionIndex = getPartitionForPosition(position);
+        final Cursor item = (Cursor)getItem(position);
+        return item != null ? getDataUri(partitionIndex, item) : null;
+    }
+
+    public Uri getDataUri(int partitionIndex, Cursor cursor) {
+        final long directoryId =
+                ((DirectoryPartition)getPartition(partitionIndex)).getDirectoryId();
+        if (DirectoryCompat.isRemoteDirectoryId(directoryId)) {
+            return null;
+        } else if (DirectoryCompat.isEnterpriseDirectoryId(directoryId)) {
+            /*
+             * ContentUris.withAppendedId(Data.CONTENT_URI, phoneId), is invalid if
+             * isEnterpriseDirectoryId returns true, because the uri itself will fail since the
+             * ContactsProvider in Android Framework currently doesn't support it. return null until
+             * Android framework has enterprise version of Data.CONTENT_URI
+             */
+            return null;
+        } else {
+            final long phoneId = cursor.getLong(PhoneQuery.PHONE_ID);
+            return ContentUris.withAppendedId(Data.CONTENT_URI, phoneId);
+        }
+    }
+
+    /**
+     * Retrieves the lookup key for the given cursor position.
+     *
+     * @param position The cursor position.
+     * @return The lookup key.
+     */
+    public String getLookupKey(int position) {
+        final Cursor item = (Cursor)getItem(position);
+        return item != null ? item.getString(PhoneQuery.LOOKUP_KEY) : null;
+    }
+
+    @Override
+    protected ContactListItemView newView(
+            Context context, int partition, Cursor cursor, int position, ViewGroup parent) {
+        ContactListItemView view = super.newView(context, partition, cursor, position, parent);
+        view.setUnknownNameText(mUnknownNameText);
+        view.setQuickContactEnabled(isQuickContactEnabled());
+        view.setPhotoPosition(mPhotoPosition);
+        return view;
+    }
+
+    protected void setHighlight(ContactListItemView view, Cursor cursor) {
+        view.setHighlightedPrefix(isSearchMode() ? getUpperCaseQueryString() : null);
+    }
+
+    // Override default, which would return number of phone numbers, so we
+    // instead return number of contacts.
+    @Override
+    protected int getResultCount(Cursor cursor) {
+        if (cursor == null) {
+            return 0;
+        }
+        cursor.moveToPosition(-1);
+        long curContactId = -1;
+        int numContacts = 0;
+        while(cursor.moveToNext()) {
+            final long contactId = cursor.getLong(PhoneQuery.CONTACT_ID);
+            if (contactId != curContactId) {
+                curContactId = contactId;
+                ++numContacts;
+            }
+        }
+        return numContacts;
+    }
+
+    @Override
+    protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+        super.bindView(itemView, partition, cursor, position);
+        ContactListItemView view = (ContactListItemView)itemView;
+
+        setHighlight(view, cursor);
+
+        // Look at elements before and after this position, checking if contact IDs are same.
+        // If they have one same contact ID, it means they can be grouped.
+        //
+        // In one group, only the first entry will show its photo and its name, and the other
+        // entries in the group show just their data (e.g. phone number, email address).
+        cursor.moveToPosition(position);
+        boolean isFirstEntry = true;
+        boolean showBottomDivider = true;
+        final long currentContactId = cursor.getLong(PhoneQuery.CONTACT_ID);
+        if (cursor.moveToPrevious() && !cursor.isBeforeFirst()) {
+            final long previousContactId = cursor.getLong(PhoneQuery.CONTACT_ID);
+            if (currentContactId == previousContactId) {
+                isFirstEntry = false;
+            }
+        }
+        cursor.moveToPosition(position);
+        if (cursor.moveToNext() && !cursor.isAfterLast()) {
+            final long nextContactId = cursor.getLong(PhoneQuery.CONTACT_ID);
+            if (currentContactId == nextContactId) {
+                // The following entry should be in the same group, which means we don't want a
+                // divider between them.
+                // TODO: we want a different divider than the divider between groups. Just hiding
+                // this divider won't be enough.
+                showBottomDivider = false;
+            }
+        }
+        cursor.moveToPosition(position);
+
+        bindViewId(view, cursor, PhoneQuery.PHONE_ID);
+
+        bindSectionHeaderAndDivider(view, position);
+        if (isFirstEntry) {
+            bindName(view, cursor);
+            if (isQuickContactEnabled()) {
+                bindQuickContact(view, partition, cursor, PhoneQuery.PHOTO_ID,
+                        PhoneQuery.PHOTO_URI, PhoneQuery.CONTACT_ID,
+                        PhoneQuery.LOOKUP_KEY, PhoneQuery.DISPLAY_NAME);
+            } else {
+                if (getDisplayPhotos()) {
+                    bindPhoto(view, partition, cursor);
+                }
+            }
+        } else {
+            unbindName(view);
+
+            view.removePhotoView(true, false);
+        }
+
+        final DirectoryPartition directory = (DirectoryPartition) getPartition(partition);
+        bindPhoneNumber(view, cursor, directory.isDisplayNumber(), position);
+    }
+
+    protected void bindPhoneNumber(ContactListItemView view, Cursor cursor, boolean displayNumber,
+            int position) {
+        CharSequence label = null;
+        if (displayNumber &&  !cursor.isNull(PhoneQuery.PHONE_TYPE)) {
+            final int type = cursor.getInt(PhoneQuery.PHONE_TYPE);
+            final String customLabel = cursor.getString(PhoneQuery.PHONE_LABEL);
+
+            // TODO cache
+            label = Phone.getTypeLabel(getContext().getResources(), type, customLabel);
+        }
+        view.setLabel(label);
+        final String text;
+        if (displayNumber) {
+            text = cursor.getString(PhoneQuery.PHONE_NUMBER);
+        } else {
+            // Display phone label. If that's null, display geocoded location for the number
+            final String phoneLabel = cursor.getString(PhoneQuery.PHONE_LABEL);
+            if (phoneLabel != null) {
+                text = phoneLabel;
+            } else {
+                final String phoneNumber = cursor.getString(PhoneQuery.PHONE_NUMBER);
+                text = GeoUtil.getGeocodedLocationFor(mContext, phoneNumber);
+            }
+        }
+        view.setPhoneNumber(text, mCountryIso);
+
+        if (CompatUtils.isVideoCompatible()) {
+            // Determine if carrier presence indicates the number supports video calling.
+            int carrierPresence = cursor.getInt(PhoneQuery.CARRIER_PRESENCE);
+            boolean isPresent = (carrierPresence & Phone.CARRIER_PRESENCE_VT_CAPABLE) != 0;
+
+            boolean isVideoIconShown = mIsVideoEnabled && (
+                    mIsPresenceEnabled && isPresent || !mIsPresenceEnabled);
+            view.setShowVideoCallIcon(isVideoIconShown, mListener, position);
+        }
+    }
+
+    protected void bindSectionHeaderAndDivider(final ContactListItemView view, int position) {
+        if (isSectionHeaderDisplayEnabled()) {
+            Placement placement = getItemPlacementInSection(position);
+            view.setSectionHeader(placement.firstInSection ? placement.sectionHeader : null);
+        } else {
+            view.setSectionHeader(null);
+        }
+    }
+
+    protected void bindName(final ContactListItemView view, Cursor cursor) {
+        view.showDisplayName(cursor, PhoneQuery.DISPLAY_NAME, getContactNameDisplayOrder());
+        // Note: we don't show phonetic names any more (see issue 5265330)
+    }
+
+    protected void unbindName(final ContactListItemView view) {
+        view.hideDisplayName();
+    }
+
+    @Override
+    protected void bindWorkProfileIcon(final ContactListItemView view, int partition) {
+        final DirectoryPartition directory = (DirectoryPartition) getPartition(partition);
+        final long directoryId = directory.getDirectoryId();
+        final long userType = ContactsUtils.determineUserType(directoryId, null);
+        // Work directory must not be a extended directory. An extended directory is custom
+        // directory in the app, but not a directory provided by framework. So it can't be
+        // USER_TYPE_WORK.
+        view.setWorkProfileIconEnabled(
+                !isExtendedDirectory(directoryId) && userType == ContactsUtils.USER_TYPE_WORK);
+    }
+
+    protected void bindPhoto(final ContactListItemView view, int partitionIndex, Cursor cursor) {
+        if (!isPhotoSupported(partitionIndex)) {
+            view.removePhotoView();
+            return;
+        }
+
+        long photoId = 0;
+        if (!cursor.isNull(PhoneQuery.PHOTO_ID)) {
+            photoId = cursor.getLong(PhoneQuery.PHOTO_ID);
+        }
+
+        if (photoId != 0) {
+            getPhotoLoader().loadThumbnail(view.getPhotoView(), photoId, false,
+                    getCircularPhotos(), null);
+        } else {
+            final String photoUriString = cursor.getString(PhoneQuery.PHOTO_URI);
+            final Uri photoUri = photoUriString == null ? null : Uri.parse(photoUriString);
+
+            DefaultImageRequest request = null;
+            if (photoUri == null) {
+                final String displayName = cursor.getString(PhoneQuery.DISPLAY_NAME);
+                final String lookupKey = cursor.getString(PhoneQuery.LOOKUP_KEY);
+                request = new DefaultImageRequest(displayName, lookupKey, getCircularPhotos());
+            }
+            getPhotoLoader().loadDirectoryPhoto(view.getPhotoView(), photoUri, false,
+                    getCircularPhotos(), request);
+        }
+    }
+
+    public void setPhotoPosition(ContactListItemView.PhotoPosition photoPosition) {
+        mPhotoPosition = photoPosition;
+    }
+
+    public ContactListItemView.PhotoPosition getPhotoPosition() {
+        return mPhotoPosition;
+    }
+
+    public void setUseCallableUri(boolean useCallableUri) {
+        mUseCallableUri = useCallableUri;
+    }
+
+    public boolean usesCallableUri() {
+        return mUseCallableUri;
+    }
+
+    /**
+     * Override base implementation to inject extended directories between local & remote
+     * directories. This is done in the following steps:
+     * 1. Call base implementation to add directories from the cursor.
+     * 2. Iterate all base directories and establish the following information:
+     *   a. The highest directory id so that we can assign unused id's to the extended directories.
+     *   b. The index of the last non-remote directory. This is where we will insert extended
+     *      directories.
+     * 3. Iterate the extended directories and for each one, assign an ID and insert it in the
+     *    proper location.
+     */
+    @Override
+    public void changeDirectories(Cursor cursor) {
+        super.changeDirectories(cursor);
+        if (getDirectorySearchMode() == DirectoryListLoader.SEARCH_MODE_NONE) {
+            return;
+        }
+        final int numExtendedDirectories = mExtendedDirectories.size();
+        if (getPartitionCount() == cursor.getCount() + numExtendedDirectories) {
+            // already added all directories;
+            return;
+        }
+        //
+        mFirstExtendedDirectoryId = Long.MAX_VALUE;
+        if (numExtendedDirectories > 0) {
+            // The Directory.LOCAL_INVISIBLE is not in the cursor but we can't reuse it's
+            // "special" ID.
+            long maxId = Directory.LOCAL_INVISIBLE;
+            int insertIndex = 0;
+            for (int i = 0, n = getPartitionCount(); i < n; i++) {
+                final DirectoryPartition partition = (DirectoryPartition) getPartition(i);
+                final long id = partition.getDirectoryId();
+                if (id > maxId) {
+                    maxId = id;
+                }
+                if (!DirectoryCompat.isRemoteDirectoryId(id)) {
+                    // assuming remote directories come after local, we will end up with the index
+                    // where we should insert extended directories. This also works if there are no
+                    // remote directories at all.
+                    insertIndex = i + 1;
+                }
+            }
+            // Extended directories ID's cannot collide with base directories
+            mFirstExtendedDirectoryId = maxId + 1;
+            for (int i = 0; i < numExtendedDirectories; i++) {
+                final long id = mFirstExtendedDirectoryId + i;
+                final DirectoryPartition directory = mExtendedDirectories.get(i);
+                if (getPartitionByDirectoryId(id) == -1) {
+                    addPartition(insertIndex, directory);
+                    directory.setDirectoryId(id);
+                }
+            }
+        }
+    }
+
+    @Override
+    protected Uri getContactUri(int partitionIndex, Cursor cursor,
+            int contactIdColumn, int lookUpKeyColumn) {
+        final DirectoryPartition directory = (DirectoryPartition) getPartition(partitionIndex);
+        final long directoryId = directory.getDirectoryId();
+        if (!isExtendedDirectory(directoryId)) {
+            return super.getContactUri(partitionIndex, cursor, contactIdColumn, lookUpKeyColumn);
+        }
+        return Contacts.CONTENT_LOOKUP_URI.buildUpon()
+                .appendPath(Constants.LOOKUP_URI_ENCODED)
+                .appendQueryParameter(Directory.DISPLAY_NAME, directory.getLabel())
+                .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
+                        String.valueOf(directoryId))
+                .encodedFragment(cursor.getString(lookUpKeyColumn))
+                .build();
+    }
+
+    public Listener getListener() {
+        return mListener;
+    }
+
+    public void setListener(Listener listener) {
+        mListener = listener;
+    }
+}
diff --git a/src/com/android/contacts/list/PhoneNumberPickerFragment.java b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
new file mode 100644
index 0000000..6a736db
--- /dev/null
+++ b/src/com/android/contacts/list/PhoneNumberPickerFragment.java
@@ -0,0 +1,297 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.content.Intent;
+import android.content.Loader;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.R;
+import com.android.contacts.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
+
+/**
+ * Fragment containing a phone number list for picking.
+ */
+public class PhoneNumberPickerFragment extends ContactEntryListFragment<ContactEntryListAdapter>
+        implements OnShortcutIntentCreatedListener, PhoneNumberListAdapter.Listener {
+    private static final String TAG = PhoneNumberPickerFragment.class.getSimpleName();
+
+    private static final String KEY_SHORTCUT_ACTION = "shortcutAction";
+
+    private OnPhoneNumberPickerActionListener mListener;
+    private String mShortcutAction;
+
+    private ContactListFilter mFilter;
+
+    private static final String KEY_FILTER = "filter";
+
+    /** true if the loader has started at least once. */
+    private boolean mLoaderStarted;
+
+    private boolean mUseCallableUri;
+
+    private ContactListItemView.PhotoPosition mPhotoPosition =
+            ContactListItemView.getDefaultPhotoPosition(false /* normal/non opposite */);
+
+    /**
+     * Handles a click on the video call icon for a row in the list.
+     *
+     * @param position The position in the list where the click ocurred.
+     */
+    @Override
+    public void onVideoCallIconClicked(int position) {
+        callNumber(position, true /* isVideoCall */);
+    }
+
+    public PhoneNumberPickerFragment() {
+        setQuickContactEnabled(false);
+        setPhotoLoaderEnabled(true);
+        setSectionHeaderDisplayEnabled(true);
+        setDirectorySearchMode(DirectoryListLoader.SEARCH_MODE_NONE);
+
+        // Show nothing instead of letting caller Activity show something.
+        setHasOptionsMenu(true);
+    }
+
+    public void setDirectorySearchEnabled(boolean flag) {
+        setDirectorySearchMode(flag ? DirectoryListLoader.SEARCH_MODE_DEFAULT
+                : DirectoryListLoader.SEARCH_MODE_NONE);
+    }
+
+    public void setOnPhoneNumberPickerActionListener(OnPhoneNumberPickerActionListener listener) {
+        this.mListener = listener;
+    }
+
+    public OnPhoneNumberPickerActionListener getOnPhoneNumberPickerListener() {
+        return mListener;
+    }
+
+    @Override
+    protected void onCreateView(LayoutInflater inflater, ViewGroup container) {
+        super.onCreateView(inflater, container);
+
+        setVisibleScrollbarEnabled(getVisibleScrollbarEnabled());
+    }
+
+    protected boolean getVisibleScrollbarEnabled() {
+        return true;
+    }
+
+    @Override
+    public void restoreSavedState(Bundle savedState) {
+        super.restoreSavedState(savedState);
+
+        if (savedState == null) {
+            return;
+        }
+
+        mFilter = savedState.getParcelable(KEY_FILTER);
+        mShortcutAction = savedState.getString(KEY_SHORTCUT_ACTION);
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putParcelable(KEY_FILTER, mFilter);
+        outState.putString(KEY_SHORTCUT_ACTION, mShortcutAction);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        final int itemId = item.getItemId();
+        if (itemId == android.R.id.home) {  // See ActionBar#setDisplayHomeAsUpEnabled()
+            if (mListener != null) {
+                mListener.onHomeInActionBarSelected();
+            }
+            return true;
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    /**
+     * @param shortcutAction either {@link Intent#ACTION_CALL} or
+     *            {@link Intent#ACTION_SENDTO} or null.
+     */
+    public void setShortcutAction(String shortcutAction) {
+        this.mShortcutAction = shortcutAction;
+    }
+
+    @Override
+    protected void onItemClick(int position, long id) {
+        callNumber(position, false /* isVideoCall */);
+    }
+
+    /**
+     * Initiates a call to the number at the specified position.
+     *
+     * @param position The position.
+     * @param isVideoCall {@code true} if the call should be initiated as a video call,
+     *      {@code false} otherwise.
+     */
+    private void callNumber(int position, boolean isVideoCall) {
+        final Uri phoneUri = getPhoneUri(position);
+
+        if (phoneUri != null) {
+            pickPhoneNumber(phoneUri, isVideoCall);
+        } else {
+            final String number = getPhoneNumber(position);
+            if (!TextUtils.isEmpty(number)) {
+                cacheContactInfo(position);
+                mListener.onPickPhoneNumber(number, isVideoCall,
+                        getCallInitiationType(true /* isRemoteDirectory */));
+            } else {
+                Log.w(TAG, "Item at " + position + " was clicked before"
+                        + " adapter is ready. Ignoring");
+            }
+        }
+    }
+
+    protected void cacheContactInfo(int position) {
+        // Not implemented. Hook for child classes
+    }
+
+    protected String getPhoneNumber(int position) {
+        final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter();
+        return adapter.getPhoneNumber(position);
+    }
+
+    protected Uri getPhoneUri(int position) {
+        final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter();
+        return adapter.getDataUri(position);
+    }
+
+    protected String getLookupKey(int position) {
+        final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter();
+        return adapter.getLookupKey(position);
+    }
+
+    @Override
+    protected void startLoading() {
+        mLoaderStarted = true;
+        super.startLoading();
+    }
+
+    @Override
+    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+        super.onLoadFinished(loader, data);
+
+        // disable scroll bar if there is no data
+        setVisibleScrollbarEnabled(data != null && !data.isClosed() && data.getCount() > 0);
+    }
+
+    public void setUseCallableUri(boolean useCallableUri) {
+        mUseCallableUri = useCallableUri;
+    }
+
+    public boolean usesCallableUri() {
+        return mUseCallableUri;
+    }
+
+    @Override
+    protected ContactEntryListAdapter createListAdapter() {
+        PhoneNumberListAdapter adapter = new PhoneNumberListAdapter(getActivity());
+        adapter.setDisplayPhotos(true);
+        adapter.setUseCallableUri(mUseCallableUri);
+        return adapter;
+    }
+
+    @Override
+    protected void configureAdapter() {
+        super.configureAdapter();
+
+        final ContactEntryListAdapter adapter = getAdapter();
+        if (adapter == null) {
+            return;
+        }
+
+        if (!isSearchMode() && mFilter != null) {
+            adapter.setFilter(mFilter);
+        }
+
+        setPhotoPosition(adapter);
+    }
+
+    protected void setPhotoPosition(ContactEntryListAdapter adapter) {
+        ((PhoneNumberListAdapter) adapter).setPhotoPosition(mPhotoPosition);
+    }
+
+    @Override
+    protected View inflateView(LayoutInflater inflater, ViewGroup container) {
+        return inflater.inflate(R.layout.contact_list_content, null);
+    }
+
+    public void pickPhoneNumber(Uri uri, boolean isVideoCall) {
+        if (mShortcutAction == null) {
+            mListener.onPickDataUri(uri, isVideoCall,
+                    getCallInitiationType(false /* isRemoteDirectory */));
+        } else {
+            startPhoneNumberShortcutIntent(uri, isVideoCall);
+        }
+    }
+
+    protected void startPhoneNumberShortcutIntent(Uri uri, boolean isVideoCall) {
+        ShortcutIntentBuilder builder = new ShortcutIntentBuilder(getActivity(), this);
+        builder.createPhoneNumberShortcutIntent(uri, mShortcutAction);
+    }
+
+    @Override
+    public void onShortcutIntentCreated(Uri uri, Intent shortcutIntent) {
+        mListener.onShortcutIntentCreated(shortcutIntent);
+    }
+
+    @Override
+    public void onPickerResult(Intent data) {
+        mListener.onPickDataUri(data.getData(), false /* isVideoCall */,
+                getCallInitiationType(false /* isRemoteDirectory */));
+    }
+
+    public void setFilter(ContactListFilter filter) {
+        if ((mFilter == null && filter == null) ||
+                (mFilter != null && mFilter.equals(filter))) {
+            return;
+        }
+
+        mFilter = filter;
+        if (mLoaderStarted) {
+            reloadData();
+        }
+    }
+
+    public void setPhotoPosition(ContactListItemView.PhotoPosition photoPosition) {
+        mPhotoPosition = photoPosition;
+
+        final PhoneNumberListAdapter adapter = (PhoneNumberListAdapter) getAdapter();
+        if (adapter != null) {
+            adapter.setPhotoPosition(photoPosition);
+        }
+    }
+
+    /**
+     * @param isRemoteDirectory {@code true} if the call was initiated using a contact/phone number
+     *         not in the local contacts database
+     */
+    protected int getCallInitiationType(boolean isRemoteDirectory) {
+        return OnPhoneNumberPickerActionListener.CALL_INITIATION_UNKNOWN;
+    }
+}
diff --git a/src/com/android/contacts/list/PinnedHeaderListAdapter.java b/src/com/android/contacts/list/PinnedHeaderListAdapter.java
new file mode 100644
index 0000000..6a76421
--- /dev/null
+++ b/src/com/android/contacts/list/PinnedHeaderListAdapter.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.content.Context;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.common.widget.CompositeCursorAdapter;
+
+/**
+ * A subclass of {@link CompositeCursorAdapter} that manages pinned partition headers.
+ */
+public abstract class PinnedHeaderListAdapter extends CompositeCursorAdapter
+        implements PinnedHeaderListView.PinnedHeaderAdapter {
+
+    public static final int PARTITION_HEADER_TYPE = 0;
+
+    private boolean mPinnedPartitionHeadersEnabled;
+    private boolean mHeaderVisibility[];
+
+    public PinnedHeaderListAdapter(Context context) {
+        super(context);
+    }
+
+    public PinnedHeaderListAdapter(Context context, int initialCapacity) {
+        super(context, initialCapacity);
+    }
+
+    public boolean getPinnedPartitionHeadersEnabled() {
+        return mPinnedPartitionHeadersEnabled;
+    }
+
+    public void setPinnedPartitionHeadersEnabled(boolean flag) {
+        this.mPinnedPartitionHeadersEnabled = flag;
+    }
+
+    @Override
+    public int getPinnedHeaderCount() {
+        if (mPinnedPartitionHeadersEnabled) {
+            return getPartitionCount();
+        } else {
+            return 0;
+        }
+    }
+
+    protected boolean isPinnedPartitionHeaderVisible(int partition) {
+        return getPinnedPartitionHeadersEnabled() && hasHeader(partition)
+                && !isPartitionEmpty(partition);
+    }
+
+    /**
+     * The default implementation creates the same type of view as a normal
+     * partition header.
+     */
+    @Override
+    public View getPinnedHeaderView(int partition, View convertView, ViewGroup parent) {
+        if (hasHeader(partition)) {
+            View view = null;
+            if (convertView != null) {
+                Integer headerType = (Integer)convertView.getTag();
+                if (headerType != null && headerType == PARTITION_HEADER_TYPE) {
+                    view = convertView;
+                }
+            }
+            if (view == null) {
+                view = newHeaderView(getContext(), partition, null, parent);
+                view.setTag(PARTITION_HEADER_TYPE);
+                view.setFocusable(false);
+                view.setEnabled(false);
+            }
+            bindHeaderView(view, partition, getCursor(partition));
+            view.setLayoutDirection(parent.getLayoutDirection());
+            return view;
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    public void configurePinnedHeaders(PinnedHeaderListView listView) {
+        if (!getPinnedPartitionHeadersEnabled()) {
+            return;
+        }
+
+        int size = getPartitionCount();
+
+        // Cache visibility bits, because we will need them several times later on
+        if (mHeaderVisibility == null || mHeaderVisibility.length != size) {
+            mHeaderVisibility = new boolean[size];
+        }
+        for (int i = 0; i < size; i++) {
+            boolean visible = isPinnedPartitionHeaderVisible(i);
+            mHeaderVisibility[i] = visible;
+            if (!visible) {
+                listView.setHeaderInvisible(i, true);
+            }
+        }
+
+        int headerViewsCount = listView.getHeaderViewsCount();
+
+        // Starting at the top, find and pin headers for partitions preceding the visible one(s)
+        int maxTopHeader = -1;
+        int topHeaderHeight = 0;
+        for (int i = 0; i < size; i++) {
+            if (mHeaderVisibility[i]) {
+                int position = listView.getPositionAt(topHeaderHeight) - headerViewsCount;
+                int partition = getPartitionForPosition(position);
+                if (i > partition) {
+                    break;
+                }
+
+                listView.setHeaderPinnedAtTop(i, topHeaderHeight, false);
+                topHeaderHeight += listView.getPinnedHeaderHeight(i);
+                maxTopHeader = i;
+            }
+        }
+
+        // Starting at the bottom, find and pin headers for partitions following the visible one(s)
+        int maxBottomHeader = size;
+        int bottomHeaderHeight = 0;
+        int listHeight = listView.getHeight();
+        for (int i = size; --i > maxTopHeader;) {
+            if (mHeaderVisibility[i]) {
+                int position = listView.getPositionAt(listHeight - bottomHeaderHeight)
+                        - headerViewsCount;
+                if (position < 0) {
+                    break;
+                }
+
+                int partition = getPartitionForPosition(position - 1);
+                if (partition == -1 || i <= partition) {
+                    break;
+                }
+
+                int height = listView.getPinnedHeaderHeight(i);
+                bottomHeaderHeight += height;
+
+                listView.setHeaderPinnedAtBottom(i, listHeight - bottomHeaderHeight, false);
+                maxBottomHeader = i;
+            }
+        }
+
+        // Headers in between the top-pinned and bottom-pinned should be hidden
+        for (int i = maxTopHeader + 1; i < maxBottomHeader; i++) {
+            if (mHeaderVisibility[i]) {
+                listView.setHeaderInvisible(i, isPartitionEmpty(i));
+            }
+        }
+    }
+
+    @Override
+    public int getScrollPositionForHeader(int viewIndex) {
+        return getPositionForPartition(viewIndex);
+    }
+}
diff --git a/src/com/android/contacts/list/PinnedHeaderListView.java b/src/com/android/contacts/list/PinnedHeaderListView.java
new file mode 100644
index 0000000..01895c7
--- /dev/null
+++ b/src/com/android/contacts/list/PinnedHeaderListView.java
@@ -0,0 +1,581 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.list;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AbsListView;
+import android.widget.AbsListView.OnScrollListener;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemSelectedListener;
+import android.widget.ListAdapter;
+import android.widget.TextView;
+
+import com.android.contacts.util.ViewUtil;
+
+/**
+ * A ListView that maintains a header pinned at the top of the list. The
+ * pinned header can be pushed up and dissolved as needed.
+ */
+public class PinnedHeaderListView extends AutoScrollListView
+        implements OnScrollListener, OnItemSelectedListener {
+
+    /**
+     * Adapter interface.  The list adapter must implement this interface.
+     */
+    public interface PinnedHeaderAdapter {
+
+        /**
+         * Returns the overall number of pinned headers, visible or not.
+         */
+        int getPinnedHeaderCount();
+
+        /**
+         * Creates or updates the pinned header view.
+         */
+        View getPinnedHeaderView(int viewIndex, View convertView, ViewGroup parent);
+
+        /**
+         * Configures the pinned headers to match the visible list items. The
+         * adapter should call {@link PinnedHeaderListView#setHeaderPinnedAtTop},
+         * {@link PinnedHeaderListView#setHeaderPinnedAtBottom},
+         * {@link PinnedHeaderListView#setFadingHeader} or
+         * {@link PinnedHeaderListView#setHeaderInvisible}, for each header that
+         * needs to change its position or visibility.
+         */
+        void configurePinnedHeaders(PinnedHeaderListView listView);
+
+        /**
+         * Returns the list position to scroll to if the pinned header is touched.
+         * Return -1 if the list does not need to be scrolled.
+         */
+        int getScrollPositionForHeader(int viewIndex);
+    }
+
+    private static final int MAX_ALPHA = 255;
+    private static final int TOP = 0;
+    private static final int BOTTOM = 1;
+    private static final int FADING = 2;
+
+    private static final int DEFAULT_ANIMATION_DURATION = 20;
+
+    private static final int DEFAULT_SMOOTH_SCROLL_DURATION = 100;
+
+    private static final class PinnedHeader {
+        View view;
+        boolean visible;
+        int y;
+        int height;
+        int alpha;
+        int state;
+
+        boolean animating;
+        boolean targetVisible;
+        int sourceY;
+        int targetY;
+        long targetTime;
+    }
+
+    private PinnedHeaderAdapter mAdapter;
+    private int mSize;
+    private PinnedHeader[] mHeaders;
+    private RectF mBounds = new RectF();
+    private OnScrollListener mOnScrollListener;
+    private OnItemSelectedListener mOnItemSelectedListener;
+    private int mScrollState;
+
+    private boolean mScrollToSectionOnHeaderTouch = false;
+    private boolean mHeaderTouched = false;
+
+    private int mAnimationDuration = DEFAULT_ANIMATION_DURATION;
+    private boolean mAnimating;
+    private long mAnimationTargetTime;
+    private int mHeaderPaddingStart;
+    private int mHeaderWidth;
+
+    public PinnedHeaderListView(Context context) {
+        this(context, null, android.R.attr.listViewStyle);
+    }
+
+    public PinnedHeaderListView(Context context, AttributeSet attrs) {
+        this(context, attrs, android.R.attr.listViewStyle);
+    }
+
+    public PinnedHeaderListView(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        super.setOnScrollListener(this);
+        super.setOnItemSelectedListener(this);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        super.onLayout(changed, l, t, r, b);
+        mHeaderPaddingStart = getPaddingStart();
+        mHeaderWidth = r - l - mHeaderPaddingStart - getPaddingEnd();
+    }
+
+    @Override
+    public void setAdapter(ListAdapter adapter) {
+        mAdapter = (PinnedHeaderAdapter)adapter;
+        super.setAdapter(adapter);
+    }
+
+    @Override
+    public void setOnScrollListener(OnScrollListener onScrollListener) {
+        mOnScrollListener = onScrollListener;
+        super.setOnScrollListener(this);
+    }
+
+    @Override
+    public void setOnItemSelectedListener(OnItemSelectedListener listener) {
+        mOnItemSelectedListener = listener;
+        super.setOnItemSelectedListener(this);
+    }
+
+    public void setScrollToSectionOnHeaderTouch(boolean value) {
+        mScrollToSectionOnHeaderTouch = value;
+    }
+
+    @Override
+    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
+            int totalItemCount) {
+        if (mAdapter != null) {
+            int count = mAdapter.getPinnedHeaderCount();
+            if (count != mSize) {
+                mSize = count;
+                if (mHeaders == null) {
+                    mHeaders = new PinnedHeader[mSize];
+                } else if (mHeaders.length < mSize) {
+                    PinnedHeader[] headers = mHeaders;
+                    mHeaders = new PinnedHeader[mSize];
+                    System.arraycopy(headers, 0, mHeaders, 0, headers.length);
+                }
+            }
+
+            for (int i = 0; i < mSize; i++) {
+                if (mHeaders[i] == null) {
+                    mHeaders[i] = new PinnedHeader();
+                }
+                mHeaders[i].view = mAdapter.getPinnedHeaderView(i, mHeaders[i].view, this);
+            }
+
+            mAnimationTargetTime = System.currentTimeMillis() + mAnimationDuration;
+            mAdapter.configurePinnedHeaders(this);
+            invalidateIfAnimating();
+        }
+        if (mOnScrollListener != null) {
+            mOnScrollListener.onScroll(this, firstVisibleItem, visibleItemCount, totalItemCount);
+        }
+    }
+
+    @Override
+    protected float getTopFadingEdgeStrength() {
+        // Disable vertical fading at the top when the pinned header is present
+        return mSize > 0 ? 0 : super.getTopFadingEdgeStrength();
+    }
+
+    @Override
+    public void onScrollStateChanged(AbsListView view, int scrollState) {
+        mScrollState = scrollState;
+        if (mOnScrollListener != null) {
+            mOnScrollListener.onScrollStateChanged(this, scrollState);
+        }
+    }
+
+    /**
+     * Ensures that the selected item is positioned below the top-pinned headers
+     * and above the bottom-pinned ones.
+     */
+    @Override
+    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+        int height = getHeight();
+
+        int windowTop = 0;
+        int windowBottom = height;
+
+        for (int i = 0; i < mSize; i++) {
+            PinnedHeader header = mHeaders[i];
+            if (header.visible) {
+                if (header.state == TOP) {
+                    windowTop = header.y + header.height;
+                } else if (header.state == BOTTOM) {
+                    windowBottom = header.y;
+                    break;
+                }
+            }
+        }
+
+        View selectedView = getSelectedView();
+        if (selectedView != null) {
+            if (selectedView.getTop() < windowTop) {
+                setSelectionFromTop(position, windowTop);
+            } else if (selectedView.getBottom() > windowBottom) {
+                setSelectionFromTop(position, windowBottom - selectedView.getHeight());
+            }
+        }
+
+        if (mOnItemSelectedListener != null) {
+            mOnItemSelectedListener.onItemSelected(parent, view, position, id);
+        }
+    }
+
+    @Override
+    public void onNothingSelected(AdapterView<?> parent) {
+        if (mOnItemSelectedListener != null) {
+            mOnItemSelectedListener.onNothingSelected(parent);
+        }
+    }
+
+    public int getPinnedHeaderHeight(int viewIndex) {
+        ensurePinnedHeaderLayout(viewIndex);
+        return mHeaders[viewIndex].view.getHeight();
+    }
+
+    /**
+     * Set header to be pinned at the top.
+     *
+     * @param viewIndex index of the header view
+     * @param y is position of the header in pixels.
+     * @param animate true if the transition to the new coordinate should be animated
+     */
+    public void setHeaderPinnedAtTop(int viewIndex, int y, boolean animate) {
+        ensurePinnedHeaderLayout(viewIndex);
+        PinnedHeader header = mHeaders[viewIndex];
+        header.visible = true;
+        header.y = y;
+        header.state = TOP;
+
+        // TODO perhaps we should animate at the top as well
+        header.animating = false;
+    }
+
+    /**
+     * Set header to be pinned at the bottom.
+     *
+     * @param viewIndex index of the header view
+     * @param y is position of the header in pixels.
+     * @param animate true if the transition to the new coordinate should be animated
+     */
+    public void setHeaderPinnedAtBottom(int viewIndex, int y, boolean animate) {
+        ensurePinnedHeaderLayout(viewIndex);
+        PinnedHeader header = mHeaders[viewIndex];
+        header.state = BOTTOM;
+        if (header.animating) {
+            header.targetTime = mAnimationTargetTime;
+            header.sourceY = header.y;
+            header.targetY = y;
+        } else if (animate && (header.y != y || !header.visible)) {
+            if (header.visible) {
+                header.sourceY = header.y;
+            } else {
+                header.visible = true;
+                header.sourceY = y + header.height;
+            }
+            header.animating = true;
+            header.targetVisible = true;
+            header.targetTime = mAnimationTargetTime;
+            header.targetY = y;
+        } else {
+            header.visible = true;
+            header.y = y;
+        }
+    }
+
+    /**
+     * Set header to be pinned at the top of the first visible item.
+     *
+     * @param viewIndex index of the header view
+     * @param position is position of the header in pixels.
+     */
+    public void setFadingHeader(int viewIndex, int position, boolean fade) {
+        ensurePinnedHeaderLayout(viewIndex);
+
+        View child = getChildAt(position - getFirstVisiblePosition());
+        if (child == null) return;
+
+        PinnedHeader header = mHeaders[viewIndex];
+        // Hide header when it's a star.
+        // TODO: try showing the view even when it's a star;
+        // if we have to hide the star view, then try hiding it in some higher layer.
+        header.visible = !((TextView) header.view).getText().toString().isEmpty();
+        header.state = FADING;
+        header.alpha = MAX_ALPHA;
+        header.animating = false;
+
+        int top = getTotalTopPinnedHeaderHeight();
+        header.y = top;
+        if (fade) {
+            int bottom = child.getBottom() - top;
+            int headerHeight = header.height;
+            if (bottom < headerHeight) {
+                int portion = bottom - headerHeight;
+                header.alpha = MAX_ALPHA * (headerHeight + portion) / headerHeight;
+                header.y = top + portion;
+            }
+        }
+    }
+
+    /**
+     * Makes header invisible.
+     *
+     * @param viewIndex index of the header view
+     * @param animate true if the transition to the new coordinate should be animated
+     */
+    public void setHeaderInvisible(int viewIndex, boolean animate) {
+        PinnedHeader header = mHeaders[viewIndex];
+        if (header.visible && (animate || header.animating) && header.state == BOTTOM) {
+            header.sourceY = header.y;
+            if (!header.animating) {
+                header.visible = true;
+                header.targetY = getBottom() + header.height;
+            }
+            header.animating = true;
+            header.targetTime = mAnimationTargetTime;
+            header.targetVisible = false;
+        } else {
+            header.visible = false;
+        }
+    }
+
+    private void ensurePinnedHeaderLayout(int viewIndex) {
+        View view = mHeaders[viewIndex].view;
+        if (view.isLayoutRequested()) {
+            ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
+            int widthSpec;
+            int heightSpec;
+
+            if (layoutParams != null && layoutParams.width > 0) {
+                widthSpec = View.MeasureSpec
+                        .makeMeasureSpec(layoutParams.width, View.MeasureSpec.EXACTLY);
+            } else {
+                widthSpec = View.MeasureSpec
+                        .makeMeasureSpec(mHeaderWidth, View.MeasureSpec.EXACTLY);
+            }
+
+            if (layoutParams != null && layoutParams.height > 0) {
+                heightSpec = View.MeasureSpec
+                        .makeMeasureSpec(layoutParams.height, View.MeasureSpec.EXACTLY);
+            } else {
+                heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
+            }
+            view.measure(widthSpec, heightSpec);
+            int height = view.getMeasuredHeight();
+            mHeaders[viewIndex].height = height;
+            view.layout(0, 0, view.getMeasuredWidth(), height);
+        }
+    }
+
+    /**
+     * Returns the sum of heights of headers pinned to the top.
+     */
+    public int getTotalTopPinnedHeaderHeight() {
+        for (int i = mSize; --i >= 0;) {
+            PinnedHeader header = mHeaders[i];
+            if (header.visible && header.state == TOP) {
+                return header.y + header.height;
+            }
+        }
+        return 0;
+    }
+
+    /**
+     * Returns the list item position at the specified y coordinate.
+     */
+    public int getPositionAt(int y) {
+        do {
+            int position = pointToPosition(getPaddingLeft() + 1, y);
+            if (position != -1) {
+                return position;
+            }
+            // If position == -1, we must have hit a separator. Let's examine
+            // a nearby pixel
+            y--;
+        } while (y > 0);
+        return 0;
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        mHeaderTouched = false;
+        if (super.onInterceptTouchEvent(ev)) {
+            return true;
+        }
+
+        if (mScrollState == SCROLL_STATE_IDLE) {
+            final int y = (int)ev.getY();
+            final int x = (int)ev.getX();
+            for (int i = mSize; --i >= 0;) {
+                PinnedHeader header = mHeaders[i];
+                final int padding = ViewUtil.isViewLayoutRtl(this) ?
+                        getWidth() - mHeaderPaddingStart - header.view.getWidth() :
+                        mHeaderPaddingStart;
+                if (header.visible && header.y <= y && header.y + header.height > y &&
+                        x >= padding && padding + header.view.getWidth() >= x) {
+                    mHeaderTouched = true;
+                    if (mScrollToSectionOnHeaderTouch &&
+                            ev.getAction() == MotionEvent.ACTION_DOWN) {
+                        return smoothScrollToPartition(i);
+                    } else {
+                        return true;
+                    }
+                }
+            }
+        }
+
+        return false;
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        if (mHeaderTouched) {
+            if (ev.getAction() == MotionEvent.ACTION_UP) {
+                mHeaderTouched = false;
+            }
+            return true;
+        }
+        return super.onTouchEvent(ev);
+    }
+
+    private boolean smoothScrollToPartition(int partition) {
+        if (mAdapter == null) {
+            return false;
+        }
+        final int position = mAdapter.getScrollPositionForHeader(partition);
+        if (position == -1) {
+            return false;
+        }
+
+        int offset = 0;
+        for (int i = 0; i < partition; i++) {
+            PinnedHeader header = mHeaders[i];
+            if (header.visible) {
+                offset += header.height;
+            }
+        }
+        smoothScrollToPositionFromTop(position + getHeaderViewsCount(), offset,
+                DEFAULT_SMOOTH_SCROLL_DURATION);
+        return true;
+    }
+
+    private void invalidateIfAnimating() {
+        mAnimating = false;
+        for (int i = 0; i < mSize; i++) {
+            if (mHeaders[i].animating) {
+                mAnimating = true;
+                invalidate();
+                return;
+            }
+        }
+    }
+
+    @Override
+    protected void dispatchDraw(Canvas canvas) {
+        long currentTime = mAnimating ? System.currentTimeMillis() : 0;
+
+        int top = 0;
+        int right = 0;
+        int bottom = getBottom();
+        boolean hasVisibleHeaders = false;
+        for (int i = 0; i < mSize; i++) {
+            PinnedHeader header = mHeaders[i];
+            if (header.visible) {
+                hasVisibleHeaders = true;
+                if (header.state == BOTTOM && header.y < bottom) {
+                    bottom = header.y;
+                } else if (header.state == TOP || header.state == FADING) {
+                    int newTop = header.y + header.height;
+                    if (newTop > top) {
+                        top = newTop;
+                    }
+                }
+            }
+        }
+
+        if (hasVisibleHeaders) {
+            canvas.save();
+        }
+
+        super.dispatchDraw(canvas);
+
+        if (hasVisibleHeaders) {
+            canvas.restore();
+
+            // If the first item is visible and if it has a positive top that is greater than the
+            // first header's assigned y-value, use that for the first header's y value. This way,
+            // the header inherits any padding applied to the list view.
+            if (mSize > 0 && getFirstVisiblePosition() == 0) {
+                View firstChild = getChildAt(0);
+                PinnedHeader firstHeader = mHeaders[0];
+
+                if (firstHeader != null) {
+                    int firstHeaderTop = firstChild != null ? firstChild.getTop() : 0;
+                    firstHeader.y = Math.max(firstHeader.y, firstHeaderTop);
+                }
+            }
+
+            // First draw top headers, then the bottom ones to handle the Z axis correctly
+            for (int i = mSize; --i >= 0;) {
+                PinnedHeader header = mHeaders[i];
+                if (header.visible && (header.state == TOP || header.state == FADING)) {
+                    drawHeader(canvas, header, currentTime);
+                }
+            }
+
+            for (int i = 0; i < mSize; i++) {
+                PinnedHeader header = mHeaders[i];
+                if (header.visible && header.state == BOTTOM) {
+                    drawHeader(canvas, header, currentTime);
+                }
+            }
+        }
+
+        invalidateIfAnimating();
+    }
+
+    private void drawHeader(Canvas canvas, PinnedHeader header, long currentTime) {
+        if (header.animating) {
+            int timeLeft = (int)(header.targetTime - currentTime);
+            if (timeLeft <= 0) {
+                header.y = header.targetY;
+                header.visible = header.targetVisible;
+                header.animating = false;
+            } else {
+                header.y = header.targetY + (header.sourceY - header.targetY) * timeLeft
+                        / mAnimationDuration;
+            }
+        }
+        if (header.visible) {
+            View view = header.view;
+            int saveCount = canvas.save();
+            int translateX = ViewUtil.isViewLayoutRtl(this) ?
+                    getWidth() - mHeaderPaddingStart - view.getWidth() :
+                    mHeaderPaddingStart;
+            canvas.translate(translateX, header.y);
+            if (header.state == FADING) {
+                mBounds.set(0, 0, view.getWidth(), view.getHeight());
+                canvas.saveLayerAlpha(mBounds, header.alpha, Canvas.ALL_SAVE_FLAG);
+            }
+            view.draw(canvas);
+            canvas.restoreToCount(saveCount);
+        }
+    }
+}
diff --git a/src/com/android/contacts/list/PostalAddressListAdapter.java b/src/com/android/contacts/list/PostalAddressListAdapter.java
index 951a933..c0c2353 100644
--- a/src/com/android/contacts/list/PostalAddressListAdapter.java
+++ b/src/com/android/contacts/list/PostalAddressListAdapter.java
@@ -27,10 +27,8 @@
 import android.view.View;
 import android.view.ViewGroup;
 
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.preference.ContactsPreferences;
 
 /**
  * A cursor adapter for the {@link StructuredPostal#CONTENT_TYPE} content type.
diff --git a/src/com/android/contacts/list/PostalAddressPickerFragment.java b/src/com/android/contacts/list/PostalAddressPickerFragment.java
index c64e173..c2aacee 100644
--- a/src/com/android/contacts/list/PostalAddressPickerFragment.java
+++ b/src/com/android/contacts/list/PostalAddressPickerFragment.java
@@ -21,9 +21,6 @@
 import android.view.ViewGroup;
 
 import com.android.contacts.R;
-import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactEntryListFragment;
-import com.android.contacts.common.list.DirectoryListLoader;
 
 /**
  * Fragment containing a postal address list for picking.
diff --git a/src/com/android/contacts/list/ProviderStatusWatcher.java b/src/com/android/contacts/list/ProviderStatusWatcher.java
new file mode 100644
index 0000000..64dc298
--- /dev/null
+++ b/src/com/android/contacts/list/ProviderStatusWatcher.java
@@ -0,0 +1,278 @@
+/*
+ * 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.list;
+
+import android.content.Context;
+import android.database.ContentObserver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.provider.ContactsContract.ProviderStatus;
+import android.util.Log;
+
+import com.android.contacts.compat.ProviderStatusCompat;
+import com.android.contactsbind.FeedbackHelper;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+
+/**
+ * A singleton that keeps track of the last known provider status.
+ *
+ * All methods must be called on the UI thread unless noted otherwise.
+ *
+ * All members must be set on the UI thread unless noted otherwise.
+ */
+public class ProviderStatusWatcher extends ContentObserver {
+    private static final String TAG = "ProviderStatusWatcher";
+    private static final boolean DEBUG = false;
+
+    /**
+     * Callback interface invoked when the provider status changes.
+     */
+    public interface ProviderStatusListener {
+        public void onProviderStatusChange();
+    }
+
+    private static final String[] PROJECTION = new String[] {
+        ProviderStatus.STATUS
+    };
+
+    /**
+     * We'll wait for this amount of time on the UI thread if the load hasn't finished.
+     */
+    private static final int LOAD_WAIT_TIMEOUT_MS = 1000;
+
+    private static ProviderStatusWatcher sInstance;
+
+    private final Context mContext;
+    private final Handler mHandler = new Handler();
+
+    private final Object mSignal = new Object();
+
+    private int mStartRequestedCount;
+
+    private LoaderTask mLoaderTask;
+
+    /** 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();
+
+    private final Runnable mStartLoadingRunnable = new Runnable() {
+        @Override
+        public void run() {
+            startLoading();
+        }
+    };
+
+    /**
+     * Returns the singleton instance.
+     */
+    public synchronized static ProviderStatusWatcher getInstance(Context context) {
+        if (sInstance == null) {
+            sInstance = new ProviderStatusWatcher(context);
+        }
+        return sInstance;
+    }
+
+    private ProviderStatusWatcher(Context context) {
+        super(null);
+        mContext = context;
+    }
+
+    /** Add a listener. */
+    public void addListener(ProviderStatusListener listener) {
+        mListeners.add(listener);
+    }
+
+    /** Remove a listener */
+    public void removeListener(ProviderStatusListener listener) {
+        mListeners.remove(listener);
+    }
+
+    private void notifyListeners() {
+        if (DEBUG) {
+            Log.d(TAG, "notifyListeners: " + mListeners.size());
+        }
+        if (isStarted()) {
+            for (ProviderStatusListener listener : mListeners) {
+                listener.onProviderStatusChange();
+            }
+        }
+    }
+
+    private boolean isStarted() {
+        return mStartRequestedCount > 0;
+    }
+
+    /**
+     * Starts watching the provider status.  {@link #start()} and {@link #stop()} calls can be
+     * nested.
+     */
+    public void start() {
+        if (++mStartRequestedCount == 1) {
+            mContext.getContentResolver()
+                .registerContentObserver(ProviderStatus.CONTENT_URI, false, this);
+            startLoading();
+
+            if (DEBUG) {
+                Log.d(TAG, "Start observing");
+            }
+        }
+    }
+
+    /**
+     * Stops watching the provider status.
+     */
+    public void stop() {
+        if (!isStarted()) {
+            Log.e(TAG, "Already stopped");
+            return;
+        }
+        if (--mStartRequestedCount == 0) {
+
+            mHandler.removeCallbacks(mStartLoadingRunnable);
+
+            mContext.getContentResolver().unregisterContentObserver(this);
+            if (DEBUG) {
+                Log.d(TAG, "Stop observing");
+            }
+        }
+    }
+
+    /**
+     * @return last known provider status.
+     *
+     * If this method is called when we haven't started the status query or the query is still in
+     * progress, it will start a query in a worker thread if necessary, and *wait for the result*.
+     *
+     * This means this method is essentially a blocking {@link ProviderStatus#CONTENT_URI} query.
+     * This URI is not backed by the file system, so is usually fast enough to perform on the main
+     * thread, but in extreme cases (when the system takes a while to bring up the contacts
+     * provider?) this may still cause ANRs.
+     *
+     * In order to avoid that, if we can't load the status within {@link #LOAD_WAIT_TIMEOUT_MS},
+     * we'll give up and just returns {@link ProviderStatusCompat#STATUS_BUSY} in order to unblock
+     * the UI thread.  The actual result will be delivered later via {@link ProviderStatusListener}.
+     * (If {@link ProviderStatusCompat#STATUS_BUSY} is returned, the app (should) shows an according
+     * message, like "contacts are being updated".)
+     */
+    public int getProviderStatus() {
+        waitForLoaded();
+
+        if (mProviderStatus == null) {
+            return ProviderStatusCompat.STATUS_BUSY;
+        }
+
+        return mProviderStatus;
+    }
+
+    private void waitForLoaded() {
+        if (mProviderStatus == null) {
+            if (mLoaderTask == null) {
+                // For some reason the loader couldn't load the status.  Let's start it again.
+                startLoading();
+            }
+            synchronized (mSignal) {
+                try {
+                    mSignal.wait(LOAD_WAIT_TIMEOUT_MS);
+                } catch (InterruptedException ignore) {
+                }
+            }
+        }
+    }
+
+    private void startLoading() {
+        if (mLoaderTask != null) {
+            return; // Task already running.
+        }
+
+        if (DEBUG) {
+            Log.d(TAG, "Start loading");
+        }
+
+        mLoaderTask = new LoaderTask();
+        mLoaderTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
+    }
+
+    private class LoaderTask extends AsyncTask<Void, Void, Boolean> {
+        @Override
+        protected Boolean doInBackground(Void... params) {
+            try {
+                Cursor cursor = mContext.getContentResolver().query(ProviderStatus.CONTENT_URI,
+                        PROJECTION, null, null, null);
+                if (cursor != null) {
+                    try {
+                        if (cursor.moveToFirst()) {
+                            // Note here we can't just say "Status", as AsyncTask has the "Status"
+                            // enum too.
+                            mProviderStatus = cursor.getInt(0);
+                            return true;
+                        }
+                    } finally {
+                        cursor.close();
+                    }
+                }
+                return false;
+            } catch (SecurityException e) {
+                FeedbackHelper.sendFeedback(mContext, TAG,
+                        "Security exception when querying provider status", e);
+                return false;
+            } finally {
+                synchronized (mSignal) {
+                    mSignal.notifyAll();
+                }
+            }
+        }
+
+        @Override
+        protected void onCancelled(Boolean result) {
+            cleanUp();
+        }
+
+        @Override
+        protected void onPostExecute(Boolean loaded) {
+            cleanUp();
+            if (loaded != null && loaded) {
+                notifyListeners();
+            }
+        }
+
+        private void cleanUp() {
+            mLoaderTask = null;
+        }
+    }
+
+    /**
+     * Called when provider status may has changed.
+     *
+     * This method will be called on a worker thread by the framework.
+     */
+    @Override
+    public void onChange(boolean selfChange, Uri uri) {
+        if (!ProviderStatus.CONTENT_URI.equals(uri)) return;
+
+        // Provider status change is rare, so okay to log.
+        Log.i(TAG, "Provider status changed.");
+
+        mHandler.removeCallbacks(mStartLoadingRunnable); // Remove one in the queue, if any.
+        mHandler.post(mStartLoadingRunnable);
+    }
+}
diff --git a/src/com/android/contacts/list/ShortcutIntentBuilder.java b/src/com/android/contacts/list/ShortcutIntentBuilder.java
new file mode 100644
index 0000000..d7ac53a
--- /dev/null
+++ b/src/com/android/contacts/list/ShortcutIntentBuilder.java
@@ -0,0 +1,409 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.list;
+
+import android.app.ActivityManager;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Paint.FontMetricsInt;
+import android.graphics.Rect;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
+import android.telecom.PhoneAccount;
+import android.text.TextPaint;
+import android.text.TextUtils;
+import android.text.TextUtils.TruncateAt;
+
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.R;
+import com.android.contacts.util.ImplicitIntentsUtil;
+
+/**
+ * Constructs shortcut intents.
+ */
+public class ShortcutIntentBuilder {
+
+    private static final String[] CONTACT_COLUMNS = {
+        Contacts.DISPLAY_NAME,
+        Contacts.PHOTO_ID,
+        Contacts.LOOKUP_KEY
+    };
+
+    private static final int CONTACT_DISPLAY_NAME_COLUMN_INDEX = 0;
+    private static final int CONTACT_PHOTO_ID_COLUMN_INDEX = 1;
+    private static final int CONTACT_LOOKUP_KEY_COLUMN_INDEX = 2;
+
+    private static final String[] PHONE_COLUMNS = {
+        Phone.DISPLAY_NAME,
+        Phone.PHOTO_ID,
+        Phone.NUMBER,
+        Phone.TYPE,
+        Phone.LABEL,
+        Phone.LOOKUP_KEY
+    };
+
+    private static final int PHONE_DISPLAY_NAME_COLUMN_INDEX = 0;
+    private static final int PHONE_PHOTO_ID_COLUMN_INDEX = 1;
+    private static final int PHONE_NUMBER_COLUMN_INDEX = 2;
+    private static final int PHONE_TYPE_COLUMN_INDEX = 3;
+    private static final int PHONE_LABEL_COLUMN_INDEX = 4;
+    private static final int PHONE_LOOKUP_KEY_COLUMN_INDEX = 5;
+
+    private static final String[] PHOTO_COLUMNS = {
+        Photo.PHOTO,
+    };
+
+    private static final int PHOTO_PHOTO_COLUMN_INDEX = 0;
+
+    private static final String PHOTO_SELECTION = Photo._ID + "=?";
+
+    private final OnShortcutIntentCreatedListener mListener;
+    private final Context mContext;
+    private int mIconSize;
+    private final int mIconDensity;
+    private final int mOverlayTextBackgroundColor;
+    private final Resources mResources;
+
+    /**
+     * This is a hidden API of the launcher in JellyBean that allows us to disable the animation
+     * that it would usually do, because it interferes with our own animation for QuickContact.
+     * This is needed since some versions of the launcher override the intent flags and therefore
+     * ignore Intent.FLAG_ACTIVITY_NO_ANIMATION.
+     */
+    public static final String INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION =
+            "com.android.launcher.intent.extra.shortcut.INGORE_LAUNCH_ANIMATION";
+
+    /**
+     * Listener interface.
+     */
+    public interface OnShortcutIntentCreatedListener {
+
+        /**
+         * Callback for shortcut intent creation.
+         *
+         * @param uri the original URI for which the shortcut intent has been
+         *            created.
+         * @param shortcutIntent resulting shortcut intent.
+         */
+        void onShortcutIntentCreated(Uri uri, Intent shortcutIntent);
+    }
+
+    public ShortcutIntentBuilder(Context context, OnShortcutIntentCreatedListener listener) {
+        mContext = context;
+        mListener = listener;
+
+        mResources = context.getResources();
+        final ActivityManager am = (ActivityManager) context
+                .getSystemService(Context.ACTIVITY_SERVICE);
+        mIconSize = mResources.getDimensionPixelSize(R.dimen.shortcut_icon_size);
+        if (mIconSize == 0) {
+            mIconSize = am.getLauncherLargeIconSize();
+        }
+        mIconDensity = am.getLauncherLargeIconDensity();
+        mOverlayTextBackgroundColor = mResources.getColor(R.color.shortcut_overlay_text_background);
+    }
+
+    public void createContactShortcutIntent(Uri contactUri) {
+        new ContactLoadingAsyncTask(contactUri).execute();
+    }
+
+    public void createPhoneNumberShortcutIntent(Uri dataUri, String shortcutAction) {
+        new PhoneNumberLoadingAsyncTask(dataUri, shortcutAction).execute();
+    }
+
+    /**
+     * An asynchronous task that loads name, photo and other data from the database.
+     */
+    private abstract class LoadingAsyncTask extends AsyncTask<Void, Void, Void> {
+        protected Uri mUri;
+        protected String mContentType;
+        protected String mDisplayName;
+        protected String mLookupKey;
+        protected byte[] mBitmapData;
+        protected long mPhotoId;
+
+        public LoadingAsyncTask(Uri uri) {
+            mUri = uri;
+        }
+
+        @Override
+        protected Void doInBackground(Void... params) {
+            mContentType = mContext.getContentResolver().getType(mUri);
+            loadData();
+            loadPhoto();
+            return null;
+        }
+
+        protected abstract void loadData();
+
+        private void loadPhoto() {
+            if (mPhotoId == 0) {
+                return;
+            }
+
+            ContentResolver resolver = mContext.getContentResolver();
+            Cursor cursor = resolver.query(Data.CONTENT_URI, PHOTO_COLUMNS, PHOTO_SELECTION,
+                    new String[] { String.valueOf(mPhotoId) }, null);
+            if (cursor != null) {
+                try {
+                    if (cursor.moveToFirst()) {
+                        mBitmapData = cursor.getBlob(PHOTO_PHOTO_COLUMN_INDEX);
+                    }
+                } finally {
+                    cursor.close();
+                }
+            }
+        }
+    }
+
+    private final class ContactLoadingAsyncTask extends LoadingAsyncTask {
+        public ContactLoadingAsyncTask(Uri uri) {
+            super(uri);
+        }
+
+        @Override
+        protected void loadData() {
+            ContentResolver resolver = mContext.getContentResolver();
+            Cursor cursor = resolver.query(mUri, CONTACT_COLUMNS, null, null, null);
+            if (cursor != null) {
+                try {
+                    if (cursor.moveToFirst()) {
+                        mDisplayName = cursor.getString(CONTACT_DISPLAY_NAME_COLUMN_INDEX);
+                        mPhotoId = cursor.getLong(CONTACT_PHOTO_ID_COLUMN_INDEX);
+                        mLookupKey = cursor.getString(CONTACT_LOOKUP_KEY_COLUMN_INDEX);
+                    }
+                } finally {
+                    cursor.close();
+                }
+            }
+        }
+        @Override
+        protected void onPostExecute(Void result) {
+            createContactShortcutIntent(mUri, mContentType, mDisplayName, mLookupKey, mBitmapData);
+        }
+    }
+
+    private final class PhoneNumberLoadingAsyncTask extends LoadingAsyncTask {
+        private final String mShortcutAction;
+        private String mPhoneNumber;
+        private int mPhoneType;
+        private String mPhoneLabel;
+
+        public PhoneNumberLoadingAsyncTask(Uri uri, String shortcutAction) {
+            super(uri);
+            mShortcutAction = shortcutAction;
+        }
+
+        @Override
+        protected void loadData() {
+            ContentResolver resolver = mContext.getContentResolver();
+            Cursor cursor = resolver.query(mUri, PHONE_COLUMNS, null, null, null);
+            if (cursor != null) {
+                try {
+                    if (cursor.moveToFirst()) {
+                        mDisplayName = cursor.getString(PHONE_DISPLAY_NAME_COLUMN_INDEX);
+                        mPhotoId = cursor.getLong(PHONE_PHOTO_ID_COLUMN_INDEX);
+                        mPhoneNumber = cursor.getString(PHONE_NUMBER_COLUMN_INDEX);
+                        mPhoneType = cursor.getInt(PHONE_TYPE_COLUMN_INDEX);
+                        mPhoneLabel = cursor.getString(PHONE_LABEL_COLUMN_INDEX);
+                        mLookupKey = cursor.getString(PHONE_LOOKUP_KEY_COLUMN_INDEX);
+                    }
+                } finally {
+                    cursor.close();
+                }
+            }
+        }
+
+        @Override
+        protected void onPostExecute(Void result) {
+            createPhoneNumberShortcutIntent(mUri, mDisplayName, mLookupKey, mBitmapData,
+                    mPhoneNumber, mPhoneType, mPhoneLabel, mShortcutAction);
+        }
+    }
+
+    private Drawable getPhotoDrawable(byte[] bitmapData, String displayName, String lookupKey) {
+        if (bitmapData != null) {
+            Bitmap bitmap = BitmapFactory.decodeByteArray(bitmapData, 0, bitmapData.length, null);
+            return new BitmapDrawable(mContext.getResources(), bitmap);
+        } else {
+            return ContactPhotoManager.getDefaultAvatarDrawableForContact(mContext.getResources(),
+                    false, new DefaultImageRequest(displayName, lookupKey, false));
+        }
+    }
+
+    private void createContactShortcutIntent(Uri contactUri, String contentType, String displayName,
+            String lookupKey, byte[] bitmapData) {
+        Drawable drawable = getPhotoDrawable(bitmapData, displayName, lookupKey);
+
+        final Intent shortcutIntent = ImplicitIntentsUtil.getIntentForQuickContactLauncherShortcut(
+                mContext, contactUri);
+
+        final Bitmap icon = generateQuickContactIcon(drawable);
+
+        Intent intent = new Intent();
+        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
+        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
+        if (TextUtils.isEmpty(displayName)) {
+            intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, mContext.getResources().getString(
+                    R.string.missing_name));
+        } else {
+            intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, displayName);
+        }
+
+        mListener.onShortcutIntentCreated(contactUri, intent);
+    }
+
+    private void createPhoneNumberShortcutIntent(Uri uri, String displayName, String lookupKey,
+            byte[] bitmapData, String phoneNumber, int phoneType, String phoneLabel,
+            String shortcutAction) {
+        Drawable drawable = getPhotoDrawable(bitmapData, displayName, lookupKey);
+
+        Bitmap bitmap;
+        Uri phoneUri;
+        if (Intent.ACTION_CALL.equals(shortcutAction)) {
+            // Make the URI a direct tel: URI so that it will always continue to work
+            phoneUri = Uri.fromParts(PhoneAccount.SCHEME_TEL, phoneNumber, null);
+            bitmap = generatePhoneNumberIcon(drawable, phoneType, phoneLabel,
+                    R.drawable.quantum_ic_phone_vd_theme_24);
+        } else {
+            phoneUri = Uri.fromParts(ContactsUtils.SCHEME_SMSTO, phoneNumber, null);
+            bitmap = generatePhoneNumberIcon(drawable, phoneType, phoneLabel,
+                    R.drawable.quantum_ic_message_vd_theme_24);
+        }
+
+        Intent shortcutIntent = new Intent(shortcutAction, phoneUri);
+        shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+
+        Intent intent = new Intent();
+        intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bitmap);
+        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
+
+        if (TextUtils.isEmpty(displayName)) {
+            displayName = mContext.getResources().getString(R.string.missing_name);
+        }
+        if (TextUtils.equals(shortcutAction, Intent.ACTION_CALL)) {
+            intent.putExtra(Intent.EXTRA_SHORTCUT_NAME,
+                    mContext.getResources().getString(R.string.call_by_shortcut, displayName));
+        } else if (TextUtils.equals(shortcutAction, Intent.ACTION_SENDTO)) {
+            intent.putExtra(Intent.EXTRA_SHORTCUT_NAME,
+                    mContext.getResources().getString(R.string.sms_by_shortcut, displayName));
+        }
+
+        mListener.onShortcutIntentCreated(uri, intent);
+    }
+
+    private Bitmap generateQuickContactIcon(Drawable photo) {
+
+        // Setup the drawing classes
+        Bitmap bitmap = Bitmap.createBitmap(mIconSize, mIconSize, Bitmap.Config.ARGB_8888);
+        Canvas canvas = new Canvas(bitmap);
+
+        // Copy in the photo
+        Rect dst = new Rect(0,0, mIconSize, mIconSize);
+        photo.setBounds(dst);
+        photo.draw(canvas);
+
+        // Draw the icon with a rounded border
+        RoundedBitmapDrawable roundedDrawable =
+                RoundedBitmapDrawableFactory.create(mResources, bitmap);
+        roundedDrawable.setAntiAlias(true);
+        roundedDrawable.setCornerRadius(mIconSize / 2);
+        Bitmap roundedBitmap = Bitmap.createBitmap(mIconSize, mIconSize, Bitmap.Config.ARGB_8888);
+        canvas.setBitmap(roundedBitmap);
+        roundedDrawable.setBounds(dst);
+        roundedDrawable.draw(canvas);
+        canvas.setBitmap(null);
+
+        return roundedBitmap;
+    }
+
+    /**
+     * Generates a phone number shortcut icon. Adds an overlay describing the type of the phone
+     * number, and if there is a photo also adds the call action icon.
+     */
+    private Bitmap generatePhoneNumberIcon(Drawable photo, int phoneType, String phoneLabel,
+            int actionResId) {
+        final Resources r = mContext.getResources();
+        final float density = r.getDisplayMetrics().density;
+
+        Bitmap phoneIcon = ((BitmapDrawable) r.getDrawableForDensity(actionResId, mIconDensity))
+                .getBitmap();
+
+        Bitmap icon = generateQuickContactIcon(photo);
+        Canvas canvas = new Canvas(icon);
+
+        // Copy in the photo
+        Paint photoPaint = new Paint();
+        photoPaint.setDither(true);
+        photoPaint.setFilterBitmap(true);
+        Rect dst = new Rect(0, 0, mIconSize, mIconSize);
+
+        // Create an overlay for the phone number type
+        CharSequence overlay = Phone.getTypeLabel(r, phoneType, phoneLabel);
+
+        if (overlay != null) {
+            TextPaint textPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG | Paint.DEV_KERN_TEXT_FLAG);
+            textPaint.setTextSize(r.getDimension(R.dimen.shortcut_overlay_text_size));
+            textPaint.setColor(r.getColor(R.color.textColorIconOverlay));
+            textPaint.setShadowLayer(4f, 0, 2f, r.getColor(R.color.textColorIconOverlayShadow));
+
+            final FontMetricsInt fmi = textPaint.getFontMetricsInt();
+
+            // First fill in a darker background around the text to be drawn
+            final Paint workPaint = new Paint();
+            workPaint.setColor(mOverlayTextBackgroundColor);
+            workPaint.setStyle(Paint.Style.FILL);
+            final int textPadding = r
+                    .getDimensionPixelOffset(R.dimen.shortcut_overlay_text_background_padding);
+            final int textBandHeight = (fmi.descent - fmi.ascent) + textPadding * 2;
+            dst.set(0, mIconSize - textBandHeight, mIconSize, mIconSize);
+            canvas.drawRect(dst, workPaint);
+
+            overlay = TextUtils.ellipsize(overlay, textPaint, mIconSize, TruncateAt.END);
+            final float textWidth = textPaint.measureText(overlay, 0, overlay.length());
+            canvas.drawText(overlay, 0, overlay.length(), (mIconSize - textWidth) / 2, mIconSize
+                    - fmi.descent - textPadding, textPaint);
+        }
+
+        // Draw the phone action icon as an overlay
+        Rect src = new Rect(0, 0, phoneIcon.getWidth(), phoneIcon.getHeight());
+        int iconWidth = icon.getWidth();
+        dst.set(iconWidth - ((int) (20 * density)), -1,
+                iconWidth, ((int) (19 * density)));
+        canvas.drawBitmap(phoneIcon, src, dst, photoPaint);
+
+        canvas.setBitmap(null);
+
+        return icon;
+    }
+}
diff --git a/src/com/android/contacts/location/CountryDetector.java b/src/com/android/contacts/location/CountryDetector.java
new file mode 100644
index 0000000..9d08fc0
--- /dev/null
+++ b/src/com/android/contacts/location/CountryDetector.java
@@ -0,0 +1,126 @@
+package com.android.contacts.location;
+
+import android.content.Context;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+
+import java.util.Locale;
+
+/**
+ * This class is used to detect the country where the user is. It is a simplified version of the
+ * country detector service in the framework. The sources of country location are queried in the
+ * following order of reliability:
+ * <ul>
+ * <li>Mobile network</li>
+ * <li>SIM's country</li>
+ * <li>User's default locale</li>
+ * </ul>
+ *
+ * As far as possible this class tries to replicate the behavior of the system's country detector
+ * service:
+ * 1) Order in priority of sources of country location
+ * 2) Mobile network information provided by CDMA phones is ignored
+ */
+public class CountryDetector {
+    private static final String TAG = "CountryDetector";
+
+    private static CountryDetector sInstance;
+
+    private final Context mContext;
+    private final LocaleProvider mLocaleProvider;
+    private final TelephonyManager mTelephonyManager;
+
+    // Used as a default country code when all the sources of country data have failed in the
+    // exceedingly rare event that the device does not have a default locale set for some reason.
+    private final String DEFAULT_COUNTRY_ISO = "US";
+
+    /**
+     * Class that can be used to return the user's default locale. This is in its own class so that
+     * it can be mocked out.
+     */
+    public static class LocaleProvider {
+        public Locale getDefaultLocale() {
+            return Locale.getDefault();
+        }
+    }
+
+    private CountryDetector(Context context) {
+        this (context, (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE),
+                new LocaleProvider());
+    }
+
+    private CountryDetector(Context context, TelephonyManager telephonyManager,
+            LocaleProvider localeProvider) {
+        mTelephonyManager = telephonyManager;
+        mLocaleProvider = localeProvider;
+        mContext = context;
+    }
+
+    /**
+     * Factory method for {@link CountryDetector} that allows the caller to provide mock objects.
+     */
+    public CountryDetector getInstanceForTest(Context context, TelephonyManager telephonyManager,
+            LocaleProvider localeProvider) {
+        return new CountryDetector(context, telephonyManager, localeProvider);
+    }
+
+    /**
+     * Returns the instance of the country detector. {@link #initialize(Context)} must have been
+     * called previously.
+     *
+     * @return the initialized country detector.
+     */
+    public synchronized static CountryDetector getInstance(Context context) {
+        if (sInstance == null) {
+            sInstance = new CountryDetector(context.getApplicationContext());
+        }
+        return sInstance;
+    }
+
+    public String getCurrentCountryIso() {
+        String result = null;
+        if (isNetworkCountryCodeAvailable()) {
+            result = getNetworkBasedCountryIso();
+        }
+        if (TextUtils.isEmpty(result)) {
+            result = getSimBasedCountryIso();
+        }
+        if (TextUtils.isEmpty(result)) {
+            result = getLocaleBasedCountryIso();
+        }
+        if (TextUtils.isEmpty(result)) {
+            result = DEFAULT_COUNTRY_ISO;
+        }
+        return result.toUpperCase(Locale.US);
+    }
+
+    /**
+     * @return the country code of the current telephony network the user is connected to.
+     */
+    private String getNetworkBasedCountryIso() {
+        return mTelephonyManager.getNetworkCountryIso();
+    }
+
+    /**
+     * @return the country code of the SIM card currently inserted in the device.
+     */
+    private String getSimBasedCountryIso() {
+        return mTelephonyManager.getSimCountryIso();
+    }
+
+    /**
+     * @return the country code of the user's currently selected locale.
+     */
+    private String getLocaleBasedCountryIso() {
+        Locale defaultLocale = mLocaleProvider.getDefaultLocale();
+        if (defaultLocale != null) {
+            return defaultLocale.getCountry();
+        }
+        return null;
+    }
+
+    private boolean isNetworkCountryCodeAvailable() {
+        // On CDMA TelephonyManager.getNetworkCountryIso() just returns the SIM's country code.
+        return mTelephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM;
+    }
+}
diff --git a/src/com/android/contacts/logging/EditorEvent.java b/src/com/android/contacts/logging/EditorEvent.java
new file mode 100644
index 0000000..48308ac
--- /dev/null
+++ b/src/com/android/contacts/logging/EditorEvent.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.logging;
+
+import com.google.common.base.MoreObjects;
+
+public class EditorEvent {
+
+    /** The editor event type that is logged. */
+    public int eventType;
+
+    /** The number of raw contacts shown in the raw contacts picker. */
+    public int numberRawContacts;
+
+    public static final class EventType {
+        public static final int UNKNOWN = 0;
+        public static final int SHOW_RAW_CONTACT_PICKER = 1;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("eventType", eventType)
+                .add("numberRawContacts", numberRawContacts)
+                .toString();
+    }
+}
diff --git a/src/com/android/contacts/logging/ListEvent.java b/src/com/android/contacts/logging/ListEvent.java
new file mode 100644
index 0000000..50da98f
--- /dev/null
+++ b/src/com/android/contacts/logging/ListEvent.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.logging;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * Describes how user view and use a list
+ */
+public final class ListEvent {
+
+    /** The type of action taken by the user. **/
+    public int actionType;
+
+    /** The type of list the user is viewing. **/
+    public int listType;
+
+    /** The number of contacts in the list. **/
+    public int count;
+
+    /** The index of contact clicked by user. **/
+    public int clickedIndex = -1;
+
+    /** The number of contact selected when user takes an action (link, delete, share, etc). **/
+    public int numSelected;
+
+    // Should match ContactsExtension.ListEvent.ActionType values in
+    // http://cs/google3/logs/proto/wireless/android/contacts/contacts_extensions.proto
+    public static final class ActionType {
+        public static final int UNKNOWN = 0;
+        public static final int LOAD = 1;
+        public static final int CLICK = 2;
+        public static final int SELECT = 3;
+        public static final int SHARE = 4;
+        public static final int DELETE = 5;
+        public static final int LINK = 6;
+        public static final int REMOVE_LABEL = 7;
+
+        private ActionType() {
+        }
+    }
+
+    // Should match ContactsExtension.ListEvent.ListType values in
+    // http://cs/google3/logs/proto/wireless/android/contacts/contacts_extensions.proto
+    public static final class ListType {
+        public static final int UNKNOWN_LIST = 0;
+        public static final int ALL_CONTACTS = 1;
+        public static final int ACCOUNT = 2;
+        public static final int GROUP = 3;
+        public static final int SEARCH_RESULT = 4;
+        public static final int DEVICE = 5;
+        public static final int CUSTOM = 6;
+        public static final int STARRED = 7;
+        public static final int PHONE_NUMBERS = 8;
+        public static final int SINGLE_CONTACT = 9;
+        public static final int PICK_CONTACT = 10;
+        public static final int PICK_CONTACT_FOR_SHORTCUT = 11;
+        public static final int PICK_PHONE = 12;
+        public static final int PICK_EMAIL = 13;
+        public static final int PICK_POSTAL = 14;
+        public static final int PICK_JOIN = 15;
+        public static final int PICK_GROUP_MEMBERS = 16;
+
+        private ListType() {
+        }
+    }
+
+    public ListEvent() {
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("actionType", actionType)
+                .add("listType", listType)
+                .add("count", count)
+                .add("clickedIndex", clickedIndex)
+                .add("numSelected", numSelected)
+                .toString();
+    }
+}
diff --git a/src/com/android/contacts/logging/Logger.java b/src/com/android/contacts/logging/Logger.java
new file mode 100644
index 0000000..366c19b
--- /dev/null
+++ b/src/com/android/contacts/logging/Logger.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.logging;
+
+import android.app.Activity;
+
+import com.android.contacts.logging.ScreenEvent.ScreenType;
+import com.android.contactsbind.ObjectFactory;
+
+/**
+ * Logs analytics events.
+ */
+public abstract class Logger {
+    public static final String TAG = "Logger";
+
+    private static Logger getInstance() {
+        return ObjectFactory.getLogger();
+    }
+
+    /**
+     * Logs an event indicating that a screen was displayed.
+     *
+     * @param screenType integer identifier of the displayed screen
+     * @param activity Parent activity of the displayed screen.
+     */
+    public static void logScreenView(Activity activity, int screenType) {
+        logScreenView(activity, screenType, ScreenType.UNKNOWN);
+    }
+
+    /**
+     * @param previousScreenType integer identifier of the displayed screen the user came from.
+     */
+    public static void logScreenView(Activity activity, int screenType, int previousScreenType) {
+        final Logger logger = getInstance();
+        if (logger != null) {
+            logger.logScreenViewImpl(screenType, previousScreenType);
+        }
+    }
+
+    /**
+     * Logs the results of a user search for a particular contact.
+     */
+    public static void logSearchEvent(SearchState searchState) {
+        final Logger logger = getInstance();
+        if (logger != null) {
+            logger.logSearchEventImpl(searchState);
+        }
+    }
+
+    /**
+     * Logs how users view and use a contacts list. See {@link ListEvent} for definition of
+     * parameters.
+     */
+    public static void logListEvent(int actionType, int listType, int count, int clickedIndex,
+            int numSelected) {
+        final ListEvent event = new ListEvent();
+        event.actionType = actionType;
+        event.listType = listType;
+        event.count = count;
+        event.clickedIndex = clickedIndex;
+        event.numSelected = numSelected;
+
+        final Logger logger = getInstance();
+        if (logger != null) {
+            logger.logListEventImpl(event);
+        }
+    }
+
+    /**
+     * Logs an event on QuickContact. See {@link QuickContactEvent} for definition of parameters.
+     */
+    public static void logQuickContactEvent(String referrer, int contactType, int cardType,
+            int actionType, String thirdPartyAction) {
+        final Logger logger = getInstance();
+        if (logger != null) {
+            final QuickContactEvent event = new QuickContactEvent();
+            event.referrer = referrer == null ? "Unknown" : referrer;
+            event.contactType = contactType;
+            event.cardType = cardType;
+            event.actionType = actionType;
+            event.thirdPartyAction = thirdPartyAction == null ? "" : thirdPartyAction;
+            logger.logQuickContactEventImpl(event);
+        }
+    }
+
+    public static void logEditorEvent(int eventType, int numberRawContacts) {
+        final Logger logger = getInstance();
+        if (logger != null) {
+            final EditorEvent event = new EditorEvent();
+            event.eventType = eventType;
+            event.numberRawContacts = numberRawContacts;
+            logger.logEditorEventImpl(event);
+        }
+    }
+
+    public abstract void logScreenViewImpl(int screenType, int previousScreenType);
+    public abstract void logSearchEventImpl(SearchState searchState);
+    public abstract void logListEventImpl(ListEvent event);
+    public abstract void logQuickContactEventImpl(QuickContactEvent event);
+    public abstract void logEditorEventImpl(EditorEvent event);
+}
diff --git a/src/com/android/contacts/logging/QuickContactEvent.java b/src/com/android/contacts/logging/QuickContactEvent.java
new file mode 100644
index 0000000..05d7308
--- /dev/null
+++ b/src/com/android/contacts/logging/QuickContactEvent.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.logging;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * Describes how user views and takes action in Quick contact
+ */
+public final class QuickContactEvent {
+
+    /** The package name that QuickContact is launched from. **/
+    public String referrer;
+
+    /** The type of the contact displayed in QuickContact. **/
+    public int contactType;
+
+    /** The type of the card displayed in QuickContact. **/
+    public int cardType;
+
+    /** The type of the user action in QuickContact. **/
+    public int actionType;
+
+    /** The third party action that a user takes. **/
+    public String thirdPartyAction;
+
+    // Should match ContactsExtension.QuickContactEvent values in
+    // http://cs/google3/logs/proto/wireless/android/contacts/contacts_extensions.proto
+    public static final class ContactType {
+        public static final int UNKNOWN_TYPE = 0;
+        public static final int EDITABLE = 1;
+        public static final int INVISIBLE_AND_ADDABLE = 2;
+        public static final int DIRECTORY = 3;
+    }
+
+    public static final class CardType {
+        public static final int UNKNOWN_CARD = 0;
+        public static final int NO_CONTACT = 1;
+        public static final int CONTACT = 2;
+        public static final int RECENT = 3;
+        public static final int ABOUT = 4;
+        public static final int PERMISSION = 5;
+    }
+
+    public static final class ActionType {
+        public static final int UNKNOWN_ACTION = 0;
+        public static final int START = 1;
+        public static final int STAR = 2;
+        public static final int UNSTAR = 3;
+        public static final int EDIT = 4;
+        public static final int ADD = 5;
+        public static final int REMOVE = 6;
+        public static final int SHARE = 7;
+        public static final int SHORTCUT = 8;
+        public static final int HELP = 9;
+        public static final int CALL = 10;
+        public static final int SMS = 11;
+        public static final int VIDEOCALL = 12;
+        public static final int EMAIL = 13;
+        public static final int SIPCALL = 14;
+        public static final int ADDRESS = 15;
+        public static final int DIRECTIONS = 16;
+        public static final int THIRD_PARTY = 17;
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("referrer", referrer)
+                .add("contactType", contactType)
+                .add("cardType", cardType)
+                .add("actionType", actionType)
+                .add("thirdPartyAction", thirdPartyAction)
+                .toString();
+    }
+}
diff --git a/src/com/android/contacts/logging/ScreenEvent.java b/src/com/android/contacts/logging/ScreenEvent.java
new file mode 100644
index 0000000..9edcbc7
--- /dev/null
+++ b/src/com/android/contacts/logging/ScreenEvent.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.logging;
+
+/**
+ * Stores constants identifying individual screens/dialogs/fragments in the application, and also
+ * provides a mapping of integer id -> screen name mappings for analytics purposes.
+ */
+public class ScreenEvent {
+
+    // Should match ContactsExtension.ScreenEvent.ScreenType values in
+    // http://cs/google3/logs/proto/wireless/android/contacts/contacts_extensions.proto
+    public static class ScreenType {
+        public static final int UNKNOWN = 0;
+        public static final int SEARCH = 1;
+        public static final int SEARCH_EXIT = 2;
+        public static final int FAVORITES = 3;
+        public static final int ALL_CONTACTS = 4;
+        public static final int QUICK_CONTACT = 5;
+        public static final int EDITOR = 6;
+        public static final int LIST_ACCOUNT = 7;
+        public static final int LIST_GROUP = 8;
+        public static final int ME_CONTACT = 9;
+    }
+}
diff --git a/src/com/android/contacts/logging/SearchState.java b/src/com/android/contacts/logging/SearchState.java
new file mode 100644
index 0000000..8b1872d
--- /dev/null
+++ b/src/com/android/contacts/logging/SearchState.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.logging;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * Describes the results of a user search for a particular contact.
+ */
+public final class SearchState implements Parcelable {
+
+    /** The length of the query string input by the user. */
+    public int queryLength;
+
+    /** The number of partitions (groups of results) presented to the user. */
+    public int numPartitions;
+
+    /** The total number of results (across all partitions) presented to the user. */
+    public int numResults;
+
+    /** The number of results presented to the user in the partition that was selected. */
+    public int numResultsInSelectedPartition = -1;
+
+    /** The zero-based index of the partition in which the clicked query result resides. */
+    public int selectedPartition = -1;
+
+    /** The index of the clicked query result within its partition. */
+    public int selectedIndexInPartition = -1;
+
+    /**
+     * The zero-based index of the clicked query result among all results displayed to the user
+     * (across partitions).
+     */
+    public int selectedIndex = -1;
+
+    public static final Creator<SearchState> CREATOR = new Creator<SearchState>() {
+        @Override
+        public SearchState createFromParcel(Parcel in) {
+            return new SearchState(in);
+        }
+
+        @Override
+        public SearchState[] newArray(int size) {
+            return new SearchState[size];
+        }
+    };
+
+    public SearchState() {
+    }
+
+    protected SearchState(Parcel source) {
+        readFromParcel(source);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("queryLength", queryLength)
+                .add("numPartitions", numPartitions)
+                .add("numResults", numResults)
+                .add("numResultsInSelectedPartition", numResultsInSelectedPartition)
+                .add("selectedPartition", selectedPartition)
+                .add("selectedIndexInPartition", selectedIndexInPartition)
+                .add("selectedIndex", selectedIndex)
+                .toString();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(queryLength);
+        dest.writeInt(numPartitions);
+        dest.writeInt(numResults);
+        dest.writeInt(numResultsInSelectedPartition);
+        dest.writeInt(selectedPartition);
+        dest.writeInt(selectedIndexInPartition);
+        dest.writeInt(selectedIndex);
+    }
+
+    private void readFromParcel(Parcel source) {
+        queryLength = source.readInt();
+        numPartitions = source.readInt();
+        numResults = source.readInt();
+        numResultsInSelectedPartition = source.readInt();
+        selectedPartition = source.readInt();
+        selectedIndexInPartition = source.readInt();
+        selectedIndex = source.readInt();
+    }
+}
diff --git a/src/com/android/contacts/model/AccountTypeManager.java b/src/com/android/contacts/model/AccountTypeManager.java
new file mode 100644
index 0000000..434d10b
--- /dev/null
+++ b/src/com/android/contacts/model/AccountTypeManager.java
@@ -0,0 +1,704 @@
+/*
+ * 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.model;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.accounts.OnAccountsUpdateListener;
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.content.SyncStatusObserver;
+import android.content.pm.PackageManager;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Looper;
+import android.provider.ContactsContract;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.content.LocalBroadcastManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.contacts.Experiments;
+import com.android.contacts.R;
+import com.android.contacts.list.ContactListFilterController;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountTypeProvider;
+import com.android.contacts.model.account.AccountTypeWithDataSet;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.FallbackAccountType;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.concurrent.ContactsExecutors;
+import com.android.contactsbind.experiments.Flags;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Function;
+import com.google.common.base.Objects;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Executor;
+
+import javax.annotation.Nullable;
+
+/**
+ * Singleton holder for all parsed {@link AccountType} available on the
+ * system, typically filled through {@link PackageManager} queries.
+ */
+public abstract class AccountTypeManager {
+    static final String TAG = "AccountTypeManager";
+
+    private static final Object mInitializationLock = new Object();
+    private static AccountTypeManager mAccountTypeManager;
+
+    public static final String BROADCAST_ACCOUNTS_CHANGED = AccountTypeManager.class.getName() +
+            ".AccountsChanged";
+
+    /**
+     * Requests the singleton instance of {@link AccountTypeManager} with data bound from
+     * the available authenticators. This method can safely be called from the UI thread.
+     */
+    public static AccountTypeManager getInstance(Context context) {
+        if (!hasRequiredPermissions(context)) {
+            // Hopefully any component that depends on the values returned by this class
+            // will be restarted if the permissions change.
+            return EMPTY;
+        }
+        synchronized (mInitializationLock) {
+            if (mAccountTypeManager == null) {
+                context = context.getApplicationContext();
+                mAccountTypeManager = new AccountTypeManagerImpl(context);
+            }
+        }
+        return mAccountTypeManager;
+    }
+
+    /**
+     * Set the instance of account type manager.  This is only for and should only be used by unit
+     * tests.  While having this method is not ideal, it's simpler than the alternative of
+     * holding this as a service in the ContactsApplication context class.
+     *
+     * @param mockManager The mock AccountTypeManager.
+     */
+    public static void setInstanceForTest(AccountTypeManager mockManager) {
+        synchronized (mInitializationLock) {
+            mAccountTypeManager = mockManager;
+        }
+    }
+
+    private static final AccountTypeManager EMPTY = new AccountTypeManager() {
+
+        @Override
+        public List<AccountWithDataSet> getAccounts(boolean contactWritableOnly) {
+            return Collections.emptyList();
+        }
+
+        @Override
+        public ListenableFuture<List<AccountInfo>> getAccountsAsync() {
+            return Futures.immediateFuture(Collections.<AccountInfo>emptyList());
+        }
+
+        @Override
+        public ListenableFuture<List<AccountInfo>> filterAccountsAsync(
+                Predicate<AccountInfo> filter) {
+            return Futures.immediateFuture(Collections.<AccountInfo>emptyList());
+        }
+
+        @Override
+        public AccountInfo getAccountInfoForAccount(AccountWithDataSet account) {
+            return null;
+        }
+
+        @Override
+        public List<AccountWithDataSet> getGroupWritableAccounts() {
+            return Collections.emptyList();
+        }
+
+        @Override
+        public Account getDefaultGoogleAccount() {
+            return null;
+        }
+
+        @Override
+        public AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet) {
+            return null;
+        }
+    };
+
+    /**
+     * Returns the list of all accounts (if contactWritableOnly is false) or just the list of
+     * contact writable accounts (if contactWritableOnly is true).
+     */
+    // TODO: Consider splitting this into getContactWritableAccounts() and getAllAccounts()
+    public abstract List<AccountWithDataSet> getAccounts(boolean contactWritableOnly);
+
+    /**
+     * Loads accounts in background and returns future that will complete with list of all accounts
+     */
+    public abstract ListenableFuture<List<AccountInfo>> getAccountsAsync();
+
+    /**
+     * Loads accounts and applies the fitler returning only for which the predicate is true
+     */
+    public abstract ListenableFuture<List<AccountInfo>> filterAccountsAsync(
+            Predicate<AccountInfo> filter);
+
+    public abstract AccountInfo getAccountInfoForAccount(AccountWithDataSet account);
+
+    /**
+     * Returns the list of accounts that are group writable.
+     */
+    public abstract List<AccountWithDataSet> getGroupWritableAccounts();
+
+    /**
+     * Returns the default google account.
+     */
+    public abstract Account getDefaultGoogleAccount();
+
+    /**
+     * Returns the Google Accounts.
+     *
+     * <p>This method exists in addition to filterAccountsByTypeAsync because it should be safe
+     * to call synchronously.
+     * </p>
+     */
+    public List<AccountInfo> getWritableGoogleAccounts() {
+        // This implementation may block and should be overridden by the Impl class
+        return Futures.getUnchecked(filterAccountsAsync(new Predicate<AccountInfo>() {
+            @Override
+            public boolean apply(@Nullable AccountInfo input) {
+                return  input.getType().areContactsWritable() &&
+                        GoogleAccountType.ACCOUNT_TYPE.equals(input.getType().accountType);
+            }
+        }));
+    }
+
+    /**
+     * Returns true if there are real accounts (not "local" account) in the list of accounts.
+     */
+    public boolean hasNonLocalAccount() {
+        final List<AccountWithDataSet> allAccounts = getAccounts(/* contactWritableOnly */ false);
+        if (allAccounts == null || allAccounts.size() == 0) {
+            return false;
+        }
+        if (allAccounts.size() > 1) {
+            return true;
+        }
+        return !allAccounts.get(0).isNullAccount();
+    }
+
+    static Account getDefaultGoogleAccount(AccountManager accountManager,
+            SharedPreferences prefs, String defaultAccountKey) {
+        // Get all the google accounts on the device
+        final Account[] accounts = accountManager.getAccountsByType(
+                GoogleAccountType.ACCOUNT_TYPE);
+        if (accounts == null || accounts.length == 0) {
+            return null;
+        }
+
+        // Get the default account from preferences
+        final String defaultAccount = prefs.getString(defaultAccountKey, null);
+        final AccountWithDataSet accountWithDataSet = defaultAccount == null ? null :
+                AccountWithDataSet.unstringify(defaultAccount);
+
+        // Look for an account matching the one from preferences
+        if (accountWithDataSet != null) {
+            for (int i = 0; i < accounts.length; i++) {
+                if (TextUtils.equals(accountWithDataSet.name, accounts[i].name)
+                        && TextUtils.equals(accountWithDataSet.type, accounts[i].type)) {
+                    return accounts[i];
+                }
+            }
+        }
+
+        // Just return the first one
+        return accounts[0];
+    }
+
+    public abstract AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet);
+
+    public final AccountType getAccountType(String accountType, String dataSet) {
+        return getAccountType(AccountTypeWithDataSet.get(accountType, dataSet));
+    }
+
+    public final AccountType getAccountTypeForAccount(AccountWithDataSet account) {
+        if (account != null) {
+            return getAccountType(account.getAccountTypeWithDataSet());
+        }
+        return getAccountType(null, null);
+    }
+
+    /**
+     * Find the best {@link DataKind} matching the requested
+     * {@link AccountType#accountType}, {@link AccountType#dataSet}, and {@link DataKind#mimeType}.
+     * If no direct match found, we try searching {@link FallbackAccountType}.
+     */
+    public DataKind getKindOrFallback(AccountType type, String mimeType) {
+        return type == null ? null : type.getKindForMimetype(mimeType);
+    }
+
+    /**
+     * @param contactWritableOnly if true, it only returns ones that support writing contacts.
+     * @return true when this instance contains the given account.
+     */
+    public boolean contains(AccountWithDataSet account, boolean contactWritableOnly) {
+        for (AccountWithDataSet account_2 : getAccounts(contactWritableOnly)) {
+            if (account.equals(account_2)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean hasGoogleAccount() {
+        return getDefaultGoogleAccount() != null;
+    }
+
+    private static boolean hasRequiredPermissions(Context context) {
+        final boolean canGetAccounts = ContextCompat.checkSelfPermission(context,
+                android.Manifest.permission.GET_ACCOUNTS) == PackageManager.PERMISSION_GRANTED;
+        final boolean canReadContacts = ContextCompat.checkSelfPermission(context,
+                android.Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED;
+        return canGetAccounts && canReadContacts;
+    }
+
+    public static Predicate<AccountInfo> nonNullAccountFilter() {
+        return new Predicate<AccountInfo>() {
+            @Override
+            public boolean apply(AccountInfo info) {
+                AccountWithDataSet account = info != null ? info.getAccount() : null;
+                return account != null && !account.isNullAccount();
+            }
+        };
+
+    }
+
+    public static Predicate<AccountInfo> writableFilter() {
+        return new Predicate<AccountInfo>() {
+            @Override
+            public boolean apply(AccountInfo account) {
+                return account.getType().areContactsWritable();
+            }
+        };
+    }
+
+    public static Predicate<AccountInfo> groupWritableFilter() {
+        return new Predicate<AccountInfo>() {
+            @Override
+            public boolean apply(@Nullable AccountInfo account) {
+                return account.getType().isGroupMembershipEditable();
+            }
+        };
+    }
+
+    public static Predicate<AccountInfo> onlyNonEmptyExtensionFilter(Context context) {
+        final Context appContext = context.getApplicationContext();
+        return new Predicate<AccountInfo>() {
+            @Override
+            public boolean apply(@Nullable AccountInfo input) {
+                return !input.getType().isExtension() || input.getAccount().hasData(appContext);
+            }
+        };
+    }
+}
+
+class AccountTypeManagerImpl extends AccountTypeManager
+        implements OnAccountsUpdateListener, SyncStatusObserver {
+
+    private final Context mContext;
+    private final AccountManager mAccountManager;
+    private final DeviceLocalAccountLocator mLocalAccountLocator;
+    private final Executor mMainThreadExecutor;
+    private final ListeningExecutorService mExecutor;
+    private AccountTypeProvider mTypeProvider;
+
+    private final AccountType mFallbackAccountType;
+
+    private ListenableFuture<List<AccountWithDataSet>> mLocalAccountsFuture;
+    private ListenableFuture<AccountTypeProvider> mAccountTypesFuture;
+
+    private List<AccountWithDataSet> mLocalAccounts = new ArrayList<>();
+    private List<AccountWithDataSet> mAccountManagerAccounts = new ArrayList<>();
+
+    private final Handler mMainThreadHandler = new Handler(Looper.getMainLooper());
+
+    private final Function<AccountTypeProvider, List<AccountWithDataSet>> mAccountsExtractor =
+            new Function<AccountTypeProvider, List<AccountWithDataSet>>() {
+                @Nullable
+                @Override
+                public List<AccountWithDataSet> apply(@Nullable AccountTypeProvider typeProvider) {
+                    return getAccountsWithDataSets(mAccountManager.getAccounts(), typeProvider);
+                }
+            };
+
+
+    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            // Don't use reloadAccountTypesIfNeeded when packages change in case a contacts.xml
+            // was updated.
+            reloadAccountTypes();
+        }
+    };
+
+    /**
+     * Internal constructor that only performs initial parsing.
+     */
+    public AccountTypeManagerImpl(Context context) {
+        mContext = context;
+        mLocalAccountLocator = DeviceLocalAccountLocator.create(context);
+        mTypeProvider = new AccountTypeProvider(context);
+        mFallbackAccountType = new FallbackAccountType(context);
+
+        mAccountManager = AccountManager.get(mContext);
+
+        mExecutor = ContactsExecutors.getDefaultThreadPoolExecutor();
+        mMainThreadExecutor = ContactsExecutors.newHandlerExecutor(mMainThreadHandler);
+
+        // Request updates when packages or accounts change
+        IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);
+        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+        filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+        filter.addDataScheme("package");
+        mContext.registerReceiver(mBroadcastReceiver, filter);
+        IntentFilter sdFilter = new IntentFilter();
+        sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);
+        sdFilter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);
+        mContext.registerReceiver(mBroadcastReceiver, sdFilter);
+
+        // Request updates when locale is changed so that the order of each field will
+        // be able to be changed on the locale change.
+        filter = new IntentFilter(Intent.ACTION_LOCALE_CHANGED);
+        mContext.registerReceiver(mBroadcastReceiver, filter);
+
+        mAccountManager.addOnAccountsUpdatedListener(this, mMainThreadHandler, false);
+
+        ContentResolver.addStatusChangeListener(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS, this);
+
+        if (Flags.getInstance().getBoolean(Experiments.OEM_CP2_DEVICE_ACCOUNT_DETECTION_ENABLED)) {
+            // Observe changes to RAW_CONTACTS so that we will update the list of "Device" accounts
+            // if a new device contact is added.
+            mContext.getContentResolver().registerContentObserver(
+                    ContactsContract.RawContacts.CONTENT_URI, /* notifyDescendents */ true,
+                    new ContentObserver(mMainThreadHandler) {
+                        @Override
+                        public boolean deliverSelfNotifications() {
+                            return true;
+                        }
+
+                        @Override
+                        public void onChange(boolean selfChange) {
+                            reloadLocalAccounts();
+                        }
+
+                        @Override
+                        public void onChange(boolean selfChange, Uri uri) {
+                            reloadLocalAccounts();
+                        }
+                    });
+        }
+        loadAccountTypes();
+    }
+
+    @Override
+    public void onStatusChanged(int which) {
+        reloadAccountTypesIfNeeded();
+    }
+
+    /* This notification will arrive on the UI thread */
+    public void onAccountsUpdated(Account[] accounts) {
+        maybeNotifyAccountsUpdated(mAccountManagerAccounts,
+                getAccountsWithDataSets(accounts, mTypeProvider));
+    }
+
+    private void maybeNotifyAccountsUpdated(List<AccountWithDataSet> current,
+            List<AccountWithDataSet> update) {
+        if (Objects.equal(current, update)) {
+            return;
+        }
+        current.clear();
+        current.addAll(update);
+        notifyAccountsChanged();
+    }
+
+    private void notifyAccountsChanged() {
+        ContactListFilterController.getInstance(mContext).checkFilterValidity(true);
+        LocalBroadcastManager.getInstance(mContext).sendBroadcast(
+                new Intent(BROADCAST_ACCOUNTS_CHANGED));
+    }
+
+    private synchronized void startLoadingIfNeeded() {
+        if (mTypeProvider == null && mAccountTypesFuture == null) {
+            reloadAccountTypesIfNeeded();
+        }
+        if (mLocalAccountsFuture == null) {
+            reloadLocalAccounts();
+        }
+    }
+
+    private synchronized void loadAccountTypes() {
+        mTypeProvider = new AccountTypeProvider(mContext);
+
+        mAccountTypesFuture = mExecutor.submit(new Callable<AccountTypeProvider>() {
+            @Override
+            public AccountTypeProvider call() throws Exception {
+                // This will request the AccountType for each Account forcing them to be loaded
+                getAccountsWithDataSets(mAccountManager.getAccounts(), mTypeProvider);
+                return mTypeProvider;
+            }
+        });
+    }
+
+    private FutureCallback<List<AccountWithDataSet>> newAccountsUpdatedCallback(
+            final List<AccountWithDataSet> currentAccounts) {
+        return new FutureCallback<List<AccountWithDataSet>>() {
+            @Override
+            public void onSuccess(List<AccountWithDataSet> result) {
+                maybeNotifyAccountsUpdated(currentAccounts, result);
+            }
+
+            @Override
+            public void onFailure(Throwable t) {
+            }
+        };
+    }
+
+    private synchronized void reloadAccountTypesIfNeeded() {
+        if (mTypeProvider == null || mTypeProvider.shouldUpdate(
+                mAccountManager.getAuthenticatorTypes(), ContentResolver.getSyncAdapterTypes())) {
+            reloadAccountTypes();
+        }
+    }
+
+    private synchronized void reloadAccountTypes() {
+        loadAccountTypes();
+        Futures.addCallback(
+                Futures.transform(mAccountTypesFuture, mAccountsExtractor),
+                newAccountsUpdatedCallback(mAccountManagerAccounts),
+                mMainThreadExecutor);
+    }
+
+    private synchronized void loadLocalAccounts() {
+        mLocalAccountsFuture = mExecutor.submit(new Callable<List<AccountWithDataSet>>() {
+            @Override
+            public List<AccountWithDataSet> call() throws Exception {
+                return mLocalAccountLocator.getDeviceLocalAccounts();
+            }
+        });
+    }
+
+    private synchronized void reloadLocalAccounts() {
+        loadLocalAccounts();
+        Futures.addCallback(mLocalAccountsFuture, newAccountsUpdatedCallback(mLocalAccounts),
+                mMainThreadExecutor);
+    }
+
+    /**
+     * Return list of all known or contact writable {@link AccountWithDataSet}'s.
+     * {@param contactWritableOnly} whether to restrict to contact writable accounts only
+     */
+    @Override
+    public List<AccountWithDataSet> getAccounts(boolean contactWritableOnly) {
+        final Predicate<AccountInfo> filter = contactWritableOnly ?
+                writableFilter() : Predicates.<AccountInfo>alwaysTrue();
+        // TODO: Shouldn't have a synchronous version for getting all accounts
+        return Lists.transform(Futures.getUnchecked(filterAccountsAsync(filter)),
+                AccountInfo.ACCOUNT_EXTRACTOR);
+    }
+
+    @Override
+    public ListenableFuture<List<AccountInfo>> getAccountsAsync() {
+        return getAllAccountsAsyncInternal();
+    }
+
+    private synchronized ListenableFuture<List<AccountInfo>> getAllAccountsAsyncInternal() {
+        startLoadingIfNeeded();
+        final AccountTypeProvider typeProvider = mTypeProvider;
+        final ListenableFuture<List<List<AccountWithDataSet>>> all =
+                Futures.nonCancellationPropagating(
+                        Futures.successfulAsList(
+                                Futures.transform(mAccountTypesFuture, mAccountsExtractor),
+                                mLocalAccountsFuture));
+
+        return Futures.transform(all, new Function<List<List<AccountWithDataSet>>,
+                List<AccountInfo>>() {
+            @Nullable
+            @Override
+            public List<AccountInfo> apply(@Nullable List<List<AccountWithDataSet>> input) {
+                // input.get(0) contains accounts from AccountManager
+                // input.get(1) contains device local accounts
+                Preconditions.checkArgument(input.size() == 2,
+                        "List should have exactly 2 elements");
+
+                final List<AccountInfo> result = new ArrayList<>();
+                boolean hasWritableGoogleAccount = false;
+                for (AccountWithDataSet account : input.get(0)) {
+                    hasWritableGoogleAccount = hasWritableGoogleAccount ||
+                            (GoogleAccountType.ACCOUNT_TYPE.equals(account.type) &&
+                                    account.dataSet == null);
+
+                    result.add(
+                            typeProvider.getTypeForAccount(account).wrapAccount(mContext, account));
+                }
+
+                for (AccountWithDataSet account : input.get(1)) {
+                    // Exclude the null account if a writable Google account exists because null
+                    // account contacts are automatically converted to Google contacts in this case
+                    if (hasWritableGoogleAccount && account.isNullAccount()) {
+                        continue;
+                    }
+                    result.add(
+                            typeProvider.getTypeForAccount(account).wrapAccount(mContext, account));
+                }
+                AccountInfo.sortAccounts(null, result);
+                return result;
+            }
+        });
+    }
+
+    @Override
+    public ListenableFuture<List<AccountInfo>> filterAccountsAsync(
+            final Predicate<AccountInfo> filter) {
+        return Futures.transform(getAllAccountsAsyncInternal(), new Function<List<AccountInfo>,
+                List<AccountInfo>>() {
+            @Override
+            public List<AccountInfo> apply(List<AccountInfo> input) {
+                return new ArrayList<>(Collections2.filter(input, filter));
+            }
+        }, mExecutor);
+    }
+
+    @Override
+    public AccountInfo getAccountInfoForAccount(AccountWithDataSet account) {
+        if (account == null) {
+            return null;
+        }
+        final AccountType type = mTypeProvider.getTypeForAccount(account);
+        if (type == null) {
+            return null;
+        }
+        return type.wrapAccount(mContext, account);
+    }
+
+    private List<AccountWithDataSet> getAccountsWithDataSets(Account[] accounts,
+            AccountTypeProvider typeProvider) {
+        List<AccountWithDataSet> result = new ArrayList<>();
+        for (Account account : accounts) {
+            final List<AccountType> types = typeProvider.getAccountTypes(account.type);
+            for (AccountType type : types) {
+                result.add(new AccountWithDataSet(
+                        account.name, account.type, type.dataSet));
+            }
+        }
+        return result;
+    }
+
+    /**
+     * Return the list of all known, group writable {@link AccountWithDataSet}'s.
+     */
+    public List<AccountWithDataSet> getGroupWritableAccounts() {
+        return Lists.transform(Futures.getUnchecked(
+                filterAccountsAsync(groupWritableFilter())), AccountInfo.ACCOUNT_EXTRACTOR);
+    }
+
+    /**
+     * Returns the default google account specified in preferences, the first google account
+     * if it is not specified in preferences or is no longer on the device, and null otherwise.
+     */
+    @Override
+    public Account getDefaultGoogleAccount() {
+        final SharedPreferences sharedPreferences =
+                mContext.getSharedPreferences(mContext.getPackageName(), Context.MODE_PRIVATE);
+        final String defaultAccountKey =
+                mContext.getResources().getString(R.string.contact_editor_default_account_key);
+        return getDefaultGoogleAccount(mAccountManager, sharedPreferences, defaultAccountKey);
+    }
+
+    @Override
+    public List<AccountInfo> getWritableGoogleAccounts() {
+        final Account[] googleAccounts =
+                mAccountManager.getAccountsByType(GoogleAccountType.ACCOUNT_TYPE);
+        final List<AccountInfo> result = new ArrayList<>();
+        for (Account account : googleAccounts) {
+            final AccountWithDataSet accountWithDataSet = new AccountWithDataSet(
+                    account.name, account.type, null);
+            final AccountType type = mTypeProvider.getTypeForAccount(accountWithDataSet);
+
+            // Accounts with a dataSet (e.g. Google plus accounts) are not writable.
+            result.add(type.wrapAccount(mContext, accountWithDataSet));
+        }
+        return result;
+    }
+
+    @Override
+    public boolean hasNonLocalAccount() {
+        final Account[] accounts = mAccountManager.getAccounts();
+        return accounts != null && accounts.length > 0;
+    }
+
+    /**
+     * Find the best {@link DataKind} matching the requested
+     * {@link AccountType#accountType}, {@link AccountType#dataSet}, and {@link DataKind#mimeType}.
+     * If no direct match found, we try searching {@link FallbackAccountType}.
+     */
+    @Override
+    public DataKind getKindOrFallback(AccountType type, String mimeType) {
+        DataKind kind = null;
+
+        // Try finding account type and kind matching request
+        if (type != null) {
+            kind = type.getKindForMimetype(mimeType);
+        }
+
+        if (kind == null) {
+            // Nothing found, so try fallback as last resort
+            kind = mFallbackAccountType.getKindForMimetype(mimeType);
+        }
+
+        if (kind == null) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Unknown type=" + type + ", mime=" + mimeType);
+            }
+        }
+
+        return kind;
+    }
+
+    /**
+     * Return {@link AccountType} for the given account type and data set.
+     */
+    @Override
+    public AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet) {
+        return mTypeProvider.getType(
+                accountTypeWithDataSet.accountType, accountTypeWithDataSet.dataSet);
+    }
+}
diff --git a/src/com/android/contacts/model/BuilderWrapper.java b/src/com/android/contacts/model/BuilderWrapper.java
new file mode 100644
index 0000000..4a96c36
--- /dev/null
+++ b/src/com/android/contacts/model/BuilderWrapper.java
@@ -0,0 +1,52 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation.Builder;
+
+/**
+ * This class is created for the purpose of compatibility and make the type of
+ * ContentProviderOperation available on pre-M SDKs. Since ContentProviderOperation is
+ * usually created by Builder and we don’t have access to the type via Builder, so we need to
+ * create a wrapper class for Builder first and include type. Then we could use the builder and
+ * the type in this class to create a wrapper of ContentProviderOperation.
+ */
+public class BuilderWrapper {
+    private Builder mBuilder;
+    private int mType;
+
+    public BuilderWrapper(Builder builder, int type) {
+        mBuilder = builder;
+        mType = type;
+    }
+
+    public int getType() {
+        return mType;
+    }
+
+    public void setType(int mType) {
+        this.mType = mType;
+    }
+
+    public Builder getBuilder() {
+        return mBuilder;
+    }
+
+    public void setBuilder(Builder mBuilder) {
+        this.mBuilder = mBuilder;
+    }
+}
diff --git a/src/com/android/contacts/model/CPOWrapper.java b/src/com/android/contacts/model/CPOWrapper.java
new file mode 100644
index 0000000..12e00dd
--- /dev/null
+++ b/src/com/android/contacts/model/CPOWrapper.java
@@ -0,0 +1,49 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation;
+
+/**
+ * This class is created for the purpose of compatibility and make the type of
+ * ContentProviderOperation available on pre-M SDKs.
+ */
+public class CPOWrapper {
+    private ContentProviderOperation mOperation;
+    private int mType;
+
+    public CPOWrapper(ContentProviderOperation builder, int type) {
+        mOperation = builder;
+        mType = type;
+    }
+
+    public int getType() {
+        return mType;
+    }
+
+    public void setType(int type) {
+        this.mType = type;
+    }
+
+    public ContentProviderOperation getOperation() {
+        return mOperation;
+    }
+
+    public void setOperation(ContentProviderOperation operation) {
+        this.mOperation = operation;
+    }
+}
diff --git a/src/com/android/contacts/model/Contact.java b/src/com/android/contacts/model/Contact.java
new file mode 100644
index 0000000..8266123
--- /dev/null
+++ b/src/com/android/contacts/model/Contact.java
@@ -0,0 +1,496 @@
+/*
+ * 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.model;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.net.Uri;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.provider.ContactsContract.DisplayNameSources;
+
+import com.android.contacts.group.GroupMetaData;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.SimAccountType;
+import com.android.contacts.util.DataStatus;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+import java.util.ArrayList;
+
+/**
+ * A Contact represents a single person or logical entity as perceived by the user.  The information
+ * about a contact can come from multiple data sources, which are each represented by a RawContact
+ * object.  Thus, a Contact is associated with a collection of RawContact objects.
+ *
+ * The aggregation of raw contacts into a single contact is performed automatically, and it is
+ * also possible for users to manually split and join raw contacts into various contacts.
+ *
+ * Only the {@link ContactLoader} class can create a Contact object with various flags to allow
+ * partial loading of contact data.  Thus, an instance of this class should be treated as
+ * a read-only object.
+ */
+public class Contact {
+    private enum Status {
+        /** Contact is successfully loaded */
+        LOADED,
+        /** There was an error loading the contact */
+        ERROR,
+        /** Contact is not found */
+        NOT_FOUND,
+    }
+
+    private final Uri mRequestedUri;
+    private final Uri mLookupUri;
+    private final Uri mUri;
+    private final long mDirectoryId;
+    private final String mLookupKey;
+    private final long mId;
+    private final long mNameRawContactId;
+    private final int mDisplayNameSource;
+    private final long mPhotoId;
+    private final String mPhotoUri;
+    private final String mDisplayName;
+    private final String mAltDisplayName;
+    private final String mPhoneticName;
+    private final boolean mStarred;
+    private final Integer mPresence;
+    private ImmutableList<RawContact> mRawContacts;
+    private ImmutableMap<Long,DataStatus> mStatuses;
+
+    private String mDirectoryDisplayName;
+    private String mDirectoryType;
+    private String mDirectoryAccountType;
+    private String mDirectoryAccountName;
+    private int mDirectoryExportSupport;
+
+    private ImmutableList<GroupMetaData> mGroups;
+
+    private byte[] mPhotoBinaryData;
+    /**
+     * Small version of the contact photo loaded from a blob instead of from a file. If a large
+     * contact photo is not available yet, then this has the same value as mPhotoBinaryData.
+     */
+    private byte[] mThumbnailPhotoBinaryData;
+    private final boolean mSendToVoicemail;
+    private final String mCustomRingtone;
+    private final boolean mIsUserProfile;
+
+    private final Contact.Status mStatus;
+    private final Exception mException;
+
+    /**
+     * Constructor for special results, namely "no contact found" and "error".
+     */
+    private Contact(Uri requestedUri, Contact.Status status, Exception exception) {
+        if (status == Status.ERROR && exception == null) {
+            throw new IllegalArgumentException("ERROR result must have exception");
+        }
+        mStatus = status;
+        mException = exception;
+        mRequestedUri = requestedUri;
+        mLookupUri = null;
+        mUri = null;
+        mDirectoryId = -1;
+        mLookupKey = null;
+        mId = -1;
+        mRawContacts = null;
+        mStatuses = null;
+        mNameRawContactId = -1;
+        mDisplayNameSource = DisplayNameSources.UNDEFINED;
+        mPhotoId = -1;
+        mPhotoUri = null;
+        mDisplayName = null;
+        mAltDisplayName = null;
+        mPhoneticName = null;
+        mStarred = false;
+        mPresence = null;
+        mSendToVoicemail = false;
+        mCustomRingtone = null;
+        mIsUserProfile = false;
+    }
+
+    public static Contact forError(Uri requestedUri, Exception exception) {
+        return new Contact(requestedUri, Status.ERROR, exception);
+    }
+
+    public static Contact forNotFound(Uri requestedUri) {
+        return new Contact(requestedUri, Status.NOT_FOUND, null);
+    }
+
+    /**
+     * Constructor to call when contact was found
+     */
+    public Contact(Uri requestedUri, Uri uri, Uri lookupUri, long directoryId, String lookupKey,
+            long id, long nameRawContactId, int displayNameSource, long photoId,
+            String photoUri, String displayName, String altDisplayName, String phoneticName,
+            boolean starred, Integer presence, boolean sendToVoicemail, String customRingtone,
+            boolean isUserProfile) {
+        mStatus = Status.LOADED;
+        mException = null;
+        mRequestedUri = requestedUri;
+        mLookupUri = lookupUri;
+        mUri = uri;
+        mDirectoryId = directoryId;
+        mLookupKey = lookupKey;
+        mId = id;
+        mRawContacts = null;
+        mStatuses = null;
+        mNameRawContactId = nameRawContactId;
+        mDisplayNameSource = displayNameSource;
+        mPhotoId = photoId;
+        mPhotoUri = photoUri;
+        mDisplayName = displayName;
+        mAltDisplayName = altDisplayName;
+        mPhoneticName = phoneticName;
+        mStarred = starred;
+        mPresence = presence;
+        mSendToVoicemail = sendToVoicemail;
+        mCustomRingtone = customRingtone;
+        mIsUserProfile = isUserProfile;
+    }
+
+    public Contact(Uri requestedUri, Contact from) {
+        mRequestedUri = requestedUri;
+
+        mStatus = from.mStatus;
+        mException = from.mException;
+        mLookupUri = from.mLookupUri;
+        mUri = from.mUri;
+        mDirectoryId = from.mDirectoryId;
+        mLookupKey = from.mLookupKey;
+        mId = from.mId;
+        mNameRawContactId = from.mNameRawContactId;
+        mDisplayNameSource = from.mDisplayNameSource;
+        mPhotoId = from.mPhotoId;
+        mPhotoUri = from.mPhotoUri;
+        mDisplayName = from.mDisplayName;
+        mAltDisplayName = from.mAltDisplayName;
+        mPhoneticName = from.mPhoneticName;
+        mStarred = from.mStarred;
+        mPresence = from.mPresence;
+        mRawContacts = from.mRawContacts;
+        mStatuses = from.mStatuses;
+
+        mDirectoryDisplayName = from.mDirectoryDisplayName;
+        mDirectoryType = from.mDirectoryType;
+        mDirectoryAccountType = from.mDirectoryAccountType;
+        mDirectoryAccountName = from.mDirectoryAccountName;
+        mDirectoryExportSupport = from.mDirectoryExportSupport;
+
+        mGroups = from.mGroups;
+
+        mPhotoBinaryData = from.mPhotoBinaryData;
+        mSendToVoicemail = from.mSendToVoicemail;
+        mCustomRingtone = from.mCustomRingtone;
+        mIsUserProfile = from.mIsUserProfile;
+    }
+
+    /**
+     * @param exportSupport See {@link Directory#EXPORT_SUPPORT}.
+     */
+    public void setDirectoryMetaData(String displayName, String directoryType,
+            String accountType, String accountName, int exportSupport) {
+        mDirectoryDisplayName = displayName;
+        mDirectoryType = directoryType;
+        mDirectoryAccountType = accountType;
+        mDirectoryAccountName = accountName;
+        mDirectoryExportSupport = exportSupport;
+    }
+
+    /* package */ void setPhotoBinaryData(byte[] photoBinaryData) {
+        mPhotoBinaryData = photoBinaryData;
+    }
+
+    /* package */ void setThumbnailPhotoBinaryData(byte[] photoBinaryData) {
+        mThumbnailPhotoBinaryData = photoBinaryData;
+    }
+
+    /**
+     * Returns the URI for the contact that contains both the lookup key and the ID. This is
+     * the best URI to reference a contact.
+     * For directory contacts, this is the same a the URI as returned by {@link #getUri()}
+     */
+    public Uri getLookupUri() {
+        return mLookupUri;
+    }
+
+    public String getLookupKey() {
+        return mLookupKey;
+    }
+
+    /**
+     * Returns the contact Uri that was passed to the provider to make the query. This is
+     * the same as the requested Uri, unless the requested Uri doesn't specify a Contact:
+     * If it either references a Raw-Contact or a Person (a pre-Eclair style Uri), this Uri will
+     * always reference the full aggregate contact.
+     */
+    public Uri getUri() {
+        return mUri;
+    }
+
+    /**
+     * Returns the URI for which this {@link ContactLoader) was initially requested.
+     */
+    public Uri getRequestedUri() {
+        return mRequestedUri;
+    }
+
+    /**
+     * Instantiate a new RawContactDeltaList for this contact.
+     */
+    public RawContactDeltaList createRawContactDeltaList() {
+        return RawContactDeltaList.fromIterator(getRawContacts().iterator());
+    }
+
+    /**
+     * Returns the contact ID.
+     */
+    @VisibleForTesting
+    public long getId() {
+        return mId;
+    }
+
+    /**
+     * @return true when an exception happened during loading, in which case
+     *     {@link #getException} returns the actual exception object.
+     *     Note {@link #isNotFound()} and {@link #isError()} are mutually exclusive; If
+     *     {@link #isError()} is {@code true}, {@link #isNotFound()} is always {@code false},
+     *     and vice versa.
+     */
+    public boolean isError() {
+        return mStatus == Status.ERROR;
+    }
+
+    public Exception getException() {
+        return mException;
+    }
+
+    /**
+     * @return true when the specified contact is not found.
+     *     Note {@link #isNotFound()} and {@link #isError()} are mutually exclusive; If
+     *     {@link #isError()} is {@code true}, {@link #isNotFound()} is always {@code false},
+     *     and vice versa.
+     */
+    public boolean isNotFound() {
+        return mStatus == Status.NOT_FOUND;
+    }
+
+    /**
+     * @return true if the specified contact is successfully loaded.
+     *     i.e. neither {@link #isError()} nor {@link #isNotFound()}.
+     */
+    public boolean isLoaded() {
+        return mStatus == Status.LOADED;
+    }
+
+    public long getNameRawContactId() {
+        return mNameRawContactId;
+    }
+
+    public int getDisplayNameSource() {
+        return mDisplayNameSource;
+    }
+
+    /**
+     * Used by various classes to determine whether or not this contact should be displayed as
+     * a business rather than a person.
+     */
+    public boolean isDisplayNameFromOrganization() {
+        return DisplayNameSources.ORGANIZATION == mDisplayNameSource;
+    }
+
+    public long getPhotoId() {
+        return mPhotoId;
+    }
+
+    public String getPhotoUri() {
+        return mPhotoUri;
+    }
+
+    public String getDisplayName() {
+        return mDisplayName;
+    }
+
+    public String getAltDisplayName() {
+        return mAltDisplayName;
+    }
+
+    public String getPhoneticName() {
+        return mPhoneticName;
+    }
+
+    public boolean getStarred() {
+        return mStarred;
+    }
+
+    public Integer getPresence() {
+        return mPresence;
+    }
+
+    public ImmutableList<RawContact> getRawContacts() {
+        return mRawContacts;
+    }
+
+    public ImmutableMap<Long, DataStatus> getStatuses() {
+        return mStatuses;
+    }
+
+    public long getDirectoryId() {
+        return mDirectoryId;
+    }
+
+    public boolean isDirectoryEntry() {
+        return mDirectoryId != -1 && mDirectoryId != Directory.DEFAULT
+                && mDirectoryId != Directory.LOCAL_INVISIBLE;
+    }
+
+    /**
+     * @return true if this is a contact (not group, etc.) with at least one
+     *         writable raw-contact, and false otherwise.
+     */
+    public boolean isWritableContact(final Context context) {
+        return getFirstWritableRawContactId(context) != -1;
+    }
+
+    /**
+     * Return the ID of the first raw-contact in the contact data that belongs to a
+     * contact-writable account, or -1 if no such entity exists.
+     */
+    public long getFirstWritableRawContactId(final Context context) {
+        // Directory entries are non-writable
+        if (isDirectoryEntry()) return -1;
+
+        // Iterate through raw-contacts; if we find a writable on, return its ID.
+        for (RawContact rawContact : getRawContacts()) {
+            AccountType accountType = rawContact.getAccountType(context);
+            if (accountType != null && accountType.areContactsWritable()) {
+                return rawContact.getId();
+            }
+        }
+        // No writable raw-contact was found.
+        return -1;
+    }
+
+    public int getDirectoryExportSupport() {
+        return mDirectoryExportSupport;
+    }
+
+    public String getDirectoryDisplayName() {
+        return mDirectoryDisplayName;
+    }
+
+    public String getDirectoryType() {
+        return mDirectoryType;
+    }
+
+    public String getDirectoryAccountType() {
+        return mDirectoryAccountType;
+    }
+
+    public String getDirectoryAccountName() {
+        return mDirectoryAccountName;
+    }
+
+    public byte[] getPhotoBinaryData() {
+        return mPhotoBinaryData;
+    }
+
+    public byte[] getThumbnailPhotoBinaryData() {
+        return mThumbnailPhotoBinaryData;
+    }
+
+    public ArrayList<ContentValues> getContentValues() {
+        if (mRawContacts.size() != 1) {
+            throw new IllegalStateException(
+                    "Cannot extract content values from an aggregated contact");
+        }
+
+        RawContact rawContact = mRawContacts.get(0);
+        ArrayList<ContentValues> result = rawContact.getContentValues();
+
+        // If the photo was loaded using the URI, create an entry for the photo
+        // binary data.
+        if (mPhotoId == 0 && mPhotoBinaryData != null) {
+            ContentValues photo = new ContentValues();
+            photo.put(Data.MIMETYPE, Photo.CONTENT_ITEM_TYPE);
+            photo.put(Photo.PHOTO, mPhotoBinaryData);
+            result.add(photo);
+        }
+
+        return result;
+    }
+
+    /**
+     * This can return non-null group meta-data only if the {@link ContactLoader} was configured to
+     * load group metadata in its constructor.
+     * @return
+     */
+    public ImmutableList<GroupMetaData> getGroupMetaData() {
+        return mGroups;
+    }
+
+    public boolean isSendToVoicemail() {
+        return mSendToVoicemail;
+    }
+
+    public String getCustomRingtone() {
+        return mCustomRingtone;
+    }
+
+    public boolean isUserProfile() {
+        return mIsUserProfile;
+    }
+
+    public boolean isMultipleRawContacts() {
+        return mRawContacts.size() > 1;
+    }
+
+    /**
+     * @return true if all the raw contacts are from SIM accounts, and false otherwise.
+     */
+    public boolean areAllRawContactsSimAccounts(final Context context) {
+        if (getRawContacts() == null) return false;
+
+        for (RawContact rawContact : getRawContacts()) {
+            final AccountType accountType = rawContact.getAccountType(context);
+            if (!(accountType instanceof SimAccountType)) return false;
+        }
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "{requested=" + mRequestedUri + ",lookupkey=" + mLookupKey +
+                ",uri=" + mUri + ",status=" + mStatus + "}";
+    }
+
+    /* package */ void setRawContacts(ImmutableList<RawContact> rawContacts) {
+        mRawContacts = rawContacts;
+    }
+
+    /* package */ void setStatuses(ImmutableMap<Long, DataStatus> statuses) {
+        mStatuses = statuses;
+    }
+
+    /* package */ void setGroupMetaData(ImmutableList<GroupMetaData> groups) {
+        mGroups = groups;
+    }
+}
diff --git a/src/com/android/contacts/model/ContactLoader.java b/src/com/android/contacts/model/ContactLoader.java
new file mode 100644
index 0000000..acb8212
--- /dev/null
+++ b/src/com/android/contacts/model/ContactLoader.java
@@ -0,0 +1,960 @@
+/*
+ * 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.model;
+
+import android.content.AsyncTaskLoader;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.AssetFileDescriptor;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Directory;
+import android.provider.ContactsContract.Groups;
+import android.provider.ContactsContract.RawContacts;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.contacts.GeoUtil;
+import com.android.contacts.GroupMetaDataLoader;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.group.GroupMetaData;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountTypeWithDataSet;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.PhoneDataItem;
+import com.android.contacts.model.dataitem.PhotoDataItem;
+import com.android.contacts.util.Constants;
+import com.android.contacts.util.ContactLoaderUtils;
+import com.android.contacts.util.DataStatus;
+import com.android.contacts.util.UriUtils;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Sets;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+
+/**
+ * Loads a single Contact and all it constituent RawContacts.
+ */
+public class ContactLoader extends AsyncTaskLoader<Contact> {
+
+    private static final String TAG = ContactLoader.class.getSimpleName();
+
+    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+    /** A short-lived cache that can be set by {@link #cacheResult()} */
+    private static Contact sCachedResult = null;
+
+    private final Uri mRequestedUri;
+    private Uri mLookupUri;
+    private boolean mLoadGroupMetaData;
+    private boolean mPostViewNotification;
+    private boolean mComputeFormattedPhoneNumber;
+    private Contact mContact;
+    private ForceLoadContentObserver mObserver;
+    private final Set<Long> mNotifiedRawContactIds = Sets.newHashSet();
+
+    public ContactLoader(Context context, Uri lookupUri, boolean postViewNotification) {
+        this(context, lookupUri, false, postViewNotification, false);
+    }
+
+    public ContactLoader(Context context, Uri lookupUri, boolean postViewNotification,
+            boolean loadGroupMetaData) {
+        this(context, lookupUri, loadGroupMetaData, postViewNotification, false);
+    }
+
+    public ContactLoader(Context context, Uri lookupUri, boolean loadGroupMetaData,
+            boolean postViewNotification, boolean computeFormattedPhoneNumber) {
+        super(context);
+        mLookupUri = lookupUri;
+        mRequestedUri = lookupUri;
+        mLoadGroupMetaData = loadGroupMetaData;
+        mPostViewNotification = postViewNotification;
+        mComputeFormattedPhoneNumber = computeFormattedPhoneNumber;
+    }
+
+    /**
+     * Projection used for the query that loads all data for the entire contact (except for
+     * social stream items).
+     */
+    private static class ContactQuery {
+        static final String[] COLUMNS_INTERNAL = new String[] {
+                Contacts.NAME_RAW_CONTACT_ID,
+                Contacts.DISPLAY_NAME_SOURCE,
+                Contacts.LOOKUP_KEY,
+                Contacts.DISPLAY_NAME,
+                Contacts.DISPLAY_NAME_ALTERNATIVE,
+                Contacts.PHONETIC_NAME,
+                Contacts.PHOTO_ID,
+                Contacts.STARRED,
+                Contacts.CONTACT_PRESENCE,
+                Contacts.CONTACT_STATUS,
+                Contacts.CONTACT_STATUS_TIMESTAMP,
+                Contacts.CONTACT_STATUS_RES_PACKAGE,
+                Contacts.CONTACT_STATUS_LABEL,
+                Contacts.Entity.CONTACT_ID,
+                Contacts.Entity.RAW_CONTACT_ID,
+
+                RawContacts.ACCOUNT_NAME,
+                RawContacts.ACCOUNT_TYPE,
+                RawContacts.DATA_SET,
+                RawContacts.DIRTY,
+                RawContacts.VERSION,
+                RawContacts.SOURCE_ID,
+                RawContacts.SYNC1,
+                RawContacts.SYNC2,
+                RawContacts.SYNC3,
+                RawContacts.SYNC4,
+                RawContacts.DELETED,
+
+                Contacts.Entity.DATA_ID,
+                Data.DATA1,
+                Data.DATA2,
+                Data.DATA3,
+                Data.DATA4,
+                Data.DATA5,
+                Data.DATA6,
+                Data.DATA7,
+                Data.DATA8,
+                Data.DATA9,
+                Data.DATA10,
+                Data.DATA11,
+                Data.DATA12,
+                Data.DATA13,
+                Data.DATA14,
+                Data.DATA15,
+                Data.SYNC1,
+                Data.SYNC2,
+                Data.SYNC3,
+                Data.SYNC4,
+                Data.DATA_VERSION,
+                Data.IS_PRIMARY,
+                Data.IS_SUPER_PRIMARY,
+                Data.MIMETYPE,
+
+                GroupMembership.GROUP_SOURCE_ID,
+
+                Data.PRESENCE,
+                Data.CHAT_CAPABILITY,
+                Data.STATUS,
+                Data.STATUS_RES_PACKAGE,
+                Data.STATUS_ICON,
+                Data.STATUS_LABEL,
+                Data.STATUS_TIMESTAMP,
+
+                Contacts.PHOTO_URI,
+                Contacts.SEND_TO_VOICEMAIL,
+                Contacts.CUSTOM_RINGTONE,
+                Contacts.IS_USER_PROFILE,
+
+                Data.TIMES_USED,
+                Data.LAST_TIME_USED
+        };
+
+        static final String[] COLUMNS;
+
+        static {
+            List<String> projectionList = Lists.newArrayList(COLUMNS_INTERNAL);
+            if (CompatUtils.isMarshmallowCompatible()) {
+                projectionList.add(Data.CARRIER_PRESENCE);
+            }
+            COLUMNS = projectionList.toArray(new String[projectionList.size()]);
+        }
+
+        public static final int NAME_RAW_CONTACT_ID = 0;
+        public static final int DISPLAY_NAME_SOURCE = 1;
+        public static final int LOOKUP_KEY = 2;
+        public static final int DISPLAY_NAME = 3;
+        public static final int ALT_DISPLAY_NAME = 4;
+        public static final int PHONETIC_NAME = 5;
+        public static final int PHOTO_ID = 6;
+        public static final int STARRED = 7;
+        public static final int CONTACT_PRESENCE = 8;
+        public static final int CONTACT_STATUS = 9;
+        public static final int CONTACT_STATUS_TIMESTAMP = 10;
+        public static final int CONTACT_STATUS_RES_PACKAGE = 11;
+        public static final int CONTACT_STATUS_LABEL = 12;
+        public static final int CONTACT_ID = 13;
+        public static final int RAW_CONTACT_ID = 14;
+
+        public static final int ACCOUNT_NAME = 15;
+        public static final int ACCOUNT_TYPE = 16;
+        public static final int DATA_SET = 17;
+        public static final int DIRTY = 18;
+        public static final int VERSION = 19;
+        public static final int SOURCE_ID = 20;
+        public static final int SYNC1 = 21;
+        public static final int SYNC2 = 22;
+        public static final int SYNC3 = 23;
+        public static final int SYNC4 = 24;
+        public static final int DELETED = 25;
+
+        public static final int DATA_ID = 26;
+        public static final int DATA1 = 27;
+        public static final int DATA2 = 28;
+        public static final int DATA3 = 29;
+        public static final int DATA4 = 30;
+        public static final int DATA5 = 31;
+        public static final int DATA6 = 32;
+        public static final int DATA7 = 33;
+        public static final int DATA8 = 34;
+        public static final int DATA9 = 35;
+        public static final int DATA10 = 36;
+        public static final int DATA11 = 37;
+        public static final int DATA12 = 38;
+        public static final int DATA13 = 39;
+        public static final int DATA14 = 40;
+        public static final int DATA15 = 41;
+        public static final int DATA_SYNC1 = 42;
+        public static final int DATA_SYNC2 = 43;
+        public static final int DATA_SYNC3 = 44;
+        public static final int DATA_SYNC4 = 45;
+        public static final int DATA_VERSION = 46;
+        public static final int IS_PRIMARY = 47;
+        public static final int IS_SUPERPRIMARY = 48;
+        public static final int MIMETYPE = 49;
+
+        public static final int GROUP_SOURCE_ID = 50;
+
+        public static final int PRESENCE = 51;
+        public static final int CHAT_CAPABILITY = 52;
+        public static final int STATUS = 53;
+        public static final int STATUS_RES_PACKAGE = 54;
+        public static final int STATUS_ICON = 55;
+        public static final int STATUS_LABEL = 56;
+        public static final int STATUS_TIMESTAMP = 57;
+
+        public static final int PHOTO_URI = 58;
+        public static final int SEND_TO_VOICEMAIL = 59;
+        public static final int CUSTOM_RINGTONE = 60;
+        public static final int IS_USER_PROFILE = 61;
+
+        public static final int TIMES_USED = 62;
+        public static final int LAST_TIME_USED = 63;
+        public static final int CARRIER_PRESENCE = 64;
+    }
+
+    /**
+     * Projection used for the query that loads all data for the entire contact.
+     */
+    private static class DirectoryQuery {
+        static final String[] COLUMNS = new String[] {
+            Directory.DISPLAY_NAME,
+            Directory.PACKAGE_NAME,
+            Directory.TYPE_RESOURCE_ID,
+            Directory.ACCOUNT_TYPE,
+            Directory.ACCOUNT_NAME,
+            Directory.EXPORT_SUPPORT,
+        };
+
+        public static final int DISPLAY_NAME = 0;
+        public static final int PACKAGE_NAME = 1;
+        public static final int TYPE_RESOURCE_ID = 2;
+        public static final int ACCOUNT_TYPE = 3;
+        public static final int ACCOUNT_NAME = 4;
+        public static final int EXPORT_SUPPORT = 5;
+    }
+
+    public void setNewLookup(Uri lookupUri) {
+        mLookupUri = lookupUri;
+        mContact = null;
+    }
+
+    @Override
+    public Contact loadInBackground() {
+        try {
+            final ContentResolver resolver = getContext().getContentResolver();
+            final Uri uriCurrentFormat = ContactLoaderUtils.ensureIsContactUri(
+                    resolver, mLookupUri);
+            final Contact cachedResult = sCachedResult;
+            sCachedResult = null;
+            // Is this the same Uri as what we had before already? In that case, reuse that result
+            final Contact result;
+            final boolean resultIsCached;
+            if (cachedResult != null &&
+                    UriUtils.areEqual(cachedResult.getLookupUri(), mLookupUri)) {
+                // We are using a cached result from earlier. Below, we should make sure
+                // we are not doing any more network or disc accesses
+                result = new Contact(mRequestedUri, cachedResult);
+                resultIsCached = true;
+            } else {
+                if (uriCurrentFormat.getLastPathSegment().equals(Constants.LOOKUP_URI_ENCODED)) {
+                    result = loadEncodedContactEntity(uriCurrentFormat, mLookupUri);
+                } else {
+                    result = loadContactEntity(resolver, uriCurrentFormat);
+                }
+                resultIsCached = false;
+            }
+            if (result.isLoaded()) {
+                if (result.isDirectoryEntry()) {
+                    if (!resultIsCached) {
+                        loadDirectoryMetaData(result);
+                    }
+                } else if (mLoadGroupMetaData) {
+                    if (result.getGroupMetaData() == null) {
+                        loadGroupMetaData(result);
+                    }
+                }
+                if (mComputeFormattedPhoneNumber) {
+                    computeFormattedPhoneNumbers(result);
+                }
+                if (!resultIsCached) loadPhotoBinaryData(result);
+
+            }
+            return result;
+        } catch (Exception e) {
+            Log.e(TAG, "Error loading the contact: " + mLookupUri, e);
+            return Contact.forError(mRequestedUri, e);
+        }
+    }
+
+    /**
+     * Parses a {@link Contact} stored as a JSON string in a lookup URI.
+     *
+     * @param lookupUri The contact information to parse .
+     * @return The parsed {@code Contact} information.
+     * @throws JSONException
+     */
+    public static Contact parseEncodedContactEntity(Uri lookupUri)  {
+        try {
+            return loadEncodedContactEntity(lookupUri, lookupUri);
+        } catch (JSONException je) {
+            return null;
+        }
+    }
+
+    private static Contact loadEncodedContactEntity(Uri uri, Uri lookupUri) throws JSONException {
+        final String jsonString = uri.getEncodedFragment();
+        final JSONObject json = new JSONObject(jsonString);
+
+        final long directoryId =
+                Long.valueOf(uri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY));
+
+        final String displayName = json.optString(Contacts.DISPLAY_NAME);
+        final String altDisplayName = json.optString(
+                Contacts.DISPLAY_NAME_ALTERNATIVE, displayName);
+        final int displayNameSource = json.getInt(Contacts.DISPLAY_NAME_SOURCE);
+        final String photoUri = json.optString(Contacts.PHOTO_URI, null);
+        final Contact contact = new Contact(
+                uri, uri,
+                lookupUri,
+                directoryId,
+                null /* lookupKey */,
+                -1 /* id */,
+                -1 /* nameRawContactId */,
+                displayNameSource,
+                0 /* photoId */,
+                photoUri,
+                displayName,
+                altDisplayName,
+                null /* phoneticName */,
+                false /* starred */,
+                null /* presence */,
+                false /* sendToVoicemail */,
+                null /* customRingtone */,
+                false /* isUserProfile */);
+
+        contact.setStatuses(new ImmutableMap.Builder<Long, DataStatus>().build());
+
+        final String accountName = json.optString(RawContacts.ACCOUNT_NAME, null);
+        final String directoryName = uri.getQueryParameter(Directory.DISPLAY_NAME);
+        if (accountName != null) {
+            final String accountType = json.getString(RawContacts.ACCOUNT_TYPE);
+            contact.setDirectoryMetaData(directoryName, null, accountName, accountType,
+                    json.optInt(Directory.EXPORT_SUPPORT,
+                            Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY));
+        } else {
+            contact.setDirectoryMetaData(directoryName, null, null, null,
+                    json.optInt(Directory.EXPORT_SUPPORT, Directory.EXPORT_SUPPORT_ANY_ACCOUNT));
+        }
+
+        final ContentValues values = new ContentValues();
+        values.put(Data._ID, -1);
+        values.put(Data.CONTACT_ID, -1);
+        final RawContact rawContact = new RawContact(values);
+
+        final JSONObject items = json.getJSONObject(Contacts.CONTENT_ITEM_TYPE);
+        final Iterator keys = items.keys();
+        while (keys.hasNext()) {
+            final String mimetype = (String) keys.next();
+
+            // Could be single object or array.
+            final JSONObject obj = items.optJSONObject(mimetype);
+            if (obj == null) {
+                final JSONArray array = items.getJSONArray(mimetype);
+                for (int i = 0; i < array.length(); i++) {
+                    final JSONObject item = array.getJSONObject(i);
+                    processOneRecord(rawContact, item, mimetype);
+                }
+            } else {
+                processOneRecord(rawContact, obj, mimetype);
+            }
+        }
+
+        contact.setRawContacts(new ImmutableList.Builder<RawContact>()
+                .add(rawContact)
+                .build());
+        return contact;
+    }
+
+    private static void processOneRecord(RawContact rawContact, JSONObject item, String mimetype)
+            throws JSONException {
+        final ContentValues itemValues = new ContentValues();
+        itemValues.put(Data.MIMETYPE, mimetype);
+        itemValues.put(Data._ID, -1);
+
+        final Iterator iterator = item.keys();
+        while (iterator.hasNext()) {
+            String name = (String) iterator.next();
+            final Object o = item.get(name);
+            if (o instanceof String) {
+                itemValues.put(name, (String) o);
+            } else if (o instanceof Integer) {
+                itemValues.put(name, (Integer) o);
+            }
+        }
+        rawContact.addDataItemValues(itemValues);
+    }
+
+    private Contact loadContactEntity(ContentResolver resolver, Uri contactUri) {
+        Uri entityUri = Uri.withAppendedPath(contactUri, Contacts.Entity.CONTENT_DIRECTORY);
+        Cursor cursor = resolver.query(entityUri, ContactQuery.COLUMNS, null, null,
+                Contacts.Entity.RAW_CONTACT_ID);
+        if (cursor == null) {
+            Log.e(TAG, "No cursor returned in loadContactEntity");
+            return Contact.forNotFound(mRequestedUri);
+        }
+
+        try {
+            if (!cursor.moveToFirst()) {
+                cursor.close();
+                return Contact.forNotFound(mRequestedUri);
+            }
+
+            // Create the loaded contact starting with the header data.
+            Contact contact = loadContactHeaderData(cursor, contactUri);
+
+            // Fill in the raw contacts, which is wrapped in an Entity and any
+            // status data.  Initially, result has empty entities and statuses.
+            long currentRawContactId = -1;
+            RawContact rawContact = null;
+            ImmutableList.Builder<RawContact> rawContactsBuilder =
+                    new ImmutableList.Builder<RawContact>();
+            ImmutableMap.Builder<Long, DataStatus> statusesBuilder =
+                    new ImmutableMap.Builder<Long, DataStatus>();
+            do {
+                long rawContactId = cursor.getLong(ContactQuery.RAW_CONTACT_ID);
+                if (rawContactId != currentRawContactId) {
+                    // First time to see this raw contact id, so create a new entity, and
+                    // add it to the result's entities.
+                    currentRawContactId = rawContactId;
+                    rawContact = new RawContact(loadRawContactValues(cursor));
+                    rawContactsBuilder.add(rawContact);
+                }
+                if (!cursor.isNull(ContactQuery.DATA_ID)) {
+                    ContentValues data = loadDataValues(cursor);
+                    rawContact.addDataItemValues(data);
+
+                    if (!cursor.isNull(ContactQuery.PRESENCE)
+                            || !cursor.isNull(ContactQuery.STATUS)) {
+                        final DataStatus status = new DataStatus(cursor);
+                        final long dataId = cursor.getLong(ContactQuery.DATA_ID);
+                        statusesBuilder.put(dataId, status);
+                    }
+                }
+            } while (cursor.moveToNext());
+
+            contact.setRawContacts(rawContactsBuilder.build());
+            contact.setStatuses(statusesBuilder.build());
+
+            return contact;
+        } finally {
+            cursor.close();
+        }
+    }
+
+    /**
+     * Looks for the photo data item in entities. If found, a thumbnail will be stored. A larger
+     * photo will also be stored if available.
+     */
+    private void loadPhotoBinaryData(Contact contactData) {
+        loadThumbnailBinaryData(contactData);
+
+        // Try to load the large photo from a file using the photo URI.
+        String photoUri = contactData.getPhotoUri();
+        if (photoUri != null) {
+            try {
+                final InputStream inputStream;
+                final AssetFileDescriptor fd;
+                final Uri uri = Uri.parse(photoUri);
+                final String scheme = uri.getScheme();
+                if ("http".equals(scheme) || "https".equals(scheme)) {
+                    // Support HTTP urls that might come from extended directories
+                    inputStream = new URL(photoUri).openStream();
+                    fd = null;
+                } else {
+                    fd = getContext().getContentResolver().openAssetFileDescriptor(uri, "r");
+                    inputStream = fd.createInputStream();
+                }
+                byte[] buffer = new byte[16 * 1024];
+                ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                try {
+                    int size;
+                    while ((size = inputStream.read(buffer)) != -1) {
+                        baos.write(buffer, 0, size);
+                    }
+                    contactData.setPhotoBinaryData(baos.toByteArray());
+                } finally {
+                    inputStream.close();
+                    if (fd != null) {
+                        fd.close();
+                    }
+                }
+                return;
+            } catch (IOException ioe) {
+                // Just fall back to the case below.
+            }
+        }
+
+        // If we couldn't load from a file, fall back to the data blob.
+        contactData.setPhotoBinaryData(contactData.getThumbnailPhotoBinaryData());
+    }
+
+    private void loadThumbnailBinaryData(Contact contactData) {
+        final long photoId = contactData.getPhotoId();
+        if (photoId <= 0) {
+            // No photo ID
+            return;
+        }
+
+        for (RawContact rawContact : contactData.getRawContacts()) {
+            for (DataItem dataItem : rawContact.getDataItems()) {
+                if (dataItem.getId() == photoId) {
+                    if (!(dataItem instanceof PhotoDataItem)) {
+                        break;
+                    }
+
+                    final PhotoDataItem photo = (PhotoDataItem) dataItem;
+                    contactData.setThumbnailPhotoBinaryData(photo.getPhoto());
+                    break;
+                }
+            }
+        }
+    }
+
+    /**
+     * Extracts Contact level columns from the cursor.
+     */
+    private Contact loadContactHeaderData(final Cursor cursor, Uri contactUri) {
+        final String directoryParameter =
+                contactUri.getQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY);
+        final long directoryId = directoryParameter == null
+                ? Directory.DEFAULT
+                : Long.parseLong(directoryParameter);
+        final long contactId = cursor.getLong(ContactQuery.CONTACT_ID);
+        final String lookupKey = cursor.getString(ContactQuery.LOOKUP_KEY);
+        final long nameRawContactId = cursor.getLong(ContactQuery.NAME_RAW_CONTACT_ID);
+        final int displayNameSource = cursor.getInt(ContactQuery.DISPLAY_NAME_SOURCE);
+        final String displayName = cursor.getString(ContactQuery.DISPLAY_NAME);
+        final String altDisplayName = cursor.getString(ContactQuery.ALT_DISPLAY_NAME);
+        final String phoneticName = cursor.getString(ContactQuery.PHONETIC_NAME);
+        final long photoId = cursor.getLong(ContactQuery.PHOTO_ID);
+        final String photoUri = cursor.getString(ContactQuery.PHOTO_URI);
+        final boolean starred = cursor.getInt(ContactQuery.STARRED) != 0;
+        final Integer presence = cursor.isNull(ContactQuery.CONTACT_PRESENCE)
+                ? null
+                : cursor.getInt(ContactQuery.CONTACT_PRESENCE);
+        final boolean sendToVoicemail = cursor.getInt(ContactQuery.SEND_TO_VOICEMAIL) == 1;
+        final String customRingtone = cursor.getString(ContactQuery.CUSTOM_RINGTONE);
+        final boolean isUserProfile = cursor.getInt(ContactQuery.IS_USER_PROFILE) == 1;
+
+        Uri lookupUri;
+        if (directoryId == Directory.DEFAULT || directoryId == Directory.LOCAL_INVISIBLE) {
+            lookupUri = ContentUris.withAppendedId(
+                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), contactId);
+        } else {
+            lookupUri = contactUri;
+        }
+
+        return new Contact(mRequestedUri, contactUri, lookupUri, directoryId, lookupKey,
+                contactId, nameRawContactId, displayNameSource, photoId, photoUri, displayName,
+                altDisplayName, phoneticName, starred, presence, sendToVoicemail,
+                customRingtone, isUserProfile);
+    }
+
+    /**
+     * Extracts RawContact level columns from the cursor.
+     */
+    private ContentValues loadRawContactValues(Cursor cursor) {
+        ContentValues cv = new ContentValues();
+
+        cv.put(RawContacts._ID, cursor.getLong(ContactQuery.RAW_CONTACT_ID));
+
+        cursorColumnToContentValues(cursor, cv, ContactQuery.ACCOUNT_NAME);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.ACCOUNT_TYPE);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SET);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DIRTY);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.VERSION);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.SOURCE_ID);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.SYNC1);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.SYNC2);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.SYNC3);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.SYNC4);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DELETED);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.CONTACT_ID);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.STARRED);
+
+        return cv;
+    }
+
+    /**
+     * Extracts Data level columns from the cursor.
+     */
+    private ContentValues loadDataValues(Cursor cursor) {
+        ContentValues cv = new ContentValues();
+
+        cv.put(Data._ID, cursor.getLong(ContactQuery.DATA_ID));
+
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA1);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA2);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA3);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA4);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA5);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA6);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA7);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA8);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA9);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA10);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA11);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA12);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA13);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA14);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA15);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SYNC1);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SYNC2);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SYNC3);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_SYNC4);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.DATA_VERSION);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.IS_PRIMARY);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.IS_SUPERPRIMARY);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.MIMETYPE);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.GROUP_SOURCE_ID);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.CHAT_CAPABILITY);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.TIMES_USED);
+        cursorColumnToContentValues(cursor, cv, ContactQuery.LAST_TIME_USED);
+        if (CompatUtils.isMarshmallowCompatible()) {
+            cursorColumnToContentValues(cursor, cv, ContactQuery.CARRIER_PRESENCE);
+        }
+
+        return cv;
+    }
+
+    private void cursorColumnToContentValues(
+            Cursor cursor, ContentValues values, int index) {
+        switch (cursor.getType(index)) {
+            case Cursor.FIELD_TYPE_NULL:
+                // don't put anything in the content values
+                break;
+            case Cursor.FIELD_TYPE_INTEGER:
+                values.put(ContactQuery.COLUMNS[index], cursor.getLong(index));
+                break;
+            case Cursor.FIELD_TYPE_STRING:
+                values.put(ContactQuery.COLUMNS[index], cursor.getString(index));
+                break;
+            case Cursor.FIELD_TYPE_BLOB:
+                values.put(ContactQuery.COLUMNS[index], cursor.getBlob(index));
+                break;
+            default:
+                throw new IllegalStateException("Invalid or unhandled data type");
+        }
+    }
+
+    private void loadDirectoryMetaData(Contact result) {
+        long directoryId = result.getDirectoryId();
+
+        Cursor cursor = getContext().getContentResolver().query(
+                ContentUris.withAppendedId(Directory.CONTENT_URI, directoryId),
+                DirectoryQuery.COLUMNS, null, null, null);
+        if (cursor == null) {
+            return;
+        }
+        try {
+            if (cursor.moveToFirst()) {
+                final String displayName = cursor.getString(DirectoryQuery.DISPLAY_NAME);
+                final String packageName = cursor.getString(DirectoryQuery.PACKAGE_NAME);
+                final int typeResourceId = cursor.getInt(DirectoryQuery.TYPE_RESOURCE_ID);
+                final String accountType = cursor.getString(DirectoryQuery.ACCOUNT_TYPE);
+                final String accountName = cursor.getString(DirectoryQuery.ACCOUNT_NAME);
+                final int exportSupport = cursor.getInt(DirectoryQuery.EXPORT_SUPPORT);
+                String directoryType = null;
+                if (!TextUtils.isEmpty(packageName)) {
+                    PackageManager pm = getContext().getPackageManager();
+                    try {
+                        Resources resources = pm.getResourcesForApplication(packageName);
+                        directoryType = resources.getString(typeResourceId);
+                    } catch (NameNotFoundException e) {
+                        Log.w(TAG, "Contact directory resource not found: "
+                                + packageName + "." + typeResourceId);
+                    }
+                }
+
+                result.setDirectoryMetaData(
+                        displayName, directoryType, accountType, accountName, exportSupport);
+            }
+        } finally {
+            cursor.close();
+        }
+    }
+
+    static private class AccountKey {
+        private final String mAccountName;
+        private final String mAccountType;
+        private final String mDataSet;
+
+        public AccountKey(String accountName, String accountType, String dataSet) {
+            mAccountName = accountName;
+            mAccountType = accountType;
+            mDataSet = dataSet;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(mAccountName, mAccountType, mDataSet);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (!(obj instanceof AccountKey)) {
+                return false;
+            }
+            final AccountKey other = (AccountKey) obj;
+            return Objects.equals(mAccountName, other.mAccountName)
+                && Objects.equals(mAccountType, other.mAccountType)
+                && Objects.equals(mDataSet, other.mDataSet);
+        }
+    }
+
+    /**
+     * Loads groups meta-data for all groups associated with all constituent raw contacts'
+     * accounts.
+     */
+    private void loadGroupMetaData(Contact result) {
+        StringBuilder selection = new StringBuilder();
+        ArrayList<String> selectionArgs = new ArrayList<String>();
+        final HashSet<AccountKey> accountsSeen = new HashSet<>();
+        for (RawContact rawContact : result.getRawContacts()) {
+            final String accountName = rawContact.getAccountName();
+            final String accountType = rawContact.getAccountTypeString();
+            final String dataSet = rawContact.getDataSet();
+            final AccountKey accountKey = new AccountKey(accountName, accountType, dataSet);
+            if (accountName != null && accountType != null &&
+                    !accountsSeen.contains(accountKey)) {
+                accountsSeen.add(accountKey);
+                if (selection.length() != 0) {
+                    selection.append(" OR ");
+                }
+                selection.append(
+                        "(" + Groups.ACCOUNT_NAME + "=? AND " + Groups.ACCOUNT_TYPE + "=?");
+                selectionArgs.add(accountName);
+                selectionArgs.add(accountType);
+
+                selection.append(" AND " + Groups.DELETED + "=0");
+
+                if (dataSet != null) {
+                    selection.append(" AND " + Groups.DATA_SET + "=?");
+                    selectionArgs.add(dataSet);
+                } else {
+                    selection.append(" AND " + Groups.DATA_SET + " IS NULL");
+                }
+                selection.append(")");
+            }
+        }
+        final ImmutableList.Builder<GroupMetaData> groupListBuilder = new ImmutableList.Builder<>();
+        final Cursor cursor = getContext().getContentResolver().query(Groups.CONTENT_URI,
+                GroupMetaDataLoader.COLUMNS, selection.toString(),
+                selectionArgs.toArray(new String[0]), null);
+        if (cursor != null) {
+            try {
+                while (cursor.moveToNext()) {
+                    groupListBuilder.add(new GroupMetaData(getContext(), cursor));
+                }
+            } finally {
+                cursor.close();
+            }
+        }
+        result.setGroupMetaData(groupListBuilder.build());
+    }
+
+    /**
+     * Iterates over all data items that represent phone numbers are tries to calculate a formatted
+     * number. This function can safely be called several times as no unformatted data is
+     * overwritten
+     */
+    private void computeFormattedPhoneNumbers(Contact contactData) {
+        final String countryIso = GeoUtil.getCurrentCountryIso(getContext());
+        final ImmutableList<RawContact> rawContacts = contactData.getRawContacts();
+        final int rawContactCount = rawContacts.size();
+        for (int rawContactIndex = 0; rawContactIndex < rawContactCount; rawContactIndex++) {
+            final RawContact rawContact = rawContacts.get(rawContactIndex);
+            final List<DataItem> dataItems = rawContact.getDataItems();
+            final int dataCount = dataItems.size();
+            for (int dataIndex = 0; dataIndex < dataCount; dataIndex++) {
+                final DataItem dataItem = dataItems.get(dataIndex);
+                if (dataItem instanceof PhoneDataItem) {
+                    final PhoneDataItem phoneDataItem = (PhoneDataItem) dataItem;
+                    phoneDataItem.computeFormattedPhoneNumber(countryIso);
+                }
+            }
+        }
+    }
+
+    @Override
+    public void deliverResult(Contact result) {
+        unregisterObserver();
+
+        // The creator isn't interested in any further updates
+        if (isReset() || result == null) {
+            return;
+        }
+
+        mContact = result;
+
+        if (result.isLoaded()) {
+            mLookupUri = result.getLookupUri();
+
+            if (!result.isDirectoryEntry()) {
+                Log.i(TAG, "Registering content observer for " + mLookupUri);
+                if (mObserver == null) {
+                    mObserver = new ForceLoadContentObserver();
+                }
+                getContext().getContentResolver().registerContentObserver(
+                        mLookupUri, true, mObserver);
+            }
+
+            if (mPostViewNotification) {
+                // inform the source of the data that this contact is being looked at
+                postViewNotificationToSyncAdapter();
+            }
+        }
+
+        super.deliverResult(mContact);
+    }
+
+    /**
+     * Posts a message to the contributing sync adapters that have opted-in, notifying them
+     * that the contact has just been loaded
+     */
+    private void postViewNotificationToSyncAdapter() {
+        Context context = getContext();
+        for (RawContact rawContact : mContact.getRawContacts()) {
+            final long rawContactId = rawContact.getId();
+            if (mNotifiedRawContactIds.contains(rawContactId)) {
+                continue; // Already notified for this raw contact.
+            }
+            mNotifiedRawContactIds.add(rawContactId);
+            final AccountType accountType = rawContact.getAccountType(context);
+            final String serviceName = accountType.getViewContactNotifyServiceClassName();
+            final String servicePackageName = accountType.getViewContactNotifyServicePackageName();
+            if (!TextUtils.isEmpty(serviceName) && !TextUtils.isEmpty(servicePackageName)) {
+                final Uri uri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId);
+                final Intent intent = new Intent();
+                intent.setClassName(servicePackageName, serviceName);
+                intent.setAction(Intent.ACTION_VIEW);
+                intent.setDataAndType(uri, RawContacts.CONTENT_ITEM_TYPE);
+                try {
+                    context.startService(intent);
+                } catch (Exception e) {
+                    Log.e(TAG, "Error sending message to source-app", e);
+                }
+            }
+        }
+    }
+
+    private void unregisterObserver() {
+        if (mObserver != null) {
+            getContext().getContentResolver().unregisterContentObserver(mObserver);
+            mObserver = null;
+        }
+    }
+
+    public Uri getLookupUri() {
+        return mLookupUri;
+    }
+
+    @Override
+    protected void onStartLoading() {
+        if (mContact != null) {
+            deliverResult(mContact);
+        }
+
+        if (takeContentChanged() || mContact == null) {
+            forceLoad();
+        }
+    }
+
+    @Override
+    protected void onStopLoading() {
+        cancelLoad();
+    }
+
+    @Override
+    protected void onReset() {
+        super.onReset();
+        cancelLoad();
+        unregisterObserver();
+        mContact = null;
+    }
+
+    /**
+     * Caches the result, which is useful when we switch from activity to activity, using the same
+     * contact. If the next load is for a different contact, the cached result will be dropped
+     */
+    public void cacheResult() {
+        if (mContact == null || !mContact.isLoaded()) {
+            sCachedResult = null;
+        } else {
+            sCachedResult = mContact;
+        }
+    }
+}
diff --git a/src/com/android/contacts/model/Cp2DeviceLocalAccountLocator.java b/src/com/android/contacts/model/Cp2DeviceLocalAccountLocator.java
new file mode 100644
index 0000000..307577d
--- /dev/null
+++ b/src/com/android/contacts/model/Cp2DeviceLocalAccountLocator.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model;
+
+import android.accounts.AccountManager;
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.support.annotation.VisibleForTesting;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.DeviceLocalAccountTypeFactory;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Attempts to create accounts for "Device" contacts by querying
+ * CP2 for records with {@link android.provider.ContactsContract.RawContacts#ACCOUNT_TYPE} columns
+ * that do not exist for any account returned by {@link AccountManager#getAccounts()}
+ *
+ * This class should be used from a background thread since it does DB queries
+ */
+public class Cp2DeviceLocalAccountLocator extends DeviceLocalAccountLocator {
+
+    // Note this class is assuming ACCOUNT_NAME and ACCOUNT_TYPE have same values in
+    // RawContacts, Groups, and Settings. This assumption simplifies the code somewhat and it
+    // is true right now and unlikely to ever change.
+    @VisibleForTesting
+    static String[] PROJECTION = new String[] {
+            ContactsContract.RawContacts.ACCOUNT_NAME, ContactsContract.RawContacts.ACCOUNT_TYPE,
+            ContactsContract.RawContacts.DATA_SET
+    };
+
+    private static final int COL_NAME = 0;
+    private static final int COL_TYPE = 1;
+    private static final int COL_DATA_SET = 2;
+
+    private final ContentResolver mResolver;
+    private final DeviceLocalAccountTypeFactory mAccountTypeFactory;
+
+    private final String mSelection;
+    private final String[] mSelectionArgs;
+
+    public Cp2DeviceLocalAccountLocator(ContentResolver contentResolver,
+            DeviceLocalAccountTypeFactory factory,
+            Set<String> knownAccountTypes) {
+        mResolver = contentResolver;
+        mAccountTypeFactory = factory;
+
+        mSelection = getSelection(knownAccountTypes);
+        mSelectionArgs = getSelectionArgs(knownAccountTypes);
+    }
+
+    @Override
+    public List<AccountWithDataSet> getDeviceLocalAccounts() {
+
+        final Set<AccountWithDataSet> localAccounts = new HashSet<>();
+
+        // Many device accounts have default groups associated with them.
+        addAccountsFromQuery(ContactsContract.Groups.CONTENT_URI, localAccounts);
+        addAccountsFromQuery(ContactsContract.Settings.CONTENT_URI, localAccounts);
+        addAccountsFromQuery(ContactsContract.RawContacts.CONTENT_URI, localAccounts);
+
+        return new ArrayList<>(localAccounts);
+    }
+
+    private void addAccountsFromQuery(Uri uri, Set<AccountWithDataSet> accounts) {
+        final Cursor cursor = mResolver.query(uri, PROJECTION, mSelection, mSelectionArgs, null);
+
+        if (cursor == null) return;
+
+        try {
+            addAccountsFromCursor(cursor, accounts);
+        } finally {
+            cursor.close();
+        }
+    }
+
+    private void addAccountsFromCursor(Cursor cursor, Set<AccountWithDataSet> accounts) {
+        while (cursor.moveToNext()) {
+            final String name = cursor.getString(COL_NAME);
+            final String type = cursor.getString(COL_TYPE);
+            final String dataSet = cursor.getString(COL_DATA_SET);
+
+            if (DeviceLocalAccountTypeFactory.Util.isLocalAccountType(
+                    mAccountTypeFactory, type)) {
+                accounts.add(new AccountWithDataSet(name, type, dataSet));
+            }
+        }
+    }
+
+    @VisibleForTesting
+    public String getSelection() {
+        return mSelection;
+    }
+
+    @VisibleForTesting
+    public String[] getSelectionArgs() {
+        return mSelectionArgs;
+    }
+
+    private static String getSelection(Set<String> knownAccountTypes) {
+        final StringBuilder sb = new StringBuilder()
+                .append(ContactsContract.RawContacts.ACCOUNT_TYPE).append(" IS NULL");
+        if (knownAccountTypes.isEmpty()) {
+            return sb.toString();
+        }
+        sb.append(" OR ").append(ContactsContract.RawContacts.ACCOUNT_TYPE).append(" NOT IN (");
+        for (String ignored : knownAccountTypes) {
+            sb.append("?,");
+        }
+        // Remove trailing ','
+        sb.deleteCharAt(sb.length() - 1).append(')');
+        return sb.toString();
+    }
+
+    private static String[] getSelectionArgs(Set<String> knownAccountTypes) {
+        if (knownAccountTypes.isEmpty()) return null;
+
+        return knownAccountTypes.toArray(new String[knownAccountTypes.size()]);
+    }
+}
diff --git a/src/com/android/contacts/model/DeviceLocalAccountLocator.java b/src/com/android/contacts/model/DeviceLocalAccountLocator.java
new file mode 100644
index 0000000..0d34057
--- /dev/null
+++ b/src/com/android/contacts/model/DeviceLocalAccountLocator.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.content.Context;
+
+import com.android.contacts.Experiments;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contactsbind.ObjectFactory;
+import com.android.contactsbind.experiments.Flags;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Attempts to detect accounts for device contacts
+ */
+public abstract class DeviceLocalAccountLocator {
+
+    /**
+     * Returns a list of device local accounts
+     */
+    public abstract List<AccountWithDataSet> getDeviceLocalAccounts();
+
+    // This works on Nexus and AOSP because the local device account is the null account but most
+    // OEMs have a special account name and type for their device account.
+    public static final DeviceLocalAccountLocator NULL_ONLY = new DeviceLocalAccountLocator() {
+        @Override
+        public List<AccountWithDataSet> getDeviceLocalAccounts() {
+            return Collections.singletonList(AccountWithDataSet.getNullAccount());
+        }
+    };
+
+    public static DeviceLocalAccountLocator create(Context context,
+            Set<String> knownAccountTypes) {
+        if (Flags.getInstance().getBoolean(Experiments.OEM_CP2_DEVICE_ACCOUNT_DETECTION_ENABLED)) {
+            return new Cp2DeviceLocalAccountLocator(context.getContentResolver(),
+                    ObjectFactory.getDeviceLocalAccountTypeFactory(context), knownAccountTypes);
+        }
+        return NULL_ONLY;
+    }
+
+    public static DeviceLocalAccountLocator create(Context context) {
+        final AccountManager accountManager =
+                (AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE);
+        final Set<String> knownTypes = new HashSet<>();
+        for (Account account : accountManager.getAccounts()) {
+            knownTypes.add(account.type);
+        }
+        if (Flags.getInstance().getBoolean(Experiments.OEM_CP2_DEVICE_ACCOUNT_DETECTION_ENABLED)) {
+            return new Cp2DeviceLocalAccountLocator(context.getContentResolver(),
+                    ObjectFactory.getDeviceLocalAccountTypeFactory(context), knownTypes);
+        }
+        return NULL_ONLY;
+    }
+}
diff --git a/src/com/android/contacts/model/RawContact.java b/src/com/android/contacts/model/RawContact.java
new file mode 100644
index 0000000..0059fec
--- /dev/null
+++ b/src/com/android/contacts/model/RawContact.java
@@ -0,0 +1,368 @@
+/*
+ * 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.model;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Entity;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.dataitem.DataItem;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * RawContact represents a single raw contact in the raw contacts database.
+ * It has specialized getters/setters for raw contact
+ * items, and also contains a collection of DataItem objects.  A RawContact contains the information
+ * from a single account.
+ *
+ * This allows RawContact objects to be thought of as a class with raw contact
+ * fields (like account type, name, data set, sync state, etc.) and a list of
+ * DataItem objects that represent contact information elements (like phone
+ * numbers, email, address, etc.).
+ */
+final public class RawContact implements Parcelable {
+
+    private AccountTypeManager mAccountTypeManager;
+    private final ContentValues mValues;
+    private final ArrayList<NamedDataItem> mDataItems;
+
+    final public static class NamedDataItem implements Parcelable {
+        public final Uri mUri;
+
+        // This use to be a DataItem. DataItem creation is now delayed until the point of request
+        // since there is no benefit to storing them here due to the multiple inheritance.
+        // Eventually instanceof still has to be used anyways to determine which sub-class of
+        // DataItem it is. And having parent DataItem's here makes it very difficult to serialize or
+        // parcelable.
+        //
+        // Instead of having a common DataItem super class, we should refactor this to be a generic
+        // Object where the object is a concrete class that no longer relies on ContentValues.
+        // (this will also make the classes easier to use).
+        // Since instanceof is used later anyways, having a list of Objects won't hurt and is no
+        // worse than having a DataItem.
+        public final ContentValues mContentValues;
+
+        public NamedDataItem(Uri uri, ContentValues values) {
+            this.mUri = uri;
+            this.mContentValues = values;
+        }
+
+        public NamedDataItem(Parcel parcel) {
+            this.mUri = parcel.readParcelable(Uri.class.getClassLoader());
+            this.mContentValues = parcel.readParcelable(ContentValues.class.getClassLoader());
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel parcel, int i) {
+            parcel.writeParcelable(mUri, i);
+            parcel.writeParcelable(mContentValues, i);
+        }
+
+        public static final Parcelable.Creator<NamedDataItem> CREATOR
+                = new Parcelable.Creator<NamedDataItem>() {
+
+            @Override
+            public NamedDataItem createFromParcel(Parcel parcel) {
+                return new NamedDataItem(parcel);
+            }
+
+            @Override
+            public NamedDataItem[] newArray(int i) {
+                return new NamedDataItem[i];
+            }
+        };
+
+        @Override
+        public int hashCode() {
+            return Objects.hashCode(mUri, mContentValues);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj == null) return false;
+            if (getClass() != obj.getClass()) return false;
+
+            final NamedDataItem other = (NamedDataItem) obj;
+            return Objects.equal(mUri, other.mUri) &&
+                    Objects.equal(mContentValues, other.mContentValues);
+        }
+    }
+
+    public static RawContact createFrom(Entity entity) {
+        final ContentValues values = entity.getEntityValues();
+        final ArrayList<Entity.NamedContentValues> subValues = entity.getSubValues();
+
+        RawContact rawContact = new RawContact(values);
+        for (Entity.NamedContentValues subValue : subValues) {
+            rawContact.addNamedDataItemValues(subValue.uri, subValue.values);
+        }
+        return rawContact;
+    }
+
+    /**
+     * A RawContact object can be created with or without a context.
+     */
+    public RawContact() {
+        this(new ContentValues());
+    }
+
+    public RawContact(ContentValues values) {
+        mValues = values;
+        mDataItems = new ArrayList<NamedDataItem>();
+    }
+
+    /**
+     * Constructor for the parcelable.
+     *
+     * @param parcel The parcel to de-serialize from.
+     */
+    private RawContact(Parcel parcel) {
+        mValues = parcel.readParcelable(ContentValues.class.getClassLoader());
+        mDataItems = Lists.newArrayList();
+        parcel.readTypedList(mDataItems, NamedDataItem.CREATOR);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int i) {
+        parcel.writeParcelable(mValues, i);
+        parcel.writeTypedList(mDataItems);
+    }
+
+    /**
+     * Create for building the parcelable.
+     */
+    public static final Parcelable.Creator<RawContact> CREATOR
+            = new Parcelable.Creator<RawContact>() {
+
+        @Override
+        public RawContact createFromParcel(Parcel parcel) {
+            return new RawContact(parcel);
+        }
+
+        @Override
+        public RawContact[] newArray(int i) {
+            return new RawContact[i];
+        }
+    };
+
+    public AccountTypeManager getAccountTypeManager(Context context) {
+        if (mAccountTypeManager == null) {
+            mAccountTypeManager = AccountTypeManager.getInstance(context);
+        }
+        return mAccountTypeManager;
+    }
+
+    public ContentValues getValues() {
+        return mValues;
+    }
+
+    /**
+     * Returns the id of the raw contact.
+     */
+    public Long getId() {
+        return getValues().getAsLong(RawContacts._ID);
+    }
+
+    /**
+     * Returns the account name of the raw contact.
+     */
+    public String getAccountName() {
+        return getValues().getAsString(RawContacts.ACCOUNT_NAME);
+    }
+
+    /**
+     * Returns the account type of the raw contact.
+     */
+    public String getAccountTypeString() {
+        return getValues().getAsString(RawContacts.ACCOUNT_TYPE);
+    }
+
+    /**
+     * Returns the data set of the raw contact.
+     */
+    public String getDataSet() {
+        return getValues().getAsString(RawContacts.DATA_SET);
+    }
+
+    public boolean isDirty() {
+        return getValues().getAsBoolean(RawContacts.DIRTY);
+    }
+
+    public String getSourceId() {
+        return getValues().getAsString(RawContacts.SOURCE_ID);
+    }
+
+    public String getSync1() {
+        return getValues().getAsString(RawContacts.SYNC1);
+    }
+
+    public String getSync2() {
+        return getValues().getAsString(RawContacts.SYNC2);
+    }
+
+    public String getSync3() {
+        return getValues().getAsString(RawContacts.SYNC3);
+    }
+
+    public String getSync4() {
+        return getValues().getAsString(RawContacts.SYNC4);
+    }
+
+    public boolean isDeleted() {
+        return getValues().getAsBoolean(RawContacts.DELETED);
+    }
+
+    public long getContactId() {
+        return getValues().getAsLong(Contacts.Entity.CONTACT_ID);
+    }
+
+    public boolean isStarred() {
+        return getValues().getAsBoolean(Contacts.STARRED);
+    }
+
+    public AccountType getAccountType(Context context) {
+        return getAccountTypeManager(context).getAccountType(getAccountTypeString(), getDataSet());
+    }
+
+    /**
+     * Sets the account name, account type, and data set strings.
+     * Valid combinations for account-name, account-type, data-set
+     * 1) null, null, null (local account)
+     * 2) non-null, non-null, null (valid account without data-set)
+     * 3) non-null, non-null, non-null (valid account with data-set)
+     */
+    private void setAccount(String accountName, String accountType, String dataSet) {
+        final ContentValues values = getValues();
+        if (accountName == null) {
+            if (accountType == null && dataSet == null) {
+                // This is a local account
+                values.putNull(RawContacts.ACCOUNT_NAME);
+                values.putNull(RawContacts.ACCOUNT_TYPE);
+                values.putNull(RawContacts.DATA_SET);
+                return;
+            }
+        } else {
+            if (accountType != null) {
+                // This is a valid account, either with or without a dataSet.
+                values.put(RawContacts.ACCOUNT_NAME, accountName);
+                values.put(RawContacts.ACCOUNT_TYPE, accountType);
+                if (dataSet == null) {
+                    values.putNull(RawContacts.DATA_SET);
+                } else {
+                    values.put(RawContacts.DATA_SET, dataSet);
+                }
+                return;
+            }
+        }
+        throw new IllegalArgumentException(
+                "Not a valid combination of account name, type, and data set.");
+    }
+
+    public void setAccount(AccountWithDataSet accountWithDataSet) {
+        if (accountWithDataSet != null) {
+            setAccount(accountWithDataSet.name, accountWithDataSet.type,
+                    accountWithDataSet.dataSet);
+        } else {
+            setAccount(null, null, null);
+        }
+    }
+
+    public void setAccountToLocal() {
+        setAccount(null, null, null);
+    }
+
+    /**
+     * Creates and inserts a DataItem object that wraps the content values, and returns it.
+     */
+    public void addDataItemValues(ContentValues values) {
+        addNamedDataItemValues(Data.CONTENT_URI, values);
+    }
+
+    public NamedDataItem addNamedDataItemValues(Uri uri, ContentValues values) {
+        final NamedDataItem namedItem = new NamedDataItem(uri, values);
+        mDataItems.add(namedItem);
+        return namedItem;
+    }
+
+    public ArrayList<ContentValues> getContentValues() {
+        final ArrayList<ContentValues> list = Lists.newArrayListWithCapacity(mDataItems.size());
+        for (NamedDataItem dataItem : mDataItems) {
+            if (Data.CONTENT_URI.equals(dataItem.mUri)) {
+                list.add(dataItem.mContentValues);
+            }
+        }
+        return list;
+    }
+
+    public List<DataItem> getDataItems() {
+        final ArrayList<DataItem> list = Lists.newArrayListWithCapacity(mDataItems.size());
+        for (NamedDataItem dataItem : mDataItems) {
+            if (Data.CONTENT_URI.equals(dataItem.mUri)) {
+                list.add(DataItem.createFrom(dataItem.mContentValues));
+            }
+        }
+        return list;
+    }
+
+    public String toString() {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("RawContact: ").append(mValues);
+        for (RawContact.NamedDataItem namedDataItem : mDataItems) {
+            sb.append("\n  ").append(namedDataItem.mUri);
+            sb.append("\n  -> ").append(namedDataItem.mContentValues);
+        }
+        return sb.toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(mValues, mDataItems);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) return false;
+        if (getClass() != obj.getClass()) return false;
+
+        RawContact other = (RawContact) obj;
+        return Objects.equal(mValues, other.mValues) &&
+                Objects.equal(mDataItems, other.mDataItems);
+    }
+}
diff --git a/src/com/android/contacts/model/RawContactDelta.java b/src/com/android/contacts/model/RawContactDelta.java
new file mode 100644
index 0000000..b7d0665
--- /dev/null
+++ b/src/com/android/contacts/model/RawContactDelta.java
@@ -0,0 +1,660 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderOperation.Builder;
+import android.content.ContentValues;
+import android.content.Context;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.BaseColumns;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Profile;
+import android.provider.ContactsContract.RawContacts;
+import android.util.Log;
+
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * Contains a {@link RawContact} and records any modifications separately so the
+ * original {@link RawContact} can be swapped out with a newer version and the
+ * changes still cleanly applied.
+ * <p>
+ * One benefit of this approach is that we can build changes entirely on an
+ * empty {@link RawContact}, which then becomes an insert {@link RawContacts} case.
+ * <p>
+ * When applying modifications over an {@link RawContact}, we try finding the
+ * original {@link Data#_ID} rows where the modifications took place. If those
+ * rows are missing from the new {@link RawContact}, we know the original data must
+ * be deleted, but to preserve the user modifications we treat as an insert.
+ */
+public class RawContactDelta implements Parcelable {
+    // TODO: optimize by using contentvalues pool, since we allocate so many of them
+
+    private static final String TAG = "EntityDelta";
+    private static final boolean LOGV = false;
+
+    /**
+     * Direct values from {@link Entity#getEntityValues()}.
+     */
+    private ValuesDelta mValues;
+
+    /**
+     * URI used for contacts queries, by default it is set to query raw contacts.
+     * It can be set to query the profile's raw contact(s).
+     */
+    private Uri mContactsQueryUri = RawContacts.CONTENT_URI;
+
+    /**
+     * Internal map of children values from {@link Entity#getSubValues()}, which
+     * we store here sorted into {@link Data#MIMETYPE} bins.
+     */
+    private final HashMap<String, ArrayList<ValuesDelta>> mEntries = Maps.newHashMap();
+
+    public RawContactDelta() {
+    }
+
+    public RawContactDelta(ValuesDelta values) {
+        mValues = values;
+    }
+
+    /**
+     * Build an {@link RawContactDelta} using the given {@link RawContact} as a
+     * starting point; the "before" snapshot.
+     */
+    public static RawContactDelta fromBefore(RawContact before) {
+        final RawContactDelta rawContactDelta = new RawContactDelta();
+        rawContactDelta.mValues = ValuesDelta.fromBefore(before.getValues());
+        rawContactDelta.mValues.setIdColumn(RawContacts._ID);
+        for (final ContentValues values : before.getContentValues()) {
+            rawContactDelta.addEntry(ValuesDelta.fromBefore(values));
+        }
+        return rawContactDelta;
+    }
+
+    /**
+     * Merge the "after" values from the given {@link RawContactDelta} onto the
+     * "before" state represented by this {@link RawContactDelta}, discarding any
+     * existing "after" states. This is typically used when re-parenting changes
+     * onto an updated {@link Entity}.
+     */
+    public static RawContactDelta mergeAfter(RawContactDelta local, RawContactDelta remote) {
+        // Bail early if trying to merge delete with missing local
+        final ValuesDelta remoteValues = remote.mValues;
+        if (local == null && (remoteValues.isDelete() || remoteValues.isTransient())) return null;
+
+        // Create local version if none exists yet
+        if (local == null) local = new RawContactDelta();
+
+        if (LOGV) {
+            final Long localVersion = (local.mValues == null) ? null : local.mValues
+                    .getAsLong(RawContacts.VERSION);
+            final Long remoteVersion = remote.mValues.getAsLong(RawContacts.VERSION);
+            Log.d(TAG, "Re-parenting from original version " + remoteVersion + " to "
+                    + localVersion);
+        }
+
+        // Create values if needed, and merge "after" changes
+        local.mValues = ValuesDelta.mergeAfter(local.mValues, remote.mValues);
+
+        // Find matching local entry for each remote values, or create
+        for (ArrayList<ValuesDelta> mimeEntries : remote.mEntries.values()) {
+            for (ValuesDelta remoteEntry : mimeEntries) {
+                final Long childId = remoteEntry.getId();
+
+                // Find or create local match and merge
+                final ValuesDelta localEntry = local.getEntry(childId);
+                final ValuesDelta merged = ValuesDelta.mergeAfter(localEntry, remoteEntry);
+
+                if (localEntry == null && merged != null) {
+                    // No local entry before, so insert
+                    local.addEntry(merged);
+                }
+            }
+        }
+
+        return local;
+    }
+
+    public ValuesDelta getValues() {
+        return mValues;
+    }
+
+    public boolean isContactInsert() {
+        return mValues.isInsert();
+    }
+
+    /**
+     * Get the {@link ValuesDelta} child marked as {@link Data#IS_PRIMARY},
+     * which may return null when no entry exists.
+     */
+    public ValuesDelta getPrimaryEntry(String mimeType) {
+        final ArrayList<ValuesDelta> mimeEntries = getMimeEntries(mimeType, false);
+        if (mimeEntries == null) return null;
+
+        for (ValuesDelta entry : mimeEntries) {
+            if (entry.isPrimary()) {
+                return entry;
+            }
+        }
+
+        // When no direct primary, return something
+        return mimeEntries.size() > 0 ? mimeEntries.get(0) : null;
+    }
+
+    /**
+     * calls {@link #getSuperPrimaryEntry(String, boolean)} with true
+     * @see #getSuperPrimaryEntry(String, boolean)
+     */
+    public ValuesDelta getSuperPrimaryEntry(String mimeType) {
+        return getSuperPrimaryEntry(mimeType, true);
+    }
+
+    /**
+     * Returns the super-primary entry for the given mime type
+     * @param forceSelection if true, will try to return some value even if a super-primary
+     *     doesn't exist (may be a primary, or just a random item
+     * @return
+     */
+    public ValuesDelta getSuperPrimaryEntry(String mimeType, boolean forceSelection) {
+        final ArrayList<ValuesDelta> mimeEntries = getMimeEntries(mimeType, false);
+        if (mimeEntries == null) return null;
+
+        ValuesDelta primary = null;
+        for (ValuesDelta entry : mimeEntries) {
+            if (entry.isSuperPrimary()) {
+                return entry;
+            } else if (entry.isPrimary()) {
+                primary = entry;
+            }
+        }
+
+        if (!forceSelection) {
+            return null;
+        }
+
+        // When no direct super primary, return something
+        if (primary != null) {
+            return primary;
+        }
+        return mimeEntries.size() > 0 ? mimeEntries.get(0) : null;
+    }
+
+    /**
+     * Return the AccountType that this raw-contact belongs to.
+     */
+    public AccountType getRawContactAccountType(Context context) {
+        ContentValues entityValues = getValues().getCompleteValues();
+        String type = entityValues.getAsString(RawContacts.ACCOUNT_TYPE);
+        String dataSet = entityValues.getAsString(RawContacts.DATA_SET);
+        return AccountTypeManager.getInstance(context).getAccountType(type, dataSet);
+    }
+
+    public Long getRawContactId() {
+        return getValues().getAsLong(RawContacts._ID);
+    }
+
+    public String getAccountName() {
+        return getValues().getAsString(RawContacts.ACCOUNT_NAME);
+    }
+
+    public String getAccountType() {
+        return getValues().getAsString(RawContacts.ACCOUNT_TYPE);
+    }
+
+    public String getDataSet() {
+        return getValues().getAsString(RawContacts.DATA_SET);
+    }
+
+    public AccountType getAccountType(AccountTypeManager manager) {
+        return manager.getAccountType(getAccountType(), getDataSet());
+    }
+
+    public AccountWithDataSet getAccountWithDataSet() {
+        return new AccountWithDataSet(getAccountName(), getAccountType(), getDataSet());
+    }
+
+    public boolean isVisible() {
+        return getValues().isVisible();
+    }
+
+    /**
+     * Return the list of child {@link ValuesDelta} from our optimized map,
+     * creating the list if requested.
+     */
+    private ArrayList<ValuesDelta> getMimeEntries(String mimeType, boolean lazyCreate) {
+        ArrayList<ValuesDelta> mimeEntries = mEntries.get(mimeType);
+        if (mimeEntries == null && lazyCreate) {
+            mimeEntries = Lists.newArrayList();
+            mEntries.put(mimeType, mimeEntries);
+        }
+        return mimeEntries;
+    }
+
+    public ArrayList<ValuesDelta> getMimeEntries(String mimeType) {
+        return getMimeEntries(mimeType, false);
+    }
+
+    public int getMimeEntriesCount(String mimeType, boolean onlyVisible) {
+        final ArrayList<ValuesDelta> mimeEntries = getMimeEntries(mimeType);
+        if (mimeEntries == null) return 0;
+
+        int count = 0;
+        for (ValuesDelta child : mimeEntries) {
+            // Skip deleted items when requesting only visible
+            if (onlyVisible && !child.isVisible()) continue;
+            count++;
+        }
+        return count;
+    }
+
+    public boolean hasMimeEntries(String mimeType) {
+        return mEntries.containsKey(mimeType);
+    }
+
+    public ValuesDelta addEntry(ValuesDelta entry) {
+        final String mimeType = entry.getMimetype();
+        getMimeEntries(mimeType, true).add(entry);
+        return entry;
+    }
+
+    public ArrayList<ContentValues> getContentValues() {
+        ArrayList<ContentValues> values = Lists.newArrayList();
+        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+            for (ValuesDelta entry : mimeEntries) {
+                if (!entry.isDelete()) {
+                    values.add(entry.getCompleteValues());
+                }
+            }
+        }
+        return values;
+    }
+
+    /**
+     * Find entry with the given {@link BaseColumns#_ID} value.
+     */
+    public ValuesDelta getEntry(Long childId) {
+        if (childId == null) {
+            // Requesting an "insert" entry, which has no "before"
+            return null;
+        }
+
+        // Search all children for requested entry
+        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+            for (ValuesDelta entry : mimeEntries) {
+                if (childId.equals(entry.getId())) {
+                    return entry;
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Return the total number of {@link ValuesDelta} contained.
+     */
+    public int getEntryCount(boolean onlyVisible) {
+        int count = 0;
+        for (String mimeType : mEntries.keySet()) {
+            count += getMimeEntriesCount(mimeType, onlyVisible);
+        }
+        return count;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        if (object instanceof RawContactDelta) {
+            final RawContactDelta other = (RawContactDelta)object;
+
+            // Equality failed if parent values different
+            if (!other.mValues.equals(mValues)) return false;
+
+            for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+                for (ValuesDelta child : mimeEntries) {
+                    // Equality failed if any children unmatched
+                    if (!other.containsEntry(child)) return false;
+                }
+            }
+
+            // Passed all tests, so equal
+            return true;
+        }
+        return false;
+    }
+
+    private boolean containsEntry(ValuesDelta entry) {
+        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+            for (ValuesDelta child : mimeEntries) {
+                // Contained if we find any child that matches
+                if (child.equals(entry)) return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Mark this entire object deleted, including any {@link ValuesDelta}.
+     */
+    public void markDeleted() {
+        this.mValues.markDeleted();
+        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+            for (ValuesDelta child : mimeEntries) {
+                child.markDeleted();
+            }
+        }
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder builder = new StringBuilder();
+        builder.append("\n(");
+        builder.append("Uri=");
+        builder.append(mContactsQueryUri);
+        builder.append(", Values=");
+        builder.append(mValues != null ? mValues.toString() : "null");
+        builder.append(", Entries={");
+        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+            for (ValuesDelta child : mimeEntries) {
+                builder.append("\n\t");
+                child.toString(builder);
+            }
+        }
+        builder.append("\n})\n");
+        return builder.toString();
+    }
+
+    /**
+     * Consider building the given {@link ContentProviderOperation.Builder} and
+     * appending it to the given list, which only happens if builder is valid.
+     */
+    private void possibleAdd(ArrayList<ContentProviderOperation> diff,
+            ContentProviderOperation.Builder builder) {
+        if (builder != null) {
+            diff.add(builder.build());
+        }
+    }
+
+    /**
+     * For compatibility purpose, this method is copied from {@link #possibleAdd} and takes
+     * BuilderWrapper and an ArrayList of CPOWrapper as parameters.
+     */
+    private void possibleAddWrapper(ArrayList<CPOWrapper> diff, BuilderWrapper bw) {
+        if (bw != null && bw.getBuilder() != null) {
+            diff.add(new CPOWrapper(bw.getBuilder().build(), bw.getType()));
+        }
+    }
+
+    /**
+     * Build a list of {@link ContentProviderOperation} that will assert any
+     * "before" state hasn't changed. This is maintained separately so that all
+     * asserts can take place before any updates occur.
+     */
+    public void buildAssert(ArrayList<ContentProviderOperation> buildInto) {
+        final Builder builder = buildAssertHelper();
+        if (builder != null) {
+            buildInto.add(builder.build());
+        }
+    }
+
+    /**
+     * For compatibility purpose, this method is copied from {@link #buildAssert} and takes an
+     * ArrayList of CPOWrapper as parameter.
+     */
+    public void buildAssertWrapper(ArrayList<CPOWrapper> buildInto) {
+        final Builder builder = buildAssertHelper();
+        if (builder != null) {
+            buildInto.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_ASSERT));
+        }
+    }
+
+    private Builder buildAssertHelper() {
+        final boolean isContactInsert = mValues.isInsert();
+        ContentProviderOperation.Builder builder = null;
+        if (!isContactInsert) {
+            // Assert version is consistent while persisting changes
+            final Long beforeId = mValues.getId();
+            final Long beforeVersion = mValues.getAsLong(RawContacts.VERSION);
+            if (beforeId == null || beforeVersion == null) return builder;
+            builder = ContentProviderOperation.newAssertQuery(mContactsQueryUri);
+            builder.withSelection(RawContacts._ID + "=" + beforeId, null);
+            builder.withValue(RawContacts.VERSION, beforeVersion);
+        }
+        return builder;
+    }
+
+    /**
+     * Build a list of {@link ContentProviderOperation} that will transform the
+     * current "before" {@link Entity} state into the modified state which this
+     * {@link RawContactDelta} represents.
+     */
+    public void buildDiff(ArrayList<ContentProviderOperation> buildInto) {
+        final int firstIndex = buildInto.size();
+
+        final boolean isContactInsert = mValues.isInsert();
+        final boolean isContactDelete = mValues.isDelete();
+        final boolean isContactUpdate = !isContactInsert && !isContactDelete;
+
+        final Long beforeId = mValues.getId();
+
+        Builder builder;
+
+        if (isContactInsert) {
+            // TODO: for now simply disabling aggregation when a new contact is
+            // created on the phone.  In the future, will show aggregation suggestions
+            // after saving the contact.
+            mValues.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED);
+        }
+
+        // Build possible operation at Contact level
+        builder = mValues.buildDiff(mContactsQueryUri);
+        possibleAdd(buildInto, builder);
+
+        // Build operations for all children
+        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+            for (ValuesDelta child : mimeEntries) {
+                // Ignore children if parent was deleted
+                if (isContactDelete) continue;
+
+                // Use the profile data URI if the contact is the profile.
+                if (mContactsQueryUri.equals(Profile.CONTENT_RAW_CONTACTS_URI)) {
+                    builder = child.buildDiff(Uri.withAppendedPath(Profile.CONTENT_URI,
+                            RawContacts.Data.CONTENT_DIRECTORY));
+                } else {
+                    builder = child.buildDiff(Data.CONTENT_URI);
+                }
+
+                if (child.isInsert()) {
+                    if (isContactInsert) {
+                        // Parent is brand new insert, so back-reference _id
+                        builder.withValueBackReference(Data.RAW_CONTACT_ID, firstIndex);
+                    } else {
+                        // Inserting under existing, so fill with known _id
+                        builder.withValue(Data.RAW_CONTACT_ID, beforeId);
+                    }
+                } else if (isContactInsert && builder != null) {
+                    // Child must be insert when Contact insert
+                    throw new IllegalArgumentException("When parent insert, child must be also");
+                }
+                possibleAdd(buildInto, builder);
+            }
+        }
+
+        final boolean addedOperations = buildInto.size() > firstIndex;
+        if (addedOperations && isContactUpdate) {
+            // Suspend aggregation while persisting updates
+            builder = buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_SUSPENDED);
+            buildInto.add(firstIndex, builder.build());
+
+            // Restore aggregation mode as last operation
+            builder = buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_DEFAULT);
+            buildInto.add(builder.build());
+        } else if (isContactInsert) {
+            // Restore aggregation mode as last operation
+            builder = ContentProviderOperation.newUpdate(mContactsQueryUri);
+            builder.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT);
+            builder.withSelection(RawContacts._ID + "=?", new String[1]);
+            builder.withSelectionBackReference(0, firstIndex);
+            buildInto.add(builder.build());
+        }
+    }
+
+    /**
+     * For compatibility purpose, this method is copied from {@link #buildDiff} and takes an
+     * ArrayList of CPOWrapper as parameter.
+     */
+    public void buildDiffWrapper(ArrayList<CPOWrapper> buildInto) {
+        final int firstIndex = buildInto.size();
+
+        final boolean isContactInsert = mValues.isInsert();
+        final boolean isContactDelete = mValues.isDelete();
+        final boolean isContactUpdate = !isContactInsert && !isContactDelete;
+
+        final Long beforeId = mValues.getId();
+
+        if (isContactInsert) {
+            // TODO: for now simply disabling aggregation when a new contact is
+            // created on the phone.  In the future, will show aggregation suggestions
+            // after saving the contact.
+            mValues.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED);
+        }
+
+        // Build possible operation at Contact level
+        BuilderWrapper bw = mValues.buildDiffWrapper(mContactsQueryUri);
+        possibleAddWrapper(buildInto, bw);
+
+        // Build operations for all children
+        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+            for (ValuesDelta child : mimeEntries) {
+                // Ignore children if parent was deleted
+                if (isContactDelete) continue;
+
+                // Use the profile data URI if the contact is the profile.
+                if (mContactsQueryUri.equals(Profile.CONTENT_RAW_CONTACTS_URI)) {
+                    bw = child.buildDiffWrapper(Uri.withAppendedPath(Profile.CONTENT_URI,
+                            RawContacts.Data.CONTENT_DIRECTORY));
+                } else {
+                    bw = child.buildDiffWrapper(Data.CONTENT_URI);
+                }
+
+                if (child.isInsert()) {
+                    if (isContactInsert) {
+                        // Parent is brand new insert, so back-reference _id
+                        bw.getBuilder().withValueBackReference(Data.RAW_CONTACT_ID, firstIndex);
+                    } else {
+                        // Inserting under existing, so fill with known _id
+                        bw.getBuilder().withValue(Data.RAW_CONTACT_ID, beforeId);
+                    }
+                } else if (isContactInsert && bw != null && bw.getBuilder() != null) {
+                    // Child must be insert when Contact insert
+                    throw new IllegalArgumentException("When parent insert, child must be also");
+                }
+                possibleAddWrapper(buildInto, bw);
+            }
+        }
+
+        final boolean addedOperations = buildInto.size() > firstIndex;
+        if (addedOperations && isContactUpdate) {
+            // Suspend aggregation while persisting updates
+            Builder builder =
+                    buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_SUSPENDED);
+            buildInto.add(firstIndex, new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+
+            // Restore aggregation mode as last operation
+            builder = buildSetAggregationMode(beforeId, RawContacts.AGGREGATION_MODE_DEFAULT);
+            buildInto.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+        } else if (isContactInsert) {
+            // Restore aggregation mode as last operation
+            Builder builder = ContentProviderOperation.newUpdate(mContactsQueryUri);
+            builder.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT);
+            builder.withSelection(RawContacts._ID + "=?", new String[1]);
+            builder.withSelectionBackReference(0, firstIndex);
+            buildInto.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+        }
+    }
+
+    /**
+     * Build a {@link ContentProviderOperation} that changes
+     * {@link RawContacts#AGGREGATION_MODE} to the given value.
+     */
+    protected Builder buildSetAggregationMode(Long beforeId, int mode) {
+        Builder builder = ContentProviderOperation.newUpdate(mContactsQueryUri);
+        builder.withValue(RawContacts.AGGREGATION_MODE, mode);
+        builder.withSelection(RawContacts._ID + "=" + beforeId, null);
+        return builder;
+    }
+
+    /** {@inheritDoc} */
+    public int describeContents() {
+        // Nothing special about this parcel
+        return 0;
+    }
+
+    /** {@inheritDoc} */
+    public void writeToParcel(Parcel dest, int flags) {
+        final int size = this.getEntryCount(false);
+        dest.writeInt(size);
+        dest.writeParcelable(mValues, flags);
+        dest.writeParcelable(mContactsQueryUri, flags);
+        for (ArrayList<ValuesDelta> mimeEntries : mEntries.values()) {
+            for (ValuesDelta child : mimeEntries) {
+                dest.writeParcelable(child, flags);
+            }
+        }
+    }
+
+    public void readFromParcel(Parcel source) {
+        final ClassLoader loader = getClass().getClassLoader();
+        final int size = source.readInt();
+        mValues = source.<ValuesDelta> readParcelable(loader);
+        mContactsQueryUri = source.<Uri> readParcelable(loader);
+        for (int i = 0; i < size; i++) {
+            final ValuesDelta child = source.<ValuesDelta> readParcelable(loader);
+            this.addEntry(child);
+        }
+    }
+
+    /**
+     * Used to set the query URI to the profile URI to store profiles.
+     */
+    public void setProfileQueryUri() {
+        mContactsQueryUri = Profile.CONTENT_RAW_CONTACTS_URI;
+    }
+
+    public static final Parcelable.Creator<RawContactDelta> CREATOR =
+            new Parcelable.Creator<RawContactDelta>() {
+        public RawContactDelta createFromParcel(Parcel in) {
+            final RawContactDelta state = new RawContactDelta();
+            state.readFromParcel(in);
+            return state;
+        }
+
+        public RawContactDelta[] newArray(int size) {
+            return new RawContactDelta[size];
+        }
+    };
+
+}
diff --git a/src/com/android/contacts/model/RawContactDeltaList.java b/src/com/android/contacts/model/RawContactDeltaList.java
new file mode 100644
index 0000000..de007d2
--- /dev/null
+++ b/src/com/android/contacts/model/RawContactDeltaList.java
@@ -0,0 +1,571 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderOperation.Builder;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Entity;
+import android.content.EntityIterator;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.ContactsContract.AggregationExceptions;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.RawContacts;
+import android.util.Log;
+
+import com.android.contacts.compat.CompatUtils;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+
+/**
+ * Container for multiple {@link RawContactDelta} objects, usually when editing
+ * together as an entire aggregate. Provides convenience methods for parceling
+ * and applying another {@link RawContactDeltaList} over it.
+ */
+public class RawContactDeltaList extends ArrayList<RawContactDelta> implements Parcelable {
+    private static final String TAG = RawContactDeltaList.class.getSimpleName();
+    private static final boolean VERBOSE_LOGGING = Log.isLoggable(TAG, Log.VERBOSE);
+
+    private boolean mSplitRawContacts;
+    private long[] mJoinWithRawContactIds;
+
+    public RawContactDeltaList() {
+    }
+
+    /**
+     * Create an {@link RawContactDeltaList} based on {@link Contacts} specified by the
+     * given query parameters. This closes the {@link EntityIterator} when
+     * finished, so it doesn't subscribe to updates.
+     */
+    public static RawContactDeltaList fromQuery(Uri entityUri, ContentResolver resolver,
+            String selection, String[] selectionArgs, String sortOrder) {
+        final EntityIterator iterator = RawContacts.newEntityIterator(
+                resolver.query(entityUri, null, selection, selectionArgs, sortOrder));
+        try {
+            return fromIterator(iterator);
+        } finally {
+            iterator.close();
+        }
+    }
+
+    /**
+     * Create an {@link RawContactDeltaList} that contains the entities of the Iterator as before
+     * values.  This function can be passed an iterator of Entity objects or an iterator of
+     * RawContact objects.
+     */
+    public static RawContactDeltaList fromIterator(Iterator<?> iterator) {
+        final RawContactDeltaList state = new RawContactDeltaList();
+        state.addAll(iterator);
+        return state;
+    }
+
+    public void addAll(Iterator<?> iterator) {
+        // Perform background query to pull contact details
+        while (iterator.hasNext()) {
+            // Read all contacts into local deltas to prepare for edits
+            Object nextObject = iterator.next();
+            final RawContact before = nextObject instanceof Entity
+                    ? RawContact.createFrom((Entity) nextObject)
+                    : (RawContact) nextObject;
+            final RawContactDelta rawContactDelta = RawContactDelta.fromBefore(before);
+            add(rawContactDelta);
+        }
+    }
+
+    /**
+     * Merge the "after" values from the given {@link RawContactDeltaList}, discarding any
+     * previous "after" states. This is typically used when re-parenting user
+     * edits onto an updated {@link RawContactDeltaList}.
+     */
+    public static RawContactDeltaList mergeAfter(RawContactDeltaList local,
+            RawContactDeltaList remote) {
+        if (local == null) local = new RawContactDeltaList();
+
+        // For each entity in the remote set, try matching over existing
+        for (RawContactDelta remoteEntity : remote) {
+            final Long rawContactId = remoteEntity.getValues().getId();
+
+            // Find or create local match and merge
+            final RawContactDelta localEntity = local.getByRawContactId(rawContactId);
+            final RawContactDelta merged = RawContactDelta.mergeAfter(localEntity, remoteEntity);
+
+            if (localEntity == null && merged != null) {
+                // No local entry before, so insert
+                local.add(merged);
+            }
+        }
+
+        return local;
+    }
+
+    /**
+     * Build a list of {@link ContentProviderOperation} that will transform all
+     * the "before" {@link Entity} states into the modified state which all
+     * {@link RawContactDelta} objects represent. This method specifically creates
+     * any {@link AggregationExceptions} rules needed to groups edits together.
+     */
+    public ArrayList<ContentProviderOperation> buildDiff() {
+        if (VERBOSE_LOGGING) {
+            Log.v(TAG, "buildDiff: list=" + toString());
+        }
+        final ArrayList<ContentProviderOperation> diff = Lists.newArrayList();
+
+        final long rawContactId = this.findRawContactId();
+        int firstInsertRow = -1;
+
+        // First pass enforces versions remain consistent
+        for (RawContactDelta delta : this) {
+            delta.buildAssert(diff);
+        }
+
+        final int assertMark = diff.size();
+        int backRefs[] = new int[size()];
+
+        int rawContactIndex = 0;
+
+        // Second pass builds actual operations
+        for (RawContactDelta delta : this) {
+            final int firstBatch = diff.size();
+            final boolean isInsert = delta.isContactInsert();
+            backRefs[rawContactIndex++] = isInsert ? firstBatch : -1;
+
+            delta.buildDiff(diff);
+
+            // If the user chose to join with some other existing raw contact(s) at save time,
+            // add aggregation exceptions for all those raw contacts.
+            if (mJoinWithRawContactIds != null) {
+                for (Long joinedRawContactId : mJoinWithRawContactIds) {
+                    final Builder builder = beginKeepTogether();
+                    builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, joinedRawContactId);
+                    if (rawContactId != -1) {
+                        builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, rawContactId);
+                    } else {
+                        builder.withValueBackReference(
+                                AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
+                    }
+                    diff.add(builder.build());
+                }
+            }
+
+            // Only create rules for inserts
+            if (!isInsert) continue;
+
+            // If we are going to split all contacts, there is no point in first combining them
+            if (mSplitRawContacts) continue;
+
+            if (rawContactId != -1) {
+                // Has existing contact, so bind to it strongly
+                final Builder builder = beginKeepTogether();
+                builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, rawContactId);
+                builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
+                diff.add(builder.build());
+
+            } else if (firstInsertRow == -1) {
+                // First insert case, so record row
+                firstInsertRow = firstBatch;
+
+            } else {
+                // Additional insert case, so point at first insert
+                final Builder builder = beginKeepTogether();
+                builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID1,
+                        firstInsertRow);
+                builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
+                diff.add(builder.build());
+            }
+        }
+
+        if (mSplitRawContacts) {
+            buildSplitContactDiff(diff, backRefs);
+        }
+
+        // No real changes if only left with asserts
+        if (diff.size() == assertMark) {
+            diff.clear();
+        }
+        if (VERBOSE_LOGGING) {
+            Log.v(TAG, "buildDiff: ops=" + diffToString(diff));
+        }
+        return diff;
+    }
+
+    /**
+     * For compatibility purpose, this method is copied from {@link #buildDiff} and returns an
+     * ArrayList of CPOWrapper.
+     */
+    public ArrayList<CPOWrapper> buildDiffWrapper() {
+        if (VERBOSE_LOGGING) {
+            Log.v(TAG, "buildDiffWrapper: list=" + toString());
+        }
+        final ArrayList<CPOWrapper> diffWrapper = Lists.newArrayList();
+
+        final long rawContactId = this.findRawContactId();
+        int firstInsertRow = -1;
+
+        // First pass enforces versions remain consistent
+        for (RawContactDelta delta : this) {
+            delta.buildAssertWrapper(diffWrapper);
+        }
+
+        final int assertMark = diffWrapper.size();
+        int backRefs[] = new int[size()];
+
+        int rawContactIndex = 0;
+
+        // Second pass builds actual operations
+        for (RawContactDelta delta : this) {
+            final int firstBatch = diffWrapper.size();
+            final boolean isInsert = delta.isContactInsert();
+            backRefs[rawContactIndex++] = isInsert ? firstBatch : -1;
+
+            delta.buildDiffWrapper(diffWrapper);
+
+            // If the user chose to join with some other existing raw contact(s) at save time,
+            // add aggregation exceptions for all those raw contacts.
+            if (mJoinWithRawContactIds != null) {
+                for (Long joinedRawContactId : mJoinWithRawContactIds) {
+                    final Builder builder = beginKeepTogether();
+                    builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, joinedRawContactId);
+                    if (rawContactId != -1) {
+                        builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, rawContactId);
+                    } else {
+                        builder.withValueBackReference(
+                                AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
+                    }
+                    diffWrapper.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+                }
+            }
+
+            // Only create rules for inserts
+            if (!isInsert) continue;
+
+            // If we are going to split all contacts, there is no point in first combining them
+            if (mSplitRawContacts) continue;
+
+            if (rawContactId != -1) {
+                // Has existing contact, so bind to it strongly
+                final Builder builder = beginKeepTogether();
+                builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, rawContactId);
+                builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
+                diffWrapper.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+
+            } else if (firstInsertRow == -1) {
+                // First insert case, so record row
+                firstInsertRow = firstBatch;
+
+            } else {
+                // Additional insert case, so point at first insert
+                final Builder builder = beginKeepTogether();
+                builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID1,
+                        firstInsertRow);
+                builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, firstBatch);
+                diffWrapper.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+            }
+        }
+
+        if (mSplitRawContacts) {
+            buildSplitContactDiffWrapper(diffWrapper, backRefs);
+        }
+
+        // No real changes if only left with asserts
+        if (diffWrapper.size() == assertMark) {
+            diffWrapper.clear();
+        }
+        if (VERBOSE_LOGGING) {
+            Log.v(TAG, "buildDiff: ops=" + diffToStringWrapper(diffWrapper));
+        }
+        return diffWrapper;
+    }
+
+    private static String diffToString(ArrayList<ContentProviderOperation> ops) {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("[\n");
+        for (ContentProviderOperation op : ops) {
+            sb.append(op.toString());
+            sb.append(",\n");
+        }
+        sb.append("]\n");
+        return sb.toString();
+    }
+
+    /**
+     * For compatibility purpose.
+     */
+    private static String diffToStringWrapper(ArrayList<CPOWrapper> cpoWrappers) {
+        ArrayList<ContentProviderOperation> ops = Lists.newArrayList();
+        for (CPOWrapper cpoWrapper : cpoWrappers) {
+            ops.add(cpoWrapper.getOperation());
+        }
+        return diffToString(ops);
+    }
+
+    /**
+     * Start building a {@link ContentProviderOperation} that will keep two
+     * {@link RawContacts} together.
+     */
+    protected Builder beginKeepTogether() {
+        final Builder builder = ContentProviderOperation
+                .newUpdate(AggregationExceptions.CONTENT_URI);
+        builder.withValue(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_TOGETHER);
+        return builder;
+    }
+
+    /**
+     * Builds {@link AggregationExceptions} to split all constituent raw contacts into
+     * separate contacts.
+     */
+    private void buildSplitContactDiff(final ArrayList<ContentProviderOperation> diff,
+            int[] backRefs) {
+        final int count = size();
+        for (int i = 0; i < count; i++) {
+            for (int j = 0; j < count; j++) {
+                if (i == j) {
+                    continue;
+                }
+                final Builder builder = buildSplitContactDiffHelper(i, j, backRefs);
+                if (builder != null) {
+                    diff.add(builder.build());
+                }
+            }
+        }
+    }
+
+    /**
+     * For compatibility purpose, this method is copied from {@link #buildSplitContactDiff} and
+     * takes an ArrayList of CPOWrapper as parameter.
+     */
+    private void buildSplitContactDiffWrapper(final ArrayList<CPOWrapper> diff, int[] backRefs) {
+        final int count = size();
+        for (int i = 0; i < count; i++) {
+            for (int j = 0; j < count; j++) {
+                if (i == j) {
+                    continue;
+                }
+                final Builder builder = buildSplitContactDiffHelper(i, j, backRefs);
+                if (builder != null) {
+                    diff.add(new CPOWrapper(builder.build(), CompatUtils.TYPE_UPDATE));
+                }
+            }
+        }
+    }
+
+    private Builder buildSplitContactDiffHelper(int index1, int index2, int[] backRefs) {
+        final Builder builder =
+                ContentProviderOperation.newUpdate(AggregationExceptions.CONTENT_URI);
+        builder.withValue(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_SEPARATE);
+
+        Long rawContactId1 = get(index1).getValues().getAsLong(RawContacts._ID);
+        int backRef1 = backRefs[index1];
+        if (rawContactId1 != null && rawContactId1 >= 0) {
+            builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, rawContactId1);
+        } else if (backRef1 >= 0) {
+            builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID1, backRef1);
+        } else {
+            return null;
+        }
+
+        Long rawContactId2 = get(index2).getValues().getAsLong(RawContacts._ID);
+        int backRef2 = backRefs[index2];
+        if (rawContactId2 != null && rawContactId2 >= 0) {
+            builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, rawContactId2);
+        } else if (backRef2 >= 0) {
+            builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, backRef2);
+        } else {
+            return null;
+        }
+        return builder;
+    }
+
+    /**
+     * Search all contained {@link RawContactDelta} for the first one with an
+     * existing {@link RawContacts#_ID} value. Usually used when creating
+     * {@link AggregationExceptions} during an update.
+     */
+    public long findRawContactId() {
+        for (RawContactDelta delta : this) {
+            final Long rawContactId = delta.getValues().getAsLong(RawContacts._ID);
+            if (rawContactId != null && rawContactId >= 0) {
+                return rawContactId;
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Find {@link RawContacts#_ID} of the requested {@link RawContactDelta}.
+     */
+    public Long getRawContactId(int index) {
+        if (index >= 0 && index < this.size()) {
+            final RawContactDelta delta = this.get(index);
+            final ValuesDelta values = delta.getValues();
+            if (values.isVisible()) {
+                return values.getAsLong(RawContacts._ID);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Find the raw-contact (an {@link RawContactDelta}) with the specified ID.
+     */
+    public RawContactDelta getByRawContactId(Long rawContactId) {
+        final int index = this.indexOfRawContactId(rawContactId);
+        return (index == -1) ? null : this.get(index);
+    }
+
+    /**
+     * Find index of given {@link RawContacts#_ID} when present.
+     */
+    public int indexOfRawContactId(Long rawContactId) {
+        if (rawContactId == null) return -1;
+        final int size = this.size();
+        for (int i = 0; i < size; i++) {
+            final Long currentId = getRawContactId(i);
+            if (rawContactId.equals(currentId)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Return the index of the first RawContactDelta corresponding to a writable raw-contact, or -1.
+     * */
+    public int indexOfFirstWritableRawContact(Context context) {
+        // Find the first writable entity.
+        int entityIndex = 0;
+        for (RawContactDelta delta : this) {
+            if (delta.getRawContactAccountType(context).areContactsWritable()) return entityIndex;
+            entityIndex++;
+        }
+        return -1;
+    }
+
+    /**  Return the first RawContactDelta corresponding to a writable raw-contact, or null. */
+    public RawContactDelta getFirstWritableRawContact(Context context) {
+        final int index = indexOfFirstWritableRawContact(context);
+        return (index == -1) ? null : get(index);
+    }
+
+    public ValuesDelta getSuperPrimaryEntry(final String mimeType) {
+        ValuesDelta primary = null;
+        ValuesDelta randomEntry = null;
+        for (RawContactDelta delta : this) {
+            final ArrayList<ValuesDelta> mimeEntries = delta.getMimeEntries(mimeType);
+            if (mimeEntries == null) return null;
+
+            for (ValuesDelta entry : mimeEntries) {
+                if (entry.isSuperPrimary()) {
+                    return entry;
+                } else if (primary == null && entry.isPrimary()) {
+                    primary = entry;
+                } else if (randomEntry == null) {
+                    randomEntry = entry;
+                }
+            }
+        }
+        // When no direct super primary, return something
+        if (primary != null) {
+            return primary;
+        }
+        return randomEntry;
+    }
+
+    /**
+     * Sets a flag that will split ("explode") the raw_contacts into seperate contacts
+     */
+    public void markRawContactsForSplitting() {
+        mSplitRawContacts = true;
+    }
+
+    public boolean isMarkedForSplitting() {
+        return mSplitRawContacts;
+    }
+
+    public void setJoinWithRawContacts(long[] rawContactIds) {
+        mJoinWithRawContactIds = rawContactIds;
+    }
+
+    public boolean isMarkedForJoining() {
+        return mJoinWithRawContactIds != null && mJoinWithRawContactIds.length > 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public int describeContents() {
+        // Nothing special about this parcel
+        return 0;
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        final int size = this.size();
+        dest.writeInt(size);
+        for (RawContactDelta delta : this) {
+            dest.writeParcelable(delta, flags);
+        }
+        dest.writeLongArray(mJoinWithRawContactIds);
+        dest.writeInt(mSplitRawContacts ? 1 : 0);
+    }
+
+    @SuppressWarnings("unchecked")
+    public void readFromParcel(Parcel source) {
+        final ClassLoader loader = getClass().getClassLoader();
+        final int size = source.readInt();
+        for (int i = 0; i < size; i++) {
+            this.add(source.<RawContactDelta> readParcelable(loader));
+        }
+        mJoinWithRawContactIds = source.createLongArray();
+        mSplitRawContacts = source.readInt() != 0;
+    }
+
+    public static final Parcelable.Creator<RawContactDeltaList> CREATOR =
+            new Parcelable.Creator<RawContactDeltaList>() {
+        @Override
+        public RawContactDeltaList createFromParcel(Parcel in) {
+            final RawContactDeltaList state = new RawContactDeltaList();
+            state.readFromParcel(in);
+            return state;
+        }
+
+        @Override
+        public RawContactDeltaList[] newArray(int size) {
+            return new RawContactDeltaList[size];
+        }
+    };
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("(");
+        sb.append("Split=");
+        sb.append(mSplitRawContacts);
+        sb.append(", Join=[");
+        sb.append(Arrays.toString(mJoinWithRawContactIds));
+        sb.append("], Values=");
+        sb.append(super.toString());
+        sb.append(")");
+        return sb.toString();
+    }
+}
diff --git a/src/com/android/contacts/model/RawContactModifier.java b/src/com/android/contacts/model/RawContactModifier.java
new file mode 100644
index 0000000..0252567
--- /dev/null
+++ b/src/com/android/contacts/model/RawContactModifier.java
@@ -0,0 +1,1398 @@
+/*
+ * 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.model;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.BaseTypes;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Intents;
+import android.provider.ContactsContract.Intents.Insert;
+import android.provider.ContactsContract.RawContacts;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountType.EditField;
+import com.android.contacts.model.account.AccountType.EditType;
+import com.android.contacts.model.account.AccountType.EventEditType;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.model.dataitem.PhoneDataItem;
+import com.android.contacts.model.dataitem.StructuredNameDataItem;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contacts.util.DateUtils;
+import com.android.contacts.util.NameConverter;
+
+import java.text.ParsePosition;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+
+/**
+ * Helper methods for modifying an {@link RawContactDelta}, such as inserting
+ * new rows, or enforcing {@link AccountType}.
+ */
+public class RawContactModifier {
+    private static final String TAG = RawContactModifier.class.getSimpleName();
+
+    /** Set to true in order to view logs on entity operations */
+    private static final boolean DEBUG = false;
+
+    /**
+     * For the given {@link RawContactDelta}, determine if the given
+     * {@link DataKind} could be inserted under specific
+     * {@link AccountType}.
+     */
+    public static boolean canInsert(RawContactDelta state, DataKind kind) {
+        // Insert possible when have valid types and under overall maximum
+        final int visibleCount = state.getMimeEntriesCount(kind.mimeType, true);
+        final boolean validTypes = hasValidTypes(state, kind);
+        final boolean validOverall = (kind.typeOverallMax == -1)
+                || (visibleCount < kind.typeOverallMax);
+        return (validTypes && validOverall);
+    }
+
+    public static boolean hasValidTypes(RawContactDelta state, DataKind kind) {
+        if (RawContactModifier.hasEditTypes(kind)) {
+            return (getValidTypes(state, kind, null, true, null, true).size() > 0);
+        } else {
+            return true;
+        }
+    }
+
+    /**
+     * Ensure that at least one of the given {@link DataKind} exists in the
+     * given {@link RawContactDelta} state, and try creating one if none exist.
+     * @return The child (either newly created or the first existing one), or null if the
+     *     account doesn't support this {@link DataKind}.
+     */
+    public static ValuesDelta ensureKindExists(
+            RawContactDelta state, AccountType accountType, String mimeType) {
+        final DataKind kind = accountType.getKindForMimetype(mimeType);
+        final boolean hasChild = state.getMimeEntriesCount(mimeType, true) > 0;
+
+        if (kind != null) {
+            if (hasChild) {
+                // Return the first entry.
+                return state.getMimeEntries(mimeType).get(0);
+            } else {
+                // Create child when none exists and valid kind
+                final ValuesDelta child = insertChild(state, kind);
+                if (kind.mimeType.equals(Photo.CONTENT_ITEM_TYPE)) {
+                    child.setFromTemplate(true);
+                }
+                return child;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * For the given {@link RawContactDelta} and {@link DataKind}, return the
+     * list possible {@link EditType} options available based on
+     * {@link AccountType}.
+     *
+     * @param forceInclude Always include this {@link EditType} in the returned
+     *            list, even when an otherwise-invalid choice. This is useful
+     *            when showing a dialog that includes the current type.
+     * @param includeSecondary If true, include any valid types marked as
+     *            {@link EditType#secondary}.
+     * @param typeCount When provided, will be used for the frequency count of
+     *            each {@link EditType}, otherwise built using
+     *            {@link #getTypeFrequencies(RawContactDelta, DataKind)}.
+     * @param checkOverall If true, check if the overall number of types is under limit.
+     */
+    public static ArrayList<EditType> getValidTypes(RawContactDelta state, DataKind kind,
+            EditType forceInclude, boolean includeSecondary, SparseIntArray typeCount,
+            boolean checkOverall) {
+        final ArrayList<EditType> validTypes = new ArrayList<EditType>();
+
+        // Bail early if no types provided
+        if (!hasEditTypes(kind)) return validTypes;
+
+        if (typeCount == null) {
+            // Build frequency counts if not provided
+            typeCount = getTypeFrequencies(state, kind);
+        }
+
+        // Build list of valid types
+        boolean validOverall = true;
+        if (checkOverall) {
+            final int overallCount = typeCount.get(FREQUENCY_TOTAL);
+            validOverall = (kind.typeOverallMax == -1 ? true
+                    : overallCount < kind.typeOverallMax);
+        }
+
+        for (EditType type : kind.typeList) {
+            final boolean validSpecific = (type.specificMax == -1 ? true : typeCount
+                    .get(type.rawValue) < type.specificMax);
+            final boolean validSecondary = (includeSecondary ? true : !type.secondary);
+            final boolean forcedInclude = type.equals(forceInclude);
+            if (forcedInclude || (validOverall && validSpecific && validSecondary)) {
+                // Type is valid when no limit, under limit, or forced include
+                validTypes.add(type);
+            }
+        }
+
+        return validTypes;
+    }
+
+    private static final int FREQUENCY_TOTAL = Integer.MIN_VALUE;
+
+    /**
+     * Count up the frequency that each {@link EditType} appears in the given
+     * {@link RawContactDelta}. The returned {@link SparseIntArray} maps from
+     * {@link EditType#rawValue} to counts, with the total overall count stored
+     * as {@link #FREQUENCY_TOTAL}.
+     */
+    private static SparseIntArray getTypeFrequencies(RawContactDelta state, DataKind kind) {
+        final SparseIntArray typeCount = new SparseIntArray();
+
+        // Find all entries for this kind, bailing early if none found
+        final List<ValuesDelta> mimeEntries = state.getMimeEntries(kind.mimeType);
+        if (mimeEntries == null) return typeCount;
+
+        int totalCount = 0;
+        for (ValuesDelta entry : mimeEntries) {
+            // Only count visible entries
+            if (!entry.isVisible()) continue;
+            totalCount++;
+
+            final EditType type = getCurrentType(entry, kind);
+            if (type != null) {
+                final int count = typeCount.get(type.rawValue);
+                typeCount.put(type.rawValue, count + 1);
+            }
+        }
+        typeCount.put(FREQUENCY_TOTAL, totalCount);
+        return typeCount;
+    }
+
+    /**
+     * Check if the given {@link DataKind} has multiple types that should be
+     * displayed for users to pick.
+     */
+    public static boolean hasEditTypes(DataKind kind) {
+        return kind != null && kind.typeList != null && kind.typeList.size() > 0;
+    }
+
+    /**
+     * Find the {@link EditType} that describes the given
+     * {@link ValuesDelta} row, assuming the given {@link DataKind} dictates
+     * the possible types.
+     */
+    public static EditType getCurrentType(ValuesDelta entry, DataKind kind) {
+        final Long rawValue = entry.getAsLong(kind.typeColumn);
+        if (rawValue == null) return null;
+        return getType(kind, rawValue.intValue());
+    }
+
+    /**
+     * Find the {@link EditType} that describes the given {@link ContentValues} row,
+     * assuming the given {@link DataKind} dictates the possible types.
+     */
+    public static EditType getCurrentType(ContentValues entry, DataKind kind) {
+        if (kind.typeColumn == null) return null;
+        final Integer rawValue = entry.getAsInteger(kind.typeColumn);
+        if (rawValue == null) return null;
+        return getType(kind, rawValue);
+    }
+
+    /**
+     * Find the {@link EditType} that describes the given {@link Cursor} row,
+     * assuming the given {@link DataKind} dictates the possible types.
+     */
+    public static EditType getCurrentType(Cursor cursor, DataKind kind) {
+        if (kind.typeColumn == null) return null;
+        final int index = cursor.getColumnIndex(kind.typeColumn);
+        if (index == -1) return null;
+        final int rawValue = cursor.getInt(index);
+        return getType(kind, rawValue);
+    }
+
+    /**
+     * Find the {@link EditType} with the given {@link EditType#rawValue}.
+     */
+    public static EditType getType(DataKind kind, int rawValue) {
+        for (EditType type : kind.typeList) {
+            if (type.rawValue == rawValue) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Return the precedence for the the given {@link EditType#rawValue}, where
+     * lower numbers are higher precedence.
+     */
+    public static int getTypePrecedence(DataKind kind, int rawValue) {
+        for (int i = 0; i < kind.typeList.size(); i++) {
+            final EditType type = kind.typeList.get(i);
+            if (type.rawValue == rawValue) {
+                return i;
+            }
+        }
+        return Integer.MAX_VALUE;
+    }
+
+    /**
+     * Find the best {@link EditType} for a potential insert. The "best" is the
+     * first primary type that doesn't already exist. When all valid types
+     * exist, we pick the last valid option.
+     */
+    public static EditType getBestValidType(RawContactDelta state, DataKind kind,
+            boolean includeSecondary, int exactValue) {
+        // Shortcut when no types
+        if (kind == null || kind.typeColumn == null) return null;
+
+        // Find type counts and valid primary types, bail if none
+        final SparseIntArray typeCount = getTypeFrequencies(state, kind);
+        final ArrayList<EditType> validTypes = getValidTypes(state, kind, null, includeSecondary,
+                typeCount, /*checkOverall=*/ true);
+        if (validTypes.size() == 0) return null;
+
+        // Keep track of the last valid type
+        final EditType lastType = validTypes.get(validTypes.size() - 1);
+
+        // Remove any types that already exist
+        Iterator<EditType> iterator = validTypes.iterator();
+        while (iterator.hasNext()) {
+            final EditType type = iterator.next();
+            final int count = typeCount.get(type.rawValue);
+
+            if (exactValue == type.rawValue) {
+                // Found exact value match
+                return type;
+            }
+
+            if (count > 0) {
+                // Type already appears, so don't consider
+                iterator.remove();
+            }
+        }
+
+        // Use the best remaining, otherwise the last valid
+        if (validTypes.size() > 0) {
+            return validTypes.get(0);
+        } else {
+            return lastType;
+        }
+    }
+
+    /**
+     * Insert a new child of kind {@link DataKind} into the given
+     * {@link RawContactDelta}. Tries using the best {@link EditType} found using
+     * {@link #getBestValidType(RawContactDelta, DataKind, boolean, int)}.
+     */
+    public static ValuesDelta insertChild(RawContactDelta state, DataKind kind) {
+        // Bail early if invalid kind
+        if (kind == null) return null;
+        // First try finding a valid primary
+        EditType bestType = getBestValidType(state, kind, false, Integer.MIN_VALUE);
+        if (bestType == null) {
+            // No valid primary found, so expand search to secondary
+            bestType = getBestValidType(state, kind, true, Integer.MIN_VALUE);
+        }
+        return insertChild(state, kind, bestType);
+    }
+
+    /**
+     * Insert a new child of kind {@link DataKind} into the given
+     * {@link RawContactDelta}, marked with the given {@link EditType}.
+     */
+    public static ValuesDelta insertChild(RawContactDelta state, DataKind kind, EditType type) {
+        // Bail early if invalid kind
+        if (kind == null) return null;
+        final ContentValues after = new ContentValues();
+
+        // Our parent CONTACT_ID is provided later
+        after.put(Data.MIMETYPE, kind.mimeType);
+
+        // Fill-in with any requested default values
+        if (kind.defaultValues != null) {
+            after.putAll(kind.defaultValues);
+        }
+
+        if (kind.typeColumn != null && type != null) {
+            // Set type, if provided
+            after.put(kind.typeColumn, type.rawValue);
+        }
+
+        final ValuesDelta child = ValuesDelta.fromAfter(after);
+        state.addEntry(child);
+        return child;
+    }
+
+    /**
+     * Processing to trim any empty {@link ValuesDelta} and {@link RawContactDelta}
+     * from the given {@link RawContactDeltaList}, assuming the given {@link AccountTypeManager}
+     * dictates the structure for various fields. This method ignores rows not
+     * described by the {@link AccountType}.
+     */
+    public static void trimEmpty(RawContactDeltaList set, AccountTypeManager accountTypes) {
+        for (RawContactDelta state : set) {
+            ValuesDelta values = state.getValues();
+            final String accountType = values.getAsString(RawContacts.ACCOUNT_TYPE);
+            final String dataSet = values.getAsString(RawContacts.DATA_SET);
+            final AccountType type = accountTypes.getAccountType(accountType, dataSet);
+            trimEmpty(state, type);
+        }
+    }
+
+    public static boolean hasChanges(RawContactDeltaList set, AccountTypeManager accountTypes) {
+        return hasChanges(set, accountTypes, /* excludedMimeTypes =*/ null);
+    }
+
+    public static boolean hasChanges(RawContactDeltaList set, AccountTypeManager accountTypes,
+            Set<String> excludedMimeTypes) {
+        if (set.isMarkedForSplitting() || set.isMarkedForJoining()) {
+            return true;
+        }
+
+        for (RawContactDelta state : set) {
+            ValuesDelta values = state.getValues();
+            final String accountType = values.getAsString(RawContacts.ACCOUNT_TYPE);
+            final String dataSet = values.getAsString(RawContacts.DATA_SET);
+            final AccountType type = accountTypes.getAccountType(accountType, dataSet);
+            if (hasChanges(state, type, excludedMimeTypes)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Processing to trim any empty {@link ValuesDelta} rows from the given
+     * {@link RawContactDelta}, assuming the given {@link AccountType} dictates
+     * the structure for various fields. This method ignores rows not described
+     * by the {@link AccountType}.
+     */
+    public static void trimEmpty(RawContactDelta state, AccountType accountType) {
+        boolean hasValues = false;
+
+        // Walk through entries for each well-known kind
+        for (DataKind kind : accountType.getSortedDataKinds()) {
+            final String mimeType = kind.mimeType;
+            final ArrayList<ValuesDelta> entries = state.getMimeEntries(mimeType);
+            if (entries == null) continue;
+
+            for (ValuesDelta entry : entries) {
+                // Skip any values that haven't been touched
+                final boolean touched = entry.isInsert() || entry.isUpdate();
+                if (!touched) {
+                    hasValues = true;
+                    continue;
+                }
+
+                // Test and remove this row if empty and it isn't a photo from google
+                final boolean isGoogleAccount = TextUtils.equals(GoogleAccountType.ACCOUNT_TYPE,
+                        state.getValues().getAsString(RawContacts.ACCOUNT_TYPE));
+                final boolean isPhoto = TextUtils.equals(Photo.CONTENT_ITEM_TYPE, kind.mimeType);
+                final boolean isGooglePhoto = isPhoto && isGoogleAccount;
+
+                if (RawContactModifier.isEmpty(entry, kind) && !isGooglePhoto) {
+                    if (DEBUG) {
+                        Log.v(TAG, "Trimming: " + entry.toString());
+                    }
+                    entry.markDeleted();
+                } else if (!entry.isFromTemplate()) {
+                    hasValues = true;
+                }
+            }
+        }
+        if (!hasValues) {
+            // Trim overall entity if no children exist
+            state.markDeleted();
+        }
+    }
+
+    private static boolean hasChanges(RawContactDelta state, AccountType accountType,
+            Set<String> excludedMimeTypes) {
+        for (DataKind kind : accountType.getSortedDataKinds()) {
+            final String mimeType = kind.mimeType;
+            if (excludedMimeTypes != null && excludedMimeTypes.contains(mimeType)) continue;
+            final ArrayList<ValuesDelta> entries = state.getMimeEntries(mimeType);
+            if (entries == null) continue;
+
+            for (ValuesDelta entry : entries) {
+                // An empty Insert must be ignored, because it won't save anything (an example
+                // is an empty name that stays empty)
+                final boolean isRealInsert = entry.isInsert() && !isEmpty(entry, kind);
+                if (isRealInsert || entry.isUpdate() || entry.isDelete()) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Test if the given {@link ValuesDelta} would be considered "empty" in
+     * terms of {@link DataKind#fieldList}.
+     */
+    public static boolean isEmpty(ValuesDelta values, DataKind kind) {
+        if (Photo.CONTENT_ITEM_TYPE.equals(kind.mimeType)) {
+            return values.isInsert() && values.getAsByteArray(Photo.PHOTO) == null;
+        }
+
+        // No defined fields mean this row is always empty
+        if (kind.fieldList == null) return true;
+
+        for (EditField field : kind.fieldList) {
+            // If any field has values, we're not empty
+            final String value = values.getAsString(field.column);
+            if (ContactsUtils.isGraphic(value)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Compares corresponding fields in values1 and values2. Only the fields
+     * declared by the DataKind are taken into consideration.
+     */
+    protected static boolean areEqual(ValuesDelta values1, ContentValues values2, DataKind kind) {
+        if (kind.fieldList == null) return false;
+
+        for (EditField field : kind.fieldList) {
+            final String value1 = values1.getAsString(field.column);
+            final String value2 = values2.getAsString(field.column);
+            if (!TextUtils.equals(value1, value2)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Parse the given {@link Bundle} into the given {@link RawContactDelta} state,
+     * assuming the extras defined through {@link Intents}.
+     */
+    public static void parseExtras(Context context, AccountType accountType, RawContactDelta state,
+            Bundle extras) {
+        if (extras == null || extras.size() == 0) {
+            // Bail early if no useful data
+            return;
+        }
+
+        parseStructuredNameExtra(context, accountType, state, extras);
+        parseStructuredPostalExtra(accountType, state, extras);
+
+        {
+            // Phone
+            final DataKind kind = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+            parseExtras(state, kind, extras, Insert.PHONE_TYPE, Insert.PHONE, Phone.NUMBER);
+            parseExtras(state, kind, extras, Insert.SECONDARY_PHONE_TYPE, Insert.SECONDARY_PHONE,
+                    Phone.NUMBER);
+            parseExtras(state, kind, extras, Insert.TERTIARY_PHONE_TYPE, Insert.TERTIARY_PHONE,
+                    Phone.NUMBER);
+        }
+
+        {
+            // Email
+            final DataKind kind = accountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE);
+            parseExtras(state, kind, extras, Insert.EMAIL_TYPE, Insert.EMAIL, Email.DATA);
+            parseExtras(state, kind, extras, Insert.SECONDARY_EMAIL_TYPE, Insert.SECONDARY_EMAIL,
+                    Email.DATA);
+            parseExtras(state, kind, extras, Insert.TERTIARY_EMAIL_TYPE, Insert.TERTIARY_EMAIL,
+                    Email.DATA);
+        }
+
+        {
+            // Im
+            final DataKind kind = accountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE);
+            fixupLegacyImType(extras);
+            parseExtras(state, kind, extras, Insert.IM_PROTOCOL, Insert.IM_HANDLE, Im.DATA);
+        }
+
+        // Organization
+        final boolean hasOrg = extras.containsKey(Insert.COMPANY)
+                || extras.containsKey(Insert.JOB_TITLE);
+        final DataKind kindOrg = accountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
+        if (hasOrg && RawContactModifier.canInsert(state, kindOrg)) {
+            final ValuesDelta child = RawContactModifier.insertChild(state, kindOrg);
+
+            final String company = extras.getString(Insert.COMPANY);
+            if (ContactsUtils.isGraphic(company)) {
+                child.put(Organization.COMPANY, company);
+            }
+
+            final String title = extras.getString(Insert.JOB_TITLE);
+            if (ContactsUtils.isGraphic(title)) {
+                child.put(Organization.TITLE, title);
+            }
+        }
+
+        // Notes
+        final boolean hasNotes = extras.containsKey(Insert.NOTES);
+        final DataKind kindNotes = accountType.getKindForMimetype(Note.CONTENT_ITEM_TYPE);
+        if (hasNotes && RawContactModifier.canInsert(state, kindNotes)) {
+            final ValuesDelta child = RawContactModifier.insertChild(state, kindNotes);
+
+            final String notes = extras.getString(Insert.NOTES);
+            if (ContactsUtils.isGraphic(notes)) {
+                child.put(Note.NOTE, notes);
+            }
+        }
+
+        // Arbitrary additional data
+        ArrayList<ContentValues> values = extras.getParcelableArrayList(Insert.DATA);
+        if (values != null) {
+            parseValues(state, accountType, values);
+        }
+    }
+
+    private static void parseStructuredNameExtra(
+            Context context, AccountType accountType, RawContactDelta state, Bundle extras) {
+        // StructuredName
+        RawContactModifier.ensureKindExists(state, accountType, StructuredName.CONTENT_ITEM_TYPE);
+        final ValuesDelta child = state.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE);
+
+        final String name = extras.getString(Insert.NAME);
+        if (ContactsUtils.isGraphic(name)) {
+            final DataKind kind = accountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
+            boolean supportsDisplayName = false;
+            if (kind.fieldList != null) {
+                for (EditField field : kind.fieldList) {
+                    if (StructuredName.DISPLAY_NAME.equals(field.column)) {
+                        supportsDisplayName = true;
+                        break;
+                    }
+                }
+            }
+
+            if (supportsDisplayName) {
+                child.put(StructuredName.DISPLAY_NAME, name);
+            } else {
+                Uri uri = ContactsContract.AUTHORITY_URI.buildUpon()
+                        .appendPath("complete_name")
+                        .appendQueryParameter(StructuredName.DISPLAY_NAME, name)
+                        .build();
+                Cursor cursor = context.getContentResolver().query(uri,
+                        new String[]{
+                                StructuredName.PREFIX,
+                                StructuredName.GIVEN_NAME,
+                                StructuredName.MIDDLE_NAME,
+                                StructuredName.FAMILY_NAME,
+                                StructuredName.SUFFIX,
+                        }, null, null, null);
+
+                if (cursor != null) {
+                    try {
+                        if (cursor.moveToFirst()) {
+                            child.put(StructuredName.PREFIX, cursor.getString(0));
+                            child.put(StructuredName.GIVEN_NAME, cursor.getString(1));
+                            child.put(StructuredName.MIDDLE_NAME, cursor.getString(2));
+                            child.put(StructuredName.FAMILY_NAME, cursor.getString(3));
+                            child.put(StructuredName.SUFFIX, cursor.getString(4));
+                        }
+                    } finally {
+                        cursor.close();
+                    }
+                }
+            }
+        }
+
+        final String phoneticName = extras.getString(Insert.PHONETIC_NAME);
+        if (ContactsUtils.isGraphic(phoneticName)) {
+            StructuredNameDataItem dataItem = NameConverter.parsePhoneticName(phoneticName, null);
+            child.put(StructuredName.PHONETIC_FAMILY_NAME, dataItem.getPhoneticFamilyName());
+            child.put(StructuredName.PHONETIC_MIDDLE_NAME, dataItem.getPhoneticMiddleName());
+            child.put(StructuredName.PHONETIC_GIVEN_NAME, dataItem.getPhoneticGivenName());
+        }
+    }
+
+    private static void parseStructuredPostalExtra(
+            AccountType accountType, RawContactDelta state, Bundle extras) {
+        // StructuredPostal
+        final DataKind kind = accountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
+        final ValuesDelta child = parseExtras(state, kind, extras, Insert.POSTAL_TYPE,
+                Insert.POSTAL, StructuredPostal.FORMATTED_ADDRESS);
+        String address = child == null ? null
+                : child.getAsString(StructuredPostal.FORMATTED_ADDRESS);
+        if (!TextUtils.isEmpty(address)) {
+            boolean supportsFormatted = false;
+            if (kind.fieldList != null) {
+                for (EditField field : kind.fieldList) {
+                    if (StructuredPostal.FORMATTED_ADDRESS.equals(field.column)) {
+                        supportsFormatted = true;
+                        break;
+                    }
+                }
+            }
+
+            if (!supportsFormatted) {
+                child.put(StructuredPostal.STREET, address);
+                child.putNull(StructuredPostal.FORMATTED_ADDRESS);
+            }
+        }
+    }
+
+    private static void parseValues(
+            RawContactDelta state, AccountType accountType,
+            ArrayList<ContentValues> dataValueList) {
+        for (ContentValues values : dataValueList) {
+            String mimeType = values.getAsString(Data.MIMETYPE);
+            if (TextUtils.isEmpty(mimeType)) {
+                Log.e(TAG, "Mimetype is required. Ignoring: " + values);
+                continue;
+            }
+
+            // Won't override the contact name
+            if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                continue;
+            } else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                values.remove(PhoneDataItem.KEY_FORMATTED_PHONE_NUMBER);
+                final Integer type = values.getAsInteger(Phone.TYPE);
+                // If the provided phone number provides a custom phone type but not a label,
+                // replace it with mobile (by default) to avoid the "Enter custom label" from
+                // popping up immediately upon entering the ContactEditorFragment
+                if (type != null && type == Phone.TYPE_CUSTOM &&
+                        TextUtils.isEmpty(values.getAsString(Phone.LABEL))) {
+                    values.put(Phone.TYPE, Phone.TYPE_MOBILE);
+                }
+            }
+
+            DataKind kind = accountType.getKindForMimetype(mimeType);
+            if (kind == null) {
+                Log.e(TAG, "Mimetype not supported for account type "
+                        + accountType.getAccountTypeAndDataSet() + ". Ignoring: " + values);
+                continue;
+            }
+
+            ValuesDelta entry = ValuesDelta.fromAfter(values);
+            if (isEmpty(entry, kind)) {
+                continue;
+            }
+
+            ArrayList<ValuesDelta> entries = state.getMimeEntries(mimeType);
+
+            if ((kind.typeOverallMax != 1) || GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                // Check for duplicates
+                boolean addEntry = true;
+                int count = 0;
+                if (entries != null && entries.size() > 0) {
+                    for (ValuesDelta delta : entries) {
+                        if (!delta.isDelete()) {
+                            if (areEqual(delta, values, kind)) {
+                                addEntry = false;
+                                break;
+                            }
+                            count++;
+                        }
+                    }
+                }
+
+                if (kind.typeOverallMax != -1 && count >= kind.typeOverallMax) {
+                    Log.e(TAG, "Mimetype allows at most " + kind.typeOverallMax
+                            + " entries. Ignoring: " + values);
+                    addEntry = false;
+                }
+
+                if (addEntry) {
+                    addEntry = adjustType(entry, entries, kind);
+                }
+
+                if (addEntry) {
+                    state.addEntry(entry);
+                }
+            } else {
+                // Non-list entries should not be overridden
+                boolean addEntry = true;
+                if (entries != null && entries.size() > 0) {
+                    for (ValuesDelta delta : entries) {
+                        if (!delta.isDelete() && !isEmpty(delta, kind)) {
+                            addEntry = false;
+                            break;
+                        }
+                    }
+                    if (addEntry) {
+                        for (ValuesDelta delta : entries) {
+                            delta.markDeleted();
+                        }
+                    }
+                }
+
+                if (addEntry) {
+                    addEntry = adjustType(entry, entries, kind);
+                }
+
+                if (addEntry) {
+                    state.addEntry(entry);
+                } else if (Note.CONTENT_ITEM_TYPE.equals(mimeType)){
+                    // Note is most likely to contain large amounts of text
+                    // that we don't want to drop on the ground.
+                    for (ValuesDelta delta : entries) {
+                        if (!isEmpty(delta, kind)) {
+                            delta.put(Note.NOTE, delta.getAsString(Note.NOTE) + "\n"
+                                    + values.getAsString(Note.NOTE));
+                            break;
+                        }
+                    }
+                } else {
+                    Log.e(TAG, "Will not override mimetype " + mimeType + ". Ignoring: "
+                            + values);
+                }
+            }
+        }
+    }
+
+    /**
+     * Checks if the data kind allows addition of another entry (e.g. Exchange only
+     * supports two "work" phone numbers).  If not, tries to switch to one of the
+     * unused types.  If successful, returns true.
+     */
+    private static boolean adjustType(
+            ValuesDelta entry, ArrayList<ValuesDelta> entries, DataKind kind) {
+        if (kind.typeColumn == null || kind.typeList == null || kind.typeList.size() == 0) {
+            return true;
+        }
+
+        Integer typeInteger = entry.getAsInteger(kind.typeColumn);
+        int type = typeInteger != null ? typeInteger : kind.typeList.get(0).rawValue;
+
+        if (isTypeAllowed(type, entries, kind)) {
+            entry.put(kind.typeColumn, type);
+            return true;
+        }
+
+        // Specified type is not allowed - choose the first available type that is allowed
+        int size = kind.typeList.size();
+        for (int i = 0; i < size; i++) {
+            EditType editType = kind.typeList.get(i);
+            if (isTypeAllowed(editType.rawValue, entries, kind)) {
+                entry.put(kind.typeColumn, editType.rawValue);
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Checks if a new entry of the specified type can be added to the raw
+     * contact. For example, Exchange only supports two "work" phone numbers, so
+     * addition of a third would not be allowed.
+     */
+    private static boolean isTypeAllowed(int type, ArrayList<ValuesDelta> entries, DataKind kind) {
+        int max = 0;
+        int size = kind.typeList.size();
+        for (int i = 0; i < size; i++) {
+            EditType editType = kind.typeList.get(i);
+            if (editType.rawValue == type) {
+                max = editType.specificMax;
+                break;
+            }
+        }
+
+        if (max == 0) {
+            // This type is not allowed at all
+            return false;
+        }
+
+        if (max == -1) {
+            // Unlimited instances of this type are allowed
+            return true;
+        }
+
+        return getEntryCountByType(entries, kind.typeColumn, type) < max;
+    }
+
+    /**
+     * Counts occurrences of the specified type in the supplied entry list.
+     *
+     * @return The count of occurrences of the type in the entry list. 0 if entries is
+     * {@literal null}
+     */
+    private static int getEntryCountByType(ArrayList<ValuesDelta> entries, String typeColumn,
+            int type) {
+        int count = 0;
+        if (entries != null) {
+            for (ValuesDelta entry : entries) {
+                Integer typeInteger = entry.getAsInteger(typeColumn);
+                if (typeInteger != null && typeInteger == type) {
+                    count++;
+                }
+            }
+        }
+        return count;
+    }
+
+    /**
+     * Attempt to parse legacy {@link Insert#IM_PROTOCOL} values, replacing them
+     * with updated values.
+     */
+    @SuppressWarnings("deprecation")
+    private static void fixupLegacyImType(Bundle bundle) {
+        final String encodedString = bundle.getString(Insert.IM_PROTOCOL);
+        if (encodedString == null) return;
+
+        try {
+            final Object protocol = android.provider.Contacts.ContactMethods
+                    .decodeImProtocol(encodedString);
+            if (protocol instanceof Integer) {
+                bundle.putInt(Insert.IM_PROTOCOL, (Integer)protocol);
+            } else {
+                bundle.putString(Insert.IM_PROTOCOL, (String)protocol);
+            }
+        } catch (IllegalArgumentException e) {
+            // Ignore exception when legacy parser fails
+        }
+    }
+
+    /**
+     * Parse a specific entry from the given {@link Bundle} and insert into the
+     * given {@link RawContactDelta}. Silently skips the insert when missing value
+     * or no valid {@link EditType} found.
+     *
+     * @param typeExtra {@link Bundle} key that holds the incoming
+     *            {@link EditType#rawValue} value.
+     * @param valueExtra {@link Bundle} key that holds the incoming value.
+     * @param valueColumn Column to write value into {@link ValuesDelta}.
+     */
+    public static ValuesDelta parseExtras(RawContactDelta state, DataKind kind, Bundle extras,
+            String typeExtra, String valueExtra, String valueColumn) {
+        final CharSequence value = extras.getCharSequence(valueExtra);
+
+        // Bail early if account type doesn't handle this MIME type
+        if (kind == null) return null;
+
+        // Bail when can't insert type, or value missing
+        final boolean canInsert = RawContactModifier.canInsert(state, kind);
+        final boolean validValue = (value != null && TextUtils.isGraphic(value));
+        if (!validValue || !canInsert) return null;
+
+        // Find exact type when requested, otherwise best available type
+        final boolean hasType = extras.containsKey(typeExtra);
+        final int typeValue = extras.getInt(typeExtra, hasType ? BaseTypes.TYPE_CUSTOM
+                : Integer.MIN_VALUE);
+        final EditType editType = RawContactModifier.getBestValidType(state, kind, true, typeValue);
+
+        // Create data row and fill with value
+        final ValuesDelta child = RawContactModifier.insertChild(state, kind, editType);
+        child.put(valueColumn, value.toString());
+
+        if (editType != null && editType.customColumn != null) {
+            // Write down label when custom type picked
+            final String customType = extras.getString(typeExtra);
+            child.put(editType.customColumn, customType);
+        }
+
+        return child;
+    }
+
+    /**
+     * Generic mime types with type support (e.g. TYPE_HOME).
+     * Here, "type support" means if the data kind has CommonColumns#TYPE or not. Data kinds which
+     * have their own migrate methods aren't listed here.
+     */
+    private static final Set<String> sGenericMimeTypesWithTypeSupport = new HashSet<String>(
+            Arrays.asList(Phone.CONTENT_ITEM_TYPE,
+                    Email.CONTENT_ITEM_TYPE,
+                    Im.CONTENT_ITEM_TYPE,
+                    Nickname.CONTENT_ITEM_TYPE,
+                    Website.CONTENT_ITEM_TYPE,
+                    Relation.CONTENT_ITEM_TYPE,
+                    SipAddress.CONTENT_ITEM_TYPE));
+    private static final Set<String> sGenericMimeTypesWithoutTypeSupport = new HashSet<String>(
+            Arrays.asList(Organization.CONTENT_ITEM_TYPE,
+                    Note.CONTENT_ITEM_TYPE,
+                    Photo.CONTENT_ITEM_TYPE,
+                    GroupMembership.CONTENT_ITEM_TYPE));
+    // CommonColumns.TYPE cannot be accessed as it is protected interface, so use
+    // Phone.TYPE instead.
+    private static final String COLUMN_FOR_TYPE  = Phone.TYPE;
+    private static final String COLUMN_FOR_LABEL  = Phone.LABEL;
+    private static final int TYPE_CUSTOM = Phone.TYPE_CUSTOM;
+
+    /**
+     * Migrates old RawContactDelta to newly created one with a new restriction supplied from
+     * newAccountType.
+     *
+     * This is only for account switch during account creation (which must be insert operation).
+     */
+    public static void migrateStateForNewContact(Context context,
+            RawContactDelta oldState, RawContactDelta newState,
+            AccountType oldAccountType, AccountType newAccountType) {
+        if (newAccountType == oldAccountType) {
+            // Just copying all data in oldState isn't enough, but we can still rely on a lot of
+            // shortcuts.
+            for (DataKind kind : newAccountType.getSortedDataKinds()) {
+                final String mimeType = kind.mimeType;
+                // The fields with short/long form capability must be treated properly.
+                if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                    migrateStructuredName(context, oldState, newState, kind);
+                } else {
+                    List<ValuesDelta> entryList = oldState.getMimeEntries(mimeType);
+                    if (entryList != null && !entryList.isEmpty()) {
+                        for (ValuesDelta entry : entryList) {
+                            ContentValues values = entry.getAfter();
+                            if (values != null) {
+                                newState.addEntry(ValuesDelta.fromAfter(values));
+                            }
+                        }
+                    }
+                }
+            }
+        } else {
+            // Migrate data supported by the new account type.
+            // All the other data inside oldState are silently dropped.
+            for (DataKind kind : newAccountType.getSortedDataKinds()) {
+                if (!kind.editable) continue;
+                final String mimeType = kind.mimeType;
+                if (DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME.equals(mimeType) ||
+                        DataKind.PSEUDO_MIME_TYPE_NAME.equals(mimeType)) {
+                    // Ignore pseudo data.
+                    continue;
+                } else if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                    migrateStructuredName(context, oldState, newState, kind);
+                } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                    migratePostal(oldState, newState, kind);
+                } else if (Event.CONTENT_ITEM_TYPE.equals(mimeType)) {
+                    migrateEvent(oldState, newState, kind, null /* default Year */);
+                } else if (sGenericMimeTypesWithoutTypeSupport.contains(mimeType)) {
+                    migrateGenericWithoutTypeColumn(oldState, newState, kind);
+                } else if (sGenericMimeTypesWithTypeSupport.contains(mimeType)) {
+                    migrateGenericWithTypeColumn(oldState, newState, kind);
+                } else {
+                    throw new IllegalStateException("Unexpected editable mime-type: " + mimeType);
+                }
+            }
+        }
+    }
+
+    /**
+     * Checks {@link DataKind#isList} and {@link DataKind#typeOverallMax}, and restricts
+     * the number of entries (ValuesDelta) inside newState.
+     */
+    private static ArrayList<ValuesDelta> ensureEntryMaxSize(RawContactDelta newState,
+            DataKind kind, ArrayList<ValuesDelta> mimeEntries) {
+        if (mimeEntries == null) {
+            return null;
+        }
+
+        final int typeOverallMax = kind.typeOverallMax;
+        if (typeOverallMax >= 0 && (mimeEntries.size() > typeOverallMax)) {
+            ArrayList<ValuesDelta> newMimeEntries = new ArrayList<ValuesDelta>(typeOverallMax);
+            for (int i = 0; i < typeOverallMax; i++) {
+                newMimeEntries.add(mimeEntries.get(i));
+            }
+            mimeEntries = newMimeEntries;
+        }
+        return mimeEntries;
+    }
+
+    /** @hide Public only for testing. */
+    public static void migrateStructuredName(
+            Context context, RawContactDelta oldState, RawContactDelta newState,
+            DataKind newDataKind) {
+        final ContentValues values =
+                oldState.getPrimaryEntry(StructuredName.CONTENT_ITEM_TYPE).getAfter();
+        if (values == null) {
+            return;
+        }
+
+        boolean supportPhoneticFullName = false;
+        boolean supportPhoneticFamilyName = false;
+        boolean supportPhoneticMiddleName = false;
+        boolean supportPhoneticGivenName = false;
+        for (EditField editField : newDataKind.fieldList) {
+            if (DataKind.PSEUDO_COLUMN_PHONETIC_NAME.equals(editField.column)) {
+                supportPhoneticFullName = true;
+            }
+            if (StructuredName.PHONETIC_FAMILY_NAME.equals(editField.column)) {
+                supportPhoneticFamilyName = true;
+            }
+            if (StructuredName.PHONETIC_MIDDLE_NAME.equals(editField.column)) {
+                supportPhoneticMiddleName = true;
+            }
+            if (StructuredName.PHONETIC_GIVEN_NAME.equals(editField.column)) {
+                supportPhoneticGivenName = true;
+            }
+        }
+
+
+        // Phonetic (full) name <-> PHONETIC_FAMILY_NAME, PHONETIC_MIDDLE_NAME, PHONETIC_GIVEN_NAME
+        final String phoneticFullName = values.getAsString(DataKind.PSEUDO_COLUMN_PHONETIC_NAME);
+        if (!TextUtils.isEmpty(phoneticFullName)) {
+            if (!supportPhoneticFullName) {
+                // Old data has a phonetic (full) name, while the new account doesn't allow it.
+                final StructuredNameDataItem tmpItem =
+                        NameConverter.parsePhoneticName(phoneticFullName, null);
+                values.remove(DataKind.PSEUDO_COLUMN_PHONETIC_NAME);
+                if (supportPhoneticFamilyName) {
+                    values.put(StructuredName.PHONETIC_FAMILY_NAME,
+                            tmpItem.getPhoneticFamilyName());
+                } else {
+                    values.remove(StructuredName.PHONETIC_FAMILY_NAME);
+                }
+                if (supportPhoneticMiddleName) {
+                    values.put(StructuredName.PHONETIC_MIDDLE_NAME,
+                            tmpItem.getPhoneticMiddleName());
+                } else {
+                    values.remove(StructuredName.PHONETIC_MIDDLE_NAME);
+                }
+                if (supportPhoneticGivenName) {
+                    values.put(StructuredName.PHONETIC_GIVEN_NAME,
+                            tmpItem.getPhoneticGivenName());
+                } else {
+                    values.remove(StructuredName.PHONETIC_GIVEN_NAME);
+                }
+            }
+        } else {
+            if (supportPhoneticFullName) {
+                // Old data does not have a phonetic (full) name, while the new account requires it.
+                values.put(DataKind.PSEUDO_COLUMN_PHONETIC_NAME,
+                        NameConverter.buildPhoneticName(
+                                values.getAsString(StructuredName.PHONETIC_FAMILY_NAME),
+                                values.getAsString(StructuredName.PHONETIC_MIDDLE_NAME),
+                                values.getAsString(StructuredName.PHONETIC_GIVEN_NAME)));
+            }
+            if (!supportPhoneticFamilyName) {
+                values.remove(StructuredName.PHONETIC_FAMILY_NAME);
+            }
+            if (!supportPhoneticMiddleName) {
+                values.remove(StructuredName.PHONETIC_MIDDLE_NAME);
+            }
+            if (!supportPhoneticGivenName) {
+                values.remove(StructuredName.PHONETIC_GIVEN_NAME);
+            }
+        }
+
+        newState.addEntry(ValuesDelta.fromAfter(values));
+    }
+
+    /** @hide Public only for testing. */
+    public static void migratePostal(RawContactDelta oldState, RawContactDelta newState,
+            DataKind newDataKind) {
+        final ArrayList<ValuesDelta> mimeEntries = ensureEntryMaxSize(newState, newDataKind,
+                oldState.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE));
+        if (mimeEntries == null || mimeEntries.isEmpty()) {
+            return;
+        }
+
+        boolean supportFormattedAddress = false;
+        boolean supportStreet = false;
+        final String firstColumn = newDataKind.fieldList.get(0).column;
+        for (EditField editField : newDataKind.fieldList) {
+            if (StructuredPostal.FORMATTED_ADDRESS.equals(editField.column)) {
+                supportFormattedAddress = true;
+            }
+            if (StructuredPostal.STREET.equals(editField.column)) {
+                supportStreet = true;
+            }
+        }
+
+        final Set<Integer> supportedTypes = new HashSet<Integer>();
+        if (newDataKind.typeList != null && !newDataKind.typeList.isEmpty()) {
+            for (EditType editType : newDataKind.typeList) {
+                supportedTypes.add(editType.rawValue);
+            }
+        }
+
+        for (ValuesDelta entry : mimeEntries) {
+            final ContentValues values = entry.getAfter();
+            if (values == null) {
+                continue;
+            }
+            final Integer oldType = values.getAsInteger(StructuredPostal.TYPE);
+            if (!supportedTypes.contains(oldType)) {
+                int defaultType;
+                if (newDataKind.defaultValues != null) {
+                    defaultType = newDataKind.defaultValues.getAsInteger(StructuredPostal.TYPE);
+                } else {
+                    defaultType = newDataKind.typeList.get(0).rawValue;
+                }
+                values.put(StructuredPostal.TYPE, defaultType);
+                if (oldType != null && oldType == StructuredPostal.TYPE_CUSTOM) {
+                    values.remove(StructuredPostal.LABEL);
+                }
+            }
+
+            final String formattedAddress = values.getAsString(StructuredPostal.FORMATTED_ADDRESS);
+            if (!TextUtils.isEmpty(formattedAddress)) {
+                if (!supportFormattedAddress) {
+                    // Old data has a formatted address, while the new account doesn't allow it.
+                    values.remove(StructuredPostal.FORMATTED_ADDRESS);
+
+                    // Unlike StructuredName we don't have logic to split it, so first
+                    // try to use street field and. If the new account doesn't have one,
+                    // then select first one anyway.
+                    if (supportStreet) {
+                        values.put(StructuredPostal.STREET, formattedAddress);
+                    } else {
+                        values.put(firstColumn, formattedAddress);
+                    }
+                }
+            } else {
+                if (supportFormattedAddress) {
+                    // Old data does not have formatted address, while the new account requires it.
+                    // Unlike StructuredName we don't have logic to join multiple address values.
+                    // Use poor join heuristics for now.
+                    String[] structuredData;
+                    final boolean useJapaneseOrder =
+                            Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
+                    if (useJapaneseOrder) {
+                        structuredData = new String[] {
+                                values.getAsString(StructuredPostal.COUNTRY),
+                                values.getAsString(StructuredPostal.POSTCODE),
+                                values.getAsString(StructuredPostal.REGION),
+                                values.getAsString(StructuredPostal.CITY),
+                                values.getAsString(StructuredPostal.NEIGHBORHOOD),
+                                values.getAsString(StructuredPostal.STREET),
+                                values.getAsString(StructuredPostal.POBOX) };
+                    } else {
+                        structuredData = new String[] {
+                                values.getAsString(StructuredPostal.POBOX),
+                                values.getAsString(StructuredPostal.STREET),
+                                values.getAsString(StructuredPostal.NEIGHBORHOOD),
+                                values.getAsString(StructuredPostal.CITY),
+                                values.getAsString(StructuredPostal.REGION),
+                                values.getAsString(StructuredPostal.POSTCODE),
+                                values.getAsString(StructuredPostal.COUNTRY) };
+                    }
+                    final StringBuilder builder = new StringBuilder();
+                    for (String elem : structuredData) {
+                        if (!TextUtils.isEmpty(elem)) {
+                            builder.append(elem + "\n");
+                        }
+                    }
+                    values.put(StructuredPostal.FORMATTED_ADDRESS, builder.toString());
+
+                    values.remove(StructuredPostal.POBOX);
+                    values.remove(StructuredPostal.STREET);
+                    values.remove(StructuredPostal.NEIGHBORHOOD);
+                    values.remove(StructuredPostal.CITY);
+                    values.remove(StructuredPostal.REGION);
+                    values.remove(StructuredPostal.POSTCODE);
+                    values.remove(StructuredPostal.COUNTRY);
+                }
+            }
+
+            newState.addEntry(ValuesDelta.fromAfter(values));
+        }
+    }
+
+    /** @hide Public only for testing. */
+    public static void migrateEvent(RawContactDelta oldState, RawContactDelta newState,
+            DataKind newDataKind, Integer defaultYear) {
+        final ArrayList<ValuesDelta> mimeEntries = ensureEntryMaxSize(newState, newDataKind,
+                oldState.getMimeEntries(Event.CONTENT_ITEM_TYPE));
+        if (mimeEntries == null || mimeEntries.isEmpty()) {
+            return;
+        }
+
+        final SparseArray<EventEditType> allowedTypes = new SparseArray<EventEditType>();
+        for (EditType editType : newDataKind.typeList) {
+            allowedTypes.put(editType.rawValue, (EventEditType) editType);
+        }
+        for (ValuesDelta entry : mimeEntries) {
+            final ContentValues values = entry.getAfter();
+            if (values == null) {
+                continue;
+            }
+            final String dateString = values.getAsString(Event.START_DATE);
+            final Integer type = values.getAsInteger(Event.TYPE);
+            if (type != null && (allowedTypes.indexOfKey(type) >= 0)
+                    && !TextUtils.isEmpty(dateString)) {
+                EventEditType suitableType = allowedTypes.get(type);
+
+                final ParsePosition position = new ParsePosition(0);
+                boolean yearOptional = false;
+                Date date = CommonDateUtils.DATE_AND_TIME_FORMAT.parse(dateString, position);
+                if (date == null) {
+                    yearOptional = true;
+                    date = CommonDateUtils.NO_YEAR_DATE_FORMAT.parse(dateString, position);
+                }
+                if (date != null) {
+                    if (yearOptional && !suitableType.isYearOptional()) {
+                        // The new EditType doesn't allow optional year. Supply default.
+                        final Calendar calendar = Calendar.getInstance(DateUtils.UTC_TIMEZONE,
+                                Locale.US);
+                        if (defaultYear == null) {
+                            defaultYear = calendar.get(Calendar.YEAR);
+                        }
+                        calendar.setTime(date);
+                        final int month = calendar.get(Calendar.MONTH);
+                        final int day = calendar.get(Calendar.DAY_OF_MONTH);
+                        // Exchange requires 8:00 for birthdays
+                        calendar.set(defaultYear, month, day,
+                                CommonDateUtils.DEFAULT_HOUR, 0, 0);
+                        values.put(Event.START_DATE,
+                                CommonDateUtils.FULL_DATE_FORMAT.format(calendar.getTime()));
+                    }
+                }
+                newState.addEntry(ValuesDelta.fromAfter(values));
+            } else {
+                // Just drop it.
+            }
+        }
+    }
+
+    /** @hide Public only for testing. */
+    public static void migrateGenericWithoutTypeColumn(
+            RawContactDelta oldState, RawContactDelta newState, DataKind newDataKind) {
+        final ArrayList<ValuesDelta> mimeEntries = ensureEntryMaxSize(newState, newDataKind,
+                oldState.getMimeEntries(newDataKind.mimeType));
+        if (mimeEntries == null || mimeEntries.isEmpty()) {
+            return;
+        }
+
+        for (ValuesDelta entry : mimeEntries) {
+            ContentValues values = entry.getAfter();
+            if (values != null) {
+                newState.addEntry(ValuesDelta.fromAfter(values));
+            }
+        }
+    }
+
+    /** @hide Public only for testing. */
+    public static void migrateGenericWithTypeColumn(
+            RawContactDelta oldState, RawContactDelta newState, DataKind newDataKind) {
+        final ArrayList<ValuesDelta> mimeEntries = oldState.getMimeEntries(newDataKind.mimeType);
+        if (mimeEntries == null || mimeEntries.isEmpty()) {
+            return;
+        }
+
+        // Note that type specified with the old account may be invalid with the new account, while
+        // we want to preserve its data as much as possible. e.g. if a user typed a phone number
+        // with a type which is valid with an old account but not with a new account, the user
+        // probably wants to have the number with default type, rather than seeing complete data
+        // loss.
+        //
+        // Specifically, this method works as follows:
+        // 1. detect defaultType
+        // 2. prepare constants & variables for iteration
+        // 3. iterate over mimeEntries:
+        // 3.1 stop iteration if total number of mimeEntries reached typeOverallMax specified in
+        //     DataKind
+        // 3.2 replace unallowed types with defaultType
+        // 3.3 check if the number of entries is below specificMax specified in AccountType
+
+        // Here, defaultType can be supplied in two ways
+        // - via kind.defaultValues
+        // - via kind.typeList.get(0).rawValue
+        Integer defaultType = null;
+        if (newDataKind.defaultValues != null) {
+            defaultType = newDataKind.defaultValues.getAsInteger(COLUMN_FOR_TYPE);
+        }
+        final Set<Integer> allowedTypes = new HashSet<Integer>();
+        // key: type, value: the number of entries allowed for the type (specificMax)
+        final SparseIntArray typeSpecificMaxMap = new SparseIntArray();
+        if (defaultType != null) {
+            allowedTypes.add(defaultType);
+            typeSpecificMaxMap.put(defaultType, -1);
+        }
+        // Note: typeList may be used in different purposes when defaultValues are specified.
+        // Especially in IM, typeList contains available protocols (e.g. PROTOCOL_GOOGLE_TALK)
+        // instead of "types" which we want to treate here (e.g. TYPE_HOME). So we don't add
+        // anything other than defaultType into allowedTypes and typeSpecificMapMax.
+        if (!Im.CONTENT_ITEM_TYPE.equals(newDataKind.mimeType) &&
+                newDataKind.typeList != null && !newDataKind.typeList.isEmpty()) {
+            for (EditType editType : newDataKind.typeList) {
+                allowedTypes.add(editType.rawValue);
+                typeSpecificMaxMap.put(editType.rawValue, editType.specificMax);
+            }
+            if (defaultType == null) {
+                defaultType = newDataKind.typeList.get(0).rawValue;
+            }
+        }
+
+        if (defaultType == null) {
+            Log.w(TAG, "Default type isn't available for mimetype " + newDataKind.mimeType);
+        }
+
+        final int typeOverallMax = newDataKind.typeOverallMax;
+
+        // key: type, value: the number of current entries.
+        final SparseIntArray currentEntryCount = new SparseIntArray();
+        int totalCount = 0;
+
+        for (ValuesDelta entry : mimeEntries) {
+            if (typeOverallMax != -1 && totalCount >= typeOverallMax) {
+                break;
+            }
+
+            final ContentValues values = entry.getAfter();
+            if (values == null) {
+                continue;
+            }
+
+            final Integer oldType = entry.getAsInteger(COLUMN_FOR_TYPE);
+            final Integer typeForNewAccount;
+            if (!allowedTypes.contains(oldType)) {
+                // The new account doesn't support the type.
+                if (defaultType != null) {
+                    typeForNewAccount = defaultType.intValue();
+                    values.put(COLUMN_FOR_TYPE, defaultType.intValue());
+                    if (oldType != null && oldType == TYPE_CUSTOM) {
+                        values.remove(COLUMN_FOR_LABEL);
+                    }
+                } else {
+                    typeForNewAccount = null;
+                    values.remove(COLUMN_FOR_TYPE);
+                }
+            } else {
+                typeForNewAccount = oldType;
+            }
+            if (typeForNewAccount != null) {
+                final int specificMax = typeSpecificMaxMap.get(typeForNewAccount, 0);
+                if (specificMax >= 0) {
+                    final int currentCount = currentEntryCount.get(typeForNewAccount, 0);
+                    if (currentCount >= specificMax) {
+                        continue;
+                    }
+                    currentEntryCount.put(typeForNewAccount, currentCount + 1);
+                }
+            }
+            newState.addEntry(ValuesDelta.fromAfter(values));
+            totalCount++;
+        }
+    }
+}
diff --git a/src/com/android/contacts/model/SimCard.java b/src/com/android/contacts/model/SimCard.java
new file mode 100644
index 0000000..2105ac7
--- /dev/null
+++ b/src/com/android/contacts/model/SimCard.java
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model;
+
+import android.os.Build;
+import android.support.annotation.RequiresApi;
+import android.telephony.PhoneNumberUtils;
+import android.telephony.SubscriptionInfo;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.Objects;
+
+/**
+ * Holds data for a SIM card in the device.
+ */
+public class SimCard {
+
+    private static final String TAG = "SimCard";
+
+    public static final int NO_SUBSCRIPTION_ID = -1;
+
+    // This state is created from the info we get from the system
+    private final String mSimId;
+    private final int mSubscriptionId;
+    private final CharSequence mCarrierName;
+    private final CharSequence mDisplayName;
+    private final String mPhoneNumber;
+    private final String mCountryCode;
+
+    // This is our own state that we associate with SIM cards. Currently these are only used
+    // in the GoogleContacts app.
+    // Note: these are logically immutable but are not final to reduce required constructor
+    // parameters
+    private boolean mDismissed = false;
+    private boolean mImported = false;
+
+    private List<SimContact> mContacts;
+
+    public SimCard(SimCard other) {
+        mSimId = other.mSimId;
+        mSubscriptionId = other.mSubscriptionId;
+        mCarrierName = other.mCarrierName;
+        mDisplayName = other.mDisplayName;
+        mPhoneNumber = other.mPhoneNumber;
+        mCountryCode = other.mCountryCode;
+        mDismissed = other.mDismissed;
+        mImported = other.mImported;
+        if (other.mContacts != null) {
+            mContacts = new ArrayList<>(other.mContacts);
+        }
+    }
+
+    public SimCard(String simId, int subscriptionId, CharSequence carrierName,
+            CharSequence displayName, String phoneNumber, String countryCode) {
+        mSimId = simId;
+        mSubscriptionId = subscriptionId;
+        mCarrierName = carrierName;
+        mDisplayName = displayName;
+        mPhoneNumber = phoneNumber;
+        mCountryCode = countryCode != null ? countryCode.toUpperCase(Locale.US) : null;
+    }
+
+    public SimCard(String simId, CharSequence carrierName,
+            CharSequence displayName, String phoneNumber, String countryCode) {
+        this(simId, NO_SUBSCRIPTION_ID, carrierName, displayName, phoneNumber, countryCode);
+    }
+
+    public String getSimId() {
+        return mSimId;
+    }
+
+    public int getSubscriptionId() {
+        return mSubscriptionId;
+    }
+
+    public boolean hasValidSubscriptionId() {
+        return mSubscriptionId != NO_SUBSCRIPTION_ID;
+    }
+
+    public CharSequence getDisplayName() {
+        return mDisplayName;
+    }
+
+    public String getPhone() {
+        return mPhoneNumber;
+    }
+
+    public CharSequence getFormattedPhone() {
+        if (mPhoneNumber == null) {
+            return null;
+        }
+        return PhoneNumberUtils.formatNumber(mPhoneNumber, mCountryCode);
+    }
+
+    public boolean hasPhone() {
+        return mPhoneNumber != null;
+    }
+
+    public String getCountryCode() {
+        return mCountryCode;
+    }
+
+    /**
+     * Returns whether the contacts for this SIM card have been initialized.
+     */
+    public boolean areContactsAvailable() {
+        return mContacts != null;
+    }
+
+    /**
+     * Returns whether this SIM card has any SIM contacts.
+     *
+     * A precondition of this method is that the contacts have been initialized.
+     */
+    public boolean hasContacts() {
+        if (mContacts == null) {
+            throw new IllegalStateException("Contacts not loaded.");
+        }
+        return !mContacts.isEmpty();
+    }
+
+    /**
+     * Returns the number of contacts stored on this SIM card.
+     *
+     * A precondition of this method is that the contacts have been initialized.
+     */
+    public int getContactCount() {
+        if (mContacts == null) {
+            throw new IllegalStateException("Contacts not loaded.");
+        }
+        return mContacts.size();
+    }
+
+    public boolean isDismissed() {
+        return mDismissed;
+    }
+
+    public boolean isImported() {
+        return mImported;
+    }
+
+    public boolean isImportable() {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "isImportable: isDismissed? " + isDismissed() +
+                    " isImported? " + isImported() + " contacts=" + mContacts);
+        }
+        return !isDismissed() && !isImported() && hasContacts();
+    }
+
+    /**
+     * Returns the contacts for this SIM card or null if the contacts have not been initialized.
+     */
+    public List<SimContact> getContacts() {
+        return mContacts;
+    }
+
+    public SimCard withImportAndDismissStates(boolean imported, boolean dismissed) {
+        SimCard copy = new SimCard(this);
+        copy.mImported = imported;
+        copy.mDismissed = dismissed;
+        return copy;
+    }
+
+    public SimCard withImportedState(boolean imported) {
+        return withImportAndDismissStates(imported, mDismissed);
+    }
+
+    public SimCard withDismissedState(boolean dismissed) {
+        return withImportAndDismissStates(mImported, dismissed);
+    }
+
+    public SimCard withContacts(List<SimContact> contacts) {
+        final SimCard copy = new SimCard(this);
+        copy.mContacts = contacts;
+        return copy;
+    }
+
+    public SimCard withContacts(SimContact... contacts) {
+        final SimCard copy = new SimCard(this);
+        copy.mContacts = Arrays.asList(contacts);
+        return copy;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        SimCard simCard = (SimCard) o;
+
+        return mSubscriptionId == simCard.mSubscriptionId && mDismissed == simCard.mDismissed &&
+                mImported == simCard.mImported && Objects.equals(mSimId, simCard.mSimId) &&
+                Objects.equals(mPhoneNumber, simCard.mPhoneNumber) &&
+                Objects.equals(mCountryCode, simCard.mCountryCode);
+    }
+
+    @Override
+    public int hashCode() {
+        int result = Objects.hash(mSimId, mPhoneNumber, mCountryCode);
+        result = 31 * result + mSubscriptionId;
+        result = 31 * result + (mDismissed ? 1 : 0);
+        result = 31 * result + (mImported ? 1 : 0);
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "SimCard{" +
+                "mSimId='" + mSimId + '\'' +
+                ", mSubscriptionId=" + mSubscriptionId +
+                ", mCarrierName=" + mCarrierName +
+                ", mDisplayName=" + mDisplayName +
+                ", mPhoneNumber='" + mPhoneNumber + '\'' +
+                ", mCountryCode='" + mCountryCode + '\'' +
+                ", mDismissed=" + mDismissed +
+                ", mImported=" + mImported +
+                ", mContacts=" + mContacts +
+                '}';
+    }
+
+    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
+    public static SimCard create(SubscriptionInfo info) {
+        return new SimCard(info.getIccId(), info.getSubscriptionId(),
+                info.getCarrierName(), info.getDisplayName(), info.getNumber(),
+                info.getCountryIso());
+    }
+
+    public static SimCard create(TelephonyManager telephony, String displayLabel) {
+        if (telephony.getSimState() == TelephonyManager.SIM_STATE_READY) {
+            return new SimCard(telephony.getSimSerialNumber(),
+                    telephony.getSimOperatorName(), displayLabel, telephony.getLine1Number(),
+                    telephony.getSimCountryIso());
+        } else {
+            // This should never happen but in case it does just fallback to an "empty" instance
+            return new SimCard(/* SIM id */ "", /* operator name */ null, displayLabel,
+                    /* phone number */ "", /* Country code */ null);
+        }
+    }
+}
diff --git a/src/com/android/contacts/model/SimContact.java b/src/com/android/contacts/model/SimContact.java
new file mode 100644
index 0000000..7babe27
--- /dev/null
+++ b/src/com/android/contacts/model/SimContact.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model;
+
+import android.content.ContentProviderOperation;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.text.TextUtils;
+
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.Ordering;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Holds data for contacts loaded from the SIM card.
+ */
+public class SimContact implements Parcelable {
+    private final long mId;
+    private final String mName;
+    private final String mPhone;
+    private final String[] mEmails;
+
+    public SimContact(long id, String name, String phone) {
+        this(id, name, phone, null);
+    }
+
+    public SimContact(long id, String name, String phone, String[] emails) {
+        mId = id;
+        mName = name;
+        mPhone = phone == null ? "" : phone.trim();
+        mEmails = emails;
+    }
+
+    public SimContact(SimContact other) {
+        this(other.mId, other.mName, other.mPhone, other.mEmails);
+    }
+
+    public long getId() {
+        return mId;
+    }
+
+    public String getName() {
+        return mName;
+    }
+
+    public String getPhone() {
+        return mPhone;
+    }
+
+    public String[] getEmails() {
+        return mEmails;
+    }
+
+    public void appendCreateContactOperations(List<ContentProviderOperation> ops,
+            AccountWithDataSet targetAccount) {
+        // There is nothing to save so skip it.
+        if (!hasName() && !hasPhone() && !hasEmails()) return;
+
+        final int rawContactOpIndex = ops.size();
+        ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
+                .withYieldAllowed(true)
+                .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, targetAccount.name)
+                .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, targetAccount.type)
+                .withValue(ContactsContract.RawContacts.DATA_SET, targetAccount.dataSet)
+                .build());
+        if (mName != null) {
+            ops.add(createInsertOp(rawContactOpIndex, StructuredName.CONTENT_ITEM_TYPE,
+                    StructuredName.DISPLAY_NAME, mName));
+        }
+        if (!mPhone.isEmpty()) {
+            ops.add(createInsertOp(rawContactOpIndex, Phone.CONTENT_ITEM_TYPE,
+                    Phone.NUMBER, mPhone));
+        }
+        if (mEmails != null) {
+            for (String email : mEmails) {
+                ops.add(createInsertOp(rawContactOpIndex, Email.CONTENT_ITEM_TYPE,
+                        Email.ADDRESS, email));
+            }
+        }
+    }
+
+    private ContentProviderOperation createInsertOp(int rawContactOpIndex, String mimeType,
+            String column, String value) {
+        return ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+                .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactOpIndex)
+                .withValue(ContactsContract.Data.MIMETYPE, mimeType)
+                .withValue(column, value)
+                .build();
+    }
+
+    public void appendAsContactRow(MatrixCursor cursor) {
+        cursor.newRow().add(ContactsContract.Contacts._ID, mId)
+                .add(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY, mName)
+                .add(ContactsContract.Contacts.LOOKUP_KEY, getLookupKey());
+    }
+
+    public boolean hasName() {
+        return !TextUtils.isEmpty(mName);
+    }
+
+    public boolean hasPhone() {
+        return !mPhone.isEmpty();
+    }
+
+    public boolean hasEmails() {
+        return mEmails != null && mEmails.length > 0;
+    }
+
+    /**
+     * Generate a "fake" lookup key. This is needed because
+     * {@link ContactPhotoManager} will only generate a letter avatar
+     * if the contact has a lookup key.
+     */
+    private String getLookupKey() {
+        if (mName != null) {
+            return "sim-n-" + Uri.encode(mName);
+        } else if (mPhone != null) {
+            return "sim-p-" + Uri.encode(mPhone);
+        } else {
+            return null;
+        }
+    }
+
+    @Override
+    public String toString() {
+        return "SimContact{" +
+                "mId=" + mId +
+                ", mName='" + mName + '\'' +
+                ", mPhone='" + mPhone + '\'' +
+                ", mEmails=" + Arrays.toString(mEmails) +
+                '}';
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        final SimContact that = (SimContact) o;
+
+        return mId == that.mId && Objects.equals(mName, that.mName) &&
+                Objects.equals(mPhone, that.mPhone) && Arrays.equals(mEmails, that.mEmails);
+    }
+
+    @Override
+    public int hashCode() {
+        int result = (int) (mId ^ (mId >>> 32));
+        result = 31 * result + (mName != null ? mName.hashCode() : 0);
+        result = 31 * result + (mPhone != null ? mPhone.hashCode() : 0);
+        result = 31 * result + Arrays.hashCode(mEmails);
+        return result;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeLong(mId);
+        dest.writeString(mName);
+        dest.writeString(mPhone);
+        dest.writeStringArray(mEmails);
+    }
+
+    public static final Creator<SimContact> CREATOR = new Creator<SimContact>() {
+        @Override
+        public SimContact createFromParcel(Parcel source) {
+            final long id = source.readLong();
+            final String name = source.readString();
+            final String phone = source.readString();
+            final String[] emails = source.createStringArray();
+            return new SimContact(id, name, phone, emails);
+        }
+
+        @Override
+        public SimContact[] newArray(int size) {
+            return new SimContact[size];
+        }
+    };
+
+    /**
+     * Convert a collection of SIM contacts to a Cursor matching a query from
+     * {@link android.provider.ContactsContract.Contacts#CONTENT_URI} with the provided projection.
+     *
+     * This allows a collection of SIM contacts to be displayed using the existing adapters for
+     * contacts.
+     */
+    public static final MatrixCursor convertToContactsCursor(Collection<SimContact> contacts,
+            String[] projection) {
+        final MatrixCursor result = new MatrixCursor(projection);
+        for (SimContact contact : contacts) {
+            contact.appendAsContactRow(result);
+        }
+        return result;
+    }
+
+    /**
+     * Returns the index of a contact with a matching name and phone
+     * @param contacts list to search. Should be sorted using
+     * {@link SimContact#compareByPhoneThenName()}
+     * @param phone the phone to search for
+     * @param name the name to search for
+     */
+    public static int findByPhoneAndName(List<SimContact> contacts, String phone, String name) {
+        return Collections.binarySearch(contacts, new SimContact(-1, name, phone, null),
+                compareByPhoneThenName());
+    }
+
+    public static final Comparator<SimContact> compareByPhoneThenName() {
+        return new Comparator<SimContact>() {
+            @Override
+            public int compare(SimContact lhs, SimContact rhs) {
+                return ComparisonChain.start()
+                        .compare(lhs.mPhone, rhs.mPhone)
+                        .compare(lhs.mName, rhs.mName, Ordering.<String>natural().nullsFirst())
+                        .result();
+            }
+        };
+    }
+
+    public static final Comparator<SimContact> compareById() {
+        return new Comparator<SimContact>() {
+            @Override
+            public int compare(SimContact lhs, SimContact rhs) {
+                // We assume ids are unique.
+                return Long.compare(lhs.mId, rhs.mId);
+            }
+        };
+    }
+}
diff --git a/src/com/android/contacts/model/ValuesDelta.java b/src/com/android/contacts/model/ValuesDelta.java
new file mode 100644
index 0000000..120c205
--- /dev/null
+++ b/src/com/android/contacts/model/ValuesDelta.java
@@ -0,0 +1,599 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentValues;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.BaseColumns;
+import android.provider.ContactsContract;
+
+import com.android.contacts.compat.CompatUtils;
+
+import com.google.common.collect.Sets;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Type of {@link android.content.ContentValues} that maintains both an original state and a
+ * modified version of that state. This allows us to build insert, update,
+ * or delete operations based on a "before" {@link Entity} snapshot.
+ */
+public class ValuesDelta implements Parcelable {
+    protected ContentValues mBefore;
+    protected ContentValues mAfter;
+    protected String mIdColumn = BaseColumns._ID;
+    private boolean mFromTemplate;
+
+    /**
+     * Next value to assign to {@link #mIdColumn} when building an insert
+     * operation through {@link #fromAfter(android.content.ContentValues)}. This is used so
+     * we can concretely reference this {@link ValuesDelta} before it has
+     * been persisted.
+     */
+    protected static int sNextInsertId = -1;
+
+    protected ValuesDelta() {
+    }
+
+    /**
+     * Create {@link ValuesDelta}, using the given object as the
+     * "before" state, usually from an {@link Entity}.
+     */
+    public static ValuesDelta fromBefore(ContentValues before) {
+        final ValuesDelta entry = new ValuesDelta();
+        entry.mBefore = before;
+        entry.mAfter = new ContentValues();
+        return entry;
+    }
+
+    /**
+     * Create {@link ValuesDelta}, using the given object as the "after"
+     * state, usually when we are inserting a row instead of updating.
+     */
+    public static ValuesDelta fromAfter(ContentValues after) {
+        final ValuesDelta entry = new ValuesDelta();
+        entry.mBefore = null;
+        entry.mAfter = after;
+
+        // Assign temporary id which is dropped before insert.
+        entry.mAfter.put(entry.mIdColumn, sNextInsertId--);
+        return entry;
+    }
+
+    public ContentValues getAfter() {
+        return mAfter;
+    }
+
+    public ContentValues getBefore() {
+        return mBefore;
+    }
+
+    public boolean containsKey(String key) {
+        return ((mAfter != null && mAfter.containsKey(key)) ||
+                (mBefore != null && mBefore.containsKey(key)));
+    }
+
+    public String getAsString(String key) {
+        if (mAfter != null && mAfter.containsKey(key)) {
+            return mAfter.getAsString(key);
+        } else if (mBefore != null && mBefore.containsKey(key)) {
+            return mBefore.getAsString(key);
+        } else {
+            return null;
+        }
+    }
+
+    public byte[] getAsByteArray(String key) {
+        if (mAfter != null && mAfter.containsKey(key)) {
+            return mAfter.getAsByteArray(key);
+        } else if (mBefore != null && mBefore.containsKey(key)) {
+            return mBefore.getAsByteArray(key);
+        } else {
+            return null;
+        }
+    }
+
+    public Long getAsLong(String key) {
+        if (mAfter != null && mAfter.containsKey(key)) {
+            return mAfter.getAsLong(key);
+        } else if (mBefore != null && mBefore.containsKey(key)) {
+            return mBefore.getAsLong(key);
+        } else {
+            return null;
+        }
+    }
+
+    public Integer getAsInteger(String key) {
+        return getAsInteger(key, null);
+    }
+
+    public Integer getAsInteger(String key, Integer defaultValue) {
+        if (mAfter != null && mAfter.containsKey(key)) {
+            return mAfter.getAsInteger(key);
+        } else if (mBefore != null && mBefore.containsKey(key)) {
+            return mBefore.getAsInteger(key);
+        } else {
+            return defaultValue;
+        }
+    }
+
+    public boolean isChanged(String key) {
+        if (mAfter == null || !mAfter.containsKey(key)) {
+            return false;
+        }
+
+        Object newValue = mAfter.get(key);
+        Object oldValue = mBefore.get(key);
+
+        if (oldValue == null) {
+            return newValue != null;
+        }
+
+        return !oldValue.equals(newValue);
+    }
+
+    public String getMimetype() {
+        return getAsString(ContactsContract.Data.MIMETYPE);
+    }
+
+    public Long getId() {
+        return getAsLong(mIdColumn);
+    }
+
+    public void setIdColumn(String idColumn) {
+        mIdColumn = idColumn;
+    }
+
+    public boolean isPrimary() {
+        final Long isPrimary = getAsLong(ContactsContract.Data.IS_PRIMARY);
+        return isPrimary == null ? false : isPrimary != 0;
+    }
+
+    public void setFromTemplate(boolean isFromTemplate) {
+        mFromTemplate = isFromTemplate;
+    }
+
+    public boolean isFromTemplate() {
+        return mFromTemplate;
+    }
+
+    public boolean isSuperPrimary() {
+        final Long isSuperPrimary = getAsLong(ContactsContract.Data.IS_SUPER_PRIMARY);
+        return isSuperPrimary == null ? false : isSuperPrimary != 0;
+    }
+
+    public boolean beforeExists() {
+        return (mBefore != null && mBefore.containsKey(mIdColumn));
+    }
+
+    /**
+     * When "after" is present, then visible
+     */
+    public boolean isVisible() {
+        return (mAfter != null);
+    }
+
+    /**
+     * When "after" is wiped, action is "delete"
+     */
+    public boolean isDelete() {
+        return beforeExists() && (mAfter == null);
+    }
+
+    /**
+     * When no "before" or "after", is transient
+     */
+    public boolean isTransient() {
+        return (mBefore == null) && (mAfter == null);
+    }
+
+    /**
+     * When "after" has some changes, action is "update"
+     */
+    public boolean isUpdate() {
+        if (!beforeExists() || mAfter == null || mAfter.size() == 0) {
+            return false;
+        }
+        for (String key : mAfter.keySet()) {
+            Object newValue = mAfter.get(key);
+            Object oldValue = mBefore.get(key);
+            if (oldValue == null) {
+                if (newValue != null) {
+                    return true;
+                }
+            } else if (!oldValue.equals(newValue)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * When "after" has no changes, action is no-op
+     */
+    public boolean isNoop() {
+        return beforeExists() && (mAfter != null && mAfter.size() == 0);
+    }
+
+    /**
+     * When no "before" id, and has "after", action is "insert"
+     */
+    public boolean isInsert() {
+        return !beforeExists() && (mAfter != null);
+    }
+
+    public void markDeleted() {
+        mAfter = null;
+    }
+
+    /**
+     * Ensure that our internal structure is ready for storing updates.
+     */
+    private void ensureUpdate() {
+        if (mAfter == null) {
+            mAfter = new ContentValues();
+        }
+    }
+
+    public void put(String key, String value) {
+        ensureUpdate();
+        mAfter.put(key, value);
+    }
+
+    public void put(String key, byte[] value) {
+        ensureUpdate();
+        mAfter.put(key, value);
+    }
+
+    public void put(String key, int value) {
+        ensureUpdate();
+        mAfter.put(key, value);
+    }
+
+    public void put(String key, long value) {
+        ensureUpdate();
+        mAfter.put(key, value);
+    }
+
+    public void putNull(String key) {
+        ensureUpdate();
+        mAfter.putNull(key);
+    }
+
+    public void copyStringFrom(ValuesDelta from, String key) {
+        ensureUpdate();
+        if (containsKey(key) || from.containsKey(key)) {
+            put(key, from.getAsString(key));
+        }
+    }
+
+    /**
+     * Return set of all keys defined through this object.
+     */
+    public Set<String> keySet() {
+        final HashSet<String> keys = Sets.newHashSet();
+
+        if (mBefore != null) {
+            for (Map.Entry<String, Object> entry : mBefore.valueSet()) {
+                keys.add(entry.getKey());
+            }
+        }
+
+        if (mAfter != null) {
+            for (Map.Entry<String, Object> entry : mAfter.valueSet()) {
+                keys.add(entry.getKey());
+            }
+        }
+
+        return keys;
+    }
+
+    /**
+     * Return complete set of "before" and "after" values mixed together,
+     * giving full state regardless of edits.
+     */
+    public ContentValues getCompleteValues() {
+        final ContentValues values = new ContentValues();
+        if (mBefore != null) {
+            values.putAll(mBefore);
+        }
+        if (mAfter != null) {
+            values.putAll(mAfter);
+        }
+        if (values.containsKey(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID)) {
+            // Clear to avoid double-definitions, and prefer rows
+            values.remove(ContactsContract.CommonDataKinds.GroupMembership.GROUP_SOURCE_ID);
+        }
+
+        return values;
+    }
+
+    /**
+     * Merge the "after" values from the given {@link ValuesDelta},
+     * discarding any existing "after" state. This is typically used when
+     * re-parenting changes onto an updated {@link Entity}.
+     */
+    public static ValuesDelta mergeAfter(ValuesDelta local, ValuesDelta remote) {
+        // Bail early if trying to merge delete with missing local
+        if (local == null && (remote.isDelete() || remote.isTransient())) return null;
+
+        // Create local version if none exists yet
+        if (local == null) local = new ValuesDelta();
+
+        if (!local.beforeExists()) {
+            // Any "before" record is missing, so take all values as "insert"
+            local.mAfter = remote.getCompleteValues();
+        } else {
+            // Existing "update" with only "after" values
+            local.mAfter = remote.mAfter;
+        }
+
+        return local;
+    }
+
+    @Override
+    public boolean equals(Object object) {
+        if (object instanceof ValuesDelta) {
+            // Only exactly equal with both are identical subsets
+            final ValuesDelta other = (ValuesDelta)object;
+            return this.subsetEquals(other) && other.subsetEquals(this);
+        }
+        return false;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder builder = new StringBuilder();
+        toString(builder);
+        return builder.toString();
+    }
+
+    /**
+     * Helper for building string representation, leveraging the given
+     * {@link StringBuilder} to minimize allocations.
+     */
+    public void toString(StringBuilder builder) {
+        builder.append("{ ");
+        builder.append("IdColumn=");
+        builder.append(mIdColumn);
+        builder.append(", FromTemplate=");
+        builder.append(mFromTemplate);
+        builder.append(", ");
+        for (String key : this.keySet()) {
+            builder.append(key);
+            builder.append("=");
+            builder.append(this.getAsString(key));
+            builder.append(", ");
+        }
+        builder.append("}");
+    }
+
+    /**
+     * Check if the given {@link ValuesDelta} is both a subset of this
+     * object, and any defined keys have equal values.
+     */
+    public boolean subsetEquals(ValuesDelta other) {
+        for (String key : this.keySet()) {
+            final String ourValue = this.getAsString(key);
+            final String theirValue = other.getAsString(key);
+            if (ourValue == null) {
+                // If they have value when we're null, no match
+                if (theirValue != null) return false;
+            } else {
+                // If both values defined and aren't equal, no match
+                if (!ourValue.equals(theirValue)) return false;
+            }
+        }
+        // All values compared and matched
+        return true;
+    }
+
+    /**
+     * Build a {@link android.content.ContentProviderOperation} that will transform our
+     * "before" state into our "after" state, using insert, update, or
+     * delete as needed.
+     */
+    public ContentProviderOperation.Builder buildDiff(Uri targetUri) {
+        return buildDiffHelper(targetUri);
+    }
+
+    /**
+     * For compatibility purpose.
+     */
+    public BuilderWrapper buildDiffWrapper(Uri targetUri) {
+        final ContentProviderOperation.Builder builder = buildDiffHelper(targetUri);
+        BuilderWrapper bw = null;
+        if (isInsert()) {
+            bw = new BuilderWrapper(builder, CompatUtils.TYPE_INSERT);
+        } else if (isDelete()) {
+            bw = new BuilderWrapper(builder, CompatUtils.TYPE_DELETE);
+        } else if (isUpdate()) {
+            bw = new BuilderWrapper(builder, CompatUtils.TYPE_UPDATE);
+        }
+        return bw;
+    }
+
+    private ContentProviderOperation.Builder buildDiffHelper(Uri targetUri) {
+        ContentProviderOperation.Builder builder = null;
+        if (isInsert()) {
+            // Changed values are "insert" back-referenced to Contact
+            mAfter.remove(mIdColumn);
+            builder = ContentProviderOperation.newInsert(targetUri);
+            builder.withValues(mAfter);
+        } else if (isDelete()) {
+            // When marked for deletion and "before" exists, then "delete"
+            builder = ContentProviderOperation.newDelete(targetUri);
+            builder.withSelection(mIdColumn + "=" + getId(), null);
+        } else if (isUpdate()) {
+            // When has changes and "before" exists, then "update"
+            builder = ContentProviderOperation.newUpdate(targetUri);
+            builder.withSelection(mIdColumn + "=" + getId(), null);
+            builder.withValues(mAfter);
+        }
+        return builder;
+    }
+
+    /** {@inheritDoc} */
+    public int describeContents() {
+        // Nothing special about this parcel
+        return 0;
+    }
+
+    /** {@inheritDoc} */
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeParcelable(mBefore, flags);
+        dest.writeParcelable(mAfter, flags);
+        dest.writeString(mIdColumn);
+    }
+
+    public void readFromParcel(Parcel source) {
+        final ClassLoader loader = getClass().getClassLoader();
+        mBefore = source.<ContentValues> readParcelable(loader);
+        mAfter = source.<ContentValues> readParcelable(loader);
+        mIdColumn = source.readString();
+    }
+
+    public static final Creator<ValuesDelta> CREATOR = new Creator<ValuesDelta>() {
+        public ValuesDelta createFromParcel(Parcel in) {
+            final ValuesDelta values = new ValuesDelta();
+            values.readFromParcel(in);
+            return values;
+        }
+
+        public ValuesDelta[] newArray(int size) {
+            return new ValuesDelta[size];
+        }
+    };
+
+    public void setGroupRowId(long groupId) {
+        put(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, groupId);
+    }
+
+    public Long getGroupRowId() {
+        return getAsLong(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID);
+    }
+
+    public void setPhoto(byte[] value) {
+        put(ContactsContract.CommonDataKinds.Photo.PHOTO, value);
+    }
+
+    public byte[] getPhoto() {
+        return getAsByteArray(ContactsContract.CommonDataKinds.Photo.PHOTO);
+    }
+
+    public void setSuperPrimary(boolean val) {
+        if (val) {
+            put(ContactsContract.Data.IS_SUPER_PRIMARY, 1);
+        } else {
+            put(ContactsContract.Data.IS_SUPER_PRIMARY, 0);
+        }
+    }
+
+    public void setPhoneticFamilyName(String value) {
+        put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME, value);
+    }
+
+    public void setPhoneticMiddleName(String value) {
+        put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_MIDDLE_NAME, value);
+    }
+
+    public void setPhoneticGivenName(String value) {
+        put(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_GIVEN_NAME, value);
+    }
+
+    public String getPhoneticFamilyName() {
+        return getAsString(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME);
+    }
+
+    public String getPhoneticMiddleName() {
+        return getAsString(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_MIDDLE_NAME);
+    }
+
+    public String getPhoneticGivenName() {
+        return getAsString(ContactsContract.CommonDataKinds.StructuredName.PHONETIC_GIVEN_NAME);
+    }
+
+    public String getDisplayName() {
+        return getAsString(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
+    }
+
+    public void setDisplayName(String name) {
+        if (name == null) {
+            putNull(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
+        } else {
+            put(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name);
+        }
+    }
+
+    public void copyStructuredNameFieldsFrom(ValuesDelta name) {
+        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME);
+
+        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME);
+        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME);
+        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.PREFIX);
+        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.MIDDLE_NAME);
+        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.SUFFIX);
+
+        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.PHONETIC_GIVEN_NAME);
+        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.PHONETIC_MIDDLE_NAME);
+        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.PHONETIC_FAMILY_NAME);
+
+        copyStringFrom(name, ContactsContract.CommonDataKinds.StructuredName.FULL_NAME_STYLE);
+        copyStringFrom(name, ContactsContract.Data.DATA11);
+    }
+
+    public String getPhoneNumber() {
+        return getAsString(ContactsContract.CommonDataKinds.Phone.NUMBER);
+    }
+
+    public String getPhoneNormalizedNumber() {
+        return getAsString(ContactsContract.CommonDataKinds.Phone.NORMALIZED_NUMBER);
+    }
+
+    public boolean hasPhoneType() {
+        return getPhoneType() != null;
+    }
+
+    public Integer getPhoneType() {
+        return getAsInteger(ContactsContract.CommonDataKinds.Phone.TYPE);
+    }
+
+    public String getPhoneLabel() {
+        return getAsString(ContactsContract.CommonDataKinds.Phone.LABEL);
+    }
+
+    public String getEmailData() {
+        return getAsString(ContactsContract.CommonDataKinds.Email.DATA);
+    }
+
+    public boolean hasEmailType() {
+        return getEmailType() != null;
+    }
+
+    public Integer getEmailType() {
+        return getAsInteger(ContactsContract.CommonDataKinds.Email.TYPE);
+    }
+
+    public String getEmailLabel() {
+        return getAsString(ContactsContract.CommonDataKinds.Email.LABEL);
+    }
+}
diff --git a/src/com/android/contacts/model/account/AccountComparator.java b/src/com/android/contacts/model/account/AccountComparator.java
new file mode 100644
index 0000000..70ccf49
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountComparator.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model.account;
+
+import com.google.common.base.Objects;
+
+import java.util.Comparator;
+
+/**
+ * Orders accounts for display such that the default account is first
+ */
+public class AccountComparator implements Comparator<AccountWithDataSet> {
+    private AccountWithDataSet mDefaultAccount;
+
+    public AccountComparator(AccountWithDataSet defaultAccount) {
+        mDefaultAccount = defaultAccount;
+    }
+
+    @Override
+    public int compare(AccountWithDataSet a, AccountWithDataSet b) {
+        if (Objects.equal(a.name, b.name) && Objects.equal(a.type, b.type)
+                && Objects.equal(a.dataSet, b.dataSet)) {
+            return 0;
+        } else if (b.name == null || b.type == null) {
+            return -1;
+        } else if (a.name == null || a.type == null) {
+            return 1;
+        } else if (isWritableGoogleAccount(a) && a.equals(mDefaultAccount)) {
+            return -1;
+        } else if (isWritableGoogleAccount(b) && b.equals(mDefaultAccount)) {
+            return 1;
+        } else if (isWritableGoogleAccount(a) && !isWritableGoogleAccount(b)) {
+            return -1;
+        } else if (isWritableGoogleAccount(b) && !isWritableGoogleAccount(a)) {
+            return 1;
+        } else {
+            int diff = a.name.compareToIgnoreCase(b.name);
+            if (diff != 0) {
+                return diff;
+            }
+            diff = a.type.compareToIgnoreCase(b.type);
+            if (diff != 0) {
+                return diff;
+            }
+
+            // Accounts without data sets get sorted before those that have them.
+            if (a.dataSet != null) {
+                return b.dataSet == null ? 1 : a.dataSet.compareToIgnoreCase(b.dataSet);
+            } else {
+                return -1;
+            }
+        }
+    }
+
+    private static boolean isWritableGoogleAccount(AccountWithDataSet account) {
+        return GoogleAccountType.ACCOUNT_TYPE.equals(account.type) && account.dataSet == null;
+    }
+}
diff --git a/src/com/android/contacts/model/account/AccountDisplayInfo.java b/src/com/android/contacts/model/account/AccountDisplayInfo.java
new file mode 100644
index 0000000..fe0c570
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountDisplayInfo.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model.account;
+
+import android.content.Context;
+import android.graphics.drawable.Drawable;
+import android.support.annotation.StringRes;
+import android.text.TextUtils;
+
+/**
+ * Wrapper around AccountWithDataSet that contains user-friendly labels and an icon.
+ *
+ * The raw values for name and type in AccountWithDataSet are not always (or even usually)
+ * appropriate for direct display to the user.
+ */
+public class AccountDisplayInfo {
+    private final AccountWithDataSet mSource;
+
+    private final CharSequence mName;
+    private final CharSequence mType;
+    private final Drawable mIcon;
+
+    private final boolean mIsDeviceAccount;
+
+    public AccountDisplayInfo(AccountWithDataSet account, CharSequence name, CharSequence type,
+            Drawable icon, boolean isDeviceAccount) {
+        mSource = account;
+        mName = name;
+        mType = type;
+        mIcon = icon;
+        mIsDeviceAccount = isDeviceAccount;
+    }
+
+    public AccountWithDataSet getSource() {
+        return mSource;
+    }
+
+    public CharSequence getNameLabel() {
+        return mName;
+    }
+
+    public CharSequence getTypeLabel() {
+        return mType;
+    }
+
+    public Drawable getIcon() {
+        return mIcon;
+    }
+
+    public boolean hasGoogleAccountType() {
+        return GoogleAccountType.ACCOUNT_TYPE.equals(mSource.type);
+    }
+
+    public boolean isGoogleAccount() {
+        return GoogleAccountType.ACCOUNT_TYPE.equals(mSource.type) && mSource.dataSet == null;
+    }
+
+    public boolean isDeviceAccount() {
+        return mIsDeviceAccount;
+    }
+
+    public boolean hasDistinctName() {
+        return !TextUtils.equals(mName, mType);
+    }
+
+    public AccountDisplayInfo withName(CharSequence name) {
+        return withNameAndType(name, mType);
+    }
+
+    public AccountDisplayInfo withType(CharSequence type) {
+        return withNameAndType(mName, type);
+    }
+
+    public AccountDisplayInfo withNameAndType(CharSequence name, CharSequence type) {
+        return new AccountDisplayInfo(mSource, name, type, mIcon, mIsDeviceAccount);
+    }
+
+    public AccountDisplayInfo formatted(Context context, @StringRes int nameFormat,
+            @StringRes int typeFormat) {
+        return new AccountDisplayInfo(mSource, context.getString(nameFormat, mName),
+                context.getString(typeFormat, mType), mIcon, mIsDeviceAccount);
+    }
+
+    public AccountDisplayInfo withFormattedName(Context context, @StringRes int nameFormat) {
+        return withName(context.getString(nameFormat, mName));
+    }
+}
diff --git a/src/com/android/contacts/model/account/AccountDisplayInfoFactory.java b/src/com/android/contacts/model/account/AccountDisplayInfoFactory.java
new file mode 100644
index 0000000..759eede
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountDisplayInfoFactory.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model.account;
+
+import android.content.Context;
+
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.util.DeviceLocalAccountTypeFactory;
+import com.android.contactsbind.ObjectFactory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Provides methods to get AccountDisplayInfo instances for available accounts.
+ *
+ * For most accounts the account name will be used for the label but device accounts and
+ * SIM accounts have friendly names associated with them unless there is more than one of these
+ * types of accounts present in the list.
+ */
+public class AccountDisplayInfoFactory {
+
+    private final Context mContext;
+    private final AccountTypeManager mAccountTypeManager;
+
+    private final DeviceLocalAccountTypeFactory mDeviceAccountTypeFactory;
+
+    private final int mDeviceAccountCount;
+    private final int mSimAccountCount;
+
+    public AccountDisplayInfoFactory(Context context, List<AccountWithDataSet> accounts) {
+        this(context, AccountTypeManager.getInstance(context),
+                ObjectFactory.getDeviceLocalAccountTypeFactory(context), accounts);
+    }
+
+    public AccountDisplayInfoFactory(Context context, AccountTypeManager accountTypeManager,
+            DeviceLocalAccountTypeFactory deviceAccountTypeFactory,
+            List<AccountWithDataSet> accounts) {
+        mContext = context;
+        mAccountTypeManager = accountTypeManager;
+        mDeviceAccountTypeFactory = deviceAccountTypeFactory;
+
+        mSimAccountCount = countOfType(DeviceLocalAccountTypeFactory.TYPE_SIM, accounts);
+        mDeviceAccountCount = countOfType(DeviceLocalAccountTypeFactory.TYPE_DEVICE, accounts);
+    }
+
+    public AccountDisplayInfo getAccountDisplayInfo(AccountWithDataSet account) {
+        final AccountType type = mAccountTypeManager.getAccountTypeForAccount(account);
+        final CharSequence name = shouldUseTypeLabelForName(account)
+                ? type.getDisplayLabel(mContext)
+                : account.name;
+        return new AccountDisplayInfo(account, name, type.getDisplayLabel(mContext),
+                type.getDisplayIcon(mContext),
+                DeviceLocalAccountTypeFactory.Util.isLocalAccountType(mDeviceAccountTypeFactory,
+                        type.accountType));
+    }
+
+    public AccountDisplayInfo getAccountDisplayInfoFor(ContactListFilter filter) {
+        return getAccountDisplayInfo(filter.toAccountWithDataSet());
+    }
+
+    public AccountDisplayInfo getAccountDisplayInfoFor(RawContactDelta delta) {
+        final AccountWithDataSet account = new AccountWithDataSet(delta.getAccountName(),
+                delta.getAccountType(), delta.getDataSet());
+        return getAccountDisplayInfo(account);
+    }
+
+    public static AccountDisplayInfoFactory fromListFilters(Context context,
+            List<ContactListFilter> filters) {
+        final List<AccountWithDataSet> accounts = new ArrayList<>(filters.size());
+        for (ContactListFilter filter : filters) {
+            accounts.add(filter.toAccountWithDataSet());
+        }
+        return new AccountDisplayInfoFactory(context, accounts);
+    }
+
+    public static AccountDisplayInfoFactory forAllAccounts(Context context) {
+        final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(context);
+        final List<AccountWithDataSet> accounts = accountTypeManager.getAccounts(false);
+        return new AccountDisplayInfoFactory(context, accounts);
+    }
+
+    public static AccountDisplayInfoFactory forWritableAccounts(Context context) {
+        final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(context);
+        final List<AccountWithDataSet> accounts = accountTypeManager.getAccounts(true);
+        return new AccountDisplayInfoFactory(context, accounts);
+    }
+
+    private boolean shouldUseTypeLabelForName(AccountWithDataSet account) {
+        final int type = mDeviceAccountTypeFactory.classifyAccount(account.type);
+        return (type == DeviceLocalAccountTypeFactory.TYPE_SIM && mSimAccountCount == 1)
+                || (type == DeviceLocalAccountTypeFactory.TYPE_DEVICE && mDeviceAccountCount == 1)
+                || account.name == null;
+
+    }
+
+    private int countOfType(@DeviceLocalAccountTypeFactory.LocalAccountType int type,
+            List<AccountWithDataSet> accounts) {
+        int count = 0;
+        for (AccountWithDataSet account : accounts) {
+            if (mDeviceAccountTypeFactory.classifyAccount(account.type) == type) {
+                count++;
+            }
+        }
+        return count;
+    }
+}
diff --git a/src/com/android/contacts/model/account/AccountInfo.java b/src/com/android/contacts/model/account/AccountInfo.java
new file mode 100644
index 0000000..2161edb
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountInfo.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model.account;
+
+import android.graphics.drawable.Drawable;
+
+import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Holds an {@link AccountWithDataSet} and the corresponding {@link AccountType} for an account.
+ */
+public class AccountInfo {
+
+    private final AccountDisplayInfo mDisplayInfo;
+    private final AccountType mType;
+
+    public AccountInfo(AccountDisplayInfo displayInfo, AccountType type) {
+        this.mDisplayInfo = displayInfo;
+        this.mType = type;
+    }
+
+    public AccountType getType() {
+        return mType;
+    }
+
+    public AccountWithDataSet getAccount() {
+        return mDisplayInfo.getSource();
+    }
+
+    /**
+     * Returns the displayable account name label for the account
+     */
+    public CharSequence getNameLabel() {
+        return mDisplayInfo.getNameLabel();
+    }
+
+    /**
+     * Returns the displayable account type label for the account
+     */
+    public CharSequence getTypeLabel() {
+        return mDisplayInfo.getTypeLabel();
+    }
+
+    /**
+     * Returns the icon for the account type
+     */
+    public Drawable getIcon() {
+        return mDisplayInfo.getIcon();
+    }
+
+    public boolean hasDistinctName() {
+        return mDisplayInfo.hasDistinctName();
+    }
+
+    public boolean isDeviceAccount() {
+        return mDisplayInfo.isDeviceAccount();
+    }
+
+    public boolean sameAccount(AccountInfo other) {
+        return sameAccount(other.getAccount());
+    }
+
+    public boolean sameAccount(AccountWithDataSet other) {
+        return Objects.equals(getAccount(), other);
+    }
+
+    /**
+     * Returns whether accounts contains an account that is the same as account
+     *
+     * <p>This does not use equality rather checks whether the source account ({@link #getAccount()}
+     * is the same</p>
+     */
+    public static boolean contains(List<AccountInfo> accounts, AccountInfo account) {
+        return contains(accounts, account.getAccount());
+    }
+
+    /**
+     * Returns whether accounts contains an account that is the same as account
+     *
+     * <p>This does not use equality rather checks whether the source account ({@link #getAccount()}
+     * is the same</p>
+     */
+    public static boolean contains(List<AccountInfo> accounts, AccountWithDataSet account) {
+        return getAccount(accounts, account) != null;
+    }
+
+    /**
+     * Returns the AccountInfo from the list that has the specified account as it's source account
+     */
+    public static AccountInfo getAccount(List<AccountInfo> accounts, AccountWithDataSet account) {
+        Preconditions.checkNotNull(accounts);
+
+        for (AccountInfo info : accounts) {
+            if (info.sameAccount(account)) {
+                return info;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Sorts the accounts using the same ordering as {@link AccountComparator}
+     */
+    public static void sortAccounts(AccountWithDataSet defaultAccount, List<AccountInfo> accounts) {
+        Collections.sort(accounts, sourceComparator(defaultAccount));
+    }
+
+    /**
+     * Gets a list of the AccountWithDataSet for accounts
+     */
+    public static List<AccountWithDataSet> extractAccounts(List<AccountInfo> accounts) {
+        return Lists.transform(accounts, ACCOUNT_EXTRACTOR);
+    }
+
+    private static Comparator<AccountInfo> sourceComparator(AccountWithDataSet defaultAccount) {
+        final AccountComparator accountComparator = new AccountComparator(defaultAccount);
+        return new Comparator<AccountInfo>() {
+            @Override
+            public int compare(AccountInfo o1, AccountInfo o2) {
+                return accountComparator.compare(o1.getAccount(), o2.getAccount());
+            }
+        };
+    }
+
+    public static final Function<AccountInfo, AccountWithDataSet> ACCOUNT_EXTRACTOR =
+            new Function<AccountInfo, AccountWithDataSet>() {
+                @Override
+                public AccountWithDataSet apply(AccountInfo from) {
+                    return from.getAccount();
+                }
+            };
+}
diff --git a/src/com/android/contacts/model/account/AccountType.java b/src/com/android/contacts/model/account/AccountType.java
new file mode 100644
index 0000000..bddfc09
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountType.java
@@ -0,0 +1,529 @@
+/*
+ * 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.model.account;
+
+import android.accounts.AuthenticatorDescription;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.graphics.drawable.Drawable;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.RawContacts;
+import android.view.inputmethod.EditorInfo;
+import android.widget.EditText;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+
+import com.google.common.base.Preconditions;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * Internal structure that represents constraints and styles for a specific data
+ * source, such as the various data types they support, including details on how
+ * those types should be rendered and edited.
+ * <p>
+ * In the future this may be inflated from XML defined by a data source.
+ */
+public abstract class AccountType {
+    private static final String TAG = "AccountType";
+
+    /**
+     * The {@link RawContacts#ACCOUNT_TYPE} these constraints apply to.
+     */
+    public String accountType = null;
+
+    /**
+     * The {@link RawContacts#DATA_SET} these constraints apply to.
+     */
+    public String dataSet = null;
+
+    /**
+     * Package that resources should be loaded from.  Will be null for embedded types, in which
+     * case resources are stored in this package itself.
+     *
+     * TODO Clean up {@link #resourcePackageName}, {@link #syncAdapterPackageName} and
+     * {@link #getViewContactNotifyServicePackageName()}.
+     *
+     * There's the following invariants:
+     * - {@link #syncAdapterPackageName} is always set to the actual sync adapter package name.
+     * - {@link #resourcePackageName} too is set to the same value, unless {@link #isEmbedded()},
+     *   in which case it'll be null.
+     * There's an unfortunate exception of {@link FallbackAccountType}.  Even though it
+     * {@link #isEmbedded()}, but we set non-null to {@link #resourcePackageName} for unit tests.
+     */
+    public String resourcePackageName;
+    /**
+     * The package name for the authenticator (for the embedded types, i.e. Google and Exchange)
+     * or the sync adapter (for external type, including extensions).
+     */
+    public String syncAdapterPackageName;
+
+    public int titleRes;
+    public int iconRes;
+
+    /**
+     * Set of {@link DataKind} supported by this source.
+     */
+    private ArrayList<DataKind> mKinds = Lists.newArrayList();
+
+    /**
+     * Lookup map of {@link #mKinds} on {@link DataKind#mimeType}.
+     */
+    private HashMap<String, DataKind> mMimeKinds = Maps.newHashMap();
+
+    protected boolean mIsInitialized;
+
+    protected static class DefinitionException extends Exception {
+        public DefinitionException(String message) {
+            super(message);
+        }
+
+        public DefinitionException(String message, Exception inner) {
+            super(message, inner);
+        }
+    }
+
+    /**
+     * Whether this account type was able to be fully initialized.  This may be false if
+     * (for example) the package name associated with the account type could not be found.
+     */
+    public final boolean isInitialized() {
+        return mIsInitialized;
+    }
+
+    /**
+     * @return Whether this type is an "embedded" type.  i.e. any of {@link FallbackAccountType},
+     * {@link GoogleAccountType} or {@link ExternalAccountType}.
+     *
+     * If an embedded type cannot be initialized (i.e. if {@link #isInitialized()} returns
+     * {@code false}) it's considered critical, and the application will crash.  On the other
+     * hand if it's not an embedded type, we just skip loading the type.
+     */
+    public boolean isEmbedded() {
+        return true;
+    }
+
+    public boolean isExtension() {
+        return false;
+    }
+
+    /**
+     * @return True if contacts can be created and edited using this app. If false,
+     * there could still be an external editor as provided by
+     * {@link #getEditContactActivityClassName()} or {@link #getCreateContactActivityClassName()}
+     */
+    public abstract boolean areContactsWritable();
+
+    /**
+     * Returns an optional custom invite contact activity.
+     *
+     * Only makes sense for non-embedded account types.
+     * The activity class should reside in the sync adapter package as determined by
+     * {@link #syncAdapterPackageName}.
+     */
+    public String getInviteContactActivityClassName() {
+        return null;
+    }
+
+    /**
+     * Returns an optional service that can be launched whenever a contact is being looked at.
+     * This allows the sync adapter to provide more up-to-date information.
+     *
+     * The service class should reside in the sync adapter package as determined by
+     * {@link #getViewContactNotifyServicePackageName()}.
+     */
+    public String getViewContactNotifyServiceClassName() {
+        return null;
+    }
+
+    /**
+     * TODO This is way too hacky should be removed.
+     *
+     * This is introduced for {@link GoogleAccountType} where {@link #syncAdapterPackageName}
+     * is the authenticator package name but the notification service is in the sync adapter
+     * package.  See {@link #resourcePackageName} -- we should clean up those.
+     */
+    public String getViewContactNotifyServicePackageName() {
+        return syncAdapterPackageName;
+    }
+
+    /** Returns an optional Activity string that can be used to view the group. */
+    public String getViewGroupActivity() {
+        return null;
+    }
+
+    public CharSequence getDisplayLabel(Context context) {
+        // Note this resource is defined in the sync adapter package, not resourcePackageName.
+        return getResourceText(context, syncAdapterPackageName, titleRes, accountType);
+    }
+
+    /**
+     * Creates an {@link AccountInfo} for the specified account with the same type
+     *
+     * <p>The {@link AccountWithDataSet#type} must match {@link #accountType} of this instance</p>
+     */
+    public AccountInfo wrapAccount(Context context, AccountWithDataSet account) {
+        Preconditions.checkArgument(Objects.equal(account.type, accountType),
+                "Account types must match: account.type=%s but accountType=%s",
+                account.type, accountType);
+
+        return new AccountInfo(
+                new AccountDisplayInfo(account, account.name,
+                        getDisplayLabel(context), getDisplayIcon(context), false), this);
+    }
+
+    /**
+     * @return resource ID for the "invite contact" action label, or -1 if not defined.
+     */
+    protected int getInviteContactActionResId() {
+        return -1;
+    }
+
+    /**
+     * @return resource ID for the "view group" label, or -1 if not defined.
+     */
+    protected int getViewGroupLabelResId() {
+        return -1;
+    }
+
+    /**
+     * Returns {@link AccountTypeWithDataSet} for this type.
+     */
+    public AccountTypeWithDataSet getAccountTypeAndDataSet() {
+        return AccountTypeWithDataSet.get(accountType, dataSet);
+    }
+
+    /**
+     * Returns a list of additional package names that should be inspected as additional
+     * external account types.  This allows for a primary account type to indicate other packages
+     * that may not be sync adapters but which still provide contact data, perhaps under a
+     * separate data set within the account.
+     */
+    public List<String> getExtensionPackageNames() {
+        return new ArrayList<String>();
+    }
+
+    /**
+     * Returns an optional custom label for the "invite contact" action, which will be shown on
+     * the contact card.  (If not defined, returns null.)
+     */
+    public CharSequence getInviteContactActionLabel(Context context) {
+        // Note this resource is defined in the sync adapter package, not resourcePackageName.
+        return getResourceText(context, syncAdapterPackageName, getInviteContactActionResId(), "");
+    }
+
+    /**
+     * Returns a label for the "view group" action. If not defined, this falls back to our
+     * own "View Updates" string
+     */
+    public CharSequence getViewGroupLabel(Context context) {
+        // Note this resource is defined in the sync adapter package, not resourcePackageName.
+        final CharSequence customTitle =
+                getResourceText(context, syncAdapterPackageName, getViewGroupLabelResId(), null);
+
+        return customTitle == null
+                ? context.getText(R.string.view_updates_from_group)
+                : customTitle;
+    }
+
+    /**
+     * Return a string resource loaded from the given package (or the current package
+     * if {@code packageName} is null), unless {@code resId} is -1, in which case it returns
+     * {@code defaultValue}.
+     *
+     * (The behavior is undefined if the resource or package doesn't exist.)
+     */
+    @VisibleForTesting
+    static CharSequence getResourceText(Context context, String packageName, int resId,
+            String defaultValue) {
+        if (resId != -1 && packageName != null) {
+            final PackageManager pm = context.getPackageManager();
+            return pm.getText(packageName, resId, null);
+        } else if (resId != -1) {
+            return context.getText(resId);
+        } else {
+            return defaultValue;
+        }
+    }
+
+    public Drawable getDisplayIcon(Context context) {
+        return getDisplayIcon(context, titleRes, iconRes, syncAdapterPackageName);
+    }
+
+    public static Drawable getDisplayIcon(Context context, int titleRes, int iconRes,
+            String syncAdapterPackageName) {
+        if (titleRes != -1 && syncAdapterPackageName != null) {
+            final PackageManager pm = context.getPackageManager();
+            return pm.getDrawable(syncAdapterPackageName, iconRes, null);
+        } else if (titleRes != -1) {
+            return context.getResources().getDrawable(iconRes);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Whether or not groups created under this account type have editable membership lists.
+     */
+    abstract public boolean isGroupMembershipEditable();
+
+    /**
+     * {@link Comparator} to sort by {@link DataKind#weight}.
+     */
+    private static Comparator<DataKind> sWeightComparator = new Comparator<DataKind>() {
+        @Override
+        public int compare(DataKind object1, DataKind object2) {
+            return object1.weight - object2.weight;
+        }
+    };
+
+    /**
+     * Return list of {@link DataKind} supported, sorted by
+     * {@link DataKind#weight}.
+     */
+    public ArrayList<DataKind> getSortedDataKinds() {
+        // TODO: optimize by marking if already sorted
+        Collections.sort(mKinds, sWeightComparator);
+        return mKinds;
+    }
+
+    /**
+     * Find the {@link DataKind} for a specific MIME-type, if it's handled by
+     * this data source.
+     */
+    public DataKind getKindForMimetype(String mimeType) {
+        return this.mMimeKinds.get(mimeType);
+    }
+
+    public void initializeFieldsFromAuthenticator(AuthenticatorDescription authenticator) {
+        accountType = authenticator.type;
+        titleRes = authenticator.labelId;
+        iconRes = authenticator.iconId;
+    }
+
+    /**
+     * Add given {@link DataKind} to list of those provided by this source.
+     */
+    public DataKind addKind(DataKind kind) throws DefinitionException {
+        if (kind.mimeType == null) {
+            throw new DefinitionException("null is not a valid mime type");
+        }
+        if (mMimeKinds.get(kind.mimeType) != null) {
+            throw new DefinitionException(
+                    "mime type '" + kind.mimeType + "' is already registered");
+        }
+
+        kind.resourcePackageName = this.resourcePackageName;
+        this.mKinds.add(kind);
+        this.mMimeKinds.put(kind.mimeType, kind);
+        return kind;
+    }
+
+    /**
+     * Description of a specific "type" or "label" of a {@link DataKind} row,
+     * such as {@link Phone#TYPE_WORK}. Includes constraints on total number of
+     * rows a {@link Contacts} may have of this type, and details on how
+     * user-defined labels are stored.
+     */
+    public static class EditType {
+        public int rawValue;
+        public int labelRes;
+        public boolean secondary;
+        /**
+         * The number of entries allowed for the type. -1 if not specified.
+         * @see DataKind#typeOverallMax
+         */
+        public int specificMax;
+        public String customColumn;
+
+        public EditType(int rawValue, int labelRes) {
+            this.rawValue = rawValue;
+            this.labelRes = labelRes;
+            this.specificMax = -1;
+        }
+
+        public EditType setSecondary(boolean secondary) {
+            this.secondary = secondary;
+            return this;
+        }
+
+        public EditType setSpecificMax(int specificMax) {
+            this.specificMax = specificMax;
+            return this;
+        }
+
+        public EditType setCustomColumn(String customColumn) {
+            this.customColumn = customColumn;
+            return this;
+        }
+
+        @Override
+        public boolean equals(Object object) {
+            if (object instanceof EditType) {
+                final EditType other = (EditType)object;
+                return other.rawValue == rawValue;
+            }
+            return false;
+        }
+
+        @Override
+        public int hashCode() {
+            return rawValue;
+        }
+
+        @Override
+        public String toString() {
+            return this.getClass().getSimpleName()
+                    + " rawValue=" + rawValue
+                    + " labelRes=" + labelRes
+                    + " secondary=" + secondary
+                    + " specificMax=" + specificMax
+                    + " customColumn=" + customColumn;
+        }
+    }
+
+    public static class EventEditType extends EditType {
+        private boolean mYearOptional;
+
+        public EventEditType(int rawValue, int labelRes) {
+            super(rawValue, labelRes);
+        }
+
+        public boolean isYearOptional() {
+            return mYearOptional;
+        }
+
+        public EventEditType setYearOptional(boolean yearOptional) {
+            mYearOptional = yearOptional;
+            return this;
+        }
+
+        @Override
+        public String toString() {
+            return super.toString() + " mYearOptional=" + mYearOptional;
+        }
+    }
+
+    /**
+     * Description of a user-editable field on a {@link DataKind} row, such as
+     * {@link Phone#NUMBER}. Includes flags to apply to an {@link EditText}, and
+     * the column where this field is stored.
+     */
+    public static final class EditField {
+        public String column;
+        public int titleRes;
+        public int inputType;
+        public int minLines;
+        public boolean optional;
+        public boolean shortForm;
+        public boolean longForm;
+
+        public EditField(String column, int titleRes) {
+            this.column = column;
+            this.titleRes = titleRes;
+        }
+
+        public EditField(String column, int titleRes, int inputType) {
+            this(column, titleRes);
+            this.inputType = inputType;
+        }
+
+        public EditField setOptional(boolean optional) {
+            this.optional = optional;
+            return this;
+        }
+
+        public EditField setShortForm(boolean shortForm) {
+            this.shortForm = shortForm;
+            return this;
+        }
+
+        public EditField setLongForm(boolean longForm) {
+            this.longForm = longForm;
+            return this;
+        }
+
+        public EditField setMinLines(int minLines) {
+            this.minLines = minLines;
+            return this;
+        }
+
+        public boolean isMultiLine() {
+            return (inputType & EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE) != 0;
+        }
+
+
+        @Override
+        public String toString() {
+            return this.getClass().getSimpleName() + ":"
+                    + " column=" + column
+                    + " titleRes=" + titleRes
+                    + " inputType=" + inputType
+                    + " minLines=" + minLines
+                    + " optional=" + optional
+                    + " shortForm=" + shortForm
+                    + " longForm=" + longForm;
+        }
+    }
+
+    /**
+     * Generic method of inflating a given {@link ContentValues} into a user-readable
+     * {@link CharSequence}. For example, an inflater could combine the multiple
+     * columns of {@link StructuredPostal} together using a string resource
+     * before presenting to the user.
+     */
+    public interface StringInflater {
+        public CharSequence inflateUsing(Context context, ContentValues values);
+    }
+
+    /**
+     * Compare two {@link AccountType} by their {@link AccountType#getDisplayLabel} with the
+     * current locale.
+     */
+    public static class DisplayLabelComparator implements Comparator<AccountType> {
+        private final Context mContext;
+        /** {@link Comparator} for the current locale. */
+        private final Collator mCollator = Collator.getInstance();
+
+        public DisplayLabelComparator(Context context) {
+            mContext = context;
+        }
+
+        private String getDisplayLabel(AccountType type) {
+            CharSequence label = type.getDisplayLabel(mContext);
+            return (label == null) ? "" : label.toString();
+        }
+
+        @Override
+        public int compare(AccountType lhs, AccountType rhs) {
+            return mCollator.compare(getDisplayLabel(lhs), getDisplayLabel(rhs));
+        }
+    }
+}
diff --git a/src/com/android/contacts/model/account/AccountTypeProvider.java b/src/com/android/contacts/model/account/AccountTypeProvider.java
new file mode 100644
index 0000000..e5d0448
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountTypeProvider.java
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model.account;
+
+import android.accounts.AccountManager;
+import android.accounts.AuthenticatorDescription;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.SyncAdapterType;
+import android.provider.ContactsContract;
+import android.support.v4.util.ArraySet;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.contacts.util.DeviceLocalAccountTypeFactory;
+import com.android.contactsbind.ObjectFactory;
+import com.google.common.base.Objects;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import static com.android.contacts.util.DeviceLocalAccountTypeFactory.Util.isLocalAccountType;
+
+/**
+ * Provides access to {@link AccountType}s with contact data
+ *
+ * This class parses the contacts.xml for third-party accounts and caches the result.
+ * This means that {@link AccountTypeProvider#getAccountTypes(String)}} should be called from a
+ * background thread.
+ */
+public class AccountTypeProvider {
+    private static final String TAG = "AccountTypeProvider";
+
+    private final Context mContext;
+    private final DeviceLocalAccountTypeFactory mLocalAccountTypeFactory;
+    private final ImmutableMap<String, AuthenticatorDescription> mAuthTypes;
+
+    private final ConcurrentMap<String, List<AccountType>> mCache = new ConcurrentHashMap<>();
+
+    public AccountTypeProvider(Context context) {
+        this(context,
+                ObjectFactory.getDeviceLocalAccountTypeFactory(context),
+                ContentResolver.getSyncAdapterTypes(),
+                ((AccountManager) context.getSystemService(Context.ACCOUNT_SERVICE))
+                        .getAuthenticatorTypes());
+    }
+
+    public AccountTypeProvider(Context context, DeviceLocalAccountTypeFactory localTypeFactory,
+            SyncAdapterType[] syncAdapterTypes,
+            AuthenticatorDescription[] authenticatorDescriptions) {
+        mContext = context;
+        mLocalAccountTypeFactory = localTypeFactory;
+
+        mAuthTypes = onlyContactSyncable(authenticatorDescriptions, syncAdapterTypes);
+    }
+
+    /**
+     * Returns all account types associated with the provided type
+     *
+     * <p>There are many {@link AccountType}s for each accountType because {@AccountType} includes
+     * a dataSet and accounts can declare extension packages in contacts.xml that provide additional
+     * data sets for a particular type
+     * </p>
+     */
+    public List<AccountType> getAccountTypes(String accountType) {
+        // ConcurrentHashMap doesn't support null keys
+        if (accountType == null) {
+            AccountType type = mLocalAccountTypeFactory.getAccountType(accountType);
+            // Just in case the DeviceLocalAccountTypeFactory doesn't handle the null type
+            if (type == null) {
+                type = new FallbackAccountType(mContext);
+            }
+            return Collections.singletonList(type);
+        }
+
+        List<AccountType> types = mCache.get(accountType);
+        if (types == null) {
+            types = loadTypes(accountType);
+            mCache.put(accountType, types);
+        }
+        return types;
+    }
+
+    public boolean hasTypeForAccount(AccountWithDataSet account) {
+        return getTypeForAccount(account) != null;
+    }
+
+    public boolean hasTypeWithDataset(String type, String dataSet) {
+        // getAccountTypes() never returns null
+        final List<AccountType> accountTypes = getAccountTypes(type);
+        for (AccountType accountType : accountTypes) {
+            if (Objects.equal(accountType.dataSet, dataSet)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Returns the AccountType with the matching type and dataSet or null if no account with those
+     * members exists
+     */
+    public AccountType getType(String type, String dataSet) {
+        final List<AccountType> accountTypes = getAccountTypes(type);
+        for (AccountType accountType : accountTypes) {
+            if (Objects.equal(accountType.dataSet, dataSet)) {
+                return accountType;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Returns the AccountType for a particular account or null if no account type exists for the
+     * account
+     */
+    public AccountType getTypeForAccount(AccountWithDataSet account) {
+        return getType(account.type, account.dataSet);
+    }
+
+    public boolean shouldUpdate(AuthenticatorDescription[] auths, SyncAdapterType[] syncTypes) {
+        Map<String, AuthenticatorDescription> contactsAuths = onlyContactSyncable(auths, syncTypes);
+        if (!contactsAuths.keySet().equals(mAuthTypes.keySet())) {
+            return false;
+        }
+        for (AuthenticatorDescription auth : contactsAuths.values()) {
+            if (!deepEquals(mAuthTypes.get(auth.type), auth)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private List<AccountType> loadTypes(String type) {
+        final AuthenticatorDescription auth = mAuthTypes.get(type);
+        if (auth == null) {
+            return Collections.emptyList();
+        }
+
+        AccountType accountType;
+        if (GoogleAccountType.ACCOUNT_TYPE.equals(type)) {
+            accountType = new GoogleAccountType(mContext, auth.packageName);
+        } else if (ExchangeAccountType.isExchangeType(type)) {
+            accountType = new ExchangeAccountType(mContext, auth.packageName, type);
+        } else if (SamsungAccountType.isSamsungAccountType(mContext, type,
+                auth.packageName)) {
+            accountType = new SamsungAccountType(mContext, auth.packageName, type);
+        } else if (!ExternalAccountType.hasContactsXml(mContext, auth.packageName)
+                && isLocalAccountType(mLocalAccountTypeFactory, type)) {
+            accountType = mLocalAccountTypeFactory.getAccountType(type);
+        } else {
+            Log.d(TAG, "Registering external account type=" + type
+                    + ", packageName=" + auth.packageName);
+            accountType = new ExternalAccountType(mContext, auth.packageName, false);
+        }
+        if (!accountType.isInitialized()) {
+            if (accountType.isEmbedded()) {
+                throw new IllegalStateException("Problem initializing embedded type "
+                        + accountType.getClass().getCanonicalName());
+            } else {
+                // Skip external account types that couldn't be initialized
+                return Collections.emptyList();
+            }
+        }
+
+        accountType.initializeFieldsFromAuthenticator(auth);
+
+        final ImmutableList.Builder<AccountType> result = ImmutableList.builder();
+        result.add(accountType);
+
+        for (String extensionPackage : accountType.getExtensionPackageNames()) {
+            final ExternalAccountType extensionType =
+                    new ExternalAccountType(mContext, extensionPackage, true);
+            if (!extensionType.isInitialized()) {
+                // Skip external account types that couldn't be initialized.
+                continue;
+            }
+            if (!extensionType.hasContactsMetadata()) {
+                Log.w(TAG, "Skipping extension package " + extensionPackage + " because"
+                        + " it doesn't have the CONTACTS_STRUCTURE metadata");
+                continue;
+            }
+            if (TextUtils.isEmpty(extensionType.accountType)) {
+                Log.w(TAG, "Skipping extension package " + extensionPackage + " because"
+                        + " the CONTACTS_STRUCTURE metadata doesn't have the accountType"
+                        + " attribute");
+                continue;
+            }
+            if (!Objects.equal(extensionType.accountType, type)) {
+                Log.w(TAG, "Skipping extension package " + extensionPackage + " because"
+                        + " the account type + " + extensionType.accountType +
+                        " doesn't match expected type " + type);
+                continue;
+            }
+            Log.d(TAG, "Registering extension package account type="
+                    + accountType.accountType + ", dataSet=" + accountType.dataSet
+                    + ", packageName=" + extensionPackage);
+
+            result.add(extensionType);
+        }
+        return result.build();
+    }
+
+    private static ImmutableMap<String, AuthenticatorDescription> onlyContactSyncable(
+            AuthenticatorDescription[] auths, SyncAdapterType[] syncTypes) {
+        final Set<String> mContactSyncableTypes = new ArraySet<>();
+        for (SyncAdapterType type : syncTypes) {
+            if (type.authority.equals(ContactsContract.AUTHORITY)) {
+                mContactSyncableTypes.add(type.accountType);
+            }
+        }
+
+        final ImmutableMap.Builder<String, AuthenticatorDescription> builder =
+                ImmutableMap.builder();
+        for (AuthenticatorDescription auth : auths) {
+            if (mContactSyncableTypes.contains(auth.type)) {
+                builder.put(auth.type, auth);
+            }
+        }
+        return builder.build();
+    }
+
+    /**
+     * Compares all fields in auth1 and auth2
+     *
+     * <p>By default {@link AuthenticatorDescription#equals(Object)} only checks the type</p>
+     */
+    private boolean deepEquals(AuthenticatorDescription auth1, AuthenticatorDescription auth2) {
+        return Objects.equal(auth1, auth2) &&
+                Objects.equal(auth1.packageName, auth2.packageName) &&
+                auth1.labelId == auth2.labelId &&
+                auth1.iconId == auth2.iconId &&
+                auth1.smallIconId == auth2.smallIconId &&
+                auth1.accountPreferencesId == auth2.accountPreferencesId &&
+                auth1.customTokens == auth2.customTokens;
+    }
+
+}
diff --git a/src/com/android/contacts/model/account/AccountTypeWithDataSet.java b/src/com/android/contacts/model/account/AccountTypeWithDataSet.java
new file mode 100644
index 0000000..ab0a891
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountTypeWithDataSet.java
@@ -0,0 +1,99 @@
+/*
+ * 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.model.account;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.BaseColumns;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+import android.text.TextUtils;
+
+import com.google.common.base.Objects;
+
+
+/**
+ * Encapsulates an "account type" string and a "data set" string.
+ */
+public class AccountTypeWithDataSet {
+
+    private static final String[] ID_PROJECTION = new String[] {BaseColumns._ID};
+    private static final Uri RAW_CONTACTS_URI_LIMIT_1 = RawContacts.CONTENT_URI.buildUpon()
+            .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY, "1").build();
+
+    /** account type.  Can be null for fallback type. */
+    public final String accountType;
+
+    /** dataSet may be null, but never be "". */
+    public final String dataSet;
+
+    private AccountTypeWithDataSet(String accountType, String dataSet) {
+        this.accountType = TextUtils.isEmpty(accountType) ? null : accountType;
+        this.dataSet = TextUtils.isEmpty(dataSet) ? null : dataSet;
+    }
+
+    public static AccountTypeWithDataSet get(String accountType, String dataSet) {
+        return new AccountTypeWithDataSet(accountType, dataSet);
+    }
+
+    /**
+     * Return true if there are any contacts in the database with this account type and data set.
+     * Touches DB. Don't use in the UI thread.
+     */
+    public boolean hasData(Context context) {
+        final String BASE_SELECTION = RawContacts.ACCOUNT_TYPE + " = ?";
+        final String selection;
+        final String[] args;
+        if (TextUtils.isEmpty(dataSet)) {
+            selection = BASE_SELECTION + " AND " + RawContacts.DATA_SET + " IS NULL";
+            args = new String[] {accountType};
+        } else {
+            selection = BASE_SELECTION + " AND " + RawContacts.DATA_SET + " = ?";
+            args = new String[] {accountType, dataSet};
+        }
+
+        final Cursor c = context.getContentResolver().query(RAW_CONTACTS_URI_LIMIT_1,
+                ID_PROJECTION, selection, args, null);
+        if (c == null) return false;
+        try {
+            return c.moveToFirst();
+        } finally {
+            c.close();
+        }
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (!(o instanceof AccountTypeWithDataSet)) return false;
+
+        AccountTypeWithDataSet other = (AccountTypeWithDataSet) o;
+        return Objects.equal(accountType, other.accountType)
+                && Objects.equal(dataSet, other.dataSet);
+    }
+
+    @Override
+    public int hashCode() {
+        return (accountType == null ? 0 : accountType.hashCode())
+                ^ (dataSet == null ? 0 : dataSet.hashCode());
+    }
+
+    @Override
+    public String toString() {
+        return "[" + accountType + "/" + dataSet + "]";
+    }
+}
diff --git a/src/com/android/contacts/model/account/AccountWithDataSet.java b/src/com/android/contacts/model/account/AccountWithDataSet.java
new file mode 100644
index 0000000..0f36918
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountWithDataSet.java
@@ -0,0 +1,283 @@
+/*
+ * 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.model.account;
+
+import android.accounts.Account;
+import android.content.ContentProviderOperation;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.provider.BaseColumns;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+import android.text.TextUtils;
+
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.preference.ContactsPreferences;
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * Wrapper for an account that includes a data set (which may be null).
+ */
+public class AccountWithDataSet implements Parcelable {
+    private static final String STRINGIFY_SEPARATOR = "\u0001";
+    private static final String ARRAY_STRINGIFY_SEPARATOR = "\u0002";
+
+    private static final Pattern STRINGIFY_SEPARATOR_PAT =
+            Pattern.compile(Pattern.quote(STRINGIFY_SEPARATOR));
+    private static final Pattern ARRAY_STRINGIFY_SEPARATOR_PAT =
+            Pattern.compile(Pattern.quote(ARRAY_STRINGIFY_SEPARATOR));
+
+    public final String name;
+    public final String type;
+    public final String dataSet;
+    private final AccountTypeWithDataSet mAccountTypeWithDataSet;
+
+    private static final String[] ID_PROJECTION = new String[] {BaseColumns._ID};
+    private static final Uri RAW_CONTACTS_URI_LIMIT_1 = RawContacts.CONTENT_URI.buildUpon()
+            .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY, "1").build();
+
+    public static final String LOCAL_ACCOUNT_SELECTION = RawContacts.ACCOUNT_TYPE + " IS NULL AND "
+            + RawContacts.ACCOUNT_NAME + " IS NULL AND "
+            + RawContacts.DATA_SET + " IS NULL";
+
+    public AccountWithDataSet(String name, String type, String dataSet) {
+        this.name = emptyToNull(name);
+        this.type = emptyToNull(type);
+        this.dataSet = emptyToNull(dataSet);
+        mAccountTypeWithDataSet = AccountTypeWithDataSet.get(type, dataSet);
+    }
+
+    private static final String emptyToNull(String text) {
+        return TextUtils.isEmpty(text) ? null : text;
+    }
+
+    public AccountWithDataSet(Parcel in) {
+        this.name = in.readString();
+        this.type = in.readString();
+        this.dataSet = in.readString();
+        mAccountTypeWithDataSet = AccountTypeWithDataSet.get(type, dataSet);
+    }
+
+    public boolean isNullAccount() {
+        return name == null && type == null && dataSet == null;
+    }
+
+    public static AccountWithDataSet getNullAccount() {
+        return new AccountWithDataSet(null, null, null);
+    }
+
+    public Account getAccountOrNull() {
+        if (name != null && type != null) {
+            return new Account(name, type);
+        }
+        return null;
+    }
+
+    public int describeContents() {
+        return 0;
+    }
+
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(name);
+        dest.writeString(type);
+        dest.writeString(dataSet);
+    }
+
+    // For Parcelable
+    public static final Creator<AccountWithDataSet> CREATOR = new Creator<AccountWithDataSet>() {
+        public AccountWithDataSet createFromParcel(Parcel source) {
+            return new AccountWithDataSet(source);
+        }
+
+        public AccountWithDataSet[] newArray(int size) {
+            return new AccountWithDataSet[size];
+        }
+    };
+
+    public AccountTypeWithDataSet getAccountTypeWithDataSet() {
+        return mAccountTypeWithDataSet;
+    }
+
+    /**
+     * Return {@code true} if this account has any contacts in the database.
+     * Touches DB.  Don't use in the UI thread.
+     */
+    public boolean hasData(Context context) {
+        String selection;
+        String[] args = null;
+        if (isNullAccount()) {
+            selection = LOCAL_ACCOUNT_SELECTION;
+        } else {
+            final String BASE_SELECTION =
+                    RawContacts.ACCOUNT_TYPE + " = ?" + " AND " + RawContacts.ACCOUNT_NAME + " = ?";
+            if (TextUtils.isEmpty(dataSet)) {
+                selection = BASE_SELECTION + " AND " + RawContacts.DATA_SET + " IS NULL";
+                args = new String[] {type, name};
+            } else {
+                selection = BASE_SELECTION + " AND " + RawContacts.DATA_SET + " = ?";
+                args = new String[] {type, name, dataSet};
+            }
+        }
+        selection += " AND " + RawContacts.DELETED + "=0";
+
+        final Cursor c = context.getContentResolver().query(RAW_CONTACTS_URI_LIMIT_1,
+                ID_PROJECTION, selection, args, null);
+        if (c == null) return false;
+        try {
+            return c.moveToFirst();
+        } finally {
+            c.close();
+        }
+    }
+
+    public boolean equals(Object obj) {
+        if (obj instanceof AccountWithDataSet) {
+            AccountWithDataSet other = (AccountWithDataSet) obj;
+            return Objects.equal(name, other.name)
+                    && Objects.equal(type, other.type)
+                    && Objects.equal(dataSet, other.dataSet);
+        }
+        return false;
+    }
+
+    public int hashCode() {
+        int result = 17;
+        result = 31 * result + (name != null ? name.hashCode() : 0);
+        result = 31 * result + (type != null ? type.hashCode() : 0);
+        result = 31 * result + (dataSet != null ? dataSet.hashCode() : 0);
+        return result;
+    }
+
+    public String toString() {
+        return "AccountWithDataSet {name=" + name + ", type=" + type + ", dataSet=" + dataSet + "}";
+    }
+
+    private static StringBuilder addStringified(StringBuilder sb, AccountWithDataSet account) {
+        if (!TextUtils.isEmpty(account.name)) sb.append(account.name);
+        sb.append(STRINGIFY_SEPARATOR);
+        if (!TextUtils.isEmpty(account.type)) sb.append(account.type);
+        sb.append(STRINGIFY_SEPARATOR);
+        if (!TextUtils.isEmpty(account.dataSet)) sb.append(account.dataSet);
+
+        return sb;
+    }
+
+    /**
+     * Pack the instance into a string.
+     */
+    public String stringify() {
+        return addStringified(new StringBuilder(), this).toString();
+    }
+
+    /**
+     * Returns a {@link ContentProviderOperation} that will create a RawContact in this account
+     */
+    public ContentProviderOperation newRawContactOperation() {
+        final ContentProviderOperation.Builder builder =
+                ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
+                        .withValue(RawContacts.ACCOUNT_NAME, name)
+                        .withValue(RawContacts.ACCOUNT_TYPE, type);
+        if (dataSet != null) {
+            builder.withValue(RawContacts.DATA_SET, dataSet);
+        }
+        return builder.build();
+    }
+
+    /**
+     * Unpack a string created by {@link #stringify}.
+     *
+     * @throws IllegalArgumentException if it's an invalid string.
+     */
+    public static AccountWithDataSet unstringify(String s) {
+        final String[] array = STRINGIFY_SEPARATOR_PAT.split(s, 3);
+        if (array.length < 3) {
+            throw new IllegalArgumentException("Invalid string " + s);
+        }
+        return new AccountWithDataSet(array[0], array[1],
+                TextUtils.isEmpty(array[2]) ? null : array[2]);
+    }
+
+    /**
+     * Pack a list of {@link AccountWithDataSet} into a string.
+     */
+    public static String stringifyList(List<AccountWithDataSet> accounts) {
+        final StringBuilder sb = new StringBuilder();
+
+        for (AccountWithDataSet account : accounts) {
+            if (sb.length() > 0) {
+                sb.append(ARRAY_STRINGIFY_SEPARATOR);
+            }
+            addStringified(sb, account);
+        }
+
+        return sb.toString();
+    }
+
+    /**
+     * Unpack a list of {@link AccountWithDataSet} into a string.
+     *
+     * @throws IllegalArgumentException if it's an invalid string.
+     */
+    public static List<AccountWithDataSet> unstringifyList(String s) {
+        final ArrayList<AccountWithDataSet> ret = Lists.newArrayList();
+        if (TextUtils.isEmpty(s)) {
+            return ret;
+        }
+
+        final String[] array = ARRAY_STRINGIFY_SEPARATOR_PAT.split(s);
+
+        for (int i = 0; i < array.length; i++) {
+            ret.add(unstringify(array[i]));
+        }
+
+        return ret;
+    }
+
+    public static AccountWithDataSet getDefaultOrBestFallback(ContactsPreferences preferences,
+            AccountTypeManager accountTypeManager) {
+        if (preferences.isDefaultAccountSet()) {
+            final AccountWithDataSet account = preferences.getDefaultAccount();
+            if (accountTypeManager.contains(account, true)) {
+                return account;
+            }
+        }
+        final List<AccountWithDataSet> accounts = accountTypeManager
+                .getAccounts(/* writableOnly */ true);
+
+        if (accounts.isEmpty()) {
+            return AccountWithDataSet.getNullAccount();
+        }
+
+        // Return the first google account
+        for (AccountWithDataSet account : accounts) {
+            if (GoogleAccountType.ACCOUNT_TYPE.equals(account) && account.dataSet == null) {
+                return account;
+            }
+        }
+        // Arbitrarily return the first writable account
+        return accounts.get(0);
+    }
+}
+
diff --git a/src/com/android/contacts/model/account/AccountsLoader.java b/src/com/android/contacts/model/account/AccountsLoader.java
new file mode 100644
index 0000000..78f309b
--- /dev/null
+++ b/src/com/android/contacts/model/account/AccountsLoader.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model.account;
+
+import android.content.Context;
+import android.content.IntentFilter;
+
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.util.concurrent.ListenableFutureLoader;
+import com.google.common.base.Objects;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.List;
+
+/**
+ * Loads the accounts from AccountTypeManager
+ */
+public class AccountsLoader extends ListenableFutureLoader<List<AccountInfo>> {
+    private final AccountTypeManager mAccountTypeManager;
+    private final Predicate<AccountInfo> mFilter;
+
+    public AccountsLoader(Context context) {
+        this(context, Predicates.<AccountInfo>alwaysTrue());
+    }
+
+    public AccountsLoader(Context context, Predicate<AccountInfo> filter) {
+        super(context, new IntentFilter(AccountTypeManager.BROADCAST_ACCOUNTS_CHANGED));
+        mAccountTypeManager = AccountTypeManager.getInstance(context);
+        mFilter = filter;
+    }
+
+    @Override
+    protected ListenableFuture<List<AccountInfo>> loadData() {
+        return mAccountTypeManager.filterAccountsAsync(mFilter);
+    }
+
+    @Override
+    protected boolean isSameData(List<AccountInfo> previous, List<AccountInfo> next) {
+        return Objects.equal(AccountInfo.extractAccounts(previous),
+                AccountInfo.extractAccounts(next));
+    }
+
+}
diff --git a/src/com/android/contacts/model/account/BaseAccountType.java b/src/com/android/contacts/model/account/BaseAccountType.java
new file mode 100644
index 0000000..a62f353
--- /dev/null
+++ b/src/com/android/contacts/model/account/BaseAccountType.java
@@ -0,0 +1,1472 @@
+/*
+ * 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.model.account;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.res.Resources;
+import android.provider.ContactsContract.CommonDataKinds.BaseTypes;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.provider.ContactsContract.Data;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.inputmethod.EditorInfo;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.CustomDataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contacts.util.ContactDisplayUtils;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+public abstract class BaseAccountType extends AccountType {
+    private static final String TAG = "BaseAccountType";
+
+    protected static final int FLAGS_PHONE = EditorInfo.TYPE_CLASS_PHONE;
+    protected static final int FLAGS_EMAIL = EditorInfo.TYPE_CLASS_TEXT
+            | EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
+    protected static final int FLAGS_PERSON_NAME = EditorInfo.TYPE_CLASS_TEXT
+            | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS | EditorInfo.TYPE_TEXT_VARIATION_PERSON_NAME;
+    protected static final int FLAGS_PHONETIC = EditorInfo.TYPE_CLASS_TEXT
+            | EditorInfo.TYPE_TEXT_VARIATION_PHONETIC;
+    protected static final int FLAGS_GENERIC_NAME = EditorInfo.TYPE_CLASS_TEXT
+            | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS;
+    protected static final int FLAGS_NOTE = EditorInfo.TYPE_CLASS_TEXT
+            | EditorInfo.TYPE_TEXT_FLAG_CAP_SENTENCES | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE;
+    protected static final int FLAGS_EVENT = EditorInfo.TYPE_CLASS_TEXT;
+    protected static final int FLAGS_WEBSITE = EditorInfo.TYPE_CLASS_TEXT
+            | EditorInfo.TYPE_TEXT_VARIATION_URI;
+    protected static final int FLAGS_POSTAL = EditorInfo.TYPE_CLASS_TEXT
+            | EditorInfo.TYPE_TEXT_VARIATION_POSTAL_ADDRESS | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS
+            | EditorInfo.TYPE_TEXT_FLAG_MULTI_LINE;
+    protected static final int FLAGS_SIP_ADDRESS = EditorInfo.TYPE_CLASS_TEXT
+            | EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;  // since SIP addresses have the same
+                                                             // basic format as email addresses
+    protected static final int FLAGS_RELATION = EditorInfo.TYPE_CLASS_TEXT
+            | EditorInfo.TYPE_TEXT_FLAG_CAP_WORDS | EditorInfo.TYPE_TEXT_VARIATION_PERSON_NAME;
+
+    // Specify the maximum number of lines that can be used to display various field types.  If no
+    // value is specified for a particular type, we use the default value from {@link DataKind}.
+    protected static final int MAX_LINES_FOR_POSTAL_ADDRESS = 10;
+    protected static final int MAX_LINES_FOR_GROUP = 10;
+    protected static final int MAX_LINES_FOR_NOTE = 100;
+
+    private interface Tag {
+        static final String DATA_KIND = "DataKind";
+        static final String TYPE = "Type";
+    }
+
+    private interface Attr {
+        static final String MAX_OCCURRENCE = "maxOccurs";
+        static final String DATE_WITH_TIME = "dateWithTime";
+        static final String YEAR_OPTIONAL = "yearOptional";
+        static final String KIND = "kind";
+        static final String TYPE = "type";
+    }
+
+    protected interface Weight {
+        static final int NONE = -1;
+        static final int PHONE = 10;
+        static final int EMAIL = 15;
+        static final int STRUCTURED_POSTAL = 25;
+        static final int NICKNAME = 111;
+        static final int EVENT = 120;
+        static final int ORGANIZATION = 125;
+        static final int NOTE = 130;
+        static final int IM = 140;
+        static final int SIP_ADDRESS = 145;
+        static final int GROUP_MEMBERSHIP = 150;
+        static final int WEBSITE = 160;
+        static final int RELATIONSHIP = 999;
+    }
+
+    public BaseAccountType() {
+        this.accountType = null;
+        this.dataSet = null;
+        this.titleRes = R.string.account_phone;
+        this.iconRes = R.mipmap.ic_contacts_launcher;
+    }
+
+    protected static EditType buildPhoneType(int type) {
+        return new EditType(type, Phone.getTypeLabelResource(type));
+    }
+
+    protected static EditType buildEmailType(int type) {
+        return new EditType(type, Email.getTypeLabelResource(type));
+    }
+
+    protected static EditType buildPostalType(int type) {
+        return new EditType(type, StructuredPostal.getTypeLabelResource(type));
+    }
+
+    protected static EditType buildImType(int type) {
+        return new EditType(type, Im.getProtocolLabelResource(type));
+    }
+
+    protected static EditType buildEventType(int type, boolean yearOptional) {
+        return new EventEditType(type, Event.getTypeResource(type)).setYearOptional(yearOptional);
+    }
+
+    protected static EditType buildRelationType(int type) {
+        return new EditType(type, Relation.getTypeLabelResource(type));
+    }
+
+    protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
+        final DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
+                R.string.nameLabelsGroup, Weight.NONE, true));
+        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+        kind.actionBody = new SimpleInflater(Nickname.NAME);
+        kind.typeOverallMax = 1;
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+                FLAGS_PERSON_NAME).setLongForm(true));
+        kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+                FLAGS_PERSON_NAME));
+        kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+                FLAGS_PERSON_NAME).setLongForm(true));
+        kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+                FLAGS_PERSON_NAME));
+        kind.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
+                FLAGS_PERSON_NAME).setLongForm(true));
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+                R.string.name_phonetic_family, FLAGS_PHONETIC));
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+                R.string.name_phonetic_middle, FLAGS_PHONETIC));
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+                R.string.name_phonetic_given, FLAGS_PHONETIC));
+
+        return kind;
+    }
+
+    protected DataKind addDataKindName(Context context) throws DefinitionException {
+        final DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_NAME,
+                R.string.nameLabelsGroup, Weight.NONE, true));
+        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+        kind.actionBody = new SimpleInflater(Nickname.NAME);
+        kind.typeOverallMax = 1;
+
+        kind.fieldList = Lists.newArrayList();
+        final boolean displayOrderPrimary =
+                context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
+
+        kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+                FLAGS_PERSON_NAME).setOptional(true));
+        if (!displayOrderPrimary) {
+            kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+                    FLAGS_PERSON_NAME));
+            kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+                    FLAGS_PERSON_NAME).setOptional(true));
+            kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+                    FLAGS_PERSON_NAME));
+        } else {
+            kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+                    FLAGS_PERSON_NAME));
+            kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+                    FLAGS_PERSON_NAME).setOptional(true));
+            kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+                    FLAGS_PERSON_NAME));
+        }
+        kind.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
+                FLAGS_PERSON_NAME).setOptional(true));
+
+        return kind;
+    }
+
+    protected DataKind addDataKindPhoneticName(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
+                R.string.name_phonetic, Weight.NONE, true));
+        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+        kind.actionBody = new SimpleInflater(Nickname.NAME);
+        kind.typeOverallMax = 1;
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(DataKind.PSEUDO_COLUMN_PHONETIC_NAME,
+                R.string.name_phonetic, FLAGS_PHONETIC).setShortForm(true));
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+                R.string.name_phonetic_family, FLAGS_PHONETIC).setLongForm(true));
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+                R.string.name_phonetic_middle, FLAGS_PHONETIC).setLongForm(true));
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+                R.string.name_phonetic_given, FLAGS_PHONETIC).setLongForm(true));
+
+        return kind;
+    }
+
+    protected DataKind addDataKindNickname(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Nickname.CONTENT_ITEM_TYPE,
+                    R.string.nicknameLabelsGroup, Weight.NICKNAME, true));
+        kind.typeOverallMax = 1;
+        kind.actionHeader = new SimpleInflater(R.string.nicknameLabelsGroup);
+        kind.actionBody = new SimpleInflater(Nickname.NAME);
+        kind.defaultValues = new ContentValues();
+        kind.defaultValues.put(Nickname.TYPE, Nickname.TYPE_DEFAULT);
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
+                FLAGS_PERSON_NAME));
+
+        return kind;
+    }
+
+    protected DataKind addDataKindPhone(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Phone.CONTENT_ITEM_TYPE, R.string.phoneLabelsGroup,
+                Weight.PHONE, true));
+        kind.iconAltRes = R.drawable.quantum_ic_message_vd_theme_24;
+        kind.iconAltDescriptionRes = R.string.sms;
+        kind.actionHeader = new PhoneActionInflater();
+        kind.actionAltHeader = new PhoneActionAltInflater();
+        kind.actionBody = new SimpleInflater(Phone.NUMBER);
+        kind.typeColumn = Phone.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER));
+        kind.typeList.add(
+                buildPhoneType(Phone.TYPE_CUSTOM).setSecondary(true).setCustomColumn(Phone.LABEL));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_CALLBACK).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_CAR).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_COMPANY_MAIN).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_ISDN).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_MAIN).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER_FAX).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_RADIO).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_TELEX).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_TTY_TDD).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK_MOBILE).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK_PAGER).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_ASSISTANT).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_MMS).setSecondary(true));
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
+
+        return kind;
+    }
+
+    protected DataKind addDataKindEmail(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Email.CONTENT_ITEM_TYPE, R.string.emailLabelsGroup,
+                Weight.EMAIL, true));
+        kind.actionHeader = new EmailActionInflater();
+        kind.actionBody = new SimpleInflater(Email.DATA);
+        kind.typeColumn = Email.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildEmailType(Email.TYPE_HOME));
+        kind.typeList.add(buildEmailType(Email.TYPE_WORK));
+        kind.typeList.add(buildEmailType(Email.TYPE_OTHER));
+        kind.typeList.add(buildEmailType(Email.TYPE_MOBILE));
+        kind.typeList.add(
+                buildEmailType(Email.TYPE_CUSTOM).setSecondary(true).setCustomColumn(Email.LABEL));
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
+
+        return kind;
+    }
+
+    protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(StructuredPostal.CONTENT_ITEM_TYPE,
+                R.string.postalLabelsGroup, Weight.STRUCTURED_POSTAL, true));
+        kind.actionHeader = new PostalActionInflater();
+        kind.actionBody = new SimpleInflater(StructuredPostal.FORMATTED_ADDRESS);
+        kind.typeColumn = StructuredPostal.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME));
+        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_WORK));
+        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER));
+        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_CUSTOM).setSecondary(true)
+                .setCustomColumn(StructuredPostal.LABEL));
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(
+                new EditField(StructuredPostal.FORMATTED_ADDRESS, R.string.postal_address,
+                        FLAGS_POSTAL));
+
+        kind.maxLinesForDisplay = MAX_LINES_FOR_POSTAL_ADDRESS;
+
+        return kind;
+    }
+
+    protected DataKind addDataKindIm(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Im.CONTENT_ITEM_TYPE, R.string.imLabelsGroup,
+                Weight.IM, true));
+        kind.actionHeader = new ImActionInflater();
+        kind.actionBody = new SimpleInflater(Im.DATA);
+
+        // NOTE: even though a traditional "type" exists, for editing
+        // purposes we're using the protocol to pick labels
+
+        kind.defaultValues = new ContentValues();
+        kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
+
+        kind.typeColumn = Im.PROTOCOL;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildImType(Im.PROTOCOL_AIM));
+        kind.typeList.add(buildImType(Im.PROTOCOL_MSN));
+        kind.typeList.add(buildImType(Im.PROTOCOL_YAHOO));
+        kind.typeList.add(buildImType(Im.PROTOCOL_SKYPE));
+        kind.typeList.add(buildImType(Im.PROTOCOL_QQ));
+        kind.typeList.add(buildImType(Im.PROTOCOL_GOOGLE_TALK));
+        kind.typeList.add(buildImType(Im.PROTOCOL_ICQ));
+        kind.typeList.add(buildImType(Im.PROTOCOL_JABBER));
+        kind.typeList.add(buildImType(Im.PROTOCOL_CUSTOM).setSecondary(true).setCustomColumn(
+                Im.CUSTOM_PROTOCOL));
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
+
+        return kind;
+    }
+
+    protected DataKind addDataKindOrganization(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Organization.CONTENT_ITEM_TYPE,
+                    R.string.organizationLabelsGroup, Weight.ORGANIZATION, true));
+        kind.actionHeader = new SimpleInflater(R.string.organizationLabelsGroup);
+        kind.actionBody = ORGANIZATION_BODY_INFLATER;
+        kind.typeOverallMax = 1;
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
+                FLAGS_GENERIC_NAME));
+        kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
+                FLAGS_GENERIC_NAME));
+
+        return kind;
+    }
+
+    protected DataKind addDataKindPhoto(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Photo.CONTENT_ITEM_TYPE, -1, Weight.NONE, true));
+        kind.typeOverallMax = 1;
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
+        return kind;
+    }
+
+    protected DataKind addDataKindNote(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Note.CONTENT_ITEM_TYPE, R.string.label_notes,
+                Weight.NOTE, true));
+        kind.typeOverallMax = 1;
+        kind.actionHeader = new SimpleInflater(R.string.label_notes);
+        kind.actionBody = new SimpleInflater(Note.NOTE);
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
+
+        kind.maxLinesForDisplay = MAX_LINES_FOR_NOTE;
+
+        return kind;
+    }
+
+    protected DataKind addDataKindWebsite(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Website.CONTENT_ITEM_TYPE,
+                R.string.websiteLabelsGroup, Weight.WEBSITE, true));
+        kind.actionHeader = new SimpleInflater(R.string.websiteLabelsGroup);
+        kind.actionBody = new SimpleInflater(Website.URL);
+        kind.defaultValues = new ContentValues();
+        kind.defaultValues.put(Website.TYPE, Website.TYPE_OTHER);
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup, FLAGS_WEBSITE));
+
+        return kind;
+    }
+
+    protected DataKind addDataKindSipAddress(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(SipAddress.CONTENT_ITEM_TYPE,
+                    R.string.label_sip_address, Weight.SIP_ADDRESS, true));
+
+        kind.actionHeader = new SimpleInflater(R.string.label_sip_address);
+        kind.actionBody = new SimpleInflater(SipAddress.SIP_ADDRESS);
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(SipAddress.SIP_ADDRESS,
+                                         R.string.label_sip_address, FLAGS_SIP_ADDRESS));
+        kind.typeOverallMax = 1;
+
+        return kind;
+    }
+
+    protected DataKind addDataKindGroupMembership(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(GroupMembership.CONTENT_ITEM_TYPE,
+                R.string.groupsLabel, Weight.GROUP_MEMBERSHIP, true));
+
+        kind.typeOverallMax = 1;
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(GroupMembership.GROUP_ROW_ID, -1, -1));
+
+        kind.maxLinesForDisplay = MAX_LINES_FOR_GROUP;
+
+        return kind;
+    }
+
+    protected DataKind addDataKindCustomField(Context context) throws DefinitionException {
+        final DataKind kind = addKind(new DataKind(CustomDataItem.MIMETYPE_CUSTOM_FIELD,
+                R.string.label_custom_field, Weight.NONE, /* editable */ false));
+        kind.actionBody = new SimpleInflater(Data.DATA2);
+        return kind;
+    }
+
+    /**
+     * Simple inflater that assumes a string resource has a "%s" that will be
+     * filled from the given column.
+     */
+    public static class SimpleInflater implements StringInflater {
+        private final int mStringRes;
+        private final String mColumnName;
+
+        public SimpleInflater(int stringRes) {
+            this(stringRes, null);
+        }
+
+        public SimpleInflater(String columnName) {
+            this(-1, columnName);
+        }
+
+        public SimpleInflater(int stringRes, String columnName) {
+            mStringRes = stringRes;
+            mColumnName = columnName;
+        }
+
+        @Override
+        public CharSequence inflateUsing(Context context, ContentValues values) {
+            final boolean validColumn = values.containsKey(mColumnName);
+            final boolean validString = mStringRes > 0;
+
+            final CharSequence stringValue = validString ? context.getText(mStringRes) : null;
+            final CharSequence columnValue = validColumn ? values.getAsString(mColumnName) : null;
+
+            if (validString && validColumn) {
+                return String.format(stringValue.toString(), columnValue);
+            } else if (validString) {
+                return stringValue;
+            } else if (validColumn) {
+                return columnValue;
+            } else {
+                return null;
+            }
+        }
+
+        @Override
+        public String toString() {
+            return this.getClass().getSimpleName()
+                    + " mStringRes=" + mStringRes
+                    + " mColumnName" + mColumnName;
+        }
+
+        public String getColumnNameForTest() {
+            return mColumnName;
+        }
+    }
+
+    public static abstract class CommonInflater implements StringInflater {
+        protected abstract int getTypeLabelResource(Integer type);
+
+        protected boolean isCustom(Integer type) {
+            return type == BaseTypes.TYPE_CUSTOM;
+        }
+
+        protected String getTypeColumn() {
+            return Phone.TYPE;
+        }
+
+        protected String getLabelColumn() {
+            return Phone.LABEL;
+        }
+
+        protected CharSequence getTypeLabel(Resources res, Integer type, CharSequence label) {
+            final int labelRes = getTypeLabelResource(type);
+            if (type == null) {
+                return res.getText(labelRes);
+            } else if (isCustom(type)) {
+                return res.getString(labelRes, label == null ? "" : label);
+            } else {
+                return res.getText(labelRes);
+            }
+        }
+
+        @Override
+        public CharSequence inflateUsing(Context context, ContentValues values) {
+            final Integer type = values.getAsInteger(getTypeColumn());
+            final String label = values.getAsString(getLabelColumn());
+            return getTypeLabel(context.getResources(), type, label);
+        }
+
+        @Override
+        public String toString() {
+            return this.getClass().getSimpleName();
+        }
+    }
+
+    public static class PhoneActionInflater extends CommonInflater {
+        @Override
+        protected boolean isCustom(Integer type) {
+            return ContactDisplayUtils.isCustomPhoneType(type);
+        }
+
+        @Override
+        protected int getTypeLabelResource(Integer type) {
+            return ContactDisplayUtils.getPhoneLabelResourceId(type);
+        }
+    }
+
+    public static class PhoneActionAltInflater extends CommonInflater {
+        @Override
+        protected boolean isCustom(Integer type) {
+            return ContactDisplayUtils.isCustomPhoneType(type);
+        }
+
+        @Override
+        protected int getTypeLabelResource(Integer type) {
+            return ContactDisplayUtils.getSmsLabelResourceId(type);
+        }
+    }
+
+    public static class EmailActionInflater extends CommonInflater {
+        @Override
+        protected int getTypeLabelResource(Integer type) {
+            if (type == null) return R.string.email;
+            switch (type) {
+                case Email.TYPE_HOME: return R.string.email_home;
+                case Email.TYPE_WORK: return R.string.email_work;
+                case Email.TYPE_OTHER: return R.string.email_other;
+                case Email.TYPE_MOBILE: return R.string.email_mobile;
+                default: return R.string.email_custom;
+            }
+        }
+    }
+
+    public static class EventActionInflater extends CommonInflater {
+        @Override
+        protected int getTypeLabelResource(Integer type) {
+            return Event.getTypeResource(type);
+        }
+    }
+
+    public static class RelationActionInflater extends CommonInflater {
+        @Override
+        protected int getTypeLabelResource(Integer type) {
+            return Relation.getTypeLabelResource(type == null ? Relation.TYPE_CUSTOM : type);
+        }
+    }
+
+    public static class PostalActionInflater extends CommonInflater {
+        @Override
+        protected int getTypeLabelResource(Integer type) {
+            if (type == null) return R.string.map_other;
+            switch (type) {
+                case StructuredPostal.TYPE_HOME: return R.string.map_home;
+                case StructuredPostal.TYPE_WORK: return R.string.map_work;
+                case StructuredPostal.TYPE_OTHER: return R.string.map_other;
+                default: return R.string.map_custom;
+            }
+        }
+    }
+
+    public static class ImActionInflater extends CommonInflater {
+        @Override
+        protected String getTypeColumn() {
+            return Im.PROTOCOL;
+        }
+
+        @Override
+        protected String getLabelColumn() {
+            return Im.CUSTOM_PROTOCOL;
+        }
+
+        @Override
+        protected int getTypeLabelResource(Integer type) {
+            if (type == null) return R.string.chat;
+            switch (type) {
+                case Im.PROTOCOL_AIM: return R.string.chat_aim;
+                case Im.PROTOCOL_MSN: return R.string.chat_msn;
+                case Im.PROTOCOL_YAHOO: return R.string.chat_yahoo;
+                case Im.PROTOCOL_SKYPE: return R.string.chat_skype;
+                case Im.PROTOCOL_QQ: return R.string.chat_qq;
+                case Im.PROTOCOL_GOOGLE_TALK: return R.string.chat_gtalk;
+                case Im.PROTOCOL_ICQ: return R.string.chat_icq;
+                case Im.PROTOCOL_JABBER: return R.string.chat_jabber;
+                case Im.PROTOCOL_NETMEETING: return R.string.chat;
+                default: return R.string.chat;
+            }
+        }
+    }
+
+    public static final StringInflater ORGANIZATION_BODY_INFLATER = new StringInflater() {
+        @Override
+        public CharSequence inflateUsing(Context context, ContentValues values) {
+            final CharSequence companyValue = values.containsKey(Organization.COMPANY) ?
+                    values.getAsString(Organization.COMPANY) : null;
+            final CharSequence titleValue = values.containsKey(Organization.TITLE) ?
+                    values.getAsString(Organization.TITLE) : null;
+
+            if (companyValue != null && titleValue != null) {
+                return companyValue +  ": " + titleValue;
+            } else if (companyValue == null) {
+                return titleValue;
+            } else {
+                return companyValue;
+            }
+        }
+    };
+
+    @Override
+    public boolean isGroupMembershipEditable() {
+        return false;
+    }
+
+    /**
+     * Parses the content of the EditSchema tag in contacts.xml.
+     */
+    protected final void parseEditSchema(Context context, XmlPullParser parser, AttributeSet attrs)
+            throws XmlPullParserException, IOException, DefinitionException {
+
+        final int outerDepth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            final int depth = parser.getDepth();
+            if (type != XmlPullParser.START_TAG || depth != outerDepth + 1) {
+                continue; // Not direct child tag
+            }
+
+            final String tag = parser.getName();
+
+            if (Tag.DATA_KIND.equals(tag)) {
+                for (DataKind kind : KindParser.INSTANCE.parseDataKindTag(context, parser, attrs)) {
+                    addKind(kind);
+                }
+            } else {
+                Log.w(TAG, "Skipping unknown tag " + tag);
+            }
+        }
+    }
+
+    // Utility methods to keep code shorter.
+    private static boolean getAttr(AttributeSet attrs, String attribute, boolean defaultValue) {
+        return attrs.getAttributeBooleanValue(null, attribute, defaultValue);
+    }
+
+    private static int getAttr(AttributeSet attrs, String attribute, int defaultValue) {
+        return attrs.getAttributeIntValue(null, attribute, defaultValue);
+    }
+
+    private static String getAttr(AttributeSet attrs, String attribute) {
+        return attrs.getAttributeValue(null, attribute);
+    }
+
+    // TODO Extract it to its own class, and move all KindBuilders to it as well.
+    private static class KindParser {
+        public static final KindParser INSTANCE = new KindParser();
+
+        private final Map<String, KindBuilder> mBuilders = Maps.newHashMap();
+
+        private KindParser() {
+            addBuilder(new NameKindBuilder());
+            addBuilder(new NicknameKindBuilder());
+            addBuilder(new PhoneKindBuilder());
+            addBuilder(new EmailKindBuilder());
+            addBuilder(new StructuredPostalKindBuilder());
+            addBuilder(new ImKindBuilder());
+            addBuilder(new OrganizationKindBuilder());
+            addBuilder(new PhotoKindBuilder());
+            addBuilder(new NoteKindBuilder());
+            addBuilder(new WebsiteKindBuilder());
+            addBuilder(new SipAddressKindBuilder());
+            addBuilder(new GroupMembershipKindBuilder());
+            addBuilder(new EventKindBuilder());
+            addBuilder(new RelationshipKindBuilder());
+        }
+
+        private void addBuilder(KindBuilder builder) {
+            mBuilders.put(builder.getTagName(), builder);
+        }
+
+        /**
+         * Takes a {@link XmlPullParser} at the start of a DataKind tag, parses it and returns
+         * {@link DataKind}s.  (Usually just one, but there are three for the "name" kind.)
+         *
+         * This method returns a list, because we need to add 3 kinds for the name data kind.
+         * (structured, display and phonetic)
+         */
+        public List<DataKind> parseDataKindTag(Context context, XmlPullParser parser,
+                AttributeSet attrs)
+                throws DefinitionException, XmlPullParserException, IOException {
+            final String kind = getAttr(attrs, Attr.KIND);
+            final KindBuilder builder = mBuilders.get(kind);
+            if (builder != null) {
+                return builder.parseDataKind(context, parser, attrs);
+            } else {
+                throw new DefinitionException("Undefined data kind '" + kind + "'");
+            }
+        }
+    }
+
+    private static abstract class KindBuilder {
+
+        public abstract String getTagName();
+
+        /**
+         * DataKind tag parser specific to each kind.  Subclasses must implement it.
+         */
+        public abstract List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException, IOException;
+
+        /**
+         * Creates a new {@link DataKind}, and also parses the child Type tags in the DataKind
+         * tag.
+         */
+        protected final DataKind newDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs, boolean isPseudo, String mimeType, String typeColumn,
+                int titleRes, int weight, StringInflater actionHeader, StringInflater actionBody)
+                throws DefinitionException, XmlPullParserException, IOException {
+
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Adding DataKind: " + mimeType);
+            }
+
+            final DataKind kind = new DataKind(mimeType, titleRes, weight, true);
+            kind.typeColumn = typeColumn;
+            kind.actionHeader = actionHeader;
+            kind.actionBody = actionBody;
+            kind.fieldList = Lists.newArrayList();
+
+            // Get more information from the tag...
+            // A pseudo data kind doesn't have corresponding tag the XML, so we skip this.
+            if (!isPseudo) {
+                kind.typeOverallMax = getAttr(attrs, Attr.MAX_OCCURRENCE, -1);
+
+                // Process "Type" tags.
+                // If a kind has the type column, contacts.xml must have at least one type
+                // definition.  Otherwise, it mustn't have a type definition.
+                if (kind.typeColumn != null) {
+                    // Parse and add types.
+                    kind.typeList = Lists.newArrayList();
+                    parseTypes(context, parser, attrs, kind, true);
+                    if (kind.typeList.size() == 0) {
+                        throw new DefinitionException(
+                                "Kind " + kind.mimeType + " must have at least one type");
+                    }
+                } else {
+                    // Make sure it has no types.
+                    parseTypes(context, parser, attrs, kind, false /* can't have types */);
+                }
+            }
+
+            return kind;
+        }
+
+        /**
+         * Parses Type elements in a DataKind element, and if {@code canHaveTypes} is true adds
+         * them to the given {@link DataKind}. Otherwise the {@link DataKind} can't have a type,
+         * so throws {@link DefinitionException}.
+         */
+        private void parseTypes(Context context, XmlPullParser parser, AttributeSet attrs,
+                DataKind kind, boolean canHaveTypes)
+                throws DefinitionException, XmlPullParserException, IOException {
+            final int outerDepth = parser.getDepth();
+            int type;
+            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                    && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+                final int depth = parser.getDepth();
+                if (type != XmlPullParser.START_TAG || depth != outerDepth + 1) {
+                    continue; // Not direct child tag
+                }
+
+                final String tag = parser.getName();
+                if (Tag.TYPE.equals(tag)) {
+                    if (canHaveTypes) {
+                        kind.typeList.add(parseTypeTag(parser, attrs, kind));
+                    } else {
+                        throw new DefinitionException(
+                                "Kind " + kind.mimeType + " can't have types");
+                    }
+                } else {
+                    throw new DefinitionException("Unknown tag: " + tag);
+                }
+            }
+        }
+
+        /**
+         * Parses a single Type element and returns an {@link EditType} built from it.  Uses
+         * {@link #buildEditTypeForTypeTag} defined in subclasses to actually build an
+         * {@link EditType}.
+         */
+        private EditType parseTypeTag(XmlPullParser parser, AttributeSet attrs, DataKind kind)
+                throws DefinitionException {
+
+            final String typeName = getAttr(attrs, Attr.TYPE);
+
+            final EditType et = buildEditTypeForTypeTag(attrs, typeName);
+            if (et == null) {
+                throw new DefinitionException(
+                        "Undefined type '" + typeName + "' for data kind '" + kind.mimeType + "'");
+            }
+            et.specificMax = getAttr(attrs, Attr.MAX_OCCURRENCE, -1);
+
+            return et;
+        }
+
+        /**
+         * Returns an {@link EditType} for the given "type".  Subclasses may optionally use
+         * the attributes in the tag to set optional values.
+         * (e.g. "yearOptional" for the event kind)
+         */
+        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+            return null;
+        }
+
+        protected final void throwIfList(DataKind kind) throws DefinitionException {
+            if (kind.typeOverallMax != 1) {
+                throw new DefinitionException(
+                        "Kind " + kind.mimeType + " must have 'overallMax=\"1\"'");
+            }
+        }
+    }
+
+    /**
+     * DataKind parser for Name. (structured, display, phonetic)
+     */
+    private static class NameKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "name";
+        }
+
+        private static void checkAttributeTrue(boolean value, String attrName)
+                throws DefinitionException {
+            if (!value) {
+                throw new DefinitionException(attrName + " must be true");
+            }
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+
+            // Build 3 data kinds:
+            // - StructuredName.CONTENT_ITEM_TYPE
+            // - DataKind.PSEUDO_MIME_TYPE_NAME
+            // - DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME
+
+            final boolean displayOrderPrimary =
+                    context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
+
+            final boolean supportsPrefix = getAttr(attrs, "supportsPrefix", false);
+            final boolean supportsMiddleName = getAttr(attrs, "supportsMiddleName", false);
+            final boolean supportsSuffix = getAttr(attrs, "supportsSuffix", false);
+            final boolean supportsPhoneticFamilyName =
+                    getAttr(attrs, "supportsPhoneticFamilyName", false);
+            final boolean supportsPhoneticMiddleName =
+                    getAttr(attrs, "supportsPhoneticMiddleName", false);
+            final boolean supportsPhoneticGivenName =
+                    getAttr(attrs, "supportsPhoneticGivenName", false);
+
+            // For now, every thing must be supported.
+            checkAttributeTrue(supportsPrefix, "supportsPrefix");
+            checkAttributeTrue(supportsMiddleName, "supportsMiddleName");
+            checkAttributeTrue(supportsSuffix, "supportsSuffix");
+            checkAttributeTrue(supportsPhoneticFamilyName, "supportsPhoneticFamilyName");
+            checkAttributeTrue(supportsPhoneticMiddleName, "supportsPhoneticMiddleName");
+            checkAttributeTrue(supportsPhoneticGivenName, "supportsPhoneticGivenName");
+
+            final List<DataKind> kinds = Lists.newArrayList();
+
+            // Structured name
+            final DataKind ks = newDataKind(context, parser, attrs, false,
+                    StructuredName.CONTENT_ITEM_TYPE, null, R.string.nameLabelsGroup, Weight.NONE,
+                    new SimpleInflater(R.string.nameLabelsGroup),
+                    new SimpleInflater(Nickname.NAME));
+
+            ks.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+                    FLAGS_PERSON_NAME).setLongForm(true));
+            ks.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+                    FLAGS_PERSON_NAME));
+            ks.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+                    FLAGS_PERSON_NAME).setLongForm(true));
+            ks.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+                    FLAGS_PERSON_NAME));
+            ks.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
+                    FLAGS_PERSON_NAME).setLongForm(true));
+            ks.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+                    R.string.name_phonetic_family, FLAGS_PHONETIC));
+            ks.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+                    R.string.name_phonetic_middle, FLAGS_PHONETIC));
+            ks.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+                    R.string.name_phonetic_given, FLAGS_PHONETIC));
+
+            throwIfList(ks);
+            kinds.add(ks);
+
+            // Name
+            final DataKind kn = newDataKind(context, parser, attrs, true,
+                    DataKind.PSEUDO_MIME_TYPE_NAME, null,
+                    R.string.nameLabelsGroup, Weight.NONE,
+                    new SimpleInflater(R.string.nameLabelsGroup),
+                    new SimpleInflater(Nickname.NAME));
+            kn.typeOverallMax = 1;
+            throwIfList(kn);
+            kinds.add(kn);
+
+            kn.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+                    FLAGS_PERSON_NAME).setOptional(true));
+            if (!displayOrderPrimary) {
+                kn.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+                        FLAGS_PERSON_NAME));
+                kn.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+                        FLAGS_PERSON_NAME).setOptional(true));
+                kn.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+                        FLAGS_PERSON_NAME));
+            } else {
+                kn.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+                        FLAGS_PERSON_NAME));
+                kn.fieldList.add(new EditField(StructuredName.MIDDLE_NAME, R.string.name_middle,
+                        FLAGS_PERSON_NAME).setOptional(true));
+                kn.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+                        FLAGS_PERSON_NAME));
+            }
+            kn.fieldList.add(new EditField(StructuredName.SUFFIX, R.string.name_suffix,
+                    FLAGS_PERSON_NAME).setOptional(true));
+
+            // Phonetic name
+            final DataKind kp = newDataKind(context, parser, attrs, true,
+                    DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME, null,
+                    R.string.name_phonetic, Weight.NONE,
+                    new SimpleInflater(R.string.nameLabelsGroup),
+                    new SimpleInflater(Nickname.NAME));
+            kp.typeOverallMax = 1;
+            kinds.add(kp);
+
+            // We may want to change the order depending on displayOrderPrimary too.
+            kp.fieldList.add(new EditField(DataKind.PSEUDO_COLUMN_PHONETIC_NAME,
+                    R.string.name_phonetic, FLAGS_PHONETIC).setShortForm(true));
+            kp.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+                    R.string.name_phonetic_family, FLAGS_PHONETIC).setLongForm(true));
+            kp.fieldList.add(new EditField(StructuredName.PHONETIC_MIDDLE_NAME,
+                    R.string.name_phonetic_middle, FLAGS_PHONETIC).setLongForm(true));
+            kp.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+                    R.string.name_phonetic_given, FLAGS_PHONETIC).setLongForm(true));
+            return kinds;
+        }
+    }
+
+    private static class NicknameKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "nickname";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    Nickname.CONTENT_ITEM_TYPE, null, R.string.nicknameLabelsGroup, Weight.NICKNAME,
+                    new SimpleInflater(R.string.nicknameLabelsGroup),
+                    new SimpleInflater(Nickname.NAME));
+
+            kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
+                    FLAGS_PERSON_NAME));
+
+            kind.defaultValues = new ContentValues();
+            kind.defaultValues.put(Nickname.TYPE, Nickname.TYPE_DEFAULT);
+
+            throwIfList(kind);
+            return Lists.newArrayList(kind);
+        }
+    }
+
+    private static class PhoneKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "phone";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    Phone.CONTENT_ITEM_TYPE, Phone.TYPE, R.string.phoneLabelsGroup, Weight.PHONE,
+                    new PhoneActionInflater(), new SimpleInflater(Phone.NUMBER));
+
+            kind.iconAltRes = R.drawable.quantum_ic_message_vd_theme_24;
+            kind.iconAltDescriptionRes = R.string.sms;
+            kind.actionAltHeader = new PhoneActionAltInflater();
+
+            kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
+
+            return Lists.newArrayList(kind);
+        }
+
+        /** Just to avoid line-wrapping... */
+        protected static EditType build(int type, boolean secondary) {
+            return new EditType(type, Phone.getTypeLabelResource(type)).setSecondary(secondary);
+        }
+
+        @Override
+        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+            if ("home".equals(type)) return build(Phone.TYPE_HOME, false);
+            if ("mobile".equals(type)) return build(Phone.TYPE_MOBILE, false);
+            if ("work".equals(type)) return build(Phone.TYPE_WORK, false);
+            if ("fax_work".equals(type)) return build(Phone.TYPE_FAX_WORK, true);
+            if ("fax_home".equals(type)) return build(Phone.TYPE_FAX_HOME, true);
+            if ("pager".equals(type)) return build(Phone.TYPE_PAGER, true);
+            if ("other".equals(type)) return build(Phone.TYPE_OTHER, false);
+            if ("callback".equals(type)) return build(Phone.TYPE_CALLBACK, true);
+            if ("car".equals(type)) return build(Phone.TYPE_CAR, true);
+            if ("company_main".equals(type)) return build(Phone.TYPE_COMPANY_MAIN, true);
+            if ("isdn".equals(type)) return build(Phone.TYPE_ISDN, true);
+            if ("main".equals(type)) return build(Phone.TYPE_MAIN, true);
+            if ("other_fax".equals(type)) return build(Phone.TYPE_OTHER_FAX, true);
+            if ("radio".equals(type)) return build(Phone.TYPE_RADIO, true);
+            if ("telex".equals(type)) return build(Phone.TYPE_TELEX, true);
+            if ("tty_tdd".equals(type)) return build(Phone.TYPE_TTY_TDD, true);
+            if ("work_mobile".equals(type)) return build(Phone.TYPE_WORK_MOBILE, true);
+            if ("work_pager".equals(type)) return build(Phone.TYPE_WORK_PAGER, true);
+
+            // Note "assistant" used to be a custom column for the fallback type, but not anymore.
+            if ("assistant".equals(type)) return build(Phone.TYPE_ASSISTANT, true);
+            if ("mms".equals(type)) return build(Phone.TYPE_MMS, true);
+            if ("custom".equals(type)) {
+                return build(Phone.TYPE_CUSTOM, true).setCustomColumn(Phone.LABEL);
+            }
+            return null;
+        }
+    }
+
+    private static class EmailKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "email";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    Email.CONTENT_ITEM_TYPE, Email.TYPE, R.string.emailLabelsGroup, Weight.EMAIL,
+                    new EmailActionInflater(), new SimpleInflater(Email.DATA));
+            kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
+
+            return Lists.newArrayList(kind);
+        }
+
+        @Override
+        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+            // EditType is mutable, so we need to create a new instance every time.
+            if ("home".equals(type)) return buildEmailType(Email.TYPE_HOME);
+            if ("work".equals(type)) return buildEmailType(Email.TYPE_WORK);
+            if ("other".equals(type)) return buildEmailType(Email.TYPE_OTHER);
+            if ("mobile".equals(type)) return buildEmailType(Email.TYPE_MOBILE);
+            if ("custom".equals(type)) {
+                return buildEmailType(Email.TYPE_CUSTOM)
+                        .setSecondary(true).setCustomColumn(Email.LABEL);
+            }
+            return null;
+        }
+    }
+
+    private static class StructuredPostalKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "postal";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    StructuredPostal.CONTENT_ITEM_TYPE, StructuredPostal.TYPE,
+                    R.string.postalLabelsGroup, Weight.STRUCTURED_POSTAL,
+                    new PostalActionInflater(),
+                    new SimpleInflater(StructuredPostal.FORMATTED_ADDRESS));
+
+            if (getAttr(attrs, "needsStructured", false)) {
+                if (Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage())) {
+                    // Japanese order
+                    kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+                            R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+                    kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+                            R.string.postal_postcode, FLAGS_POSTAL));
+                    kind.fieldList.add(new EditField(StructuredPostal.REGION,
+                            R.string.postal_region, FLAGS_POSTAL));
+                    kind.fieldList.add(new EditField(StructuredPostal.CITY,
+                            R.string.postal_city,FLAGS_POSTAL));
+                    kind.fieldList.add(new EditField(StructuredPostal.STREET,
+                            R.string.postal_street, FLAGS_POSTAL));
+                } else {
+                    // Generic order
+                    kind.fieldList.add(new EditField(StructuredPostal.STREET,
+                            R.string.postal_street, FLAGS_POSTAL));
+                    kind.fieldList.add(new EditField(StructuredPostal.CITY,
+                            R.string.postal_city,FLAGS_POSTAL));
+                    kind.fieldList.add(new EditField(StructuredPostal.REGION,
+                            R.string.postal_region, FLAGS_POSTAL));
+                    kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+                            R.string.postal_postcode, FLAGS_POSTAL));
+                    kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+                            R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+                }
+            } else {
+                kind.maxLinesForDisplay= MAX_LINES_FOR_POSTAL_ADDRESS;
+                kind.fieldList.add(
+                        new EditField(StructuredPostal.FORMATTED_ADDRESS, R.string.postal_address,
+                                FLAGS_POSTAL));
+            }
+
+            return Lists.newArrayList(kind);
+        }
+
+        @Override
+        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+            // EditType is mutable, so we need to create a new instance every time.
+            if ("home".equals(type)) return buildPostalType(StructuredPostal.TYPE_HOME);
+            if ("work".equals(type)) return buildPostalType(StructuredPostal.TYPE_WORK);
+            if ("other".equals(type)) return buildPostalType(StructuredPostal.TYPE_OTHER);
+            if ("custom".equals(type)) {
+                return buildPostalType(StructuredPostal.TYPE_CUSTOM)
+                        .setSecondary(true).setCustomColumn(Email.LABEL);
+            }
+            return null;
+        }
+    }
+
+    private static class ImKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "im";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+
+            // IM is special:
+            // - It uses "protocol" as the custom label field
+            // - Its TYPE is fixed to TYPE_OTHER
+
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    Im.CONTENT_ITEM_TYPE, Im.PROTOCOL, R.string.imLabelsGroup, Weight.IM,
+                    new ImActionInflater(), new SimpleInflater(Im.DATA) // header / action
+                    );
+            kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
+
+            kind.defaultValues = new ContentValues();
+            kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
+
+            return Lists.newArrayList(kind);
+        }
+
+        @Override
+        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+            if ("aim".equals(type)) return buildImType(Im.PROTOCOL_AIM);
+            if ("msn".equals(type)) return buildImType(Im.PROTOCOL_MSN);
+            if ("yahoo".equals(type)) return buildImType(Im.PROTOCOL_YAHOO);
+            if ("skype".equals(type)) return buildImType(Im.PROTOCOL_SKYPE);
+            if ("qq".equals(type)) return buildImType(Im.PROTOCOL_QQ);
+            if ("google_talk".equals(type)) return buildImType(Im.PROTOCOL_GOOGLE_TALK);
+            if ("icq".equals(type)) return buildImType(Im.PROTOCOL_ICQ);
+            if ("jabber".equals(type)) return buildImType(Im.PROTOCOL_JABBER);
+            if ("custom".equals(type)) {
+                return buildImType(Im.PROTOCOL_CUSTOM).setSecondary(true)
+                        .setCustomColumn(Im.CUSTOM_PROTOCOL);
+            }
+            return null;
+        }
+    }
+
+    private static class OrganizationKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "organization";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    Organization.CONTENT_ITEM_TYPE, null, R.string.organizationLabelsGroup,
+                    Weight.ORGANIZATION,
+                    new SimpleInflater(R.string.organizationLabelsGroup),
+                    ORGANIZATION_BODY_INFLATER);
+
+            kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
+                    FLAGS_GENERIC_NAME));
+            kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
+                    FLAGS_GENERIC_NAME));
+
+            throwIfList(kind);
+
+            return Lists.newArrayList(kind);
+        }
+    }
+
+    private static class PhotoKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "photo";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    Photo.CONTENT_ITEM_TYPE, null /* no type */, Weight.NONE, -1,
+                    null, null // no header, no body
+                    );
+
+            kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
+
+            throwIfList(kind);
+
+            return Lists.newArrayList(kind);
+        }
+    }
+
+    private static class NoteKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "note";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    Note.CONTENT_ITEM_TYPE, null, R.string.label_notes, Weight.NOTE,
+                    new SimpleInflater(R.string.label_notes), new SimpleInflater(Note.NOTE));
+
+            kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
+            kind.maxLinesForDisplay = MAX_LINES_FOR_NOTE;
+
+            throwIfList(kind);
+
+            return Lists.newArrayList(kind);
+        }
+    }
+
+    private static class WebsiteKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "website";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    Website.CONTENT_ITEM_TYPE, null, R.string.websiteLabelsGroup, Weight.WEBSITE,
+                    new SimpleInflater(R.string.websiteLabelsGroup),
+                    new SimpleInflater(Website.URL));
+
+            kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup,
+                    FLAGS_WEBSITE));
+
+            kind.defaultValues = new ContentValues();
+            kind.defaultValues.put(Website.TYPE, Website.TYPE_OTHER);
+
+            return Lists.newArrayList(kind);
+        }
+    }
+
+    private static class SipAddressKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "sip_address";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    SipAddress.CONTENT_ITEM_TYPE, null, R.string.label_sip_address,
+                    Weight.SIP_ADDRESS,
+                    new SimpleInflater(R.string.label_sip_address),
+                    new SimpleInflater(SipAddress.SIP_ADDRESS));
+
+            kind.fieldList.add(new EditField(SipAddress.SIP_ADDRESS,
+                    R.string.label_sip_address, FLAGS_SIP_ADDRESS));
+
+            throwIfList(kind);
+
+            return Lists.newArrayList(kind);
+        }
+    }
+
+    private static class GroupMembershipKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "group_membership";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    GroupMembership.CONTENT_ITEM_TYPE, null,
+                    R.string.groupsLabel, Weight.GROUP_MEMBERSHIP, null, null);
+
+            kind.fieldList.add(new EditField(GroupMembership.GROUP_ROW_ID, -1, -1));
+            kind.maxLinesForDisplay = MAX_LINES_FOR_GROUP;
+
+            throwIfList(kind);
+
+            return Lists.newArrayList(kind);
+        }
+    }
+
+    /**
+     * Event DataKind parser.
+     *
+     * Event DataKind is used only for Google/Exchange types, so this parser is not used for now.
+     */
+    private static class EventKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "event";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    Event.CONTENT_ITEM_TYPE, Event.TYPE, R.string.eventLabelsGroup, Weight.EVENT,
+                    new EventActionInflater(), new SimpleInflater(Event.START_DATE));
+
+            kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
+
+            if (getAttr(attrs, Attr.DATE_WITH_TIME, false)) {
+                kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_AND_TIME_FORMAT;
+                kind.dateFormatWithYear = CommonDateUtils.DATE_AND_TIME_FORMAT;
+            } else {
+                kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_FORMAT;
+                kind.dateFormatWithYear = CommonDateUtils.FULL_DATE_FORMAT;
+            }
+
+            return Lists.newArrayList(kind);
+        }
+
+        @Override
+        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+            final boolean yo = getAttr(attrs, Attr.YEAR_OPTIONAL, false);
+
+            if ("birthday".equals(type)) {
+                return buildEventType(Event.TYPE_BIRTHDAY, yo).setSpecificMax(1);
+            }
+            if ("anniversary".equals(type)) return buildEventType(Event.TYPE_ANNIVERSARY, yo);
+            if ("other".equals(type)) return buildEventType(Event.TYPE_OTHER, yo);
+            if ("custom".equals(type)) {
+                return buildEventType(Event.TYPE_CUSTOM, yo)
+                        .setSecondary(true).setCustomColumn(Event.LABEL);
+            }
+            return null;
+        }
+    }
+
+    /**
+     * Relationship DataKind parser.
+     *
+     * Relationship DataKind is used only for Google/Exchange types, so this parser is not used for
+     * now.
+     */
+    private static class RelationshipKindBuilder extends KindBuilder {
+        @Override
+        public String getTagName() {
+            return "relationship";
+        }
+
+        @Override
+        public List<DataKind> parseDataKind(Context context, XmlPullParser parser,
+                AttributeSet attrs) throws DefinitionException, XmlPullParserException,
+                IOException {
+            final DataKind kind = newDataKind(context, parser, attrs, false,
+                    Relation.CONTENT_ITEM_TYPE, Relation.TYPE,
+                    R.string.relationLabelsGroup, Weight.RELATIONSHIP,
+                    new RelationActionInflater(), new SimpleInflater(Relation.NAME));
+
+            kind.fieldList.add(new EditField(Relation.DATA, R.string.relationLabelsGroup,
+                    FLAGS_RELATION));
+
+            kind.defaultValues = new ContentValues();
+            kind.defaultValues.put(Relation.TYPE, Relation.TYPE_SPOUSE);
+
+            return Lists.newArrayList(kind);
+        }
+
+        @Override
+        protected EditType buildEditTypeForTypeTag(AttributeSet attrs, String type) {
+            // EditType is mutable, so we need to create a new instance every time.
+            if ("assistant".equals(type)) return buildRelationType(Relation.TYPE_ASSISTANT);
+            if ("brother".equals(type)) return buildRelationType(Relation.TYPE_BROTHER);
+            if ("child".equals(type)) return buildRelationType(Relation.TYPE_CHILD);
+            if ("domestic_partner".equals(type)) {
+                    return buildRelationType(Relation.TYPE_DOMESTIC_PARTNER);
+            }
+            if ("father".equals(type)) return buildRelationType(Relation.TYPE_FATHER);
+            if ("friend".equals(type)) return buildRelationType(Relation.TYPE_FRIEND);
+            if ("manager".equals(type)) return buildRelationType(Relation.TYPE_MANAGER);
+            if ("mother".equals(type)) return buildRelationType(Relation.TYPE_MOTHER);
+            if ("parent".equals(type)) return buildRelationType(Relation.TYPE_PARENT);
+            if ("partner".equals(type)) return buildRelationType(Relation.TYPE_PARTNER);
+            if ("referred_by".equals(type)) return buildRelationType(Relation.TYPE_REFERRED_BY);
+            if ("relative".equals(type)) return buildRelationType(Relation.TYPE_RELATIVE);
+            if ("sister".equals(type)) return buildRelationType(Relation.TYPE_SISTER);
+            if ("spouse".equals(type)) return buildRelationType(Relation.TYPE_SPOUSE);
+            if ("custom".equals(type)) {
+                return buildRelationType(Relation.TYPE_CUSTOM).setSecondary(true)
+                        .setCustomColumn(Relation.LABEL);
+            }
+            return null;
+        }
+    }
+}
diff --git a/src/com/android/contacts/model/account/DeviceLocalAccountType.java b/src/com/android/contacts/model/account/DeviceLocalAccountType.java
new file mode 100644
index 0000000..c6c7d07
--- /dev/null
+++ b/src/com/android/contacts/model/account/DeviceLocalAccountType.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model.account;
+
+import android.content.Context;
+
+public class DeviceLocalAccountType extends FallbackAccountType {
+
+    private final boolean mGroupsEditable;
+
+    public DeviceLocalAccountType(Context context, boolean groupsEditable) {
+        super(context);
+        mGroupsEditable = groupsEditable;
+    }
+
+    public DeviceLocalAccountType(Context context) {
+        this(context, false);
+    }
+
+    @Override
+    public boolean isGroupMembershipEditable() {
+        return mGroupsEditable;
+    }
+
+    @Override
+    public AccountInfo wrapAccount(Context context, AccountWithDataSet account) {
+        // Use the "Device" type label for the name as well because on OEM phones the "name" is
+        // not always user-friendly
+        return new AccountInfo(
+                new AccountDisplayInfo(account, getDisplayLabel(context), getDisplayLabel(context),
+                        getDisplayIcon(context), true), this);
+    }
+}
diff --git a/src/com/android/contacts/model/account/ExchangeAccountType.java b/src/com/android/contacts/model/account/ExchangeAccountType.java
new file mode 100644
index 0000000..bd79852
--- /dev/null
+++ b/src/com/android/contacts/model/account/ExchangeAccountType.java
@@ -0,0 +1,318 @@
+/*
+ * 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.model.account;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contactsbind.FeedbackHelper;
+
+import com.google.common.collect.Lists;
+
+import java.util.Locale;
+
+public class ExchangeAccountType extends BaseAccountType {
+    private static final String TAG = "ExchangeAccountType";
+
+    private static final String ACCOUNT_TYPE_AOSP = "com.android.exchange";
+    private static final String ACCOUNT_TYPE_GOOGLE_1 = "com.google.android.exchange";
+    private static final String ACCOUNT_TYPE_GOOGLE_2 = "com.google.android.gm.exchange";
+
+    public ExchangeAccountType(Context context, String authenticatorPackageName, String type) {
+        this.accountType = type;
+        this.resourcePackageName = null;
+        this.syncAdapterPackageName = authenticatorPackageName;
+
+        try {
+            addDataKindStructuredName(context);
+            addDataKindName(context);
+            addDataKindPhoneticName(context);
+            addDataKindNickname(context);
+            addDataKindPhone(context);
+            addDataKindEmail(context);
+            addDataKindStructuredPostal(context);
+            addDataKindIm(context);
+            addDataKindOrganization(context);
+            addDataKindPhoto(context);
+            addDataKindNote(context);
+            addDataKindEvent(context);
+            addDataKindWebsite(context);
+            addDataKindGroupMembership(context);
+
+            mIsInitialized = true;
+        } catch (DefinitionException e) {
+            // TODO: Change this to fail fast if there are no feedback reports
+            FeedbackHelper.sendFeedback(context, TAG, "Failed to build exchange account type", e);
+        }
+    }
+
+    public static boolean isExchangeType(String type) {
+        return ACCOUNT_TYPE_AOSP.equals(type) || ACCOUNT_TYPE_GOOGLE_1.equals(type)
+                || ACCOUNT_TYPE_GOOGLE_2.equals(type);
+    }
+
+    @Override
+    protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
+                R.string.nameLabelsGroup, Weight.NONE, true));
+        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+        kind.actionBody = new SimpleInflater(Nickname.NAME);
+
+        kind.typeOverallMax = 1;
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(StructuredName.PREFIX, R.string.name_prefix,
+                FLAGS_PERSON_NAME).setOptional(true));
+        kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME,
+                R.string.name_family, FLAGS_PERSON_NAME));
+        kind.fieldList.add(new EditField(StructuredName.MIDDLE_NAME,
+                R.string.name_middle, FLAGS_PERSON_NAME));
+        kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME,
+                R.string.name_given, FLAGS_PERSON_NAME));
+        kind.fieldList.add(new EditField(StructuredName.SUFFIX,
+                R.string.name_suffix, FLAGS_PERSON_NAME));
+
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+                R.string.name_phonetic_family, FLAGS_PHONETIC));
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+                R.string.name_phonetic_given, FLAGS_PHONETIC));
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindPhoneticName(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
+                R.string.name_phonetic, Weight.NONE, true));
+        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+        kind.actionBody = new SimpleInflater(Nickname.NAME);
+
+        kind.typeOverallMax = 1;
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_FAMILY_NAME,
+                R.string.name_phonetic_family, FLAGS_PHONETIC));
+        kind.fieldList.add(new EditField(StructuredName.PHONETIC_GIVEN_NAME,
+                R.string.name_phonetic_given, FLAGS_PHONETIC));
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindNickname(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindNickname(context);
+
+        kind.typeOverallMax = 1;
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
+                FLAGS_PERSON_NAME));
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindPhone(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindPhone(context);
+
+        kind.typeColumn = Phone.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE).setSpecificMax(1));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_HOME).setSpecificMax(2));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK).setSpecificMax(2));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true)
+                .setSpecificMax(1));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true)
+                .setSpecificMax(1));
+        kind.typeList
+                .add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true).setSpecificMax(1));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_CAR).setSecondary(true).setSpecificMax(1));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_COMPANY_MAIN).setSecondary(true)
+                .setSpecificMax(1));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_MMS).setSecondary(true).setSpecificMax(1));
+        kind.typeList
+                .add(buildPhoneType(Phone.TYPE_RADIO).setSecondary(true).setSpecificMax(1));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_ASSISTANT).setSecondary(true)
+                .setSpecificMax(1));
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindEmail(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindEmail(context);
+
+        kind.typeOverallMax = 3;
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindStructuredPostal(context);
+
+        final boolean useJapaneseOrder =
+            Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
+        kind.typeColumn = StructuredPostal.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_WORK).setSpecificMax(1));
+        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME).setSpecificMax(1));
+        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER).setSpecificMax(1));
+
+        kind.fieldList = Lists.newArrayList();
+        if (useJapaneseOrder) {
+            kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+                    R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+            kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+                    R.string.postal_postcode, FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.REGION,
+                    R.string.postal_region, FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.CITY,
+                    R.string.postal_city,FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.STREET,
+                    R.string.postal_street, FLAGS_POSTAL));
+        } else {
+            kind.fieldList.add(new EditField(StructuredPostal.STREET,
+                    R.string.postal_street, FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.CITY,
+                    R.string.postal_city,FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.REGION,
+                    R.string.postal_region, FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+                    R.string.postal_postcode, FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+                    R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+        }
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindIm(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindIm(context);
+
+        // Types are not supported for IM. There can be 3 IMs, but OWA only shows only the first
+        kind.typeOverallMax = 3;
+
+        kind.defaultValues = new ContentValues();
+        kind.defaultValues.put(Im.TYPE, Im.TYPE_OTHER);
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Im.DATA, R.string.imLabelsGroup, FLAGS_EMAIL));
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindOrganization(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindOrganization(context);
+
+        kind.typeOverallMax = 1;
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Organization.COMPANY, R.string.ghostData_company,
+                FLAGS_GENERIC_NAME));
+        kind.fieldList.add(new EditField(Organization.TITLE, R.string.ghostData_title,
+                FLAGS_GENERIC_NAME));
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindPhoto(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindPhoto(context);
+
+        kind.typeOverallMax = 1;
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Photo.PHOTO, -1, -1));
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindNote(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindNote(context);
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
+
+        return kind;
+    }
+
+    protected DataKind addDataKindEvent(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE, R.string.eventLabelsGroup,
+                Weight.EVENT, true));
+        kind.actionHeader = new EventActionInflater();
+        kind.actionBody = new SimpleInflater(Event.START_DATE);
+
+        kind.typeOverallMax = 1;
+
+        kind.typeColumn = Event.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, false).setSpecificMax(1));
+
+        kind.dateFormatWithYear = CommonDateUtils.DATE_AND_TIME_FORMAT;
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindWebsite(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindWebsite(context);
+
+        kind.typeOverallMax = 1;
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup, FLAGS_WEBSITE));
+
+        return kind;
+    }
+
+    @Override
+    public boolean isGroupMembershipEditable() {
+        return true;
+    }
+
+    @Override
+    public boolean areContactsWritable() {
+        return true;
+    }
+}
diff --git a/src/com/android/contacts/model/account/ExternalAccountType.java b/src/com/android/contacts/model/account/ExternalAccountType.java
new file mode 100644
index 0000000..c914c74
--- /dev/null
+++ b/src/com/android/contacts/model/account/ExternalAccountType.java
@@ -0,0 +1,450 @@
+/*
+ * 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.model.account;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+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.util.Xml;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contactsbind.FeedbackHelper;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A general contacts account type descriptor.
+ */
+public class ExternalAccountType extends BaseAccountType {
+    private static final String TAG = "ExternalAccountType";
+
+    private static final String SYNC_META_DATA = "android.content.SyncAdapter";
+
+    /**
+     * The metadata name for so-called "contacts.xml".
+     *
+     * On LMP and later, we also accept the "alternate" name.
+     * This is to allow sync adapters to have a contacts.xml without making it visible on older
+     * platforms. If you modify this also update the corresponding list in
+     * ContactsProvider/PhotoPriorityResolver
+     */
+    private static final String[] METADATA_CONTACTS_NAMES = new String[] {
+            "android.provider.ALTERNATE_CONTACTS_STRUCTURE",
+            "android.provider.CONTACTS_STRUCTURE"
+    };
+
+    private static final String TAG_CONTACTS_SOURCE_LEGACY = "ContactsSource";
+    private static final String TAG_CONTACTS_ACCOUNT_TYPE = "ContactsAccountType";
+    private static final String TAG_CONTACTS_DATA_KIND = "ContactsDataKind";
+    private static final String TAG_EDIT_SCHEMA = "EditSchema";
+
+    private static final String ATTR_INVITE_CONTACT_ACTIVITY = "inviteContactActivity";
+    private static final String ATTR_INVITE_CONTACT_ACTION_LABEL = "inviteContactActionLabel";
+    private static final String ATTR_VIEW_CONTACT_NOTIFY_SERVICE = "viewContactNotifyService";
+    private static final String ATTR_VIEW_GROUP_ACTIVITY = "viewGroupActivity";
+    private static final String ATTR_VIEW_GROUP_ACTION_LABEL = "viewGroupActionLabel";
+    private static final String ATTR_DATA_SET = "dataSet";
+    private static final String ATTR_EXTENSION_PACKAGE_NAMES = "extensionPackageNames";
+
+    // The following attributes should only be set in non-sync-adapter account types.  They allow
+    // for the account type and resource IDs to be specified without an associated authenticator.
+    private static final String ATTR_ACCOUNT_TYPE = "accountType";
+    private static final String ATTR_ACCOUNT_LABEL = "accountTypeLabel";
+    private static final String ATTR_ACCOUNT_ICON = "accountTypeIcon";
+
+    private final boolean mIsExtension;
+
+    private String mInviteContactActivity;
+    private String mInviteActionLabelAttribute;
+    private int mInviteActionLabelResId;
+    private String mViewContactNotifyService;
+    private String mViewGroupActivity;
+    private String mViewGroupLabelAttribute;
+    private int mViewGroupLabelResId;
+    private List<String> mExtensionPackageNames;
+    private String mAccountTypeLabelAttribute;
+    private String mAccountTypeIconAttribute;
+    private boolean mHasContactsMetadata;
+    private boolean mHasEditSchema;
+    private boolean mGroupMembershipEditable;
+
+    public ExternalAccountType(Context context, String resPackageName, boolean isExtension) {
+        this(context, resPackageName, isExtension, null);
+    }
+
+    /**
+     * Constructor used for testing to initialize with any arbitrary XML.
+     *
+     * @param injectedMetadata If non-null, it'll be used to initialize the type.  Only set by
+     *     tests.  If null, the metadata is loaded from the specified package.
+     */
+    ExternalAccountType(Context context, String packageName, boolean isExtension,
+            XmlResourceParser injectedMetadata) {
+        this.mIsExtension = isExtension;
+        this.resourcePackageName = packageName;
+        this.syncAdapterPackageName = packageName;
+
+        final XmlResourceParser parser;
+        if (injectedMetadata == null) {
+            parser = loadContactsXml(context, packageName);
+        } else {
+            parser = injectedMetadata;
+        }
+        boolean needLineNumberInErrorLog = true;
+        try {
+            if (parser != null) {
+                inflate(context, parser);
+            }
+
+            // Done parsing; line number no longer needed in error log.
+            needLineNumberInErrorLog = false;
+            if (mHasEditSchema) {
+                checkKindExists(StructuredName.CONTENT_ITEM_TYPE);
+                checkKindExists(DataKind.PSEUDO_MIME_TYPE_NAME);
+                checkKindExists(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME);
+                checkKindExists(Photo.CONTENT_ITEM_TYPE);
+            } else {
+                // Bring in name and photo from fallback source, which are non-optional
+                addDataKindStructuredName(context);
+                addDataKindName(context);
+                addDataKindPhoneticName(context);
+                addDataKindPhoto(context);
+            }
+        } catch (DefinitionException e) {
+            final StringBuilder error = new StringBuilder();
+            error.append("Problem reading XML");
+            if (needLineNumberInErrorLog && (parser != null)) {
+                error.append(" in line ");
+                error.append(parser.getLineNumber());
+            }
+            error.append(" for external package ");
+            error.append(packageName);
+            // Only send feedback if not from tests. There are tests that expect failures so no need
+            // to report those.
+            if (injectedMetadata == null) {
+                FeedbackHelper.sendFeedback(context, TAG, "Failed to build external account type",
+                        e);
+            }
+            return;
+        } finally {
+            if (parser != null) {
+                parser.close();
+            }
+        }
+
+        mExtensionPackageNames = new ArrayList<String>();
+        mInviteActionLabelResId = resolveExternalResId(context, mInviteActionLabelAttribute,
+                syncAdapterPackageName, ATTR_INVITE_CONTACT_ACTION_LABEL);
+        mViewGroupLabelResId = resolveExternalResId(context, mViewGroupLabelAttribute,
+                syncAdapterPackageName, ATTR_VIEW_GROUP_ACTION_LABEL);
+        titleRes = resolveExternalResId(context, mAccountTypeLabelAttribute,
+                syncAdapterPackageName, ATTR_ACCOUNT_LABEL);
+        iconRes = resolveExternalResId(context, mAccountTypeIconAttribute,
+                syncAdapterPackageName, ATTR_ACCOUNT_ICON);
+
+        final DataKind dataKind = getKindForMimetype(GroupMembership.CONTENT_ITEM_TYPE);
+        mGroupMembershipEditable = dataKind != null && dataKind.editable;
+
+        // If we reach this point, the account type has been successfully initialized.
+        mIsInitialized = true;
+    }
+
+    /**
+     * Returns the CONTACTS_STRUCTURE metadata (aka "contacts.xml") in the given apk package.
+     *
+     * This method looks through all services in the package that handle sync adapter
+     * intents for the first one that contains CONTACTS_STRUCTURE metadata. We have to look
+     * through all sync adapters in the package in case there are contacts and other sync
+     * adapters (eg, calendar) in the same package.
+     *
+     * Returns {@code null} if the package has no CONTACTS_STRUCTURE metadata.  In this case
+     * the account type *will* be initialized with minimal configuration.
+     */
+    public static XmlResourceParser loadContactsXml(Context context, String resPackageName) {
+        final PackageManager pm = context.getPackageManager();
+        final Intent intent = new Intent(SYNC_META_DATA).setPackage(resPackageName);
+        final List<ResolveInfo> intentServices = pm.queryIntentServices(intent,
+                PackageManager.GET_SERVICES | PackageManager.GET_META_DATA);
+
+        if (intentServices != null) {
+            for (final ResolveInfo resolveInfo : intentServices) {
+                final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
+                if (serviceInfo == null) {
+                    continue;
+                }
+                for (String metadataName : METADATA_CONTACTS_NAMES) {
+                    final XmlResourceParser parser = serviceInfo.loadXmlMetaData(
+                            pm, metadataName);
+                    if (parser != null) {
+                        if (Log.isLoggable(TAG, Log.DEBUG)) {
+                            Log.d(TAG, String.format("Metadata loaded from: %s, %s, %s",
+                                    serviceInfo.packageName, serviceInfo.name,
+                                    metadataName));
+                        }
+                        return parser;
+                    }
+                }
+            }
+        }
+
+        // Package was found, but that doesn't contain the CONTACTS_STRUCTURE metadata.
+        return null;
+    }
+
+    /**
+     * Returns {@code TRUE} if the package contains CONTACTS_STRUCTURE metadata.
+     */
+    public static boolean hasContactsXml(Context context, String resPackageName) {
+        return loadContactsXml(context, resPackageName) != null;
+    }
+
+    private void checkKindExists(String mimeType) throws DefinitionException {
+        if (getKindForMimetype(mimeType) == null) {
+            throw new DefinitionException(mimeType + " must be supported");
+        }
+    }
+
+    @Override
+    public boolean isEmbedded() {
+        return false;
+    }
+
+    @Override
+    public boolean isExtension() {
+        return mIsExtension;
+    }
+
+    @Override
+    public boolean areContactsWritable() {
+        return mHasEditSchema;
+    }
+
+    /**
+     * Whether this account type has the android.provider.CONTACTS_STRUCTURE metadata xml.
+     */
+    public boolean hasContactsMetadata() {
+        return mHasContactsMetadata;
+    }
+
+    @Override
+    public String getInviteContactActivityClassName() {
+        return mInviteContactActivity;
+    }
+
+    @Override
+    protected int getInviteContactActionResId() {
+        return mInviteActionLabelResId;
+    }
+
+    @Override
+    public String getViewContactNotifyServiceClassName() {
+        return mViewContactNotifyService;
+    }
+
+    @Override
+    public String getViewGroupActivity() {
+        return mViewGroupActivity;
+    }
+
+    @Override
+    protected int getViewGroupLabelResId() {
+        return mViewGroupLabelResId;
+    }
+
+    @Override
+    public List<String> getExtensionPackageNames() {
+        return mExtensionPackageNames;
+    }
+
+    @Override
+    public boolean isGroupMembershipEditable() {
+        return mGroupMembershipEditable;
+    }
+
+    /**
+     * Inflate this {@link AccountType} from the given parser. This may only
+     * load details matching the publicly-defined schema.
+     */
+    protected void inflate(Context context, XmlPullParser parser) throws DefinitionException {
+        final AttributeSet attrs = Xml.asAttributeSet(parser);
+
+        try {
+            int type;
+            while ((type = parser.next()) != XmlPullParser.START_TAG
+                    && type != XmlPullParser.END_DOCUMENT) {
+                // Drain comments and whitespace
+            }
+
+            if (type != XmlPullParser.START_TAG) {
+                throw new IllegalStateException("No start tag found");
+            }
+
+            String rootTag = parser.getName();
+            if (!TAG_CONTACTS_ACCOUNT_TYPE.equals(rootTag) &&
+                    !TAG_CONTACTS_SOURCE_LEGACY.equals(rootTag)) {
+                throw new IllegalStateException("Top level element must be "
+                        + TAG_CONTACTS_ACCOUNT_TYPE + ", not " + rootTag);
+            }
+
+            mHasContactsMetadata = true;
+
+            int attributeCount = parser.getAttributeCount();
+            for (int i = 0; i < attributeCount; i++) {
+                String attr = parser.getAttributeName(i);
+                String value = parser.getAttributeValue(i);
+                if (Log.isLoggable(TAG, Log.DEBUG)) {
+                    Log.d(TAG, attr + "=" + value);
+                }
+                if (ATTR_INVITE_CONTACT_ACTIVITY.equals(attr)) {
+                    mInviteContactActivity = value;
+                } else if (ATTR_INVITE_CONTACT_ACTION_LABEL.equals(attr)) {
+                    mInviteActionLabelAttribute = value;
+                } else if (ATTR_VIEW_CONTACT_NOTIFY_SERVICE.equals(attr)) {
+                    mViewContactNotifyService = value;
+                } else if (ATTR_VIEW_GROUP_ACTIVITY.equals(attr)) {
+                    mViewGroupActivity = value;
+                } else if (ATTR_VIEW_GROUP_ACTION_LABEL.equals(attr)) {
+                    mViewGroupLabelAttribute = value;
+                } else if (ATTR_DATA_SET.equals(attr)) {
+                    dataSet = value;
+                } else if (ATTR_EXTENSION_PACKAGE_NAMES.equals(attr)) {
+                    mExtensionPackageNames.add(value);
+                } else if (ATTR_ACCOUNT_TYPE.equals(attr)) {
+                    accountType = value;
+                } else if (ATTR_ACCOUNT_LABEL.equals(attr)) {
+                    mAccountTypeLabelAttribute = value;
+                } else if (ATTR_ACCOUNT_ICON.equals(attr)) {
+                    mAccountTypeIconAttribute = value;
+                } else if (Log.isLoggable(TAG, Log.WARN)) {
+                    Log.w(TAG, "Unsupported attribute " + attr);
+                }
+            }
+
+            // Parse all children kinds
+            final int startDepth = parser.getDepth();
+            while (((type = parser.next()) != XmlPullParser.END_TAG
+                        || parser.getDepth() > startDepth)
+                    && type != XmlPullParser.END_DOCUMENT) {
+
+                if (type != XmlPullParser.START_TAG || parser.getDepth() != startDepth + 1) {
+                    continue; // Not a direct child tag
+                }
+
+                String tag = parser.getName();
+                if (TAG_EDIT_SCHEMA.equals(tag)) {
+                    mHasEditSchema = true;
+                    parseEditSchema(context, parser, attrs);
+                } else if (TAG_CONTACTS_DATA_KIND.equals(tag)) {
+                    final TypedArray a = context.obtainStyledAttributes(attrs,
+                            R.styleable.ContactsDataKind);
+                    final DataKind kind = new DataKind();
+
+                    kind.mimeType = a
+                            .getString(R.styleable.ContactsDataKind_android_mimeType);
+                    final String summaryColumn = a.getString(
+                            R.styleable.ContactsDataKind_android_summaryColumn);
+                    if (summaryColumn != null) {
+                        // Inflate a specific column as summary when requested
+                        kind.actionHeader = new SimpleInflater(summaryColumn);
+                    }
+                    final String detailColumn = a.getString(
+                            R.styleable.ContactsDataKind_android_detailColumn);
+                    if (detailColumn != null) {
+                        // Inflate specific column as summary
+                        kind.actionBody = new SimpleInflater(detailColumn);
+                    }
+
+                    a.recycle();
+
+                    addKind(kind);
+                }
+            }
+        } catch (XmlPullParserException e) {
+            throw new DefinitionException("Problem reading XML", e);
+        } catch (IOException e) {
+            throw new DefinitionException("Problem reading XML", e);
+        }
+    }
+
+    /**
+     * Takes a string in the "@xxx/yyy" format and return the resource ID for the resource in
+     * the resource package.
+     *
+     * If the argument is in the invalid format or isn't a resource name, it returns -1.
+     *
+     * @param context context
+     * @param resourceName Resource name in the "@xxx/yyy" format, e.g. "@string/invite_lavbel"
+     * @param packageName name of the package containing the resource.
+     * @param xmlAttributeName attribute name which the resource came from.  Used for logging.
+     */
+    @VisibleForTesting
+    static int resolveExternalResId(Context context, String resourceName,
+            String packageName, String xmlAttributeName) {
+        if (TextUtils.isEmpty(resourceName)) {
+            return -1; // Empty text is okay.
+        }
+        if (resourceName.charAt(0) != '@') {
+            if (Log.isLoggable(TAG, Log.WARN) && !isFromTestApp(packageName)) {
+                Log.w(TAG, xmlAttributeName + " must be a resource name beginnig with '@'");
+            }
+            return -1;
+        }
+        final String name = resourceName.substring(1);
+        final Resources res;
+        try {
+             res = context.getPackageManager().getResourcesForApplication(packageName);
+        } catch (NameNotFoundException e) {
+            if (Log.isLoggable(TAG, Log.WARN) && !isFromTestApp(packageName)) {
+                Log.w(TAG, "Unable to load package " + packageName);
+            }
+            return -1;
+        }
+        final int resId = res.getIdentifier(name, null, packageName);
+        if (resId == 0) {
+            if (Log.isLoggable(TAG, Log.WARN) && !isFromTestApp(packageName)) {
+                Log.w(TAG, "Unable to load " + resourceName + " from package " + packageName);
+            }
+            return -1;
+        }
+        return resId;
+    }
+
+    @VisibleForTesting
+    static boolean isFromTestApp(String packageName) {
+        return TextUtils.equals(packageName, "com.google.android.contacts.tests");
+    }
+}
diff --git a/src/com/android/contacts/model/account/FallbackAccountType.java b/src/com/android/contacts/model/account/FallbackAccountType.java
new file mode 100644
index 0000000..f36f370
--- /dev/null
+++ b/src/com/android/contacts/model/account/FallbackAccountType.java
@@ -0,0 +1,95 @@
+/*
+ * 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.model.account;
+
+import android.accounts.AuthenticatorDescription;
+import android.content.Context;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
+import android.support.v4.content.ContextCompat;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contactsbind.FeedbackHelper;
+
+public class FallbackAccountType extends BaseAccountType {
+    private static final String TAG = "FallbackAccountType";
+
+    private FallbackAccountType(Context context, String resPackageName) {
+        this.accountType = null;
+        this.dataSet = null;
+        this.titleRes = R.string.account_phone;
+        this.iconRes = R.drawable.quantum_ic_smartphone_vd_theme_24;
+
+        // Note those are only set for unit tests.
+        this.resourcePackageName = resPackageName;
+        this.syncAdapterPackageName = resPackageName;
+
+        try {
+            addDataKindStructuredName(context);
+            addDataKindName(context);
+            addDataKindPhoneticName(context);
+            addDataKindNickname(context);
+            addDataKindPhone(context);
+            addDataKindEmail(context);
+            addDataKindStructuredPostal(context);
+            addDataKindIm(context);
+            addDataKindOrganization(context);
+            addDataKindPhoto(context);
+            addDataKindNote(context);
+            addDataKindWebsite(context);
+            addDataKindSipAddress(context);
+            addDataKindGroupMembership(context);
+
+            mIsInitialized = true;
+        } catch (DefinitionException e) {
+            FeedbackHelper.sendFeedback(context, TAG, "Failed to build fallback account type", e);
+        }
+    }
+
+    @Override
+    public Drawable getDisplayIcon(Context context) {
+        final Drawable icon = context.getResources().getDrawable(iconRes);
+        icon.mutate().setColorFilter(ContextCompat.getColor(context,
+                R.color.actionbar_icon_color_grey), PorterDuff.Mode.SRC_ATOP);
+        return icon;
+    }
+
+    public FallbackAccountType(Context context) {
+        this(context, null);
+    }
+
+    /**
+     * Used to compare with an {@link ExternalAccountType} built from a test contacts.xml.
+     * In order to build {@link DataKind}s with the same resource package name,
+     * {@code resPackageName} is injectable.
+     */
+    static AccountType createWithPackageNameForTest(Context context, String resPackageName) {
+        return new FallbackAccountType(context, resPackageName);
+    }
+
+    @Override
+    public void initializeFieldsFromAuthenticator(AuthenticatorDescription authenticator) {
+        // Do nothing. For "Device" accounts we want to just display them using our own strings
+        // and icons.
+    }
+
+    @Override
+    public boolean areContactsWritable() {
+        return true;
+    }
+}
diff --git a/src/com/android/contacts/model/account/GoogleAccountType.java b/src/com/android/contacts/model/account/GoogleAccountType.java
new file mode 100644
index 0000000..c7aac76
--- /dev/null
+++ b/src/com/android/contacts/model/account/GoogleAccountType.java
@@ -0,0 +1,206 @@
+/*
+ * 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.model.account;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contactsbind.FeedbackHelper;
+
+import com.google.common.collect.Lists;
+
+import java.util.List;
+
+public class GoogleAccountType extends BaseAccountType {
+    private static final String TAG = "GoogleAccountType";
+
+    /**
+     * The package name that we should load contacts.xml from and rely on to handle
+     * G+ account actions. Even though this points to gms, in some cases gms will still hand
+     * off responsibility to the G+ app.
+     */
+    public static final String PLUS_EXTENSION_PACKAGE_NAME = "com.google.android.gms";
+
+    public static final String ACCOUNT_TYPE = "com.google";
+
+    private static final List<String> mExtensionPackages =
+            Lists.newArrayList(PLUS_EXTENSION_PACKAGE_NAME);
+
+    public GoogleAccountType(Context context, String authenticatorPackageName) {
+        this.accountType = ACCOUNT_TYPE;
+        this.resourcePackageName = null;
+        this.syncAdapterPackageName = authenticatorPackageName;
+
+        try {
+            addDataKindStructuredName(context);
+            addDataKindName(context);
+            addDataKindPhoneticName(context);
+            addDataKindNickname(context);
+            addDataKindPhone(context);
+            addDataKindEmail(context);
+            addDataKindStructuredPostal(context);
+            addDataKindIm(context);
+            addDataKindOrganization(context);
+            addDataKindPhoto(context);
+            addDataKindNote(context);
+            addDataKindWebsite(context);
+            addDataKindSipAddress(context);
+            addDataKindGroupMembership(context);
+            addDataKindRelation(context);
+            addDataKindEvent(context);
+            addDataKindCustomField(context);
+
+            mIsInitialized = true;
+        } catch (DefinitionException e) {
+            FeedbackHelper.sendFeedback(context, TAG, "Failed to build google account type", e);
+        }
+    }
+
+    @Override
+    public List<String> getExtensionPackageNames() {
+        return mExtensionPackages;
+    }
+
+    @Override
+    protected DataKind addDataKindPhone(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindPhone(context);
+
+        kind.typeColumn = Phone.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_MAIN));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_CUSTOM).setSecondary(true)
+                .setCustomColumn(Phone.LABEL));
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindEmail(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindEmail(context);
+
+        kind.typeColumn = Email.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildEmailType(Email.TYPE_HOME));
+        kind.typeList.add(buildEmailType(Email.TYPE_WORK));
+        kind.typeList.add(buildEmailType(Email.TYPE_OTHER));
+        kind.typeList.add(buildEmailType(Email.TYPE_CUSTOM).setSecondary(true).setCustomColumn(
+                Email.LABEL));
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
+
+        return kind;
+    }
+
+    private DataKind addDataKindRelation(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Relation.CONTENT_ITEM_TYPE,
+                R.string.relationLabelsGroup, Weight.RELATIONSHIP, true));
+        kind.actionHeader = new RelationActionInflater();
+        kind.actionBody = new SimpleInflater(Relation.NAME);
+
+        kind.typeColumn = Relation.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildRelationType(Relation.TYPE_ASSISTANT));
+        kind.typeList.add(buildRelationType(Relation.TYPE_BROTHER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_CHILD));
+        kind.typeList.add(buildRelationType(Relation.TYPE_DOMESTIC_PARTNER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_FATHER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_FRIEND));
+        kind.typeList.add(buildRelationType(Relation.TYPE_MANAGER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_MOTHER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_PARENT));
+        kind.typeList.add(buildRelationType(Relation.TYPE_PARTNER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_REFERRED_BY));
+        kind.typeList.add(buildRelationType(Relation.TYPE_RELATIVE));
+        kind.typeList.add(buildRelationType(Relation.TYPE_SISTER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_SPOUSE));
+        kind.typeList.add(buildRelationType(Relation.TYPE_CUSTOM).setSecondary(true)
+                .setCustomColumn(Relation.LABEL));
+
+        kind.defaultValues = new ContentValues();
+        kind.defaultValues.put(Relation.TYPE, Relation.TYPE_SPOUSE);
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Relation.DATA, R.string.relationLabelsGroup,
+                FLAGS_RELATION));
+
+        return kind;
+    }
+
+    private DataKind addDataKindEvent(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE,
+                    R.string.eventLabelsGroup, Weight.EVENT, true));
+        kind.actionHeader = new EventActionInflater();
+        kind.actionBody = new SimpleInflater(Event.START_DATE);
+
+        kind.typeColumn = Event.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_FORMAT;
+        kind.dateFormatWithYear = CommonDateUtils.FULL_DATE_FORMAT;
+        kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, true).setSpecificMax(1));
+        kind.typeList.add(buildEventType(Event.TYPE_ANNIVERSARY, false));
+        kind.typeList.add(buildEventType(Event.TYPE_OTHER, false));
+        kind.typeList.add(buildEventType(Event.TYPE_CUSTOM, false).setSecondary(true)
+                .setCustomColumn(Event.LABEL));
+
+        kind.defaultValues = new ContentValues();
+        kind.defaultValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
+
+        return kind;
+    }
+
+    @Override
+    public boolean isGroupMembershipEditable() {
+        return true;
+    }
+
+    @Override
+    public boolean areContactsWritable() {
+        return true;
+    }
+
+    @Override
+    public String getViewContactNotifyServiceClassName() {
+        return "com.google.android.syncadapters.contacts." +
+                "SyncHighResPhotoIntentService";
+    }
+
+    @Override
+    public String getViewContactNotifyServicePackageName() {
+        return "com.google.android.syncadapters.contacts";
+    }
+}
diff --git a/src/com/android/contacts/model/account/SamsungAccountType.java b/src/com/android/contacts/model/account/SamsungAccountType.java
new file mode 100644
index 0000000..23c7940
--- /dev/null
+++ b/src/com/android/contacts/model/account/SamsungAccountType.java
@@ -0,0 +1,239 @@
+/*
+ * 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.model.account;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.util.CommonDateUtils;
+import com.android.contactsbind.FeedbackHelper;
+
+import com.google.common.collect.Lists;
+
+import java.util.Locale;
+
+/**
+ * A writable account type that can be used to support samsung contacts. This may not perfectly
+ * match Samsung's latest intended account schema.
+ *
+ * This is only used to partially support Samsung accounts. The DataKind labels & fields are
+ * setup to support the values used by Samsung. But, not everything in the Samsung account type is
+ * supported. The Samsung account type includes a "Message Type" mimetype that we have no intention
+ * of showing inside the Contact editor. Similarly, we don't handle the "Ringtone" mimetype here
+ * since managing ringtones is handled in a different flow.
+ */
+public class SamsungAccountType extends BaseAccountType {
+    private static final String TAG = "KnownExternalAccountType";
+    private static final String ACCOUNT_TYPE_SAMSUNG = "com.osp.app.signin";
+
+    public SamsungAccountType(Context context, String authenticatorPackageName, String type) {
+        this.accountType = type;
+        this.resourcePackageName = null;
+        this.syncAdapterPackageName = authenticatorPackageName;
+
+        try {
+            addDataKindStructuredName(context);
+            addDataKindName(context);
+            addDataKindPhoneticName(context);
+            addDataKindNickname(context);
+            addDataKindPhone(context);
+            addDataKindEmail(context);
+            addDataKindStructuredPostal(context);
+            addDataKindIm(context);
+            addDataKindOrganization(context);
+            addDataKindPhoto(context);
+            addDataKindNote(context);
+            addDataKindWebsite(context);
+            addDataKindGroupMembership(context);
+            addDataKindRelation(context);
+            addDataKindEvent(context);
+
+            mIsInitialized = true;
+        } catch (DefinitionException e) {
+            FeedbackHelper.sendFeedback(context, TAG, "Failed to build samsung account type", e);
+        }
+    }
+
+    /**
+     * Returns {@code TRUE} if this is samsung's account type and Samsung hasn't bothered to
+     * define a contacts.xml to provide a more accurate definition than ours.
+     */
+    public static boolean isSamsungAccountType(Context context, String type,
+            String packageName) {
+        return ACCOUNT_TYPE_SAMSUNG.equals(type)
+                && !ExternalAccountType.hasContactsXml(context, packageName);
+    }
+
+    @Override
+    protected DataKind addDataKindStructuredPostal(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindStructuredPostal(context);
+
+        final boolean useJapaneseOrder =
+                Locale.JAPANESE.getLanguage().equals(Locale.getDefault().getLanguage());
+        kind.typeColumn = StructuredPostal.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_WORK).setSpecificMax(1));
+        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_HOME).setSpecificMax(1));
+        kind.typeList.add(buildPostalType(StructuredPostal.TYPE_OTHER).setSpecificMax(1));
+
+        kind.fieldList = Lists.newArrayList();
+        if (useJapaneseOrder) {
+            kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+                    R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+            kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+                    R.string.postal_postcode, FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.REGION,
+                    R.string.postal_region, FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.CITY,
+                    R.string.postal_city,FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.STREET,
+                    R.string.postal_street, FLAGS_POSTAL));
+        } else {
+            kind.fieldList.add(new EditField(StructuredPostal.STREET,
+                    R.string.postal_street, FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.CITY,
+                    R.string.postal_city,FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.REGION,
+                    R.string.postal_region, FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.POSTCODE,
+                    R.string.postal_postcode, FLAGS_POSTAL));
+            kind.fieldList.add(new EditField(StructuredPostal.COUNTRY,
+                    R.string.postal_country, FLAGS_POSTAL).setOptional(true));
+        }
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindPhone(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindPhone(context);
+
+        kind.typeColumn = Phone.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildPhoneType(Phone.TYPE_MOBILE));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_HOME));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_WORK));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_MAIN));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_WORK).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_FAX_HOME).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_PAGER).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_RADIO).setSecondary(true));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_OTHER));
+        kind.typeList.add(buildPhoneType(Phone.TYPE_CUSTOM).setSecondary(true)
+                .setCustomColumn(Phone.LABEL));
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Phone.NUMBER, R.string.phoneLabelsGroup, FLAGS_PHONE));
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindEmail(Context context) throws DefinitionException {
+        final DataKind kind = super.addDataKindEmail(context);
+
+        kind.typeColumn = Email.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildEmailType(Email.TYPE_HOME));
+        kind.typeList.add(buildEmailType(Email.TYPE_WORK));
+        kind.typeList.add(buildEmailType(Email.TYPE_OTHER));
+        kind.typeList.add(buildEmailType(Email.TYPE_CUSTOM).setSecondary(true).setCustomColumn(
+                Email.LABEL));
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Email.DATA, R.string.emailLabelsGroup, FLAGS_EMAIL));
+
+        return kind;
+    }
+
+    private DataKind addDataKindRelation(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Relation.CONTENT_ITEM_TYPE,
+                R.string.relationLabelsGroup, 160, true));
+        kind.actionHeader = new RelationActionInflater();
+        kind.actionBody = new SimpleInflater(Relation.NAME);
+
+        kind.typeColumn = Relation.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.typeList.add(buildRelationType(Relation.TYPE_ASSISTANT));
+        kind.typeList.add(buildRelationType(Relation.TYPE_BROTHER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_CHILD));
+        kind.typeList.add(buildRelationType(Relation.TYPE_DOMESTIC_PARTNER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_FATHER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_FRIEND));
+        kind.typeList.add(buildRelationType(Relation.TYPE_MANAGER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_MOTHER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_PARENT));
+        kind.typeList.add(buildRelationType(Relation.TYPE_PARTNER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_REFERRED_BY));
+        kind.typeList.add(buildRelationType(Relation.TYPE_RELATIVE));
+        kind.typeList.add(buildRelationType(Relation.TYPE_SISTER));
+        kind.typeList.add(buildRelationType(Relation.TYPE_SPOUSE));
+        kind.typeList.add(buildRelationType(Relation.TYPE_CUSTOM).setSecondary(true)
+                .setCustomColumn(Relation.LABEL));
+
+        kind.defaultValues = new ContentValues();
+        kind.defaultValues.put(Relation.TYPE, Relation.TYPE_SPOUSE);
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Relation.DATA, R.string.relationLabelsGroup,
+                FLAGS_RELATION));
+
+        return kind;
+    }
+
+    private DataKind addDataKindEvent(Context context) throws DefinitionException {
+        DataKind kind = addKind(new DataKind(Event.CONTENT_ITEM_TYPE,
+                R.string.eventLabelsGroup, 150, true));
+        kind.actionHeader = new EventActionInflater();
+        kind.actionBody = new SimpleInflater(Event.START_DATE);
+
+        kind.typeColumn = Event.TYPE;
+        kind.typeList = Lists.newArrayList();
+        kind.dateFormatWithoutYear = CommonDateUtils.NO_YEAR_DATE_FORMAT;
+        kind.dateFormatWithYear = CommonDateUtils.FULL_DATE_FORMAT;
+        kind.typeList.add(buildEventType(Event.TYPE_BIRTHDAY, true).setSpecificMax(1));
+        kind.typeList.add(buildEventType(Event.TYPE_ANNIVERSARY, false));
+        kind.typeList.add(buildEventType(Event.TYPE_OTHER, false));
+        kind.typeList.add(buildEventType(Event.TYPE_CUSTOM, false).setSecondary(true)
+                .setCustomColumn(Event.LABEL));
+
+        kind.defaultValues = new ContentValues();
+        kind.defaultValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(Event.DATA, R.string.eventLabelsGroup, FLAGS_EVENT));
+
+        return kind;
+    }
+
+    @Override
+    public boolean isGroupMembershipEditable() {
+        return true;
+    }
+
+    @Override
+    public boolean areContactsWritable() {
+        return true;
+    }
+}
diff --git a/src/com/android/contacts/model/account/SimAccountType.java b/src/com/android/contacts/model/account/SimAccountType.java
new file mode 100644
index 0000000..360e944
--- /dev/null
+++ b/src/com/android/contacts/model/account/SimAccountType.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model.account;
+
+import android.accounts.AuthenticatorDescription;
+import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+
+import com.android.contacts.R;
+import com.android.contacts.model.dataitem.DataKind;
+
+import com.google.common.collect.Lists;
+
+import java.util.Collections;
+
+/**
+ * Account type for SIM card contacts
+ */
+public class SimAccountType extends BaseAccountType {
+
+    public SimAccountType(Context context) {
+        this.titleRes = R.string.account_sim;
+        this.iconRes = R.drawable.quantum_ic_sim_card_vd_theme_24;
+
+        try {
+            addDataKindStructuredName(context);
+            addDataKindName(context);
+            final DataKind phoneKind = addDataKindPhone(context);
+            phoneKind.typeOverallMax = 1;
+            // SIM card contacts don't necessarily support separate types (based on data exposed
+            // in Samsung and LG Contacts Apps.
+            phoneKind.typeList = Collections.emptyList();
+
+            mIsInitialized = true;
+        } catch (DefinitionException e) {
+            // Just fail fast. Because we're explicitly adding the fields in this class this
+            // exception should only happen in case of a bug.
+            throw new IllegalStateException(e);
+        }
+    }
+
+    @Override
+    public boolean areContactsWritable() {
+        return true;
+    }
+
+    @Override
+    public boolean isGroupMembershipEditable() {
+        return false;
+    }
+
+    @Override
+    public void initializeFieldsFromAuthenticator(AuthenticatorDescription authenticator) {
+        // Do nothing. We want to use our local icon and title
+    }
+
+    @Override
+    protected DataKind addDataKindStructuredName(Context context) throws DefinitionException {
+        final DataKind kind = addKind(new DataKind(StructuredName.CONTENT_ITEM_TYPE,
+                R.string.nameLabelsGroup, Weight.NONE, true));
+        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+        kind.actionBody = new SimpleInflater(Nickname.NAME);
+        kind.typeOverallMax = 1;
+
+
+        kind.fieldList = Lists.newArrayList();
+        kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+                FLAGS_PERSON_NAME));
+        kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+                FLAGS_PERSON_NAME));
+
+        return kind;
+    }
+
+    @Override
+    protected DataKind addDataKindName(Context context) throws DefinitionException {
+        final DataKind kind = addKind(new DataKind(DataKind.PSEUDO_MIME_TYPE_NAME,
+                R.string.nameLabelsGroup, Weight.NONE, true));
+        kind.actionHeader = new SimpleInflater(R.string.nameLabelsGroup);
+        kind.actionBody = new SimpleInflater(Nickname.NAME);
+        kind.typeOverallMax = 1;
+
+        final boolean displayOrderPrimary =
+                context.getResources().getBoolean(R.bool.config_editor_field_order_primary);
+
+        kind.fieldList = Lists.newArrayList();
+        if (!displayOrderPrimary) {
+            kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+                    FLAGS_PERSON_NAME));
+            kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+                    FLAGS_PERSON_NAME));
+        } else {
+            kind.fieldList.add(new EditField(StructuredName.GIVEN_NAME, R.string.name_given,
+                    FLAGS_PERSON_NAME));
+            kind.fieldList.add(new EditField(StructuredName.FAMILY_NAME, R.string.name_family,
+                    FLAGS_PERSON_NAME));
+        }
+
+        return kind;
+    }
+
+    @Override
+    public AccountInfo wrapAccount(Context context, AccountWithDataSet account) {
+        // Use the "SIM" type label for the name as well because on OEM phones the "name" is
+        // not always user-friendly
+        return new AccountInfo(
+                new AccountDisplayInfo(account, getDisplayLabel(context), getDisplayLabel(context),
+                        getDisplayIcon(context), true), this);
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/CustomDataItem.java b/src/com/android/contacts/model/dataitem/CustomDataItem.java
new file mode 100644
index 0000000..5be812b
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/CustomDataItem.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.contacts.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract.Data;
+
+/**
+ * Represents a custom field data item.
+ */
+public class CustomDataItem extends DataItem {
+
+    /**
+     * MIME type for custom field data defined in Contact Provider.
+     */
+    public static final String MIMETYPE_CUSTOM_FIELD =
+            "vnd.com.google.cursor.item/contact_user_defined_field";
+
+    CustomDataItem(ContentValues values) {super(values);}
+
+    public String getSummary() {
+        return getContentValues().getAsString(Data.DATA1);
+    }
+
+    public String getContent() {
+        return getContentValues().getAsString(Data.DATA2);
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/DataItem.java b/src/com/android/contacts/model/dataitem/DataItem.java
new file mode 100644
index 0000000..81450bc
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/DataItem.java
@@ -0,0 +1,248 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.Identity;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.provider.ContactsContract.Contacts.Data;
+import android.provider.ContactsContract.Contacts.Entity;
+
+import com.android.contacts.Collapser;
+import com.android.contacts.MoreContactUtils;
+import com.android.contacts.model.RawContactModifier;
+
+/**
+ * This is the base class for data items, which represents a row from the Data table.
+ */
+public class DataItem implements Collapser.Collapsible<DataItem> {
+
+    private final ContentValues mContentValues;
+    protected DataKind mKind;
+
+    protected DataItem(ContentValues values) {
+        mContentValues = values;
+    }
+
+    /**
+     * Factory for creating subclasses of DataItem objects based on the mimetype in the
+     * content values.  Raw contact is the raw contact that this data item is associated with.
+     */
+    public static DataItem createFrom(ContentValues values) {
+        final String mimeType = values.getAsString(Data.MIMETYPE);
+        if (GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new GroupMembershipDataItem(values);
+        } else if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new StructuredNameDataItem(values);
+        } else if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new PhoneDataItem(values);
+        } else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new EmailDataItem(values);
+        } else if (StructuredPostal.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new StructuredPostalDataItem(values);
+        } else if (Im.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new ImDataItem(values);
+        } else if (Organization.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new OrganizationDataItem(values);
+        } else if (Nickname.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new NicknameDataItem(values);
+        } else if (Note.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new NoteDataItem(values);
+        } else if (Website.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new WebsiteDataItem(values);
+        } else if (SipAddress.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new SipAddressDataItem(values);
+        } else if (Event.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new EventDataItem(values);
+        } else if (Relation.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new RelationDataItem(values);
+        } else if (Identity.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new IdentityDataItem(values);
+        } else if (Photo.CONTENT_ITEM_TYPE.equals(mimeType)) {
+            return new PhotoDataItem(values);
+        } else if (CustomDataItem.MIMETYPE_CUSTOM_FIELD.equals(mimeType)) {
+            return new CustomDataItem(values);
+        }
+
+        // generic
+        return new DataItem(values);
+    }
+
+    public ContentValues getContentValues() {
+        return mContentValues;
+    }
+
+    public void setRawContactId(long rawContactId) {
+        mContentValues.put(Data.RAW_CONTACT_ID, rawContactId);
+    }
+
+    public Long getRawContactId() {
+        return mContentValues.getAsLong(Data.RAW_CONTACT_ID);
+    }
+
+    /**
+     * Returns the data id.
+     */
+    public long getId() {
+        return mContentValues.getAsLong(Data._ID);
+    }
+
+    /**
+     * Returns the mimetype of the data.
+     */
+    public String getMimeType() {
+        return mContentValues.getAsString(Data.MIMETYPE);
+    }
+
+    public void setMimeType(String mimeType) {
+        mContentValues.put(Data.MIMETYPE, mimeType);
+    }
+
+    public boolean isPrimary() {
+        Integer primary = mContentValues.getAsInteger(Data.IS_PRIMARY);
+        return primary != null && primary != 0;
+    }
+
+    public boolean isSuperPrimary() {
+        Integer superPrimary = mContentValues.getAsInteger(Data.IS_SUPER_PRIMARY);
+        return superPrimary != null && superPrimary != 0;
+    }
+
+    public boolean hasKindTypeColumn(DataKind kind) {
+        final String key = kind.typeColumn;
+        return key != null && mContentValues.containsKey(key) &&
+            mContentValues.getAsInteger(key) != null;
+    }
+
+    public int getKindTypeColumn(DataKind kind) {
+        final String key = kind.typeColumn;
+        return mContentValues.getAsInteger(key);
+    }
+
+    /**
+     * Indicates the carrier presence value for the current {@link DataItem}.
+     *
+     * @return {@link Data#CARRIER_PRESENCE_VT_CAPABLE} if the {@link DataItem} supports carrier
+     *      video calling, {@code 0} otherwise.
+     */
+    public int getCarrierPresence() {
+        final Integer value = mContentValues.getAsInteger(Data.CARRIER_PRESENCE);
+        return value != null ? value.intValue() : 0;
+    }
+
+    /**
+     * This builds the data string depending on the type of data item by using the generic
+     * DataKind object underneath.
+     */
+    public String buildDataString(Context context, DataKind kind) {
+        if (kind.actionBody == null) {
+            return null;
+        }
+        CharSequence actionBody = kind.actionBody.inflateUsing(context, mContentValues);
+        return actionBody == null ? null : actionBody.toString();
+    }
+
+    /**
+     * This builds the data string(intended for display) depending on the type of data item. It
+     * returns the same value as {@link #buildDataString} by default, but certain data items can
+     * override it to provide their version of formatted data strings.
+     *
+     * @return Data string representing the data item, possibly formatted for display
+     */
+    public String buildDataStringForDisplay(Context context, DataKind kind) {
+        return buildDataString(context, kind);
+    }
+
+    public void setDataKind(DataKind kind) {
+        mKind = kind;
+    }
+
+    public DataKind getDataKind() {
+        return mKind;
+    }
+
+    public Integer getTimesUsed() {
+        return mContentValues.getAsInteger(Entity.TIMES_USED);
+    }
+
+    public Long getLastTimeUsed() {
+        return mContentValues.getAsLong(Entity.LAST_TIME_USED);
+    }
+
+    @Override
+    public void collapseWith(DataItem that) {
+        DataKind thisKind = getDataKind();
+        DataKind thatKind = that.getDataKind();
+        // If this does not have a type and that does, or if that's type is higher precedence,
+        // use that's type
+        if ((!hasKindTypeColumn(thisKind) && that.hasKindTypeColumn(thatKind)) ||
+                that.hasKindTypeColumn(thatKind) &&
+                RawContactModifier.getTypePrecedence(thisKind, getKindTypeColumn(thisKind))
+                >
+                RawContactModifier.getTypePrecedence(thatKind, that.getKindTypeColumn(thatKind))) {
+            mContentValues.put(thatKind.typeColumn, that.getKindTypeColumn(thatKind));
+            mKind = thatKind;
+        }
+
+        // Choose the max of the maxLines and maxLabelLines values.
+        mKind.maxLinesForDisplay = Math.max(thisKind.maxLinesForDisplay,
+                thatKind.maxLinesForDisplay);
+
+        // If any of the collapsed entries are super primary make the whole thing super primary.
+        if (isSuperPrimary() || that.isSuperPrimary()) {
+            mContentValues.put(Data.IS_SUPER_PRIMARY, 1);
+            mContentValues.put(Data.IS_PRIMARY, 1);
+        }
+
+        // If any of the collapsed entries are primary make the whole thing primary.
+        if (isPrimary() || that.isPrimary()) {
+            mContentValues.put(Data.IS_PRIMARY, 1);
+        }
+
+        // Add up the times used
+        mContentValues.put(Entity.TIMES_USED, (getTimesUsed() == null ? 0 : getTimesUsed()) +
+                (that.getTimesUsed() == null ? 0 : that.getTimesUsed()));
+
+        // Use the most recent time
+        mContentValues.put(Entity.LAST_TIME_USED,
+                Math.max(getLastTimeUsed() == null ? 0 : getLastTimeUsed(),
+                        that.getLastTimeUsed() == null ? 0 : that.getLastTimeUsed()));
+    }
+
+    @Override
+    public boolean shouldCollapseWith(DataItem t, Context context) {
+        if (mKind == null || t.getDataKind() == null) {
+            return false;
+        }
+        return MoreContactUtils.shouldCollapse(getMimeType(), buildDataString(context, mKind),
+                t.getMimeType(), t.buildDataString(context, t.getDataKind()));
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/DataKind.java b/src/com/android/contacts/model/dataitem/DataKind.java
new file mode 100644
index 0000000..993e6cc
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/DataKind.java
@@ -0,0 +1,141 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract.Data;
+
+import com.android.contacts.model.account.AccountType.EditField;
+import com.android.contacts.model.account.AccountType.EditType;
+import com.android.contacts.model.account.AccountType.StringInflater;
+
+import com.google.common.collect.Iterators;
+
+import java.text.SimpleDateFormat;
+import java.util.List;
+
+/**
+ * Description of a specific data type, usually marked by a unique
+ * {@link Data#MIMETYPE}. Includes details about how to view and edit
+ * {@link Data} rows of this kind, including the possible {@link EditType}
+ * labels and editable {@link EditField}.
+ */
+public final class DataKind {
+
+    public static final String PSEUDO_MIME_TYPE_NAME = "#name";
+    public static final String PSEUDO_MIME_TYPE_PHONETIC_NAME = "#phoneticName";
+    public static final String PSEUDO_COLUMN_PHONETIC_NAME = "#phoneticName";
+
+    public String resourcePackageName;
+    public String mimeType;
+    public int titleRes;
+    public int iconAltRes;
+    public int iconAltDescriptionRes;
+    public int weight;
+    public boolean editable;
+
+    public StringInflater actionHeader;
+    public StringInflater actionAltHeader;
+    public StringInflater actionBody;
+
+    public String typeColumn;
+
+    /**
+     * Maximum number of values allowed in the list. -1 represents infinity.
+     */
+    public int typeOverallMax;
+
+    public List<EditType> typeList;
+    public List<EditField> fieldList;
+
+    public ContentValues defaultValues;
+
+    /**
+     * If this is a date field, this specifies the format of the date when saving. The
+     * date includes year, month and day. If this is not a date field or the date field is not
+     * editable, this value should be ignored.
+     */
+    public SimpleDateFormat dateFormatWithoutYear;
+
+    /**
+     * If this is a date field, this specifies the format of the date when saving. The
+     * date includes month and day. If this is not a date field, the field is not editable or
+     * dates without year are not supported, this value should be ignored.
+     */
+    public SimpleDateFormat dateFormatWithYear;
+
+    /**
+     * The number of lines available for displaying this kind of data.
+     * Defaults to 1.
+     */
+    public int maxLinesForDisplay;
+
+    public DataKind() {
+        maxLinesForDisplay = 1;
+    }
+
+    public DataKind(String mimeType, int titleRes, int weight, boolean editable) {
+        this.mimeType = mimeType;
+        this.titleRes = titleRes;
+        this.weight = weight;
+        this.editable = editable;
+        this.typeOverallMax = -1;
+        maxLinesForDisplay = 1;
+    }
+
+    public String getKindString(Context context) {
+        return (titleRes == -1 || titleRes == 0) ? "" : context.getString(titleRes);
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("DataKind:");
+        sb.append(" resPackageName=").append(resourcePackageName);
+        sb.append(" mimeType=").append(mimeType);
+        sb.append(" titleRes=").append(titleRes);
+        sb.append(" iconAltRes=").append(iconAltRes);
+        sb.append(" iconAltDescriptionRes=").append(iconAltDescriptionRes);
+        sb.append(" weight=").append(weight);
+        sb.append(" editable=").append(editable);
+        sb.append(" actionHeader=").append(actionHeader);
+        sb.append(" actionAltHeader=").append(actionAltHeader);
+        sb.append(" actionBody=").append(actionBody);
+        sb.append(" typeColumn=").append(typeColumn);
+        sb.append(" typeOverallMax=").append(typeOverallMax);
+        sb.append(" typeList=").append(toString(typeList));
+        sb.append(" fieldList=").append(toString(fieldList));
+        sb.append(" defaultValues=").append(defaultValues);
+        sb.append(" dateFormatWithoutYear=").append(toString(dateFormatWithoutYear));
+        sb.append(" dateFormatWithYear=").append(toString(dateFormatWithYear));
+
+        return sb.toString();
+    }
+
+    public static String toString(SimpleDateFormat format) {
+        return format == null ? "(null)" : format.toPattern();
+    }
+
+    public static String toString(Iterable<?> list) {
+        if (list == null) {
+            return "(null)";
+        } else {
+            return Iterators.toString(list.iterator());
+        }
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/EmailDataItem.java b/src/com/android/contacts/model/dataitem/EmailDataItem.java
new file mode 100644
index 0000000..77ad126
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/EmailDataItem.java
@@ -0,0 +1,48 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+
+/**
+ * Represents an email data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Email}.
+ */
+public class EmailDataItem extends DataItem {
+
+    /* package */ EmailDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public String getAddress() {
+        return getContentValues().getAsString(Email.ADDRESS);
+    }
+
+    public String getDisplayName() {
+        return getContentValues().getAsString(Email.DISPLAY_NAME);
+    }
+
+    public String getData() {
+        return getContentValues().getAsString(Email.DATA);
+    }
+
+    public String getLabel() {
+        return getContentValues().getAsString(Email.LABEL);
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/EventDataItem.java b/src/com/android/contacts/model/dataitem/EventDataItem.java
new file mode 100644
index 0000000..ad61dae
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/EventDataItem.java
@@ -0,0 +1,63 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.text.TextUtils;
+
+/**
+ * Represents an event data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Event}.
+ */
+public class EventDataItem extends DataItem {
+
+    /* package */ EventDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public String getStartDate() {
+        return getContentValues().getAsString(Event.START_DATE);
+    }
+
+    public String getLabel() {
+        return getContentValues().getAsString(Event.LABEL);
+    }
+
+    @Override
+    public boolean shouldCollapseWith(DataItem t, Context context) {
+        if (!(t instanceof EventDataItem) || mKind == null || t.getDataKind() == null) {
+            return false;
+        }
+        final EventDataItem that = (EventDataItem) t;
+        // Events can be different (anniversary, birthday) but have the same start date
+        if (!TextUtils.equals(getStartDate(), that.getStartDate())) {
+            return false;
+        } else if (!hasKindTypeColumn(mKind) || !that.hasKindTypeColumn(that.getDataKind())) {
+            return hasKindTypeColumn(mKind) == that.hasKindTypeColumn(that.getDataKind());
+        } else if (getKindTypeColumn(mKind) != that.getKindTypeColumn(that.getDataKind())) {
+            return false;
+        } else if (getKindTypeColumn(mKind) == Event.TYPE_CUSTOM &&
+                !TextUtils.equals(getLabel(), that.getLabel())) {
+            // Check if custom types are not the same
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/GroupMembershipDataItem.java b/src/com/android/contacts/model/dataitem/GroupMembershipDataItem.java
new file mode 100644
index 0000000..00558d0
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/GroupMembershipDataItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+
+/**
+ * Represents a group memebership data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.GroupMembership}.
+ */
+public class GroupMembershipDataItem extends DataItem {
+
+    /* package */ GroupMembershipDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public Long getGroupRowId() {
+        return getContentValues().getAsLong(GroupMembership.GROUP_ROW_ID);
+    }
+
+    public String getGroupSourceId() {
+        return getContentValues().getAsString(GroupMembership.GROUP_SOURCE_ID);
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/IdentityDataItem.java b/src/com/android/contacts/model/dataitem/IdentityDataItem.java
new file mode 100644
index 0000000..045867a
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/IdentityDataItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Identity;
+
+/**
+ * Represents an identity data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Identity}.
+ */
+public class IdentityDataItem extends DataItem {
+
+    /* package */ IdentityDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public String getIdentity() {
+        return getContentValues().getAsString(Identity.IDENTITY);
+    }
+
+    public String getNamespace() {
+        return getContentValues().getAsString(Identity.NAMESPACE);
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/ImDataItem.java b/src/com/android/contacts/model/dataitem/ImDataItem.java
new file mode 100644
index 0000000..a0e087c
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/ImDataItem.java
@@ -0,0 +1,113 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.text.TextUtils;
+
+/**
+ * Represents an IM data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Im}.
+ */
+public class ImDataItem extends DataItem {
+
+    private final boolean mCreatedFromEmail;
+
+    /* package */ ImDataItem(ContentValues values) {
+        super(values);
+        mCreatedFromEmail = false;
+    }
+
+    private ImDataItem(ContentValues values, boolean createdFromEmail) {
+        super(values);
+        mCreatedFromEmail = createdFromEmail;
+    }
+
+    public static ImDataItem createFromEmail(EmailDataItem item) {
+        final ImDataItem im = new ImDataItem(new ContentValues(item.getContentValues()), true);
+        im.setMimeType(Im.CONTENT_ITEM_TYPE);
+        return im;
+    }
+
+    public String getData() {
+        if (mCreatedFromEmail) {
+            return getContentValues().getAsString(Email.DATA);
+        } else {
+            return getContentValues().getAsString(Im.DATA);
+        }
+    }
+
+    public String getLabel() {
+        return getContentValues().getAsString(Im.LABEL);
+    }
+
+    /**
+     * Values are one of Im.PROTOCOL_
+     */
+    public Integer getProtocol() {
+        return getContentValues().getAsInteger(Im.PROTOCOL);
+    }
+
+    public boolean isProtocolValid() {
+        return getProtocol() != null;
+    }
+
+    public String getCustomProtocol() {
+        return getContentValues().getAsString(Im.CUSTOM_PROTOCOL);
+    }
+
+    public int getChatCapability() {
+        Integer result = getContentValues().getAsInteger(Im.CHAT_CAPABILITY);
+        return result == null ? 0 : result;
+    }
+
+    public boolean isCreatedFromEmail() {
+        return mCreatedFromEmail;
+    }
+
+    @Override
+    public boolean shouldCollapseWith(DataItem t, Context context) {
+        if (!(t instanceof ImDataItem) || mKind == null || t.getDataKind() == null) {
+            return false;
+        }
+        final ImDataItem that = (ImDataItem) t;
+        // IM can have the same data put different protocol. These should not collapse.
+        if (!getData().equals(that.getData())) {
+            return false;
+        } else if (!isProtocolValid() || !that.isProtocolValid()) {
+            // Deal with invalid protocol as if it was custom. If either has a non valid
+            // protocol, check to see if the other has a valid that is not custom
+            if (isProtocolValid()) {
+                return getProtocol() == Im.PROTOCOL_CUSTOM;
+            } else if (that.isProtocolValid()) {
+                return that.getProtocol() == Im.PROTOCOL_CUSTOM;
+            }
+            return true;
+        } else if (getProtocol() != that.getProtocol()) {
+            return false;
+        } else if (getProtocol() == Im.PROTOCOL_CUSTOM &&
+                !TextUtils.equals(getCustomProtocol(), that.getCustomProtocol())) {
+            // Check if custom protocols are not the same
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/NicknameDataItem.java b/src/com/android/contacts/model/dataitem/NicknameDataItem.java
new file mode 100644
index 0000000..2d44751
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/NicknameDataItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+
+/**
+ * Represents a nickname data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Nickname}.
+ */
+public class NicknameDataItem extends DataItem {
+
+    public NicknameDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public String getName() {
+        return getContentValues().getAsString(Nickname.NAME);
+    }
+
+    public String getLabel() {
+        return getContentValues().getAsString(Nickname.LABEL);
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/NoteDataItem.java b/src/com/android/contacts/model/dataitem/NoteDataItem.java
new file mode 100644
index 0000000..9a572cb
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/NoteDataItem.java
@@ -0,0 +1,36 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+
+/**
+ * Represents a note data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Note}.
+ */
+public class NoteDataItem extends DataItem {
+
+    /* package */ NoteDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public String getNote() {
+        return getContentValues().getAsString(Note.NOTE);
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/OrganizationDataItem.java b/src/com/android/contacts/model/dataitem/OrganizationDataItem.java
new file mode 100644
index 0000000..8c2a0c8
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/OrganizationDataItem.java
@@ -0,0 +1,64 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+
+/**
+ * Represents an organization data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Organization}.
+ */
+public class OrganizationDataItem extends DataItem {
+
+    /* package */ OrganizationDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public String getCompany() {
+        return getContentValues().getAsString(Organization.COMPANY);
+    }
+
+    public String getLabel() {
+        return getContentValues().getAsString(Organization.LABEL);
+    }
+
+    public String getTitle() {
+        return getContentValues().getAsString(Organization.TITLE);
+    }
+
+    public String getDepartment() {
+        return getContentValues().getAsString(Organization.DEPARTMENT);
+    }
+
+    public String getJobDescription() {
+        return getContentValues().getAsString(Organization.JOB_DESCRIPTION);
+    }
+
+    public String getSymbol() {
+        return getContentValues().getAsString(Organization.SYMBOL);
+    }
+
+    public String getPhoneticName() {
+        return getContentValues().getAsString(Organization.PHONETIC_NAME);
+    }
+
+    public String getOfficeLocation() {
+        return getContentValues().getAsString(Organization.OFFICE_LOCATION);
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/PhoneDataItem.java b/src/com/android/contacts/model/dataitem/PhoneDataItem.java
new file mode 100644
index 0000000..8d6cf8e
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/PhoneDataItem.java
@@ -0,0 +1,79 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+
+/**
+ * Represents a phone data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Phone}.
+ */
+public class PhoneDataItem extends DataItem {
+
+    public static final String KEY_FORMATTED_PHONE_NUMBER = "formattedPhoneNumber";
+
+    /* package */ PhoneDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public String getNumber() {
+        return getContentValues().getAsString(Phone.NUMBER);
+    }
+
+    /**
+     * Returns the normalized phone number in E164 format.
+     */
+    public String getNormalizedNumber() {
+        return getContentValues().getAsString(Phone.NORMALIZED_NUMBER);
+    }
+
+    public String getFormattedPhoneNumber() {
+        return getContentValues().getAsString(KEY_FORMATTED_PHONE_NUMBER);
+    }
+
+    public String getLabel() {
+        return getContentValues().getAsString(Phone.LABEL);
+    }
+
+    public void computeFormattedPhoneNumber(String defaultCountryIso) {
+        final String phoneNumber = getNumber();
+        if (phoneNumber != null) {
+            final String formattedPhoneNumber = PhoneNumberUtilsCompat.formatNumber(phoneNumber,
+                    getNormalizedNumber(), defaultCountryIso);
+            getContentValues().put(KEY_FORMATTED_PHONE_NUMBER, formattedPhoneNumber);
+        }
+    }
+
+    /**
+     * Returns the formatted phone number (if already computed using {@link
+     * #computeFormattedPhoneNumber}). Otherwise this method returns the unformatted phone number.
+     */
+    @Override
+    public String buildDataStringForDisplay(Context context, DataKind kind) {
+        final String formatted = getFormattedPhoneNumber();
+        if (formatted != null) {
+            return formatted;
+        } else {
+            return getNumber();
+        }
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/PhotoDataItem.java b/src/com/android/contacts/model/dataitem/PhotoDataItem.java
new file mode 100644
index 0000000..2ba13fb
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/PhotoDataItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts.Photo;
+
+/**
+ * Represents a photo data item, wrapping the columns in
+ * {@link ContactsContract.Contacts.Photo}.
+ */
+public class PhotoDataItem extends DataItem {
+
+    /* package */ PhotoDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public Long getPhotoFileId() {
+        return getContentValues().getAsLong(Photo.PHOTO_FILE_ID);
+    }
+
+    public byte[] getPhoto() {
+        return getContentValues().getAsByteArray(Photo.PHOTO);
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/RelationDataItem.java b/src/com/android/contacts/model/dataitem/RelationDataItem.java
new file mode 100644
index 0000000..e08ba4e
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/RelationDataItem.java
@@ -0,0 +1,63 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.text.TextUtils;
+
+/**
+ * Represents a relation data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Relation}.
+ */
+public class RelationDataItem extends DataItem {
+
+    /* package */ RelationDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public String getName() {
+        return getContentValues().getAsString(Relation.NAME);
+    }
+
+    public String getLabel() {
+        return getContentValues().getAsString(Relation.LABEL);
+    }
+
+    @Override
+    public boolean shouldCollapseWith(DataItem t, Context context) {
+        if (!(t instanceof RelationDataItem) || mKind == null || t.getDataKind() == null) {
+            return false;
+        }
+        final RelationDataItem that = (RelationDataItem) t;
+        // Relations can have different types (assistant, father) but have the same name
+        if (!TextUtils.equals(getName(), that.getName())) {
+            return false;
+        } else if (!hasKindTypeColumn(mKind) || !that.hasKindTypeColumn(that.getDataKind())) {
+            return hasKindTypeColumn(mKind) == that.hasKindTypeColumn(that.getDataKind());
+        } else if (getKindTypeColumn(mKind) != that.getKindTypeColumn(that.getDataKind())) {
+            return false;
+        } else if (getKindTypeColumn(mKind) == Relation.TYPE_CUSTOM &&
+                !TextUtils.equals(getLabel(), that.getLabel())) {
+            // Check if custom types are not the same
+            return false;
+        }
+        return true;
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/SipAddressDataItem.java b/src/com/android/contacts/model/dataitem/SipAddressDataItem.java
new file mode 100644
index 0000000..45ebeee
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/SipAddressDataItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+
+/**
+ * Represents a sip address data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.SipAddress}.
+ */
+public class SipAddressDataItem extends DataItem {
+
+    /* package */ SipAddressDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public String getSipAddress() {
+        return getContentValues().getAsString(SipAddress.SIP_ADDRESS);
+    }
+
+    public String getLabel() {
+        return getContentValues().getAsString(SipAddress.LABEL);
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/StructuredNameDataItem.java b/src/com/android/contacts/model/dataitem/StructuredNameDataItem.java
new file mode 100644
index 0000000..4b69163
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/StructuredNameDataItem.java
@@ -0,0 +1,100 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.Contacts.Data;
+
+/**
+ * Represents a structured name data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.StructuredName}.
+ */
+public class StructuredNameDataItem extends DataItem {
+
+    public StructuredNameDataItem() {
+        super(new ContentValues());
+        getContentValues().put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+    }
+
+    /* package */ StructuredNameDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public String getDisplayName() {
+        return getContentValues().getAsString(StructuredName.DISPLAY_NAME);
+    }
+
+    public void setDisplayName(String name) {
+        getContentValues().put(StructuredName.DISPLAY_NAME, name);
+    }
+
+    public String getGivenName() {
+        return getContentValues().getAsString(StructuredName.GIVEN_NAME);
+    }
+
+    public String getFamilyName() {
+        return getContentValues().getAsString(StructuredName.FAMILY_NAME);
+    }
+
+    public String getPrefix() {
+        return getContentValues().getAsString(StructuredName.PREFIX);
+    }
+
+    public String getMiddleName() {
+        return getContentValues().getAsString(StructuredName.MIDDLE_NAME);
+    }
+
+    public String getSuffix() {
+        return getContentValues().getAsString(StructuredName.SUFFIX);
+    }
+
+    public String getPhoneticGivenName() {
+        return getContentValues().getAsString(StructuredName.PHONETIC_GIVEN_NAME);
+    }
+
+    public String getPhoneticMiddleName() {
+        return getContentValues().getAsString(StructuredName.PHONETIC_MIDDLE_NAME);
+    }
+
+    public String getPhoneticFamilyName() {
+        return getContentValues().getAsString(StructuredName.PHONETIC_FAMILY_NAME);
+    }
+
+    public String getFullNameStyle() {
+        return getContentValues().getAsString(StructuredName.FULL_NAME_STYLE);
+    }
+
+    public void setPhoneticFamilyName(String name) {
+        getContentValues().put(StructuredName.PHONETIC_FAMILY_NAME, name);
+    }
+
+    public void setPhoneticMiddleName(String name) {
+        getContentValues().put(StructuredName.PHONETIC_MIDDLE_NAME, name);
+    }
+
+    public void setPhoneticGivenName(String name) {
+        getContentValues().put(StructuredName.PHONETIC_GIVEN_NAME, name);
+    }
+
+    public boolean isSuperPrimary() {
+        final ContentValues contentValues = getContentValues();
+        return contentValues == null || !contentValues.containsKey(StructuredName.IS_SUPER_PRIMARY)
+                ? false : contentValues.getAsBoolean(StructuredName.IS_SUPER_PRIMARY);
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/StructuredPostalDataItem.java b/src/com/android/contacts/model/dataitem/StructuredPostalDataItem.java
new file mode 100644
index 0000000..cf46c07
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/StructuredPostalDataItem.java
@@ -0,0 +1,68 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+
+/**
+ * Represents a structured postal data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.StructuredPostal}.
+ */
+public class StructuredPostalDataItem extends DataItem {
+
+    /* package */ StructuredPostalDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public String getFormattedAddress() {
+        return getContentValues().getAsString(StructuredPostal.FORMATTED_ADDRESS);
+    }
+
+    public String getLabel() {
+        return getContentValues().getAsString(StructuredPostal.LABEL);
+    }
+
+    public String getStreet() {
+        return getContentValues().getAsString(StructuredPostal.STREET);
+    }
+
+    public String getPOBox() {
+        return getContentValues().getAsString(StructuredPostal.POBOX);
+    }
+
+    public String getNeighborhood() {
+        return getContentValues().getAsString(StructuredPostal.NEIGHBORHOOD);
+    }
+
+    public String getCity() {
+        return getContentValues().getAsString(StructuredPostal.CITY);
+    }
+
+    public String getRegion() {
+        return getContentValues().getAsString(StructuredPostal.REGION);
+    }
+
+    public String getPostcode() {
+        return getContentValues().getAsString(StructuredPostal.POSTCODE);
+    }
+
+    public String getCountry() {
+        return getContentValues().getAsString(StructuredPostal.COUNTRY);
+    }
+}
diff --git a/src/com/android/contacts/model/dataitem/WebsiteDataItem.java b/src/com/android/contacts/model/dataitem/WebsiteDataItem.java
new file mode 100644
index 0000000..4439be7
--- /dev/null
+++ b/src/com/android/contacts/model/dataitem/WebsiteDataItem.java
@@ -0,0 +1,40 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+
+/**
+ * Represents a website data item, wrapping the columns in
+ * {@link ContactsContract.CommonDataKinds.Website}.
+ */
+public class WebsiteDataItem extends DataItem {
+
+    /* package */ WebsiteDataItem(ContentValues values) {
+        super(values);
+    }
+
+    public String getUrl() {
+        return getContentValues().getAsString(Website.URL);
+    }
+
+    public String getLabel() {
+        return getContentValues().getAsString(Website.LABEL);
+    }
+}
diff --git a/src/com/android/contacts/preference/AboutPreferenceFragment.java b/src/com/android/contacts/preference/AboutPreferenceFragment.java
new file mode 100644
index 0000000..3789480
--- /dev/null
+++ b/src/com/android/contacts/preference/AboutPreferenceFragment.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.preference;
+
+import android.content.ActivityNotFoundException;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.LicenseActivity;
+
+/**
+ * This fragment shows the preferences for "about".
+ */
+public class AboutPreferenceFragment extends PreferenceFragment {
+
+    public static final String PRIVACY_POLICY_URL = "http://www.google.com/policies/privacy";
+    public static final String TERMS_OF_SERVICE_URL = "http://www.google.com/policies/terms";
+
+    public static AboutPreferenceFragment newInstance() {
+        return new AboutPreferenceFragment();
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Load the preferences from an XML resource
+        addPreferencesFromResource(R.xml.preference_about);
+
+        // Set build version of Contacts App.
+        final PackageManager manager = getActivity().getPackageManager();
+        try {
+            final PackageInfo info = manager.getPackageInfo(getActivity().getPackageName(), 0);
+            final Preference versionPreference = findPreference(
+                    getString(R.string.pref_build_version_key));
+            versionPreference.setSummary(info.versionName);
+        } catch (PackageManager.NameNotFoundException e) {
+            // Nothing
+        }
+
+        final Preference licensePreference = findPreference(
+                getString(R.string.pref_open_source_licenses_key));
+        licensePreference.setIntent(new Intent(getActivity(), LicenseActivity.class));
+
+        final Preference privacyPolicyPreference = findPreference("pref_privacy_policy");
+        final Preference termsOfServicePreference = findPreference("pref_terms_of_service");
+
+        final Preference.OnPreferenceClickListener listener =
+                new Preference.OnPreferenceClickListener() {
+            @Override
+            public boolean onPreferenceClick(Preference preference) {
+                try {
+                    if (preference == privacyPolicyPreference) {
+                        startActivityForUrl(PRIVACY_POLICY_URL);
+                    } else if (preference == termsOfServicePreference) {
+                        startActivityForUrl(TERMS_OF_SERVICE_URL);
+                    }
+                } catch (ActivityNotFoundException ex) {
+                    Toast.makeText(getContext(), getString(R.string.url_open_error_toast),
+                            Toast.LENGTH_SHORT).show();
+                }
+                return true;
+            }
+        };
+
+        privacyPolicyPreference.setOnPreferenceClickListener(listener);
+        termsOfServicePreference.setOnPreferenceClickListener(listener);
+    }
+
+    @Override
+    public Context getContext() {
+        return getActivity();
+    }
+
+    private void startActivityForUrl(String urlString) {
+        final Intent intent = new Intent();
+        intent.setAction(Intent.ACTION_VIEW);
+        intent.setData(Uri.parse(urlString));
+        startActivity(intent);
+    }
+}
+
diff --git a/src/com/android/contacts/preference/ContactsPreferenceActivity.java b/src/com/android/contacts/preference/ContactsPreferenceActivity.java
new file mode 100644
index 0000000..2d83bf1
--- /dev/null
+++ b/src/com/android/contacts/preference/ContactsPreferenceActivity.java
@@ -0,0 +1,227 @@
+/*
+ * 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.preference;
+
+import android.content.res.Configuration;
+import android.database.Cursor;
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+import android.provider.ContactsContract.ProviderStatus;
+import android.support.annotation.LayoutRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.StringRes;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatDelegate;
+import android.support.v7.widget.Toolbar;
+import android.text.TextUtils;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.R;
+import com.android.contacts.editor.SelectAccountDialogFragment;
+import com.android.contacts.interactions.ImportDialogFragment;
+import com.android.contacts.list.ProviderStatusWatcher;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.DisplayOptionsPreferenceFragment.ProfileListener;
+import com.android.contacts.preference.DisplayOptionsPreferenceFragment.ProfileQuery;
+import com.android.contacts.util.AccountSelectionUtil;
+
+/**
+ * Contacts settings.
+ */
+public final class ContactsPreferenceActivity extends PreferenceActivity
+        implements ProfileListener, SelectAccountDialogFragment.Listener {
+
+    private static final String TAG_ABOUT = "about_contacts";
+    private static final String TAG_DISPLAY_OPTIONS = "display_options";
+
+    private String mNewLocalProfileExtra;
+    private boolean mAreContactsAvailable;
+
+    private ProviderStatusWatcher mProviderStatusWatcher;
+
+    private AppCompatDelegate mCompatDelegate;
+
+    public static final String EXTRA_NEW_LOCAL_PROFILE = "newLocalProfile";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        mCompatDelegate = AppCompatDelegate.create(this, null);
+
+        super.onCreate(savedInstanceState);
+        mCompatDelegate.onCreate(savedInstanceState);
+
+
+        final ActionBar actionBar = mCompatDelegate.getSupportActionBar();
+        if (actionBar != null) {
+            actionBar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
+        }
+
+        mProviderStatusWatcher = ProviderStatusWatcher.getInstance(this);
+
+        mNewLocalProfileExtra = getIntent().getStringExtra(EXTRA_NEW_LOCAL_PROFILE);
+        final int providerStatus = mProviderStatusWatcher.getProviderStatus();
+        mAreContactsAvailable = providerStatus == ProviderStatus.STATUS_NORMAL;
+
+        if (savedInstanceState == null) {
+            final DisplayOptionsPreferenceFragment fragment = DisplayOptionsPreferenceFragment
+                    .newInstance(mNewLocalProfileExtra, mAreContactsAvailable);
+            getFragmentManager().beginTransaction()
+                    .replace(android.R.id.content, fragment, TAG_DISPLAY_OPTIONS)
+                    .commit();
+            setActivityTitle(R.string.activity_title_settings);
+        } else {
+            final AboutPreferenceFragment aboutFragment = (AboutPreferenceFragment)
+                    getFragmentManager().findFragmentByTag(TAG_ABOUT);
+
+            if (aboutFragment != null) {
+                setActivityTitle(R.string.setting_about);
+            } else {
+                setActivityTitle(R.string.activity_title_settings);
+            }
+        }
+    }
+
+    @Override
+    protected void onPostCreate(Bundle savedInstanceState) {
+        super.onPostCreate(savedInstanceState);
+        mCompatDelegate.onPostCreate(savedInstanceState);
+    }
+
+    public void setSupportActionBar(Toolbar toolbar) {
+        mCompatDelegate.setSupportActionBar(toolbar);
+    }
+
+    @NonNull
+    @Override
+    public MenuInflater getMenuInflater() {
+        return mCompatDelegate.getMenuInflater();
+    }
+
+    @Override
+    public void setContentView(@LayoutRes int layoutRes) {
+        mCompatDelegate.setContentView(layoutRes);
+    }
+
+    @Override
+    public void setContentView(View view) {
+        mCompatDelegate.setContentView(view);
+    }
+
+    @Override
+    public void setContentView(View view, ViewGroup.LayoutParams params) {
+        mCompatDelegate.setContentView(view, params);
+    }
+
+    @Override
+    public void addContentView(View view, ViewGroup.LayoutParams params) {
+        mCompatDelegate.addContentView(view, params);
+    }
+
+    @Override
+    protected void onPostResume() {
+        super.onPostResume();
+        mCompatDelegate.onPostResume();
+    }
+
+    @Override
+    protected void onTitleChanged(CharSequence title, int color) {
+        super.onTitleChanged(title, color);
+        mCompatDelegate.setTitle(title);
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        mCompatDelegate.onConfigurationChanged(newConfig);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        mCompatDelegate.onDestroy();
+    }
+
+    @Override
+    public void invalidateOptionsMenu() {
+        mCompatDelegate.invalidateOptionsMenu();
+    }
+
+    protected void showAboutFragment() {
+        getFragmentManager().beginTransaction()
+                .replace(android.R.id.content, AboutPreferenceFragment.newInstance(), TAG_ABOUT)
+                .addToBackStack(null)
+                .commit();
+        setActivityTitle(R.string.setting_about);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (item.getItemId() == android.R.id.home) {
+            onBackPressed();
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public void onBackPressed() {
+        if (getFragmentManager().getBackStackEntryCount() > 0) {
+            setActivityTitle(R.string.activity_title_settings);
+            getFragmentManager().popBackStack();
+        } else {
+            super.onBackPressed();
+        }
+    }
+
+    private void setActivityTitle(@StringRes int res) {
+        final ActionBar actionBar = mCompatDelegate.getSupportActionBar();
+        if (actionBar != null) {
+            actionBar.setTitle(res);
+        }
+    }
+
+    @Override
+    public void onProfileLoaded(Cursor cursor) {
+        boolean hasProfile = false;
+        String displayName = null;
+        long contactId = -1;
+        if (cursor != null && cursor.moveToFirst()) {
+            hasProfile = cursor.getInt(ProfileQuery.CONTACT_IS_USER_PROFILE) == 1;
+            displayName = cursor.getString(ProfileQuery.CONTACT_DISPLAY_NAME);
+            contactId = cursor.getLong(ProfileQuery.CONTACT_ID);
+        }
+        if (hasProfile && TextUtils.isEmpty(displayName)) {
+            displayName = getString(R.string.missing_name);
+        }
+        final DisplayOptionsPreferenceFragment fragment = (DisplayOptionsPreferenceFragment)
+                getFragmentManager().findFragmentByTag(TAG_DISPLAY_OPTIONS);
+        fragment.updateMyInfoPreference(hasProfile, displayName, contactId);
+    }
+
+    @Override
+    public void onAccountChosen(AccountWithDataSet account, Bundle extraArgs) {
+        AccountSelectionUtil.doImport(this, extraArgs.getInt(ImportDialogFragment
+                .KEY_RES_ID), account, extraArgs.getInt(ImportDialogFragment.KEY_SUBSCRIPTION_ID));
+    }
+
+    @Override
+    public void onAccountSelectorCancelled() {
+    }
+}
diff --git a/src/com/android/contacts/preference/ContactsPreferences.java b/src/com/android/contacts/preference/ContactsPreferences.java
new file mode 100644
index 0000000..48fb205
--- /dev/null
+++ b/src/com/android/contacts/preference/ContactsPreferences.java
@@ -0,0 +1,341 @@
+/*
+ * 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.preference;
+
+import android.app.backup.BackupAgent;
+import android.app.backup.BackupManager;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
+import android.os.Handler;
+import android.os.Looper;
+import android.preference.PreferenceManager;
+import android.provider.Settings;
+import android.provider.Settings.SettingNotFoundException;
+import android.support.annotation.NonNull;
+import android.support.annotation.VisibleForTesting;
+import android.text.TextUtils;
+
+import com.android.contacts.R;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import java.util.List;
+
+/**
+ * Manages user preferences for contacts.
+ */
+public class ContactsPreferences implements OnSharedPreferenceChangeListener {
+
+    /**
+     * The value for the DISPLAY_ORDER key to show the given name first.
+     */
+    public static final int DISPLAY_ORDER_PRIMARY = 1;
+
+    /**
+     * The value for the DISPLAY_ORDER key to show the family name first.
+     */
+    public static final int DISPLAY_ORDER_ALTERNATIVE = 2;
+
+    public static final String DISPLAY_ORDER_KEY = "android.contacts.DISPLAY_ORDER";
+
+    /**
+     * The value for the SORT_ORDER key corresponding to sort by given name first.
+     */
+    public static final int SORT_ORDER_PRIMARY = 1;
+
+    public static final String SORT_ORDER_KEY = "android.contacts.SORT_ORDER";
+
+    /**
+     * The value for the SORT_ORDER key corresponding to sort by family name first.
+     */
+    public static final int SORT_ORDER_ALTERNATIVE = 2;
+
+    public static final String PREF_DISPLAY_ONLY_PHONES = "only_phones";
+
+    public static final boolean PREF_DISPLAY_ONLY_PHONES_DEFAULT = false;
+
+    /**
+     * Value to use when a preference is unassigned and needs to be read from the shared preferences
+     */
+    private static final int PREFERENCE_UNASSIGNED = -1;
+
+    private final Context mContext;
+    private int mSortOrder = PREFERENCE_UNASSIGNED;
+    private int mDisplayOrder = PREFERENCE_UNASSIGNED;
+    private AccountWithDataSet mDefaultAccount = null;
+    private ChangeListener mListener = null;
+    private Handler mHandler;
+    private final SharedPreferences mPreferences;
+    private final BackupManager mBackupManager;
+    private final boolean mIsDefaultAccountUserChangeable;
+    private String mDefaultAccountKey;
+
+    public ContactsPreferences(Context context) {
+        this(context,
+                context.getResources().getBoolean(R.bool.config_default_account_user_changeable));
+    }
+
+    @VisibleForTesting
+    ContactsPreferences(Context context, boolean isDefaultAccountUserChangeable) {
+        mContext = context;
+        mIsDefaultAccountUserChangeable = isDefaultAccountUserChangeable;
+
+        mBackupManager = new BackupManager(mContext);
+
+        mHandler = new Handler(Looper.getMainLooper());
+        mPreferences = mContext.getSharedPreferences(context.getPackageName(),
+                Context.MODE_PRIVATE);
+        mDefaultAccountKey = mContext.getResources().getString(
+                R.string.contact_editor_default_account_key);
+        maybeMigrateSystemSettings();
+    }
+
+    public boolean isSortOrderUserChangeable() {
+        return mContext.getResources().getBoolean(R.bool.config_sort_order_user_changeable);
+    }
+
+    public int getDefaultSortOrder() {
+        if (mContext.getResources().getBoolean(R.bool.config_default_sort_order_primary)) {
+            return SORT_ORDER_PRIMARY;
+        } else {
+            return SORT_ORDER_ALTERNATIVE;
+        }
+    }
+
+    public int getSortOrder() {
+        if (!isSortOrderUserChangeable()) {
+            return getDefaultSortOrder();
+        }
+        if (mSortOrder == PREFERENCE_UNASSIGNED) {
+            mSortOrder = mPreferences.getInt(SORT_ORDER_KEY, getDefaultSortOrder());
+        }
+        return mSortOrder;
+    }
+
+    public void setSortOrder(int sortOrder) {
+        mSortOrder = sortOrder;
+        final Editor editor = mPreferences.edit();
+        editor.putInt(SORT_ORDER_KEY, sortOrder);
+        editor.commit();
+        mBackupManager.dataChanged();
+    }
+
+    public boolean isDisplayOrderUserChangeable() {
+        return mContext.getResources().getBoolean(R.bool.config_display_order_user_changeable);
+    }
+
+    public int getDefaultDisplayOrder() {
+        if (mContext.getResources().getBoolean(R.bool.config_default_display_order_primary)) {
+            return DISPLAY_ORDER_PRIMARY;
+        } else {
+            return DISPLAY_ORDER_ALTERNATIVE;
+        }
+    }
+
+    public int getDisplayOrder() {
+        if (!isDisplayOrderUserChangeable()) {
+            return getDefaultDisplayOrder();
+        }
+        if (mDisplayOrder == PREFERENCE_UNASSIGNED) {
+            mDisplayOrder = mPreferences.getInt(DISPLAY_ORDER_KEY, getDefaultDisplayOrder());
+        }
+        return mDisplayOrder;
+    }
+
+    public void setDisplayOrder(int displayOrder) {
+        mDisplayOrder = displayOrder;
+        final Editor editor = mPreferences.edit();
+        editor.putInt(DISPLAY_ORDER_KEY, displayOrder);
+        editor.commit();
+        mBackupManager.dataChanged();
+    }
+
+    public boolean isDefaultAccountUserChangeable() {
+        return mIsDefaultAccountUserChangeable;
+    }
+
+    public AccountWithDataSet getDefaultAccount() {
+        if (!isDefaultAccountUserChangeable()) {
+            return mDefaultAccount;
+        }
+        if (mDefaultAccount == null) {
+            final String accountString = mPreferences
+                    .getString(mDefaultAccountKey, null);
+            if (!TextUtils.isEmpty(accountString)) {
+                mDefaultAccount = AccountWithDataSet.unstringify(accountString);
+            }
+        }
+        return mDefaultAccount;
+    }
+
+    public void clearDefaultAccount() {
+        mDefaultAccount = null;
+        mPreferences.edit().remove(mDefaultAccountKey).commit();
+    }
+
+    public void setDefaultAccount(@NonNull AccountWithDataSet accountWithDataSet) {
+        if (accountWithDataSet == null) {
+            throw new IllegalArgumentException(
+                    "argument should not be null");
+        }
+        mDefaultAccount = accountWithDataSet;
+        mPreferences.edit().putString(mDefaultAccountKey, accountWithDataSet.stringify()).commit();
+    }
+
+    public boolean isDefaultAccountSet() {
+        return mDefaultAccount != null || mPreferences.contains(mDefaultAccountKey);
+    }
+
+    /**
+     * @return false if there is only one writable account or no requirement to return true is met.
+     *         true if the contact editor should show the "accounts changed" notification, that is:
+     *              - If it's the first launch.
+     *              - Or, if the default account has been removed.
+     *              (And some extra sanity check)
+     *
+     * Note if this method returns {@code false}, the caller can safely assume that
+     * {@link #getDefaultAccount} will return a valid account.  (Either an account which still
+     * exists, or {@code null} which should be interpreted as "local only".)
+     */
+    public boolean shouldShowAccountChangedNotification(List<AccountWithDataSet>
+            currentWritableAccounts) {
+        final AccountWithDataSet defaultAccount = getDefaultAccount();
+
+        // This shouldn't occur anymore because a "device" account is added in the case that there
+        // are no other accounts but if there are no writable accounts then the default has been
+        // initialized if it is "device"
+        if (currentWritableAccounts.isEmpty()) {
+            return defaultAccount == null || !defaultAccount.isNullAccount();
+        }
+
+        if (currentWritableAccounts.size() == 1
+                && !currentWritableAccounts.get(0).isNullAccount()) {
+            return false;
+        }
+
+        if (defaultAccount == null) {
+            return true;
+        }
+
+        if (!currentWritableAccounts.contains(defaultAccount)) {
+            return true;
+        }
+
+        // All good.
+        return false;
+    }
+
+    public void registerChangeListener(ChangeListener listener) {
+        if (mListener != null) unregisterChangeListener();
+
+        mListener = listener;
+
+        // Reset preferences to "unknown" because they may have changed while the
+        // listener was unregistered.
+        mDisplayOrder = PREFERENCE_UNASSIGNED;
+        mSortOrder = PREFERENCE_UNASSIGNED;
+        mDefaultAccount = null;
+
+        mPreferences.registerOnSharedPreferenceChangeListener(this);
+    }
+
+    public void unregisterChangeListener() {
+        if (mListener != null) {
+            mListener = null;
+        }
+
+        mPreferences.unregisterOnSharedPreferenceChangeListener(this);
+    }
+
+    @Override
+    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, final String key) {
+        // This notification is not sent on the Ui thread. Use the previously created Handler
+        // to switch to the Ui thread
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                refreshValue(key);
+            }
+        });
+    }
+
+    /**
+     * Forces the value for the given key to be looked up from shared preferences and notifies
+     * the registered {@link ChangeListener}
+     *
+     * @param key the {@link SharedPreferences} key to look up
+     */
+    public void refreshValue(String key) {
+        if (DISPLAY_ORDER_KEY.equals(key)) {
+            mDisplayOrder = PREFERENCE_UNASSIGNED;
+            mDisplayOrder = getDisplayOrder();
+        } else if (SORT_ORDER_KEY.equals(key)) {
+            mSortOrder = PREFERENCE_UNASSIGNED;
+            mSortOrder = getSortOrder();
+        } else if (mDefaultAccountKey.equals(key)) {
+            mDefaultAccount = null;
+            mDefaultAccount = getDefaultAccount();
+        }
+        if (mListener != null) mListener.onChange();
+    }
+
+    public interface ChangeListener {
+        void onChange();
+    }
+
+    /**
+     * If there are currently no preferences (which means this is the first time we are run),
+     * For sort order and display order, check to see if there are any preferences stored in
+     * system settings (pre-L) which can be copied into our own SharedPreferences.
+     * For default account setting, check to see if there are any preferences stored in the previous
+     * SharedPreferences which can be copied into current SharedPreferences.
+     */
+    private void maybeMigrateSystemSettings() {
+        if (!mPreferences.contains(SORT_ORDER_KEY)) {
+            int sortOrder = getDefaultSortOrder();
+            try {
+                 sortOrder = Settings.System.getInt(mContext.getContentResolver(),
+                        SORT_ORDER_KEY);
+            } catch (SettingNotFoundException e) {
+            }
+            setSortOrder(sortOrder);
+        }
+
+        if (!mPreferences.contains(DISPLAY_ORDER_KEY)) {
+            int displayOrder = getDefaultDisplayOrder();
+            try {
+                displayOrder = Settings.System.getInt(mContext.getContentResolver(),
+                        DISPLAY_ORDER_KEY);
+            } catch (SettingNotFoundException e) {
+            }
+            setDisplayOrder(displayOrder);
+        }
+
+        if (!mPreferences.contains(mDefaultAccountKey)) {
+            final SharedPreferences previousPrefs =
+                    PreferenceManager.getDefaultSharedPreferences(mContext);
+            final String defaultAccount = previousPrefs.getString(mDefaultAccountKey, null);
+            if (!TextUtils.isEmpty(defaultAccount)) {
+                final AccountWithDataSet accountWithDataSet = AccountWithDataSet.unstringify(
+                        defaultAccount);
+                setDefaultAccount(accountWithDataSet);
+            }
+        }
+    }
+
+}
diff --git a/src/com/android/contacts/preference/DefaultAccountPreference.java b/src/com/android/contacts/preference/DefaultAccountPreference.java
new file mode 100644
index 0000000..fc23e13
--- /dev/null
+++ b/src/com/android/contacts/preference/DefaultAccountPreference.java
@@ -0,0 +1,104 @@
+/*
+ * 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.preference;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.preference.DialogPreference;
+import android.util.AttributeSet;
+import android.view.View;
+
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.AccountsListAdapter;
+
+public class DefaultAccountPreference extends DialogPreference {
+    private ContactsPreferences mPreferences;
+    private AccountsListAdapter mListAdapter;
+    private AccountDisplayInfoFactory mAccountDisplayInfoFactory;
+    private AccountTypeManager mAccountTypeManager;
+    private int mChosenIndex = -1;
+
+    public DefaultAccountPreference(Context context) {
+        super(context);
+        prepare();
+    }
+
+    public DefaultAccountPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        prepare();
+    }
+
+    @Override
+    protected View onCreateDialogView() {
+        prepare();
+        return super.onCreateDialogView();
+    }
+
+    private void prepare() {
+        mPreferences = new ContactsPreferences(getContext());
+        mListAdapter = new AccountsListAdapter(getContext(),
+                AccountsListAdapter.AccountListFilter.ACCOUNTS_CONTACT_WRITABLE);
+        mAccountTypeManager = AccountTypeManager.getInstance(getContext());
+        mAccountDisplayInfoFactory = AccountDisplayInfoFactory.forWritableAccounts(getContext());
+    }
+
+    @Override
+    protected boolean shouldPersist() {
+        return false;   // This preference takes care of its own storage
+    }
+
+    @Override
+    public CharSequence getSummary() {
+        final AccountWithDataSet defaultAccount = mPreferences.getDefaultAccount();
+        if (defaultAccount == null ||
+                !mAccountTypeManager.getAccounts(/* writable */ true).contains(defaultAccount)) {
+            return null;
+        } else {
+            return mAccountDisplayInfoFactory.getAccountDisplayInfo(defaultAccount).getNameLabel();
+        }
+    }
+
+    @Override
+    protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
+        super.onPrepareDialogBuilder(builder);
+        // UX recommendation is not to show buttons on such lists.
+        builder.setNegativeButton(null, null);
+        builder.setPositiveButton(null, null);
+        builder.setAdapter(mListAdapter, new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                mChosenIndex = which;
+            }
+        });
+    }
+
+    @Override
+    protected void onDialogClosed(boolean positiveResult) {
+        final AccountWithDataSet currentDefault = mPreferences.getDefaultAccount();
+
+        if (mChosenIndex != -1) {
+            final AccountWithDataSet chosenAccount = mListAdapter.getItem(mChosenIndex);
+            if (!chosenAccount.equals(currentDefault)) {
+                mPreferences.setDefaultAccount(chosenAccount);
+                notifyChanged();
+            }
+        } // else the user dismissed this dialog so leave the preference unchanged.
+    }
+}
diff --git a/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
new file mode 100644
index 0000000..0d34f68
--- /dev/null
+++ b/src/com/android/contacts/preference/DisplayOptionsPreferenceFragment.java
@@ -0,0 +1,424 @@
+/*
+ * 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.preference;
+
+import android.app.Activity;
+import android.app.LoaderManager;
+import android.content.BroadcastReceiver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.Loader;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.provider.BlockedNumberContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Profile;
+import android.support.design.widget.Snackbar;
+import android.support.v4.content.LocalBroadcastManager;
+import android.telecom.TelecomManager;
+import android.telephony.TelephonyManager;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.R;
+import com.android.contacts.SimImportService;
+import com.android.contacts.compat.TelecomManagerUtil;
+import com.android.contacts.compat.TelephonyManagerCompat;
+import com.android.contacts.interactions.ExportDialogFragment;
+import com.android.contacts.interactions.ImportDialogFragment;
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.list.ContactListFilterController;
+import com.android.contacts.logging.ScreenEvent.ScreenType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.AccountFilterUtil;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contactsbind.HelpUtils;
+
+import java.util.List;
+
+/**
+ * This fragment shows the preferences for "display options"
+ */
+public class DisplayOptionsPreferenceFragment extends PreferenceFragment
+        implements Preference.OnPreferenceClickListener {
+
+    private static final int REQUEST_CODE_CUSTOM_CONTACTS_FILTER = 0;
+
+    private static final String ARG_CONTACTS_AVAILABLE = "are_contacts_available";
+    private static final String ARG_NEW_LOCAL_PROFILE = "new_local_profile";
+
+    private static final String KEY_ABOUT = "about";
+    private static final String KEY_ACCOUNTS = "accounts";
+    private static final String KEY_DEFAULT_ACCOUNT = "defaultAccount";
+    private static final String KEY_BLOCKED_NUMBERS = "blockedNumbers";
+    private static final String KEY_DISPLAY_ORDER = "displayOrder";
+    private static final String KEY_CUSTOM_CONTACTS_FILTER = "customContactsFilter";
+    private static final String KEY_IMPORT = "import";
+    private static final String KEY_EXPORT = "export";
+    private static final String KEY_MY_INFO = "myInfo";
+    private static final String KEY_SORT_ORDER = "sortOrder";
+
+    private static final int LOADER_PROFILE = 0;
+
+    /**
+     * Callbacks for hosts of the {@link DisplayOptionsPreferenceFragment}.
+     */
+    public interface ProfileListener  {
+        /**
+         * Invoked after profile has been loaded.
+         */
+        void onProfileLoaded(Cursor data);
+    }
+
+    /**
+     * The projections that are used to obtain user profile
+     */
+    public static class ProfileQuery {
+        /**
+         * Not instantiable.
+         */
+        private ProfileQuery() {}
+
+        private static final String[] PROFILE_PROJECTION_PRIMARY = new String[] {
+                Contacts._ID,                           // 0
+                Contacts.DISPLAY_NAME_PRIMARY,          // 1
+                Contacts.IS_USER_PROFILE,               // 2
+        };
+
+        private static final String[] PROFILE_PROJECTION_ALTERNATIVE = new String[] {
+                Contacts._ID,                           // 0
+                Contacts.DISPLAY_NAME_ALTERNATIVE,      // 1
+                Contacts.IS_USER_PROFILE,               // 2
+        };
+
+        public static final int CONTACT_ID               = 0;
+        public static final int CONTACT_DISPLAY_NAME     = 1;
+        public static final int CONTACT_IS_USER_PROFILE  = 2;
+    }
+
+    private String mNewLocalProfileExtra;
+    private boolean mAreContactsAvailable;
+
+    private boolean mHasProfile;
+    private long mProfileContactId;
+
+    private Preference mMyInfoPreference;
+
+    private ProfileListener mListener;
+
+    private ViewGroup mRootView;
+    private SaveServiceResultListener mSaveServiceListener;
+
+    private final LoaderManager.LoaderCallbacks<Cursor> mProfileLoaderListener =
+            new LoaderManager.LoaderCallbacks<Cursor>() {
+
+        @Override
+        public CursorLoader onCreateLoader(int id, Bundle args) {
+            final CursorLoader loader = createCursorLoader(getContext());
+            loader.setUri(Profile.CONTENT_URI);
+            loader.setProjection(getProjection(getContext()));
+            return loader;
+        }
+
+        @Override
+        public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+            if (mListener != null) {
+                mListener.onProfileLoaded(data);
+            }
+        }
+
+        public void onLoaderReset(Loader<Cursor> loader) {
+        }
+    };
+
+    public static DisplayOptionsPreferenceFragment newInstance(String newLocalProfileExtra,
+            boolean areContactsAvailable) {
+        final DisplayOptionsPreferenceFragment fragment = new DisplayOptionsPreferenceFragment();
+        final Bundle args = new Bundle();
+        args.putString(ARG_NEW_LOCAL_PROFILE, newLocalProfileExtra);
+        args.putBoolean(ARG_CONTACTS_AVAILABLE, areContactsAvailable);
+        fragment.setArguments(args);
+        return fragment;
+    }
+
+    @Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        try {
+            mListener = (ProfileListener) activity;
+        } catch (ClassCastException e) {
+            throw new ClassCastException(activity.toString() + " must implement ProfileListener");
+        }
+    }
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+        // Wrap the preference view in a FrameLayout so we can show a snackbar
+        mRootView = new FrameLayout(getActivity());
+        final View list = super.onCreateView(inflater, mRootView, savedInstanceState);
+        mRootView.addView(list);
+        return mRootView;
+    }
+
+    @Override
+    public void onViewCreated(View view, Bundle savedInstanceState) {
+        super.onViewCreated(view, savedInstanceState);
+
+        mSaveServiceListener = new SaveServiceResultListener();
+        LocalBroadcastManager.getInstance(getActivity()).registerReceiver(
+                mSaveServiceListener,
+                new IntentFilter(SimImportService.BROADCAST_SIM_IMPORT_COMPLETE));
+    }
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Load the preferences from an XML resource
+        addPreferencesFromResource(R.xml.preference_display_options);
+
+        final Bundle args = getArguments();
+        mNewLocalProfileExtra = args.getString(ARG_NEW_LOCAL_PROFILE);
+        mAreContactsAvailable = args.getBoolean(ARG_CONTACTS_AVAILABLE);
+
+        removeUnsupportedPreferences();
+
+        mMyInfoPreference = findPreference(KEY_MY_INFO);
+
+        final Preference accountsPreference = findPreference(KEY_ACCOUNTS);
+        accountsPreference.setOnPreferenceClickListener(this);
+
+        final Preference importPreference = findPreference(KEY_IMPORT);
+        importPreference.setOnPreferenceClickListener(this);
+
+        final Preference exportPreference = findPreference(KEY_EXPORT);
+        if (exportPreference != null) {
+            exportPreference.setOnPreferenceClickListener(this);
+        }
+
+        final Preference blockedNumbersPreference = findPreference(KEY_BLOCKED_NUMBERS);
+        if (blockedNumbersPreference != null) {
+            blockedNumbersPreference.setOnPreferenceClickListener(this);
+        }
+
+        final Preference aboutPreference = findPreference(KEY_ABOUT);
+        if (aboutPreference != null) {
+            aboutPreference.setOnPreferenceClickListener(this);
+        }
+
+        final Preference customFilterPreference = findPreference(KEY_CUSTOM_CONTACTS_FILTER);
+        if (customFilterPreference != null) {
+            customFilterPreference.setOnPreferenceClickListener(this);
+            setCustomContactsFilterSummary();
+        }
+    }
+
+    @Override
+    public void onActivityCreated(Bundle savedInstanceState) {
+        super.onActivityCreated(savedInstanceState);
+        getLoaderManager().restartLoader(LOADER_PROFILE, null, mProfileLoaderListener);
+    }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mSaveServiceListener);
+        mRootView = null;
+    }
+
+    public void updateMyInfoPreference(boolean hasProfile, String displayName, long contactId) {
+        final CharSequence summary = hasProfile ? displayName : getString(R.string.set_up_profile);
+        mMyInfoPreference.setSummary(summary);
+        mHasProfile = hasProfile;
+        mProfileContactId = contactId;
+        mMyInfoPreference.setOnPreferenceClickListener(this);
+    }
+
+    private void removeUnsupportedPreferences() {
+        // Disable sort order for CJK locales where it is not supported
+        final Resources resources = getResources();
+        if (!resources.getBoolean(R.bool.config_sort_order_user_changeable)) {
+            getPreferenceScreen().removePreference(findPreference(KEY_SORT_ORDER));
+        }
+
+        if (HelpUtils.isHelpAndFeedbackAvailable()) {
+            getPreferenceScreen().removePreference(findPreference(KEY_ABOUT));
+        }
+
+        // Disable display order for CJK locales as well
+        if (!resources.getBoolean(R.bool.config_display_order_user_changeable)) {
+            getPreferenceScreen().removePreference(findPreference(KEY_DISPLAY_ORDER));
+        }
+
+        // Remove the default account and custom view settings there aren't any writable accounts
+        final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(getContext());
+        final List<AccountWithDataSet> accounts = accountTypeManager.getAccounts(
+                /* contactWritableOnly */ true);
+        if (accounts.isEmpty()) {
+            getPreferenceScreen().removePreference(findPreference(KEY_DEFAULT_ACCOUNT));
+            getPreferenceScreen().removePreference(findPreference(KEY_CUSTOM_CONTACTS_FILTER));
+        }
+
+        final boolean isPhone = TelephonyManagerCompat.isVoiceCapable(
+                (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE));
+        final boolean showBlockedNumbers = isPhone && ContactsUtils.FLAG_N_FEATURE
+                && BlockedNumberContract.canCurrentUserBlockNumbers(getContext());
+        if (!showBlockedNumbers) {
+            getPreferenceScreen().removePreference(findPreference(KEY_BLOCKED_NUMBERS));
+        }
+
+        if (!mAreContactsAvailable) {
+            getPreferenceScreen().removePreference(findPreference(KEY_EXPORT));
+        }
+    }
+
+    @Override
+    public Context getContext() {
+        return getActivity();
+    }
+
+    private CursorLoader createCursorLoader(Context context) {
+        return new CursorLoader(context) {
+            @Override
+            protected Cursor onLoadInBackground() {
+                try {
+                    return super.onLoadInBackground();
+                } catch (RuntimeException e) {
+                    return null;
+                }
+            }
+        };
+    }
+
+    private String[] getProjection(Context context) {
+        final ContactsPreferences contactsPrefs = new ContactsPreferences(context);
+        final int displayOrder = contactsPrefs.getDisplayOrder();
+        if (displayOrder == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+            return ProfileQuery.PROFILE_PROJECTION_PRIMARY;
+        }
+        return ProfileQuery.PROFILE_PROJECTION_ALTERNATIVE;
+    }
+
+    @Override
+    public boolean onPreferenceClick(Preference p) {
+        final String prefKey = p.getKey();
+
+        if (KEY_ABOUT.equals(prefKey)) {
+            ((ContactsPreferenceActivity) getActivity()).showAboutFragment();
+            return true;
+        } else if (KEY_IMPORT.equals(prefKey)) {
+            ImportDialogFragment.show(getFragmentManager());
+            return true;
+        } else if (KEY_EXPORT.equals(prefKey)) {
+            ExportDialogFragment.show(getFragmentManager(), ContactsPreferenceActivity.class,
+                    ExportDialogFragment.EXPORT_MODE_ALL_CONTACTS);
+            return true;
+        } else if (KEY_MY_INFO.equals(prefKey)) {
+            if (mHasProfile) {
+                final Uri uri = ContentUris.withAppendedId(Contacts.CONTENT_URI, mProfileContactId);
+                ImplicitIntentsUtil.startQuickContact(getActivity(), uri, ScreenType.ME_CONTACT);
+            } else {
+                final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
+                intent.putExtra(mNewLocalProfileExtra, true);
+                ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
+            }
+            return true;
+        } else if (KEY_ACCOUNTS.equals(prefKey)) {
+            ImplicitIntentsUtil.startActivityOutsideApp(getContext(),
+                    ImplicitIntentsUtil.getIntentForAddingAccount());
+            return true;
+        } else if (KEY_BLOCKED_NUMBERS.equals(prefKey)) {
+            final Intent intent = TelecomManagerUtil.createManageBlockedNumbersIntent(
+                    (TelecomManager) getContext().getSystemService(Context.TELECOM_SERVICE));
+            startActivity(intent);
+            return true;
+        } else if (KEY_CUSTOM_CONTACTS_FILTER.equals(prefKey)) {
+            final ContactListFilter filter =
+                    ContactListFilterController.getInstance(getContext()).getFilter();
+            AccountFilterUtil.startAccountFilterActivityForResult(
+                    this, REQUEST_CODE_CUSTOM_CONTACTS_FILTER, filter);
+        }
+        return false;
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == REQUEST_CODE_CUSTOM_CONTACTS_FILTER
+                && resultCode == Activity.RESULT_OK) {
+            AccountFilterUtil.handleAccountFilterResult(
+                    ContactListFilterController.getInstance(getContext()), resultCode, data);
+            setCustomContactsFilterSummary();
+        } else {
+            super.onActivityResult(requestCode, resultCode, data);
+        }
+    }
+
+    private void setCustomContactsFilterSummary() {
+        final Preference customFilterPreference = findPreference(KEY_CUSTOM_CONTACTS_FILTER);
+        if (customFilterPreference != null) {
+            final ContactListFilter filter =
+                    ContactListFilterController.getInstance(getContext()).getPersistedFilter();
+            if (filter != null) {
+                if (filter.filterType == ContactListFilter.FILTER_TYPE_DEFAULT ||
+                        filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS) {
+                    customFilterPreference.setSummary(R.string.list_filter_all_accounts);
+                } else if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+                    customFilterPreference.setSummary(R.string.listCustomView);
+                } else {
+                    customFilterPreference.setSummary(null);
+                }
+            }
+        }
+    }
+
+    private class SaveServiceResultListener extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            final long now = System.currentTimeMillis();
+            final long opStart = intent.getLongExtra(
+                    SimImportService.EXTRA_OPERATION_REQUESTED_AT_TIME, now);
+
+            // If it's been over 30 seconds the user is likely in a different context so suppress
+            // the toast message.
+            if (now - opStart > 30*1000) return;
+
+            final int code = intent.getIntExtra(SimImportService.EXTRA_RESULT_CODE,
+                    SimImportService.RESULT_UNKNOWN);
+            final int count = intent.getIntExtra(SimImportService.EXTRA_RESULT_COUNT, -1);
+            if (code == SimImportService.RESULT_SUCCESS && count > 0) {
+                Snackbar.make(mRootView, getResources().getQuantityString(
+                        R.plurals.sim_import_success_toast_fmt, count, count),
+                        Snackbar.LENGTH_LONG).show();
+            } else if (code == SimImportService.RESULT_FAILURE) {
+                Snackbar.make(mRootView, R.string.sim_import_failed_toast,
+                        Snackbar.LENGTH_LONG).show();
+            }
+        }
+    }
+}
+
diff --git a/src/com/android/contacts/preference/DisplayOrderPreference.java b/src/com/android/contacts/preference/DisplayOrderPreference.java
new file mode 100644
index 0000000..801bb24
--- /dev/null
+++ b/src/com/android/contacts/preference/DisplayOrderPreference.java
@@ -0,0 +1,90 @@
+/*
+ * 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.preference;
+
+import android.app.AlertDialog.Builder;
+import android.content.Context;
+import android.preference.ListPreference;
+import android.util.AttributeSet;
+
+import com.android.contacts.R;
+
+/**
+ * Custom preference: view-name-as (first name first or last name first).
+ */
+public final class DisplayOrderPreference extends ListPreference {
+
+    private ContactsPreferences mPreferences;
+    private Context mContext;
+
+    public DisplayOrderPreference(Context context) {
+        super(context);
+        prepare();
+    }
+
+    public DisplayOrderPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        prepare();
+    }
+
+    private void prepare() {
+        mContext = getContext();
+        mPreferences = new ContactsPreferences(mContext);
+        setEntries(new String[]{
+                mContext.getString(R.string.display_options_view_given_name_first),
+                mContext.getString(R.string.display_options_view_family_name_first),
+        });
+        setEntryValues(new String[]{
+                String.valueOf(ContactsPreferences.DISPLAY_ORDER_PRIMARY),
+                String.valueOf(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE),
+        });
+        setValue(String.valueOf(mPreferences.getDisplayOrder()));
+    }
+
+    @Override
+    protected boolean shouldPersist() {
+        return false;   // This preference takes care of its own storage
+    }
+
+    @Override
+    public CharSequence getSummary() {
+        switch (mPreferences.getDisplayOrder()) {
+            case ContactsPreferences.DISPLAY_ORDER_PRIMARY:
+                return mContext.getString(R.string.display_options_view_given_name_first);
+            case ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE:
+                return mContext.getString(R.string.display_options_view_family_name_first);
+        }
+        return null;
+    }
+
+    @Override
+    protected boolean persistString(String value) {
+        int newValue = Integer.parseInt(value);
+        if (newValue != mPreferences.getDisplayOrder()) {
+            mPreferences.setDisplayOrder(newValue);
+            notifyChanged();
+        }
+        return true;
+    }
+
+    @Override
+    // UX recommendation is not to show cancel button on such lists.
+    protected void onPrepareDialogBuilder(Builder builder) {
+        super.onPrepareDialogBuilder(builder);
+        builder.setNegativeButton(null, null);
+    }
+}
diff --git a/src/com/android/contacts/preference/SortOrderPreference.java b/src/com/android/contacts/preference/SortOrderPreference.java
new file mode 100644
index 0000000..3870231
--- /dev/null
+++ b/src/com/android/contacts/preference/SortOrderPreference.java
@@ -0,0 +1,90 @@
+/*
+ * 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.preference;
+
+import android.app.AlertDialog.Builder;
+import android.content.Context;
+import android.preference.ListPreference;
+import android.util.AttributeSet;
+
+import com.android.contacts.R;
+
+/**
+ * Custom preference: sort-by.
+ */
+public final class SortOrderPreference extends ListPreference {
+
+    private ContactsPreferences mPreferences;
+    private Context mContext;
+
+    public SortOrderPreference(Context context) {
+        super(context);
+        prepare();
+    }
+
+    public SortOrderPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        prepare();
+    }
+
+    private void prepare() {
+        mContext = getContext();
+        mPreferences = new ContactsPreferences(mContext);
+        setEntries(new String[]{
+                mContext.getString(R.string.display_options_sort_by_given_name),
+                mContext.getString(R.string.display_options_sort_by_family_name),
+        });
+        setEntryValues(new String[]{
+                String.valueOf(ContactsPreferences.SORT_ORDER_PRIMARY),
+                String.valueOf(ContactsPreferences.SORT_ORDER_ALTERNATIVE),
+        });
+        setValue(String.valueOf(mPreferences.getSortOrder()));
+    }
+
+    @Override
+    protected boolean shouldPersist() {
+        return false;   // This preference takes care of its own storage
+    }
+
+    @Override
+    public CharSequence getSummary() {
+        switch (mPreferences.getSortOrder()) {
+            case ContactsPreferences.SORT_ORDER_PRIMARY:
+                return mContext.getString(R.string.display_options_sort_by_given_name);
+            case ContactsPreferences.SORT_ORDER_ALTERNATIVE:
+                return mContext.getString(R.string.display_options_sort_by_family_name);
+        }
+        return null;
+    }
+
+    @Override
+    protected boolean persistString(String value) {
+        int newValue = Integer.parseInt(value);
+        if (newValue != mPreferences.getSortOrder()) {
+            mPreferences.setSortOrder(newValue);
+            notifyChanged();
+        }
+        return true;
+    }
+
+    @Override
+    // UX recommendation is not to show cancel button on such lists.
+    protected void onPrepareDialogBuilder(Builder builder) {
+        super.onPrepareDialogBuilder(builder);
+        builder.setNegativeButton(null, null);
+    }
+}
diff --git a/src/com/android/contacts/quickcontact/Action.java b/src/com/android/contacts/quickcontact/Action.java
index 7d904ab..7d7e852 100644
--- a/src/com/android/contacts/quickcontact/Action.java
+++ b/src/com/android/contacts/quickcontact/Action.java
@@ -20,7 +20,7 @@
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 
-import com.android.contacts.common.Collapser;
+import com.android.contacts.Collapser;
 
 /**
  * Abstract definition of an action that could be performed, along with
diff --git a/src/com/android/contacts/quickcontact/DataAction.java b/src/com/android/contacts/quickcontact/DataAction.java
index 5a49c77..a3f4869 100644
--- a/src/com/android/contacts/quickcontact/DataAction.java
+++ b/src/com/android/contacts/quickcontact/DataAction.java
@@ -29,19 +29,19 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.contacts.CallUtil;
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.MoreContactUtils;
 import com.android.contacts.R;
-import com.android.contacts.common.CallUtil;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.MoreContactUtils;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.dataitem.EmailDataItem;
-import com.android.contacts.common.model.dataitem.ImDataItem;
-import com.android.contacts.common.model.dataitem.PhoneDataItem;
-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.model.account.AccountType.EditType;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.model.dataitem.EmailDataItem;
+import com.android.contacts.model.dataitem.ImDataItem;
+import com.android.contacts.model.dataitem.PhoneDataItem;
+import com.android.contacts.model.dataitem.SipAddressDataItem;
+import com.android.contacts.model.dataitem.StructuredPostalDataItem;
+import com.android.contacts.model.dataitem.WebsiteDataItem;
 import com.android.contacts.quickcontact.WebAddress.ParseException;
 import com.android.contacts.util.PhoneCapabilityTester;
 import com.android.contacts.util.StructuredPostalUtils;
@@ -215,10 +215,10 @@
                         mAlternateIntent = new Intent(
                                 Intent.ACTION_SENDTO, Uri.parse("xmpp:" + data + "?call"));
                         if (isVideoChatCapable) {
-                            mAlternateIconRes = R.drawable.sym_action_videochat_holo_light;
+                            mAlternateIconRes = R.drawable.quantum_ic_videocam_vd_theme_24;
                             mAlternateIconDescriptionRes = R.string.video_chat;
                         } else {
-                            mAlternateIconRes = R.drawable.sym_action_audiochat_holo_light;
+                            mAlternateIconRes = R.drawable.quantum_ic_mic_vd_theme_24;
                             mAlternateIconDescriptionRes = R.string.audio_chat;
                         }
                     }
diff --git a/src/com/android/contacts/quickcontact/DirectoryContactUtil.java b/src/com/android/contacts/quickcontact/DirectoryContactUtil.java
index c4969cc..4228971 100644
--- a/src/com/android/contacts/quickcontact/DirectoryContactUtil.java
+++ b/src/com/android/contacts/quickcontact/DirectoryContactUtil.java
@@ -16,17 +16,17 @@
 
 package com.android.contacts.quickcontact;
 
-import com.android.contacts.ContactSaveService;
-import com.android.contacts.R;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
 import android.provider.ContactsContract.Directory;
 import android.widget.Toast;
 
+import com.android.contacts.ContactSaveService;
+import com.android.contacts.R;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.account.AccountWithDataSet;
+
 import java.util.ArrayList;
 
 /**
diff --git a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
index d7efaf4..49da4c8 100644
--- a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
+++ b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java
@@ -47,12 +47,11 @@
 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;
 
 import com.android.contacts.R;
-import com.android.contacts.common.dialog.CallSubjectDialog;
+import com.android.contacts.dialog.CallSubjectDialog;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/src/com/android/contacts/quickcontact/InvisibleContactUtil.java b/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
index b31c07b..c8ec361 100644
--- a/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
+++ b/src/com/android/contacts/quickcontact/InvisibleContactUtil.java
@@ -6,18 +6,18 @@
 import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
 
 import com.android.contacts.ContactSaveService;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.Contact;
-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.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.dataitem.GroupMembershipDataItem;
 import com.android.contacts.group.GroupMetaData;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.RawContact;
+import com.android.contacts.model.RawContactDelta;
+import com.android.contacts.model.RawContactDeltaList;
+import com.android.contacts.model.RawContactModifier;
+import com.android.contacts.model.ValuesDelta;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.model.dataitem.GroupMembershipDataItem;
 
 import com.google.common.collect.Iterables;
 
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index fcd0a50..767b6c7 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -96,60 +96,24 @@
 import android.widget.Toast;
 import android.widget.Toolbar;
 
+import com.android.contacts.CallUtil;
+import com.android.contacts.ClipboardUtils;
+import com.android.contacts.Collapser;
 import com.android.contacts.ContactSaveService;
 import com.android.contacts.ContactsActivity;
+import com.android.contacts.ContactsUtils;
 import com.android.contacts.DynamicShortcuts;
 import com.android.contacts.NfcHandler;
 import com.android.contacts.R;
 import com.android.contacts.activities.ContactEditorActivity;
 import com.android.contacts.activities.ContactSelectionActivity;
-import com.android.contacts.common.CallUtil;
-import com.android.contacts.common.ClipboardUtils;
-import com.android.contacts.common.Collapser;
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.activity.RequestDesiredPermissionsActivity;
-import com.android.contacts.common.activity.RequestPermissionsActivity;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.compat.EventCompat;
-import com.android.contacts.common.compat.MultiWindowCompat;
-import com.android.contacts.common.dialog.CallSubjectDialog;
-import com.android.contacts.common.interactions.TouchPointManager;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
-import com.android.contacts.common.list.ShortcutIntentBuilder;
-import com.android.contacts.common.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
-import com.android.contacts.common.logging.Logger;
-import com.android.contacts.common.logging.QuickContactEvent.ActionType;
-import com.android.contacts.common.logging.QuickContactEvent.CardType;
-import com.android.contacts.common.logging.QuickContactEvent.ContactType;
-import com.android.contacts.common.logging.ScreenEvent.ScreenType;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.ContactLoader;
-import com.android.contacts.common.model.RawContact;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.dataitem.CustomDataItem;
-import com.android.contacts.common.model.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.model.dataitem.EmailDataItem;
-import com.android.contacts.common.model.dataitem.EventDataItem;
-import com.android.contacts.common.model.dataitem.ImDataItem;
-import com.android.contacts.common.model.dataitem.NicknameDataItem;
-import com.android.contacts.common.model.dataitem.NoteDataItem;
-import com.android.contacts.common.model.dataitem.OrganizationDataItem;
-import com.android.contacts.common.model.dataitem.PhoneDataItem;
-import com.android.contacts.common.model.dataitem.RelationDataItem;
-import com.android.contacts.common.model.dataitem.SipAddressDataItem;
-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.DateUtils;
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-import com.android.contacts.common.util.MaterialColorMapUtils;
-import com.android.contacts.common.util.MaterialColorMapUtils.MaterialPalette;
-import com.android.contacts.common.util.PermissionsUtil;
-import com.android.contacts.common.util.UriUtils;
-import com.android.contacts.common.util.ViewUtil;
+import com.android.contacts.activities.RequestDesiredPermissionsActivity;
+import com.android.contacts.activities.RequestPermissionsActivity;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.EventCompat;
+import com.android.contacts.compat.MultiWindowCompat;
 import com.android.contacts.detail.ContactDisplayUtils;
+import com.android.contacts.dialog.CallSubjectDialog;
 import com.android.contacts.editor.ContactEditorFragment;
 import com.android.contacts.editor.EditorIntents;
 import com.android.contacts.editor.EditorUiUtils;
@@ -158,17 +122,53 @@
 import com.android.contacts.interactions.ContactDeletionInteraction;
 import com.android.contacts.interactions.ContactInteraction;
 import com.android.contacts.interactions.SmsInteractionsLoader;
+import com.android.contacts.interactions.TouchPointManager;
+import com.android.contacts.lettertiles.LetterTileDrawable;
+import com.android.contacts.list.ShortcutIntentBuilder;
+import com.android.contacts.list.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
 import com.android.contacts.list.UiIntentActions;
+import com.android.contacts.logging.Logger;
+import com.android.contacts.logging.QuickContactEvent.ActionType;
+import com.android.contacts.logging.QuickContactEvent.CardType;
+import com.android.contacts.logging.QuickContactEvent.ContactType;
+import com.android.contacts.logging.ScreenEvent.ScreenType;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.ContactLoader;
+import com.android.contacts.model.RawContact;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.dataitem.CustomDataItem;
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.model.dataitem.EmailDataItem;
+import com.android.contacts.model.dataitem.EventDataItem;
+import com.android.contacts.model.dataitem.ImDataItem;
+import com.android.contacts.model.dataitem.NicknameDataItem;
+import com.android.contacts.model.dataitem.NoteDataItem;
+import com.android.contacts.model.dataitem.OrganizationDataItem;
+import com.android.contacts.model.dataitem.PhoneDataItem;
+import com.android.contacts.model.dataitem.RelationDataItem;
+import com.android.contacts.model.dataitem.SipAddressDataItem;
+import com.android.contacts.model.dataitem.StructuredNameDataItem;
+import com.android.contacts.model.dataitem.StructuredPostalDataItem;
+import com.android.contacts.model.dataitem.WebsiteDataItem;
 import com.android.contacts.quickcontact.ExpandingEntryCardView.Entry;
 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.DateUtils;
 import com.android.contacts.util.ImageViewDrawableSetter;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contacts.util.MaterialColorMapUtils;
+import com.android.contacts.util.MaterialColorMapUtils.MaterialPalette;
+import com.android.contacts.util.PermissionsUtil;
 import com.android.contacts.util.PhoneCapabilityTester;
 import com.android.contacts.util.SchedulingUtils;
 import com.android.contacts.util.SharedPreferenceUtil;
 import com.android.contacts.util.StructuredPostalUtils;
+import com.android.contacts.util.UriUtils;
+import com.android.contacts.util.ViewUtil;
 import com.android.contacts.widget.MultiShrinkScroller;
 import com.android.contacts.widget.MultiShrinkScroller.MultiShrinkScrollerListener;
 import com.android.contacts.widget.QuickContactImageView;
@@ -1375,7 +1375,7 @@
      */
     private void initializeNoContactDetailCard(boolean areAllRawContactsSimAccounts) {
         final Drawable phoneIcon = getResources().getDrawable(
-                R.drawable.ic_phone_24dp).mutate();
+                R.drawable.quantum_ic_phone_vd_theme_24).mutate();
         final Entry phonePromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT,
                 phoneIcon, getString(R.string.quickcontact_add_phone_number),
                 /* subHeader = */ null, /* subHeaderIcon = */ null, /* text = */ null,
@@ -1388,7 +1388,7 @@
                 /* thirdContentDescription = */ null,
                 /* thirdAction = */ Entry.ACTION_NONE,
                 /* thirdExtras = */ null,
-                R.drawable.ic_phone_24dp);
+                R.drawable.quantum_ic_phone_vd_theme_24);
 
         final List<List<Entry>> promptEntries = new ArrayList<>();
         promptEntries.add(new ArrayList<Entry>(1));
@@ -1396,7 +1396,7 @@
 
         if (!areAllRawContactsSimAccounts) {
             final Drawable emailIcon = getResources().getDrawable(
-                    R.drawable.ic_email_24dp).mutate();
+                    R.drawable.quantum_ic_email_vd_theme_24).mutate();
             final Entry emailPromptEntry = new Entry(CARD_ENTRY_ID_EDIT_CONTACT,
                     emailIcon, getString(R.string.quickcontact_add_email), /* subHeader = */ null,
                     /* subHeaderIcon = */ null,
@@ -1407,7 +1407,7 @@
                     /* EntryContextMenuInfo = */ null, /* thirdIcon = */ null,
                     /* thirdIntent = */ null, /* thirdContentDescription = */ null,
                     /* thirdAction = */ Entry.ACTION_NONE, /* thirdExtras = */ null,
-                    R.drawable.ic_email_24dp);
+                    R.drawable.quantum_ic_email_vd_theme_24);
 
             promptEntries.add(new ArrayList<Entry>(1));
             promptEntries.get(1).add(emailPromptEntry);
@@ -1723,10 +1723,10 @@
                     }
                 }
                 primaryContentDescription.append(header);
-                phoneContentDescription = com.android.contacts.common.util.ContactDisplayUtils
+                phoneContentDescription = com.android.contacts.util.ContactDisplayUtils
                         .getTelephoneTtsSpannable(primaryContentDescription.toString(), header);
-                icon = res.getDrawable(R.drawable.ic_phone_24dp);
-                iconResourceId = R.drawable.ic_phone_24dp;
+                iconResourceId = R.drawable.quantum_ic_phone_vd_theme_24;
+                icon = res.getDrawable(iconResourceId);
                 if (PhoneCapabilityTester.isPhone(context)) {
                     intent = CallUtil.getCallIntent(phone.getNumber());
                     intent.putExtra(EXTRA_ACTION_TYPE, ActionType.CALL);
@@ -1735,9 +1735,9 @@
                         Uri.fromParts(ContactsUtils.SCHEME_SMSTO, phone.getNumber(), null));
                 alternateIntent.putExtra(EXTRA_ACTION_TYPE, ActionType.SMS);
 
-                alternateIcon = res.getDrawable(R.drawable.ic_message_24dp_mirrored);
+                alternateIcon = res.getDrawable(R.drawable.quantum_ic_message_vd_theme_24);
                 alternateContentDescription.append(res.getString(R.string.sms_custom, header));
-                smsContentDescription = com.android.contacts.common.util.ContactDisplayUtils
+                smsContentDescription = com.android.contacts.util.ContactDisplayUtils
                         .getTelephoneTtsSpannable(alternateContentDescription.toString(), header);
 
                 int videoCapability = CallUtil.getVideoCallingAvailability(context);
@@ -1746,7 +1746,7 @@
                 boolean isVideoEnabled = (videoCapability & CallUtil.VIDEO_CALLING_ENABLED) != 0;
 
                 if (CallUtil.isCallWithSubjectSupported(context)) {
-                    thirdIcon = res.getDrawable(R.drawable.ic_call_note_white_24dp);
+                    thirdIcon = res.getDrawable(R.drawable.quantum_ic_perm_phone_msg_vd_theme_24);
                     thirdAction = Entry.ACTION_CALL_WITH_SUBJECT;
                     thirdContentDescription =
                             res.getString(R.string.call_with_a_note);
@@ -1773,7 +1773,7 @@
                     boolean isPresent = (carrierPresence & Phone.CARRIER_PRESENCE_VT_CAPABLE) != 0;
 
                     if ((isPresenceEnabled && isPresent) || !isPresenceEnabled) {
-                        thirdIcon = res.getDrawable(R.drawable.ic_videocam);
+                        thirdIcon = res.getDrawable(R.drawable.quantum_ic_videocam_vd_theme_24);
                         thirdAction = Entry.ACTION_INTENT;
                         thirdIntent = CallUtil.getVideoCallIntent(phone.getNumber(),
                                 CALL_ORIGIN_QUICK_CONTACTS_ACTIVITY);
@@ -1801,8 +1801,8 @@
                     primaryContentDescription.append(text).append(" ");
                 }
                 primaryContentDescription.append(header);
-                icon = res.getDrawable(R.drawable.ic_email_24dp);
-                iconResourceId = R.drawable.ic_email_24dp;
+                iconResourceId = R.drawable.quantum_ic_email_vd_theme_24;
+                icon = res.getDrawable(iconResourceId);
             }
         } else if (dataItem instanceof StructuredPostalDataItem) {
             StructuredPostalDataItem postal = (StructuredPostalDataItem) dataItem;
@@ -1824,11 +1824,11 @@
                 alternateIntent =
                         StructuredPostalUtils.getViewPostalAddressDirectionsIntent(postalAddress);
                 alternateIntent.putExtra(EXTRA_ACTION_TYPE, ActionType.DIRECTIONS);
-                alternateIcon = res.getDrawable(R.drawable.ic_directions_24dp);
+                alternateIcon = res.getDrawable(R.drawable.quantum_ic_directions_vd_theme_24);
                 alternateContentDescription.append(res.getString(
                         R.string.content_description_directions)).append(" ").append(header);
-                icon = res.getDrawable(R.drawable.ic_place_24dp);
-                iconResourceId = R.drawable.ic_place_24dp;
+                iconResourceId = R.drawable.quantum_ic_place_vd_theme_24;
+                icon = res.getDrawable(iconResourceId);
             }
         } else if (dataItem instanceof SipAddressDataItem) {
             final SipAddressDataItem sip = (SipAddressDataItem) dataItem;
@@ -1851,8 +1851,8 @@
                     primaryContentDescription.append(text).append(" ");
                 }
                 primaryContentDescription.append(header);
-                icon = res.getDrawable(R.drawable.ic_dialer_sip_black_24dp);
-                iconResourceId = R.drawable.ic_dialer_sip_black_24dp;
+                iconResourceId = R.drawable.quantum_ic_dialer_sip_vd_theme_24;
+                icon = res.getDrawable(iconResourceId);
             }
         } else if (dataItem instanceof StructuredNameDataItem) {
             // If the name is already set and this is not the super primary value then leave the
@@ -1885,8 +1885,9 @@
                     // If a secondDataItem is available, use it to build an entry with
                     // alternate actions
                     if (secondDataItem != null) {
-                        icon = res.getDrawable(R.drawable.ic_hangout_24dp);
-                        alternateIcon = res.getDrawable(R.drawable.ic_hangout_video_24dp);
+                        icon = res.getDrawable(R.drawable.quantum_ic_hangout_vd_theme_24);
+                        alternateIcon = res.getDrawable(
+                                R.drawable.quantum_ic_hangout_video_vd_theme_24);
                         final HangoutsDataItemModel itemModel =
                                 new HangoutsDataItemModel(intent, alternateIntent,
                                         dataItem, secondDataItem, alternateContentDescription,
@@ -1900,9 +1901,9 @@
                         text = itemModel.text;
                     } else {
                         if (HANGOUTS_DATA_5_VIDEO.equals(intent.getDataString())) {
-                            icon = res.getDrawable(R.drawable.ic_hangout_video_24dp);
+                            icon = res.getDrawable(R.drawable.quantum_ic_hangout_video_vd_theme_24);
                         } else {
-                            icon = res.getDrawable(R.drawable.ic_hangout_24dp);
+                            icon = res.getDrawable(R.drawable.quantum_ic_hangout_vd_theme_24);
                         }
                     }
                 } else {
@@ -2318,8 +2319,8 @@
             // Load all contact data. We need loadGroupMetaData=true to determine whether the
             // contact is invisible. If it is, we need to display an "Add to Contacts" MenuItem.
             return new ContactLoader(getApplicationContext(), mLookupUri,
-                    true /*loadGroupMetaData*/, false /*loadInvitableAccountTypes*/,
-                    true /*postViewNotification*/, true /*computeFormattedPhoneNumber*/);
+                    true /*loadGroupMetaData*/, true /*postViewNotification*/,
+                    true /*computeFormattedPhoneNumber*/);
         }
     };
 
@@ -2480,8 +2481,8 @@
                 Trace.endSection();
                 Trace.beginSection("initialize permission explanation card");
 
-                final Drawable historyIcon = VectorDrawableCompat.create(
-                        getResources(), R.drawable.ic_history_24dp, null);
+                final Drawable historyIcon = getResources().getDrawable(
+                        R.drawable.quantum_ic_history_vd_theme_24);
 
                 final Entry permissionExplanationEntry = new Entry(CARD_ENTRY_ID_REQUEST_PERMISSION,
                         historyIcon, getString(R.string.permission_explanation_header),
@@ -2493,7 +2494,7 @@
                         /* isEditable = */ false, /* EntryContextMenuInfo = */ null,
                         /* thirdIcon = */ null, /* thirdIntent = */ null,
                         /* thirdContentDescription = */ null, /* thirdAction = */ Entry.ACTION_NONE,
-                        /* thirdExtras = */ null, R.drawable.ic_history_24dp);
+                        /* thirdExtras = */ null, R.drawable.quantum_ic_history_vd_theme_24);
 
                 final List<List<Entry>> permissionExplanationEntries = new ArrayList<>();
                 permissionExplanationEntries.add(new ArrayList<Entry>());
@@ -2705,10 +2706,10 @@
             editMenuItem.setVisible(true);
             if (DirectoryContactUtil.isDirectoryContact(mContactData) || InvisibleContactUtil
                     .isInvisibleAndAddable(mContactData, this)) {
-                editMenuItem.setIcon(R.drawable.ic_person_add_tinted_24dp);
+                editMenuItem.setIcon(R.drawable.quantum_ic_person_add_vd_theme_24);
                 editMenuItem.setTitle(R.string.menu_add_contact);
             } else if (isContactEditable()) {
-                editMenuItem.setIcon(R.drawable.ic_create_24dp);
+                editMenuItem.setIcon(R.drawable.quantum_ic_create_vd_theme_24);
                 editMenuItem.setTitle(R.string.menu_editContact);
             } else {
                 editMenuItem.setVisible(false);
@@ -2756,137 +2757,128 @@
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
-        switch (item.getItemId()) {
-            case R.id.menu_star:
-                // Make sure there is a contact
-                if (mContactData != null) {
-                    // Read the current starred value from the UI instead of using the last
-                    // loaded state. This allows rapid tapping without writing the same
-                    // value several times
-                    final boolean isStarred = item.isChecked();
-                    Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                            isStarred ? ActionType.UNSTAR : ActionType.STAR,
+        final int id = item.getItemId();
+        if (id == R.id.menu_star) {// Make sure there is a contact
+            if (mContactData != null) {
+                // Read the current starred value from the UI instead of using the last
+                // loaded state. This allows rapid tapping without writing the same
+                // value several times
+                final boolean isStarred = item.isChecked();
+                Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+                        isStarred ? ActionType.UNSTAR : ActionType.STAR,
                             /* thirdPartyAction */ null);
-                    toggleStar(item, isStarred);
-                }
-                return true;
-            case R.id.menu_edit:
-                if (DirectoryContactUtil.isDirectoryContact(mContactData)) {
-                    Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                            ActionType.ADD, /* thirdPartyAction */ null);
-
-                    // This action is used to launch the contact selector, with the option of
-                    // creating a new contact. Creating a new contact is an INSERT, while selecting
-                    // an exisiting one is an edit. The fields in the edit screen will be
-                    // prepopulated with data.
-
-                    final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
-                    intent.setType(Contacts.CONTENT_ITEM_TYPE);
-
-                    ArrayList<ContentValues> values = mContactData.getContentValues();
-
-                    // Only pre-fill the name field if the provided display name is an nickname
-                    // or better (e.g. structured name, nickname)
-                    if (mContactData.getDisplayNameSource() >= DisplayNameSources.NICKNAME) {
-                        intent.putExtra(Intents.Insert.NAME, mContactData.getDisplayName());
-                    } else if (mContactData.getDisplayNameSource()
-                            == DisplayNameSources.ORGANIZATION) {
-                        // This is probably an organization. Instead of copying the organization
-                        // name into a name entry, copy it into the organization entry. This
-                        // way we will still consider the contact an organization.
-                        final ContentValues organization = new ContentValues();
-                        organization.put(Organization.COMPANY, mContactData.getDisplayName());
-                        organization.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
-                        values.add(organization);
-                    }
-
-                    // Last time used and times used are aggregated values from the usage stat
-                    // table. They need to be removed from data values so the SQL table can insert
-                    // properly
-                    for (ContentValues value : values) {
-                        value.remove(Data.LAST_TIME_USED);
-                        value.remove(Data.TIMES_USED);
-                    }
-                    intent.putExtra(Intents.Insert.DATA, values);
-
-                    // If the contact can only export to the same account, add it to the intent.
-                    // Otherwise the ContactEditorFragment will show a dialog for selecting
-                    // an account.
-                    if (mContactData.getDirectoryExportSupport() ==
-                            Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY) {
-                        intent.putExtra(Intents.Insert.EXTRA_ACCOUNT,
-                                new Account(mContactData.getDirectoryAccountName(),
-                                        mContactData.getDirectoryAccountType()));
-                        intent.putExtra(Intents.Insert.EXTRA_DATA_SET,
-                                mContactData.getRawContacts().get(0).getDataSet());
-                    }
-
-                    // Add this flag to disable the delete menu option on directory contact joins
-                    // with local contacts. The delete option is ambiguous when joining contacts.
-                    intent.putExtra(
-                            ContactEditorFragment.INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION,
-                            true);
-
-                    intent.setPackage(getPackageName());
-                    startActivityForResult(intent, REQUEST_CODE_CONTACT_SELECTION_ACTIVITY);
-                } else if (InvisibleContactUtil.isInvisibleAndAddable(mContactData, this)) {
-                    Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                            ActionType.ADD, /* thirdPartyAction */ null);
-                    InvisibleContactUtil.addToDefaultGroup(mContactData, this);
-                } else if (isContactEditable()) {
-                    Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                            ActionType.EDIT, /* thirdPartyAction */ null);
-                    editContact();
-                }
-                return true;
-            case R.id.menu_join:
-                return doJoinContactAction();
-            case R.id.menu_linked_contacts:
-                return showRawContactPickerDialog();
-            case R.id.menu_delete:
+                toggleStar(item, isStarred);
+            }
+        } else if (id == R.id.menu_edit) {
+            if (DirectoryContactUtil.isDirectoryContact(mContactData)) {
                 Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                        ActionType.REMOVE, /* thirdPartyAction */ null);
-                if (isContactEditable()) {
-                    deleteContact();
+                        ActionType.ADD, /* thirdPartyAction */ null);
+
+                // This action is used to launch the contact selector, with the option of
+                // creating a new contact. Creating a new contact is an INSERT, while selecting
+                // an exisiting one is an edit. The fields in the edit screen will be
+                // prepopulated with data.
+
+                final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+                intent.setType(Contacts.CONTENT_ITEM_TYPE);
+
+                ArrayList<ContentValues> values = mContactData.getContentValues();
+
+                // Only pre-fill the name field if the provided display name is an nickname
+                // or better (e.g. structured name, nickname)
+                if (mContactData.getDisplayNameSource() >= DisplayNameSources.NICKNAME) {
+                    intent.putExtra(Intents.Insert.NAME, mContactData.getDisplayName());
+                } else if (mContactData.getDisplayNameSource()
+                        == DisplayNameSources.ORGANIZATION) {
+                    // This is probably an organization. Instead of copying the organization
+                    // name into a name entry, copy it into the organization entry. This
+                    // way we will still consider the contact an organization.
+                    final ContentValues organization = new ContentValues();
+                    organization.put(Organization.COMPANY, mContactData.getDisplayName());
+                    organization.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+                    values.add(organization);
                 }
-                return true;
-            case R.id.menu_share:
-                Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                        ActionType.SHARE, /* thirdPartyAction */ null);
-                if (isContactShareable()) {
-                    shareContact();
+
+                // Last time used and times used are aggregated values from the usage stat
+                // table. They need to be removed from data values so the SQL table can insert
+                // properly
+                for (ContentValues value : values) {
+                    value.remove(Data.LAST_TIME_USED);
+                    value.remove(Data.TIMES_USED);
                 }
-                return true;
-            case R.id.menu_create_contact_shortcut:
-                Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                        ActionType.SHORTCUT, /* thirdPartyAction */ null);
-                if (isShortcutCreatable()) {
-                    createLauncherShortcutWithContact();
+                intent.putExtra(Intents.Insert.DATA, values);
+
+                // If the contact can only export to the same account, add it to the intent.
+                // Otherwise the ContactEditorFragment will show a dialog for selecting
+                // an account.
+                if (mContactData.getDirectoryExportSupport() ==
+                        Directory.EXPORT_SUPPORT_SAME_ACCOUNT_ONLY) {
+                    intent.putExtra(Intents.Insert.EXTRA_ACCOUNT,
+                            new Account(mContactData.getDirectoryAccountName(),
+                                    mContactData.getDirectoryAccountType()));
+                    intent.putExtra(Intents.Insert.EXTRA_DATA_SET,
+                            mContactData.getRawContacts().get(0).getDataSet());
                 }
-                return true;
-            case R.id.menu_set_ringtone:
-                doPickRingtone();
-                return true;
-            case R.id.menu_send_to_voicemail:
-                // Update state and save
-                mSendToVoicemailState = !mSendToVoicemailState;
-                item.setTitle(mSendToVoicemailState
-                        ? R.string.menu_unredirect_calls_to_vm
-                        : R.string.menu_redirect_calls_to_vm);
-                final Intent intent = ContactSaveService.createSetSendToVoicemail(
-                        this, mLookupUri, mSendToVoicemailState);
-                this.startService(intent);
-                return true;
-            case R.id.menu_help:
+
+                // Add this flag to disable the delete menu option on directory contact joins
+                // with local contacts. The delete option is ambiguous when joining contacts.
+                intent.putExtra(
+                        ContactEditorFragment.INTENT_EXTRA_DISABLE_DELETE_MENU_OPTION,
+                        true);
+
+                intent.setPackage(getPackageName());
+                startActivityForResult(intent, REQUEST_CODE_CONTACT_SELECTION_ACTIVITY);
+            } else if (InvisibleContactUtil.isInvisibleAndAddable(mContactData, this)) {
                 Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                        ActionType.HELP, /* thirdPartyAction */ null);
-                HelpUtils.launchHelpAndFeedbackForContactScreen(this);
-                return true;
-            default:
+                        ActionType.ADD, /* thirdPartyAction */ null);
+                InvisibleContactUtil.addToDefaultGroup(mContactData, this);
+            } else if (isContactEditable()) {
                 Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
-                        ActionType.UNKNOWN_ACTION, /* thirdPartyAction */ null);
-                return super.onOptionsItemSelected(item);
+                        ActionType.EDIT, /* thirdPartyAction */ null);
+                editContact();
+            }
+        } else if (id == R.id.menu_join) {
+            return doJoinContactAction();
+        } else if (id == R.id.menu_linked_contacts) {
+            return showRawContactPickerDialog();
+        } else if (id == R.id.menu_delete) {
+            Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+                    ActionType.REMOVE, /* thirdPartyAction */ null);
+            if (isContactEditable()) {
+                deleteContact();
+            }
+        } else if (id == R.id.menu_share) {
+            Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+                    ActionType.SHARE, /* thirdPartyAction */ null);
+            if (isContactShareable()) {
+                shareContact();
+            }
+        } else if (id == R.id.menu_create_contact_shortcut) {
+            Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+                    ActionType.SHORTCUT, /* thirdPartyAction */ null);
+            if (isShortcutCreatable()) {
+                createLauncherShortcutWithContact();
+            }
+        } else if (id == R.id.menu_set_ringtone) {
+            doPickRingtone();
+        } else if (id == R.id.menu_send_to_voicemail) {// Update state and save
+            mSendToVoicemailState = !mSendToVoicemailState;
+            item.setTitle(mSendToVoicemailState
+                    ? R.string.menu_unredirect_calls_to_vm
+                    : R.string.menu_redirect_calls_to_vm);
+            final Intent intent = ContactSaveService.createSetSendToVoicemail(
+                    this, mLookupUri, mSendToVoicemailState);
+            this.startService(intent);
+        } else if (id == R.id.menu_help) {
+            Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+                    ActionType.HELP, /* thirdPartyAction */ null);
+            HelpUtils.launchHelpAndFeedbackForContactScreen(this);
+        } else {
+            Logger.logQuickContactEvent(mReferrer, mContactType, CardType.UNKNOWN_CARD,
+                    ActionType.UNKNOWN_ACTION, /* thirdPartyAction */ null);
+            return super.onOptionsItemSelected(item);
         }
+        return true;
     }
 
     private boolean showRawContactPickerDialog() {
diff --git a/src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java b/src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java
index dae10af..a032a99 100644
--- a/src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java
+++ b/src/com/android/contacts/quickcontact/QuickContactBroadcastReceiver.java
@@ -16,14 +16,14 @@
 
 package com.android.contacts.quickcontact;
 
-import com.android.contacts.common.util.ImplicitIntentsUtil;
-
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
 import android.provider.ContactsContract.QuickContact;
 
+import com.android.contacts.util.ImplicitIntentsUtil;
+
 /**
  * Broadcast receiver for invoking QuickContact using the widget. The purpose of this pass-through
  * intent receiver is to disable the animation that RemoveViews typically do, which interfere
diff --git a/src/com/android/contacts/quickcontact/ResolveCache.java b/src/com/android/contacts/quickcontact/ResolveCache.java
index e6adaf3..303132c 100644
--- a/src/com/android/contacts/quickcontact/ResolveCache.java
+++ b/src/com/android/contacts/quickcontact/ResolveCache.java
@@ -25,9 +25,9 @@
 import android.content.pm.ResolveInfo;
 import android.graphics.drawable.Drawable;
 import android.provider.ContactsContract.CommonDataKinds.SipAddress;
-import android.text.TextUtils;
 
 import com.android.contacts.util.PhoneCapabilityTester;
+
 import com.google.common.collect.Sets;
 
 import java.lang.ref.SoftReference;
diff --git a/src/com/android/contacts/quickcontact/WebAddress.java b/src/com/android/contacts/quickcontact/WebAddress.java
index d55a874..ab581c2 100644
--- a/src/com/android/contacts/quickcontact/WebAddress.java
+++ b/src/com/android/contacts/quickcontact/WebAddress.java
@@ -16,12 +16,12 @@
 
 package com.android.contacts.quickcontact;
 
+import static android.util.Patterns.GOOD_IRI_CHAR;
+
 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.
diff --git a/src/com/android/contacts/testing/InjectedServices.java b/src/com/android/contacts/testing/InjectedServices.java
new file mode 100644
index 0000000..3822dd6
--- /dev/null
+++ b/src/com/android/contacts/testing/InjectedServices.java
@@ -0,0 +1,67 @@
+/*
+ * 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.testing;
+
+import android.content.ContentResolver;
+import android.content.SharedPreferences;
+
+import com.google.common.collect.Maps;
+
+import java.util.HashMap;
+
+/**
+ * A mechanism for providing alternative (mock) services to the application
+ * while running tests. Activities, Services and the Application should check
+ * with this class to see if a particular service has been overridden.
+ */
+public class InjectedServices {
+
+    private ContentResolver mContentResolver;
+    private SharedPreferences mSharedPreferences;
+    private HashMap<String, Object> mSystemServices;
+
+    public void setContentResolver(ContentResolver contentResolver) {
+        this.mContentResolver = contentResolver;
+    }
+
+    public ContentResolver getContentResolver() {
+        return mContentResolver;
+    }
+
+    public void setSharedPreferences(SharedPreferences sharedPreferences) {
+        this.mSharedPreferences = sharedPreferences;
+    }
+
+    public SharedPreferences getSharedPreferences() {
+        return mSharedPreferences;
+    }
+
+    public void setSystemService(String name, Object service) {
+        if (mSystemServices == null) {
+            mSystemServices = Maps.newHashMap();
+        }
+
+        mSystemServices.put(name, service);
+    }
+
+    public Object getSystemService(String name) {
+        if (mSystemServices != null) {
+            return mSystemServices.get(name);
+        }
+        return null;
+    }
+}
diff --git a/src/com/android/contacts/util/AccountFilterUtil.java b/src/com/android/contacts/util/AccountFilterUtil.java
new file mode 100644
index 0000000..a7824f4
--- /dev/null
+++ b/src/com/android/contacts/util/AccountFilterUtil.java
@@ -0,0 +1,242 @@
+/*
+ * 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.util;
+
+import android.accounts.Account;
+import android.app.Activity;
+import android.app.Fragment;
+import android.content.ActivityNotFoundException;
+import android.content.AsyncTaskLoader;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.graphics.drawable.Drawable;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Intents;
+import android.support.v4.content.LocalBroadcastManager;
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.ContactEditorActivity;
+import com.android.contacts.list.AccountFilterActivity;
+import com.android.contacts.list.ContactListFilter;
+import com.android.contacts.list.ContactListFilterController;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.Contact;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferences;
+import com.android.contacts.util.concurrent.ContactsExecutors;
+import com.android.contacts.util.concurrent.ListenableFutureLoader;
+import com.android.contactsbind.ObjectFactory;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.annotation.Nullable;
+
+/**
+ * Utility class for account filter manipulation.
+ */
+public class AccountFilterUtil {
+    private static final String TAG = AccountFilterUtil.class.getSimpleName();
+
+     /**
+      * Launches account filter setting Activity using
+      * {@link Fragment#startActivityForResult(Intent, int)}.
+      *
+      * @param requestCode requestCode for {@link Activity#startActivityForResult(Intent, int)}
+      * @param currentFilter currently-selected filter, so that it can be displayed as activated.
+      */
+     public static void startAccountFilterActivityForResult(
+             Fragment fragment, int requestCode, ContactListFilter currentFilter) {
+         final Activity activity = fragment.getActivity();
+         if (activity != null) {
+             final Intent intent = new Intent(activity, AccountFilterActivity.class);
+             fragment.startActivityForResult(intent, requestCode);
+         } else {
+             Log.w(TAG, "getActivity() returned null. Ignored");
+         }
+     }
+
+    /**
+     * Useful method to handle onActivityResult() for
+     * {@link #startAccountFilterActivityForResult(Fragment, int, ContactListFilter)}.
+     *
+     * This will update filter via a given ContactListFilterController.
+     */
+    public static void handleAccountFilterResult(
+            ContactListFilterController filterController, int resultCode, Intent data) {
+        if (resultCode == Activity.RESULT_OK) {
+            final ContactListFilter filter = (ContactListFilter)
+                    data.getParcelableExtra(AccountFilterActivity.EXTRA_CONTACT_LIST_FILTER);
+            if (filter == null) {
+                return;
+            }
+            if (filter.filterType == ContactListFilter.FILTER_TYPE_CUSTOM) {
+                filterController.selectCustomFilter();
+            } else {
+                filterController.setContactListFilter(filter, /* persistent */
+                        filter.filterType == ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS);
+            }
+        }
+    }
+
+    /**
+     * Loads a list of contact list filters
+     */
+    public static class FilterLoader extends ListenableFutureLoader<List<ContactListFilter>> {
+        private AccountTypeManager mAccountTypeManager;
+        private DeviceLocalAccountTypeFactory mDeviceLocalFactory;
+
+        public FilterLoader(Context context) {
+            super(context, new IntentFilter(AccountTypeManager.BROADCAST_ACCOUNTS_CHANGED));
+            mAccountTypeManager = AccountTypeManager.getInstance(context);
+            mDeviceLocalFactory = ObjectFactory.getDeviceLocalAccountTypeFactory(context);
+        }
+
+
+        @Override
+        protected ListenableFuture<List<ContactListFilter>> loadData() {
+            return Futures.transform(mAccountTypeManager.filterAccountsAsync(
+                    AccountTypeManager.writableFilter()),
+                    new Function<List<AccountInfo>, List<ContactListFilter>>() {
+                        @Override
+                        public List<ContactListFilter> apply(List<AccountInfo> input) {
+                            return getFiltersForAccounts(input);
+                        }
+                    }, ContactsExecutors.getDefaultThreadPoolExecutor());
+        }
+
+        private List<ContactListFilter> getFiltersForAccounts(List<AccountInfo> accounts) {
+            final ArrayList<ContactListFilter> accountFilters = new ArrayList<>();
+            AccountInfo.sortAccounts(getDefaultAccount(getContext()), accounts);
+
+            for (AccountInfo accountInfo : accounts) {
+                final AccountType accountType = accountInfo.getType();
+                final AccountWithDataSet account = accountInfo.getAccount();
+                if ((accountType.isExtension() ||
+                        DeviceLocalAccountTypeFactory.Util.isLocalAccountType(
+                                mDeviceLocalFactory, account.type)) &&
+                        !account.hasData(getContext())) {
+                    // Hide extensions and device accounts with no raw_contacts.
+                    continue;
+                }
+                final Drawable icon = accountType != null ?
+                        accountType.getDisplayIcon(getContext()) : null;
+                if (DeviceLocalAccountTypeFactory.Util.isLocalAccountType(
+                        mDeviceLocalFactory, account.type)) {
+                    accountFilters.add(ContactListFilter.createDeviceContactsFilter(icon, account));
+                } else {
+                    accountFilters.add(ContactListFilter.createAccountFilter(
+                            account.type, account.name, account.dataSet, icon));
+                }
+            }
+
+            return accountFilters;
+        }
+    }
+
+    private static AccountWithDataSet getDefaultAccount(Context context) {
+        return new ContactsPreferences(context).getDefaultAccount();
+    }
+
+    /**
+     * Returns a {@link ContactListFilter} of type
+     * {@link ContactListFilter#FILTER_TYPE_ALL_ACCOUNTS}, or if a custom "Contacts to display"
+     * filter has been set, then one of type {@link ContactListFilter#FILTER_TYPE_CUSTOM}.
+     */
+    public static ContactListFilter createContactsFilter(Context context) {
+        final int filterType =
+                ContactListFilterController.getInstance(context).isCustomFilterPersisted()
+                        ? ContactListFilter.FILTER_TYPE_CUSTOM
+                        : ContactListFilter.FILTER_TYPE_ALL_ACCOUNTS;
+        return ContactListFilter.createFilterWithType(filterType);
+    }
+
+    /**
+     * Start editor intent; and if filter is an account filter, we pass account info to editor so
+     * as to create a contact in that account.
+     */
+    public static void startEditorIntent(Context context, Intent src, ContactListFilter filter) {
+        final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
+        intent.putExtras(src);
+
+        // If we are in account view, we pass the account explicitly in order to
+        // create contact in the account. This will prevent the default account dialog
+        // from being displayed.
+        if (!isAllContactsFilter(filter) && filter.accountName != null
+                && filter.accountType != null) {
+            final Account account = new Account(filter.accountName, filter.accountType);
+            intent.putExtra(Intents.Insert.EXTRA_ACCOUNT, account);
+            intent.putExtra(Intents.Insert.EXTRA_DATA_SET, filter.dataSet);
+        } else if (isDeviceContactsFilter(filter)) {
+            intent.putExtra(ContactEditorActivity.EXTRA_ACCOUNT_WITH_DATA_SET,
+                    filter.toAccountWithDataSet());
+        }
+
+        try {
+            ImplicitIntentsUtil.startActivityInApp(context, intent);
+        } catch (ActivityNotFoundException ex) {
+            Toast.makeText(context, R.string.missing_app, Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    public static boolean isAllContactsFilter(ContactListFilter filter) {
+        return filter != null && filter.isContactsFilterType();
+    }
+
+    public static boolean isDeviceContactsFilter(ContactListFilter filter) {
+        return filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS;
+    }
+
+    /**
+     * Returns action bar title for filter and returns default title "Contacts" if filter is empty.
+     */
+    public static String getActionBarTitleForFilter(Context context, ContactListFilter filter) {
+        if (filter.filterType == ContactListFilter.FILTER_TYPE_DEVICE_CONTACTS) {
+            return context.getString(R.string.account_phone);
+        } else if (filter.filterType == ContactListFilter.FILTER_TYPE_ACCOUNT &&
+                !TextUtils.isEmpty(filter.accountName)) {
+            return getActionBarTitleForAccount(context, filter);
+        }
+        return context.getString(R.string.contactsList);
+    }
+
+    private static String getActionBarTitleForAccount(Context context, ContactListFilter filter) {
+        final AccountDisplayInfoFactory factory =
+                AccountDisplayInfoFactory.forAllAccounts(context);
+        final AccountDisplayInfo account = factory.getAccountDisplayInfoFor(filter);
+        if (account.hasGoogleAccountType()) {
+            return context.getString(R.string.title_from_google);
+        }
+        return account.withFormattedName(context, R.string.title_from_other_accounts)
+                .getNameLabel().toString();
+    }
+}
diff --git a/src/com/android/contacts/util/AccountSelectionUtil.java b/src/com/android/contacts/util/AccountSelectionUtil.java
new file mode 100644
index 0000000..a29af9a
--- /dev/null
+++ b/src/com/android/contacts/util/AccountSelectionUtil.java
@@ -0,0 +1,204 @@
+/*
+ * 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.util;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.net.Uri;
+import android.util.Log;
+import android.view.ContextThemeWrapper;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.vcard.ImportVCardActivity;
+
+import java.util.List;
+
+/**
+ * Utility class for selecting an Account for importing contact(s)
+ */
+public class AccountSelectionUtil {
+    // TODO: maybe useful for EditContactActivity.java...
+    private static final String LOG_TAG = "AccountSelectionUtil";
+
+    public static boolean mVCardShare = false;
+
+    public static Uri mPath;
+
+    public static class AccountSelectedListener
+            implements DialogInterface.OnClickListener {
+
+        final private Activity mActivity;
+        final private int mResId;
+        final private int mSubscriptionId;
+
+        final protected List<AccountWithDataSet> mAccountList;
+
+        public AccountSelectedListener(Activity activity, List<AccountWithDataSet> accountList,
+                int resId, int subscriptionId) {
+            if (accountList == null || accountList.size() == 0) {
+                Log.e(LOG_TAG, "The size of Account list is 0.");
+            }
+            mActivity = activity;
+            mAccountList = accountList;
+            mResId = resId;
+            mSubscriptionId = subscriptionId;
+        }
+
+        public AccountSelectedListener(Activity activity, List<AccountWithDataSet> accountList,
+                int resId) {
+            // Subscription id is only needed for importing from SIM card. We can safely ignore
+            // its value for SD card importing.
+            this(activity, accountList, resId, /* subscriptionId = */ -1);
+        }
+
+        public void onClick(DialogInterface dialog, int which) {
+            dialog.dismiss();
+            doImport(mActivity, mResId, mAccountList.get(which), mSubscriptionId);
+        }
+    }
+
+    public static Dialog getSelectAccountDialog(Activity activity, int resId) {
+        return getSelectAccountDialog(activity, resId, null, null);
+    }
+
+    public static Dialog getSelectAccountDialog(Activity activity, int resId,
+            DialogInterface.OnClickListener onClickListener) {
+        return getSelectAccountDialog(activity, resId, onClickListener, null);
+    }
+
+    /**
+     * When OnClickListener or OnCancelListener is null, uses a default listener.
+     * The default OnCancelListener just closes itself with {@link Dialog#dismiss()}.
+     */
+    public static Dialog getSelectAccountDialog(Activity activity, int resId,
+            DialogInterface.OnClickListener onClickListener,
+            DialogInterface.OnCancelListener onCancelListener) {
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(activity);
+        final List<AccountWithDataSet> writableAccountList = accountTypes.getAccounts(true);
+
+        Log.i(LOG_TAG, "The number of available accounts: " + writableAccountList.size());
+
+        // Assume accountList.size() > 1
+
+        // Wrap our context to inflate list items using correct theme
+        final Context dialogContext = new ContextThemeWrapper(
+                activity, android.R.style.Theme_Light);
+        final LayoutInflater dialogInflater = (LayoutInflater)dialogContext
+                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        final ArrayAdapter<AccountWithDataSet> accountAdapter =
+            new ArrayAdapter<AccountWithDataSet>(
+                    activity, R.layout.account_selector_list_item_condensed, writableAccountList) {
+            @Override
+            public View getView(int position, View convertView, ViewGroup parent) {
+                if (convertView == null) {
+                    convertView = dialogInflater.inflate(
+                            R.layout.account_selector_list_item_condensed,
+                            parent, false);
+                }
+
+                final TextView text1 = (TextView) convertView.findViewById(android.R.id.text1);
+                final TextView text2 = (TextView) convertView.findViewById(android.R.id.text2);
+                final ImageView icon = (ImageView) convertView.findViewById(android.R.id.icon);
+
+                final AccountWithDataSet account = this.getItem(position);
+                final AccountType accountType = accountTypes.getAccountType(
+                        account.type, account.dataSet);
+                final Context context = getContext();
+
+                text1.setText(accountType.getDisplayLabel(context));
+                text2.setText(account.name);
+                icon.setImageDrawable(accountType.getDisplayIcon(getContext()));
+
+                return convertView;
+            }
+        };
+
+        if (onClickListener == null) {
+            AccountSelectedListener accountSelectedListener =
+                new AccountSelectedListener(activity, writableAccountList, resId);
+            onClickListener = accountSelectedListener;
+        }
+        if (onCancelListener == null) {
+            onCancelListener = new DialogInterface.OnCancelListener() {
+                public void onCancel(DialogInterface dialog) {
+                    dialog.dismiss();
+                }
+            };
+        }
+        final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
+        final TextView title = (TextView) View.inflate(activity, R.layout.dialog_title, null);
+        title.setText(R.string.dialog_new_contact_account);
+        builder.setCustomTitle(title);
+        builder.setSingleChoiceItems(accountAdapter, 0, onClickListener);
+        builder.setOnCancelListener(onCancelListener);
+        final AlertDialog result = builder.create();
+        return result;
+    }
+
+    public static void doImport(Activity activity, int resId, AccountWithDataSet account,
+            int subscriptionId) {
+        if (resId == R.string.import_from_sim) {
+            doImportFromSim(activity, account, subscriptionId);
+        } else if (resId == R.string.import_from_vcf_file) {
+            doImportFromVcfFile(activity, account);
+        }
+    }
+
+    public static void doImportFromSim(Context context, AccountWithDataSet account,
+            int subscriptionId) {
+        Intent importIntent = new Intent(Intent.ACTION_VIEW);
+        importIntent.setType("vnd.android.cursor.item/sim-contact");
+        if (account != null) {
+            importIntent.putExtra("account_name", account.name);
+            importIntent.putExtra("account_type", account.type);
+            importIntent.putExtra("data_set", account.dataSet);
+        }
+        importIntent.putExtra("subscription_id", (Integer) subscriptionId);
+        importIntent.setClassName("com.android.phone", "com.android.phone.SimContacts");
+        context.startActivity(importIntent);
+    }
+
+    public static void doImportFromVcfFile(Activity activity, AccountWithDataSet account) {
+        Intent importIntent = new Intent(activity, ImportVCardActivity.class);
+        if (account != null) {
+            importIntent.putExtra("account_name", account.name);
+            importIntent.putExtra("account_type", account.type);
+            importIntent.putExtra("data_set", account.dataSet);
+        }
+
+        if (mVCardShare) {
+            importIntent.setAction(Intent.ACTION_VIEW);
+            importIntent.setData(mPath);
+        }
+        mVCardShare = false;
+        mPath = null;
+        activity.startActivityForResult(importIntent, 0);
+    }
+}
diff --git a/src/com/android/contacts/util/AccountsListAdapter.java b/src/com/android/contacts/util/AccountsListAdapter.java
new file mode 100644
index 0000000..005bb8d
--- /dev/null
+++ b/src/com/android/contacts/util/AccountsListAdapter.java
@@ -0,0 +1,148 @@
+/*
+ * 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.util;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * List-Adapter for Account selection
+ */
+public final class AccountsListAdapter extends BaseAdapter {
+    private final LayoutInflater mInflater;
+    private final List<AccountInfo> mAccounts;
+    private final Context mContext;
+    private int mCustomLayout = -1;
+
+    public enum AccountListFilter {
+        ALL_ACCOUNTS {
+            @Override
+            public List<AccountWithDataSet> getSourceAccounts(Context context) {
+                return AccountTypeManager.getInstance(context).getAccounts(false);
+            }
+        },
+        ACCOUNTS_CONTACT_WRITABLE {
+            @Override
+            public List<AccountWithDataSet> getSourceAccounts(Context context) {
+                return AccountTypeManager.getInstance(context).getAccounts(true);
+            }
+        },
+        ACCOUNTS_GROUP_WRITABLE {
+            @Override
+            public List<AccountWithDataSet> getSourceAccounts(Context context) {
+                return AccountTypeManager.getInstance(context).getGroupWritableAccounts();
+            }
+        };
+
+        private List<AccountInfo> getAccounts(Context context) {
+            final AccountTypeManager accountTypeManager = AccountTypeManager.getInstance(context);
+            final List<AccountInfo> result = new ArrayList<>();
+            final List<AccountWithDataSet> sourceAccounts = getSourceAccounts(context);
+            for (AccountWithDataSet account : sourceAccounts) {
+                result.add(accountTypeManager.getAccountInfoForAccount(account));
+            }
+            return result;
+        }
+
+        public abstract List<AccountWithDataSet> getSourceAccounts(Context context);
+    }
+
+    public AccountsListAdapter(Context context, AccountListFilter filter) {
+        this(context, filter.getAccounts(context), null);
+    }
+
+    public AccountsListAdapter(Context context, AccountListFilter filter,
+            AccountWithDataSet currentAccount) {
+        this(context, filter.getAccounts(context), currentAccount);
+    }
+
+    public AccountsListAdapter(Context context, List<AccountInfo> accounts) {
+        this(context, accounts, null);
+    }
+
+    /**
+     * @param currentAccount the Account currently selected by the user, which should come
+     * first in the list. Can be null.
+     */
+    public AccountsListAdapter(Context context, List<AccountInfo> accounts,
+            AccountWithDataSet currentAccount) {
+        mContext = context;
+
+        final AccountInfo currentInfo = AccountInfo.getAccount(accounts, currentAccount);
+        if (currentInfo != null
+                && !accounts.isEmpty()
+                && !accounts.get(0).sameAccount(currentAccount)
+                && accounts.remove(currentInfo)) {
+            accounts.add(0, currentInfo);
+        }
+
+        mInflater = LayoutInflater.from(context);
+
+        mAccounts = accounts;
+    }
+
+    public void setCustomLayout(int customLayout) {
+        mCustomLayout = customLayout;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        final View resultView = convertView != null ? convertView :
+                mInflater.inflate(mCustomLayout > 0 ? mCustomLayout :
+                        R.layout.account_selector_list_item_condensed, parent, false);
+
+        final TextView text1 = (TextView) resultView.findViewById(android.R.id.text1);
+        final TextView text2 = (TextView) resultView.findViewById(android.R.id.text2);
+        final ImageView icon = (ImageView) resultView.findViewById(android.R.id.icon);
+
+        text1.setText(mAccounts.get(position).getTypeLabel());
+        text2.setText(mAccounts.get(position).getNameLabel());
+
+        icon.setImageDrawable(mAccounts.get(position).getIcon());
+
+        return resultView;
+    }
+
+    @Override
+    public int getCount() {
+        return mAccounts.size();
+    }
+
+    @Override
+    public AccountWithDataSet getItem(int position) {
+        return mAccounts.get(position).getAccount();
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return position;
+    }
+}
+
diff --git a/src/com/android/contacts/util/BitmapUtil.java b/src/com/android/contacts/util/BitmapUtil.java
new file mode 100644
index 0000000..5512962
--- /dev/null
+++ b/src/com/android/contacts/util/BitmapUtil.java
@@ -0,0 +1,164 @@
+/*
+ * 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.util;
+
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+
+/**
+ * Provides static functions to decode bitmaps at the optimal size
+ */
+public class BitmapUtil {
+    private BitmapUtil() {}
+
+    /**
+     * Returns Width or Height of the picture, depending on which size is smaller. Doesn't actually
+     * decode the picture, so it is pretty efficient to run.
+     */
+    public static int getSmallerExtentFromBytes(byte[] bytes) {
+        final BitmapFactory.Options options = new BitmapFactory.Options();
+
+        // don't actually decode the picture, just return its bounds
+        options.inJustDecodeBounds = true;
+        BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
+
+        // test what the best sample size is
+        return Math.min(options.outWidth, options.outHeight);
+    }
+
+    /**
+     * Finds the optimal sampleSize for loading the picture
+     * @param originalSmallerExtent Width or height of the picture, whichever is smaller
+     * @param targetExtent Width or height of the target view, whichever is bigger.
+     *
+     * If either one of the parameters is 0 or smaller, no sampling is applied
+     */
+    public static int findOptimalSampleSize(int originalSmallerExtent, int targetExtent) {
+        // If we don't know sizes, we can't do sampling.
+        if (targetExtent < 1) return 1;
+        if (originalSmallerExtent < 1) return 1;
+
+        // Test what the best sample size is. To do that, we find the sample size that gives us
+        // the best trade-off between resulting image size and memory requirement. We allow
+        // the down-sampled image to be 20% smaller than the target size. That way we can get around
+        // unfortunate cases where e.g. a 720 picture is requested for 362 and not down-sampled at
+        // all. Why 20%? Why not. Prove me wrong.
+        int extent = originalSmallerExtent;
+        int sampleSize = 1;
+        while ((extent >> 1) >= targetExtent * 0.8f) {
+            sampleSize <<= 1;
+            extent >>= 1;
+        }
+
+        return sampleSize;
+    }
+
+    /**
+     * Decodes the bitmap with the given sample size
+     */
+    public static Bitmap decodeBitmapFromBytes(byte[] bytes, int sampleSize) {
+        final BitmapFactory.Options options;
+        if (sampleSize <= 1) {
+            options = null;
+        } else {
+            options = new BitmapFactory.Options();
+            options.inSampleSize = sampleSize;
+        }
+        return BitmapFactory.decodeByteArray(bytes, 0, bytes.length, options);
+    }
+
+    /**
+     * Retrieves a copy of the specified drawable resource, rotated by a specified angle.
+     *
+     * @param resources The current resources.
+     * @param resourceId The resource ID of the drawable to rotate.
+     * @param angle The angle of rotation.
+     * @return Rotated drawable.
+     */
+    public static Drawable getRotatedDrawable(
+            android.content.res.Resources resources, int resourceId, float angle) {
+
+        // Get the original drawable and make a copy which will be rotated.
+        Bitmap original = BitmapFactory.decodeResource(resources, resourceId);
+        Bitmap rotated = Bitmap.createBitmap(
+                original.getWidth(), original.getHeight(), Bitmap.Config.ARGB_8888);
+
+        // Perform the rotation.
+        Canvas tempCanvas = new Canvas(rotated);
+        tempCanvas.rotate(angle, original.getWidth()/2, original.getHeight()/2);
+        tempCanvas.drawBitmap(original, 0, 0, null);
+
+        return new BitmapDrawable(resources,rotated);
+    }
+
+    /**
+     * Given an input bitmap, scales it to the given width/height and makes it round.
+     *
+     * @param input {@link Bitmap} to scale and crop
+     * @param targetWidth desired output width
+     * @param targetHeight desired output height
+     * @return output bitmap scaled to the target width/height and cropped to an oval. The
+     *         cropping algorithm will try to fit as much of the input into the output as possible,
+     *         while preserving the target width/height ratio.
+     */
+    public static Bitmap getRoundedBitmap(Bitmap input, int targetWidth, int targetHeight) {
+        if (input == null) {
+            return null;
+        }
+        final Bitmap.Config inputConfig = input.getConfig();
+        final Bitmap result = Bitmap.createBitmap(targetWidth, targetHeight,
+                inputConfig != null ? inputConfig : Bitmap.Config.ARGB_8888);
+        final Canvas canvas = new Canvas(result);
+        final Paint paint = new Paint();
+        canvas.drawARGB(0, 0, 0, 0);
+        paint.setAntiAlias(true);
+        final RectF dst = new RectF(0, 0, targetWidth, targetHeight);
+        canvas.drawOval(dst, paint);
+
+        // Specifies that only pixels present in the destination (i.e. the drawn oval) should
+        // be overwritten with pixels from the input bitmap.
+        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
+
+        final int inputWidth = input.getWidth();
+        final int inputHeight = input.getHeight();
+
+        // Choose the largest scale factor that will fit inside the dimensions of the
+        // input bitmap.
+        final float scaleBy = Math.min((float) inputWidth / targetWidth,
+            (float) inputHeight / targetHeight);
+
+        final int xCropAmountHalved = (int) (scaleBy * targetWidth / 2);
+        final int yCropAmountHalved = (int) (scaleBy * targetHeight / 2);
+
+        final Rect src = new Rect(
+                inputWidth / 2 - xCropAmountHalved,
+                inputHeight / 2 - yCropAmountHalved,
+                inputWidth / 2 + xCropAmountHalved,
+                inputHeight / 2 + yCropAmountHalved);
+
+        canvas.drawBitmap(input, src, dst, paint);
+        return result;
+    }
+}
diff --git a/src/com/android/contacts/util/CommonDateUtils.java b/src/com/android/contacts/util/CommonDateUtils.java
new file mode 100644
index 0000000..6be6302
--- /dev/null
+++ b/src/com/android/contacts/util/CommonDateUtils.java
@@ -0,0 +1,41 @@
+/*
+ * 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.util;
+
+import java.text.SimpleDateFormat;
+import java.util.Locale;
+
+/**
+ * Common date utilities.
+ */
+public class CommonDateUtils {
+
+    // All the SimpleDateFormats in this class use the UTC timezone
+    public static final SimpleDateFormat NO_YEAR_DATE_FORMAT =
+            new SimpleDateFormat("--MM-dd", Locale.US);
+    public static final SimpleDateFormat FULL_DATE_FORMAT =
+            new SimpleDateFormat("yyyy-MM-dd", Locale.US);
+    public static final SimpleDateFormat DATE_AND_TIME_FORMAT =
+            new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
+    public static final SimpleDateFormat NO_YEAR_DATE_AND_TIME_FORMAT =
+            new SimpleDateFormat("--MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
+
+    /**
+     * Exchange requires 8:00 for birthdays
+     */
+    public final static int DEFAULT_HOUR = 8;
+}
diff --git a/src/com/android/contacts/util/Constants.java b/src/com/android/contacts/util/Constants.java
new file mode 100644
index 0000000..e4ca027
--- /dev/null
+++ b/src/com/android/contacts/util/Constants.java
@@ -0,0 +1,29 @@
+/*
+ * 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.util;
+
+public class Constants {
+
+    /**
+     * Log tag for performance measurement.
+     * To enable: adb shell setprop log.tag.ContactsPerf VERBOSE
+     */
+    public static final String PERFORMANCE_TAG = "ContactsPerf";
+
+    // Used for lookup URI that contains an encoded JSON string.
+    public static final String LOOKUP_URI_ENCODED = "encoded";
+}
diff --git a/src/com/android/contacts/util/ContactDisplayUtils.java b/src/com/android/contacts/util/ContactDisplayUtils.java
new file mode 100644
index 0000000..67b8e07
--- /dev/null
+++ b/src/com/android/contacts/util/ContactDisplayUtils.java
@@ -0,0 +1,297 @@
+/*
+ * 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.util;
+
+import static android.provider.ContactsContract.CommonDataKinds.Phone;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.support.annotation.Nullable;
+import android.text.Spannable;
+import android.text.SpannableString;
+import android.text.TextUtils;
+import android.text.style.TtsSpan;
+import android.util.Log;
+import android.util.Patterns;
+
+import com.android.contacts.R;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+import com.android.contacts.preference.ContactsPreferences;
+
+import com.google.common.base.Preconditions;
+
+/**
+ * Methods for handling various contact data labels.
+ */
+public class ContactDisplayUtils {
+
+    private static final String TAG = ContactDisplayUtils.class.getSimpleName();
+
+    public static final int INTERACTION_CALL = 1;
+    public static final int INTERACTION_SMS = 2;
+
+    /**
+     * Checks if the given data type is a custom type.
+     *
+     * @param type Phone data type.
+     * @return {@literal true} if the type is custom.  {@literal false} if not.
+     */
+    public static boolean isCustomPhoneType(Integer type) {
+        return type == Phone.TYPE_CUSTOM || type == Phone.TYPE_ASSISTANT;
+    }
+
+    /**
+     * Gets a display label for a given phone type.
+     *
+     * @param type The type of number.
+     * @param customLabel A custom label to use if the phone is determined to be of custom type
+     * determined by {@link #isCustomPhoneType(Integer))}
+     * @param interactionType whether this is a call or sms.  Either {@link #INTERACTION_CALL} or
+     * {@link #INTERACTION_SMS}.
+     * @param context The application context.
+     * @return An appropriate string label
+     */
+    public static CharSequence getLabelForCallOrSms(Integer type, CharSequence customLabel,
+            int interactionType, Context context) {
+        Preconditions.checkNotNull(context);
+
+        if (isCustomPhoneType(type)) {
+            return (customLabel == null) ? "" : customLabel;
+        } else {
+            int resId;
+            if (interactionType == INTERACTION_SMS) {
+                resId = getSmsLabelResourceId(type);
+            } else {
+                resId = getPhoneLabelResourceId(type);
+                if (interactionType != INTERACTION_CALL) {
+                    Log.e(TAG, "Un-recognized interaction type: " + interactionType +
+                            ". Defaulting to ContactDisplayUtils.INTERACTION_CALL.");
+                }
+            }
+
+            return context.getResources().getText(resId);
+        }
+    }
+
+    /**
+     * Find a label for calling.
+     *
+     * @param type The type of number.
+     * @return An appropriate string label.
+     */
+    public static int getPhoneLabelResourceId(Integer type) {
+        if (type == null) return R.string.call_other;
+        switch (type) {
+            case Phone.TYPE_HOME:
+                return R.string.call_home;
+            case Phone.TYPE_MOBILE:
+                return R.string.call_mobile;
+            case Phone.TYPE_WORK:
+                return R.string.call_work;
+            case Phone.TYPE_FAX_WORK:
+                return R.string.call_fax_work;
+            case Phone.TYPE_FAX_HOME:
+                return R.string.call_fax_home;
+            case Phone.TYPE_PAGER:
+                return R.string.call_pager;
+            case Phone.TYPE_OTHER:
+                return R.string.call_other;
+            case Phone.TYPE_CALLBACK:
+                return R.string.call_callback;
+            case Phone.TYPE_CAR:
+                return R.string.call_car;
+            case Phone.TYPE_COMPANY_MAIN:
+                return R.string.call_company_main;
+            case Phone.TYPE_ISDN:
+                return R.string.call_isdn;
+            case Phone.TYPE_MAIN:
+                return R.string.call_main;
+            case Phone.TYPE_OTHER_FAX:
+                return R.string.call_other_fax;
+            case Phone.TYPE_RADIO:
+                return R.string.call_radio;
+            case Phone.TYPE_TELEX:
+                return R.string.call_telex;
+            case Phone.TYPE_TTY_TDD:
+                return R.string.call_tty_tdd;
+            case Phone.TYPE_WORK_MOBILE:
+                return R.string.call_work_mobile;
+            case Phone.TYPE_WORK_PAGER:
+                return R.string.call_work_pager;
+            case Phone.TYPE_ASSISTANT:
+                return R.string.call_assistant;
+            case Phone.TYPE_MMS:
+                return R.string.call_mms;
+            default:
+                return R.string.call_custom;
+        }
+
+    }
+
+    /**
+     * Find a label for sending an sms.
+     *
+     * @param type The type of number.
+     * @return An appropriate string label.
+     */
+    public static int getSmsLabelResourceId(Integer type) {
+        if (type == null) return R.string.sms_other;
+        switch (type) {
+            case Phone.TYPE_HOME:
+                return R.string.sms_home;
+            case Phone.TYPE_MOBILE:
+                return R.string.sms_mobile;
+            case Phone.TYPE_WORK:
+                return R.string.sms_work;
+            case Phone.TYPE_FAX_WORK:
+                return R.string.sms_fax_work;
+            case Phone.TYPE_FAX_HOME:
+                return R.string.sms_fax_home;
+            case Phone.TYPE_PAGER:
+                return R.string.sms_pager;
+            case Phone.TYPE_OTHER:
+                return R.string.sms_other;
+            case Phone.TYPE_CALLBACK:
+                return R.string.sms_callback;
+            case Phone.TYPE_CAR:
+                return R.string.sms_car;
+            case Phone.TYPE_COMPANY_MAIN:
+                return R.string.sms_company_main;
+            case Phone.TYPE_ISDN:
+                return R.string.sms_isdn;
+            case Phone.TYPE_MAIN:
+                return R.string.sms_main;
+            case Phone.TYPE_OTHER_FAX:
+                return R.string.sms_other_fax;
+            case Phone.TYPE_RADIO:
+                return R.string.sms_radio;
+            case Phone.TYPE_TELEX:
+                return R.string.sms_telex;
+            case Phone.TYPE_TTY_TDD:
+                return R.string.sms_tty_tdd;
+            case Phone.TYPE_WORK_MOBILE:
+                return R.string.sms_work_mobile;
+            case Phone.TYPE_WORK_PAGER:
+                return R.string.sms_work_pager;
+            case Phone.TYPE_ASSISTANT:
+                return R.string.sms_assistant;
+            case Phone.TYPE_MMS:
+                return R.string.sms_mms;
+            default:
+                return R.string.sms_custom;
+        }
+    }
+
+    /**
+     * Whether the given text could be a phone number.
+     *
+     * Note this will miss many things that are legitimate phone numbers, for example,
+     * phone numbers with letters.
+     */
+    public static boolean isPossiblePhoneNumber(CharSequence text) {
+        return text == null ? false : Patterns.PHONE.matcher(text.toString()).matches();
+    }
+
+    /**
+     * Returns a Spannable for the given message with a telephone {@link TtsSpan} set for
+     * the given phone number text wherever it is found within the message.
+     */
+    public static Spannable getTelephoneTtsSpannable(String message, String phoneNumber) {
+        if (message == null) {
+            return null;
+        }
+        final Spannable spannable = new SpannableString(message);
+        int start = phoneNumber == null ? -1 : message.indexOf(phoneNumber);
+        while (start >= 0) {
+            final int end = start + phoneNumber.length();
+            final TtsSpan ttsSpan = PhoneNumberUtilsCompat.createTtsSpan(phoneNumber);
+            spannable.setSpan(ttsSpan, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);             // this is consistenly done in a misleading way..
+            start = message.indexOf(phoneNumber, end);
+        }
+        return spannable;
+    }
+
+    /**
+     * Retrieves a string from a string template that takes 1 phone number as argument,
+     * span the number with a telephone {@link TtsSpan}, and return the spanned string.
+     *
+     * @param resources to retrieve the string from
+     * @param stringId ID of the string
+     * @param number to pass in the template
+     * @return CharSequence with the phone number wrapped in a TtsSpan
+     */
+    public static CharSequence getTtsSpannedPhoneNumber(Resources resources,
+            int stringId, String number){
+        String msg = resources.getString(stringId, number);
+        return ContactDisplayUtils.getTelephoneTtsSpannable(msg, number);
+    }
+
+    /**
+     * Returns either namePrimary or nameAlternative based on the {@link ContactsPreferences}.
+     * Defaults to the name that is non-null.
+     *
+     * @param namePrimary the primary name.
+     * @param nameAlternative the alternative name.
+     * @param contactsPreferences the ContactsPreferences used to determine the preferred
+     * display name.
+     * @return namePrimary or nameAlternative depending on the value of displayOrderPreference.
+     */
+    public static String getPreferredDisplayName(String namePrimary, String nameAlternative,
+            @Nullable ContactsPreferences contactsPreferences) {
+        if (contactsPreferences == null) {
+            return namePrimary != null ? namePrimary : nameAlternative;
+        }
+        if (contactsPreferences.getDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_PRIMARY) {
+            return namePrimary;
+        }
+
+        if (contactsPreferences.getDisplayOrder() == ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE
+                && !TextUtils.isEmpty(nameAlternative)) {
+            return nameAlternative;
+        }
+
+        return namePrimary;
+    }
+
+    /**
+     * Returns either namePrimary or nameAlternative based on the {@link ContactsPreferences}.
+     * Defaults to the name that is non-null.
+     *
+     * @param namePrimary the primary name.
+     * @param nameAlternative the alternative name.
+     * @param contactsPreferences the ContactsPreferences used to determine the preferred sort
+     * order.
+     * @return namePrimary or nameAlternative depending on the value of displayOrderPreference.
+     */
+    public static String getPreferredSortName(String namePrimary, String nameAlternative,
+            @Nullable ContactsPreferences contactsPreferences) {
+        if (contactsPreferences == null) {
+            return namePrimary != null ? namePrimary : nameAlternative;
+        }
+
+        if (contactsPreferences.getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
+            return namePrimary;
+        }
+
+        if (contactsPreferences.getSortOrder() == ContactsPreferences.SORT_ORDER_ALTERNATIVE &&
+                !TextUtils.isEmpty(nameAlternative)) {
+            return nameAlternative;
+        }
+
+        return namePrimary;
+    }
+}
diff --git a/src/com/android/contacts/util/ContactLoaderUtils.java b/src/com/android/contacts/util/ContactLoaderUtils.java
new file mode 100644
index 0000000..91c683f
--- /dev/null
+++ b/src/com/android/contacts/util/ContactLoaderUtils.java
@@ -0,0 +1,78 @@
+/*
+ * 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.util;
+
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.net.Uri;
+import android.provider.Contacts;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+
+/**
+ * Utility methods for the {@link ContactLoader}.
+ */
+public final class ContactLoaderUtils {
+
+    /** Static helper, not instantiable. */
+    private ContactLoaderUtils() {}
+
+    /**
+     * Transforms the given Uri and returns a Lookup-Uri that represents the contact.
+     * For legacy contacts, a raw-contact lookup is performed. An {@link IllegalArgumentException}
+     * can be thrown if the URI is null or the authority is not recognized.
+     *
+     * Do not call from the UI thread.
+     */
+    @SuppressWarnings("deprecation")
+    public static Uri ensureIsContactUri(final ContentResolver resolver, final Uri uri)
+            throws IllegalArgumentException {
+        if (uri == null) throw new IllegalArgumentException("uri must not be null");
+
+        final String authority = uri.getAuthority();
+
+        // Current Style Uri?
+        if (ContactsContract.AUTHORITY.equals(authority)) {
+            final String type = resolver.getType(uri);
+            // Contact-Uri? Good, return it
+            if (ContactsContract.Contacts.CONTENT_ITEM_TYPE.equals(type)) {
+                return uri;
+            }
+
+            // RawContact-Uri? Transform it to ContactUri
+            if (RawContacts.CONTENT_ITEM_TYPE.equals(type)) {
+                final long rawContactId = ContentUris.parseId(uri);
+                return RawContacts.getContactLookupUri(resolver,
+                        ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
+            }
+
+            // Anything else? We don't know what this is
+            throw new IllegalArgumentException("uri format is unknown");
+        }
+
+        // Legacy Style? Convert to RawContact
+        final String OBSOLETE_AUTHORITY = Contacts.AUTHORITY;
+        if (OBSOLETE_AUTHORITY.equals(authority)) {
+            // Legacy Format. Convert to RawContact-Uri and then lookup the contact
+            final long rawContactId = ContentUris.parseId(uri);
+            return RawContacts.getContactLookupUri(resolver,
+                    ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId));
+        }
+
+        throw new IllegalArgumentException("uri authority is unknown");
+    }
+}
diff --git a/src/com/android/contacts/util/ContactPhotoUtils.java b/src/com/android/contacts/util/ContactPhotoUtils.java
index ce691c3..b351bb8 100644
--- a/src/com/android/contacts/util/ContactPhotoUtils.java
+++ b/src/com/android/contacts/util/ContactPhotoUtils.java
@@ -23,12 +23,12 @@
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.Uri;
-import android.os.Environment;
 import android.provider.MediaStore;
 import android.support.v4.content.FileProvider;
 import android.util.Log;
 
 import com.android.contacts.R;
+
 import com.google.common.io.Closeables;
 
 import java.io.ByteArrayOutputStream;
diff --git a/src/com/android/contacts/util/DataStatus.java b/src/com/android/contacts/util/DataStatus.java
new file mode 100644
index 0000000..f267615
--- /dev/null
+++ b/src/com/android/contacts/util/DataStatus.java
@@ -0,0 +1,165 @@
+/*
+ * 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.util;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.database.Cursor;
+import android.graphics.drawable.Drawable;
+import android.provider.ContactsContract.Data;
+import android.text.TextUtils;
+import android.text.format.DateUtils;
+
+import com.android.contacts.R;
+
+/**
+ * Storage for a social status update. Holds a single update, but can use
+ * {@link #possibleUpdate(Cursor)} to consider updating when a better status
+ * exists. Statuses with timestamps, or with newer timestamps win.
+ */
+public class DataStatus {
+    private int mPresence = -1;
+    private String mStatus = null;
+    private long mTimestamp = -1;
+
+    private String mResPackage = null;
+    private int mIconRes = -1;
+    private int mLabelRes = -1;
+
+    public DataStatus() {
+    }
+
+    public DataStatus(Cursor cursor) {
+        // When creating from cursor row, fill normally
+        fromCursor(cursor);
+    }
+
+    /**
+     * Attempt updating this {@link DataStatus} based on values at the
+     * current row of the given {@link Cursor}.
+     */
+    public void possibleUpdate(Cursor cursor) {
+        final boolean hasStatus = !isNull(cursor, Data.STATUS);
+        final boolean hasTimestamp = !isNull(cursor, Data.STATUS_TIMESTAMP);
+
+        // Bail early when not valid status, or when previous status was
+        // found and we can't compare this one.
+        if (!hasStatus) return;
+        if (isValid() && !hasTimestamp) return;
+
+        if (hasTimestamp) {
+            // Compare timestamps and bail if older status
+            final long newTimestamp = getLong(cursor, Data.STATUS_TIMESTAMP, -1);
+            if (newTimestamp < mTimestamp) return;
+
+            mTimestamp = newTimestamp;
+        }
+
+        // Fill in remaining details from cursor
+        fromCursor(cursor);
+    }
+
+    private void fromCursor(Cursor cursor) {
+        mPresence = getInt(cursor, Data.PRESENCE, -1);
+        mStatus = getString(cursor, Data.STATUS);
+        mTimestamp = getLong(cursor, Data.STATUS_TIMESTAMP, -1);
+        mResPackage = getString(cursor, Data.STATUS_RES_PACKAGE);
+        mIconRes = getInt(cursor, Data.STATUS_ICON, -1);
+        mLabelRes = getInt(cursor, Data.STATUS_LABEL, -1);
+    }
+
+    public boolean isValid() {
+        return !TextUtils.isEmpty(mStatus);
+    }
+
+    public int getPresence() {
+        return mPresence;
+    }
+
+    public CharSequence getStatus() {
+        return mStatus;
+    }
+
+    public long getTimestamp() {
+        return mTimestamp;
+    }
+
+    /**
+     * Build any timestamp and label into a single string.
+     */
+    public CharSequence getTimestampLabel(Context context) {
+        final PackageManager pm = context.getPackageManager();
+
+        // Use local package for resources when none requested
+        if (mResPackage == null) mResPackage = context.getPackageName();
+
+        final boolean validTimestamp = mTimestamp > 0;
+        final boolean validLabel = mResPackage != null && mLabelRes != -1;
+
+        final CharSequence timeClause = validTimestamp ? DateUtils.getRelativeTimeSpanString(
+                mTimestamp, System.currentTimeMillis(), DateUtils.MINUTE_IN_MILLIS,
+                DateUtils.FORMAT_ABBREV_RELATIVE) : null;
+        final CharSequence labelClause = validLabel ? pm.getText(mResPackage, mLabelRes,
+                null) : null;
+
+        if (validTimestamp && validLabel) {
+            return context.getString(
+                    R.string.contact_status_update_attribution_with_date,
+                    timeClause, labelClause);
+        } else if (validLabel) {
+            return context.getString(
+                    R.string.contact_status_update_attribution,
+                    labelClause);
+        } else if (validTimestamp) {
+            return timeClause;
+        } else {
+            return null;
+        }
+    }
+
+    public Drawable getIcon(Context context) {
+        final PackageManager pm = context.getPackageManager();
+
+        // Use local package for resources when none requested
+        if (mResPackage == null) mResPackage = context.getPackageName();
+
+        final boolean validIcon = mResPackage != null && mIconRes != -1;
+        return validIcon ? pm.getDrawable(mResPackage, mIconRes, null) : null;
+    }
+
+    private static String getString(Cursor cursor, String columnName) {
+        return cursor.getString(cursor.getColumnIndex(columnName));
+    }
+
+    private static int getInt(Cursor cursor, String columnName) {
+        return cursor.getInt(cursor.getColumnIndex(columnName));
+    }
+
+    private static int getInt(Cursor cursor, String columnName, int missingValue) {
+        final int columnIndex = cursor.getColumnIndex(columnName);
+        return cursor.isNull(columnIndex) ? missingValue : cursor.getInt(columnIndex);
+    }
+
+    private static long getLong(Cursor cursor, String columnName, long missingValue) {
+        final int columnIndex = cursor.getColumnIndex(columnName);
+        return cursor.isNull(columnIndex) ? missingValue : cursor.getLong(columnIndex);
+    }
+
+    private static boolean isNull(Cursor cursor, String columnName) {
+        return cursor.isNull(cursor.getColumnIndex(columnName));
+    }
+}
diff --git a/src/com/android/contacts/util/DateUtils.java b/src/com/android/contacts/util/DateUtils.java
new file mode 100644
index 0000000..c460782
--- /dev/null
+++ b/src/com/android/contacts/util/DateUtils.java
@@ -0,0 +1,270 @@
+/*
+ * 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.util;
+
+import android.content.Context;
+import android.text.format.DateFormat;
+
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.Locale;
+import java.util.TimeZone;
+
+/**
+ * Utility methods for processing dates.
+ */
+public class DateUtils {
+    public static final TimeZone UTC_TIMEZONE = TimeZone.getTimeZone("UTC");
+
+    /**
+     * When parsing a date without a year, the system assumes 1970, which wasn't a leap-year.
+     * Let's add a one-off hack for that day of the year
+     */
+    public static final String NO_YEAR_DATE_FEB29TH = "--02-29";
+
+    // Variations of ISO 8601 date format.  Do not change the order - it does affect the
+    // result in ambiguous cases.
+    private static final SimpleDateFormat[] DATE_FORMATS = {
+        CommonDateUtils.FULL_DATE_FORMAT,
+        CommonDateUtils.DATE_AND_TIME_FORMAT,
+        new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'", Locale.US),
+        new SimpleDateFormat("yyyyMMdd", Locale.US),
+        new SimpleDateFormat("yyyyMMdd'T'HHmmssSSS'Z'", Locale.US),
+        new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'", Locale.US),
+        new SimpleDateFormat("yyyyMMdd'T'HHmm'Z'", Locale.US),
+    };
+
+    static {
+        for (SimpleDateFormat format : DATE_FORMATS) {
+            format.setLenient(true);
+            format.setTimeZone(UTC_TIMEZONE);
+        }
+        CommonDateUtils.NO_YEAR_DATE_FORMAT.setTimeZone(UTC_TIMEZONE);
+    }
+
+    /**
+     * Parses the supplied string to see if it looks like a date.
+     *
+     * @param string The string representation of the provided date
+     * @param mustContainYear If true, the string is parsed as a date containing a year. If false,
+     * the string is parsed into a valid date even if the year field is missing.
+     * @return A Calendar object corresponding to the date if the string is successfully parsed.
+     * If not, null is returned.
+     */
+    public static Calendar parseDate(String string, boolean mustContainYear) {
+        ParsePosition parsePosition = new ParsePosition(0);
+        Date date;
+        if (!mustContainYear) {
+            final boolean noYearParsed;
+            // Unfortunately, we can't parse Feb 29th correctly, so let's handle this day seperately
+            if (NO_YEAR_DATE_FEB29TH.equals(string)) {
+                return getUtcDate(0, Calendar.FEBRUARY, 29);
+            } else {
+                synchronized (CommonDateUtils.NO_YEAR_DATE_FORMAT) {
+                    date = CommonDateUtils.NO_YEAR_DATE_FORMAT.parse(string, parsePosition);
+                }
+                noYearParsed = parsePosition.getIndex() == string.length();
+            }
+
+            if (noYearParsed) {
+                return getUtcDate(date, true);
+            }
+        }
+        for (int i = 0; i < DATE_FORMATS.length; i++) {
+            SimpleDateFormat f = DATE_FORMATS[i];
+            synchronized (f) {
+                parsePosition.setIndex(0);
+                date = f.parse(string, parsePosition);
+                if (parsePosition.getIndex() == string.length()) {
+                    return getUtcDate(date, false);
+                }
+            }
+        }
+        return null;
+    }
+
+    private static final Calendar getUtcDate(Date date, boolean noYear) {
+        final Calendar calendar = Calendar.getInstance(UTC_TIMEZONE, Locale.US);
+        calendar.setTime(date);
+        if (noYear) {
+            calendar.set(Calendar.YEAR, 0);
+        }
+        return calendar;
+    }
+
+    private static final Calendar getUtcDate(int year, int month, int dayOfMonth) {
+        final Calendar calendar = Calendar.getInstance(UTC_TIMEZONE, Locale.US);
+        calendar.clear();
+        calendar.set(Calendar.YEAR, year);
+        calendar.set(Calendar.MONTH, month);
+        calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
+        return calendar;
+    }
+
+    public static boolean isYearSet(Calendar cal) {
+        // use the Calendar.YEAR field to track whether or not the year is set instead of
+        // Calendar.isSet() because doing Calendar.get() causes Calendar.isSet() to become
+        // true irregardless of what the previous value was
+        return cal.get(Calendar.YEAR) > 1;
+    }
+
+    /**
+     * Same as {@link #formatDate(Context context, String string, boolean longForm)}, with
+     * longForm set to {@code true} by default.
+     *
+     * @param context Valid context
+     * @param string String representation of a date to parse
+     * @return Returns the same date in a cleaned up format. If the supplied string does not look
+     * like a date, return it unchanged.
+     */
+
+    public static String formatDate(Context context, String string) {
+        return formatDate(context, string, true);
+    }
+
+    /**
+     * Parses the supplied string to see if it looks like a date.
+     *
+     * @param context Valid context
+     * @param string String representation of a date to parse
+     * @param longForm If true, return the date formatted into its long string representation.
+     * If false, return the date formatted using its short form representation (i.e. 12/11/2012)
+     * @return Returns the same date in a cleaned up format. If the supplied string does not look
+     * like a date, return it unchanged.
+     */
+    public static String formatDate(Context context, String string, boolean longForm) {
+        if (string == null) {
+            return null;
+        }
+
+        string = string.trim();
+        if (string.length() == 0) {
+            return string;
+        }
+        final Calendar cal = parseDate(string, false);
+
+        // we weren't able to parse the string successfully so just return it unchanged
+        if (cal == null) {
+            return string;
+        }
+
+        final boolean isYearSet = isYearSet(cal);
+        final java.text.DateFormat outFormat;
+        if (!isYearSet) {
+            outFormat = getLocalizedDateFormatWithoutYear(context);
+        } else {
+            outFormat =
+                    longForm ? DateFormat.getLongDateFormat(context) :
+                    DateFormat.getDateFormat(context);
+        }
+        synchronized (outFormat) {
+            outFormat.setTimeZone(UTC_TIMEZONE);
+            return outFormat.format(cal.getTime());
+        }
+    }
+
+    public static boolean isMonthBeforeDay(Context context) {
+        char[] dateFormatOrder = DateFormat.getDateFormatOrder(context);
+        for (int i = 0; i < dateFormatOrder.length; i++) {
+            if (dateFormatOrder[i] == 'd') {
+                return false;
+            }
+            if (dateFormatOrder[i] == 'M') {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Returns a SimpleDateFormat object without the year fields by using a regular expression
+     * to eliminate the year in the string pattern. In the rare occurence that the resulting
+     * pattern cannot be reconverted into a SimpleDateFormat, it uses the provided context to
+     * determine whether the month field should be displayed before the day field, and returns
+     * either "MMMM dd" or "dd MMMM" converted into a SimpleDateFormat.
+     */
+    public static java.text.DateFormat getLocalizedDateFormatWithoutYear(Context context) {
+        final String pattern = ((SimpleDateFormat) SimpleDateFormat.getDateInstance(
+                java.text.DateFormat.LONG)).toPattern();
+        // Determine the correct regex pattern for year.
+        // Special case handling for Spanish locale by checking for "de"
+        final String yearPattern = pattern.contains(
+                "de") ? "[^Mm]*[Yy]+[^Mm]*" : "[^DdMm]*[Yy]+[^DdMm]*";
+        try {
+         // Eliminate the substring in pattern that matches the format for that of year
+            return new SimpleDateFormat(pattern.replaceAll(yearPattern, ""));
+        } catch (IllegalArgumentException e) {
+            return new SimpleDateFormat(
+                    DateUtils.isMonthBeforeDay(context) ? "MMMM dd" : "dd MMMM");
+        }
+    }
+
+    /**
+     * Given a calendar (possibly containing only a day of the year), returns the earliest possible
+     * anniversary of the date that is equal to or after the current point in time if the date
+     * does not contain a year, or the date converted to the local time zone (if the date contains
+     * a year.
+     *
+     * @param target The date we wish to convert(in the UTC time zone).
+     * @return If date does not contain a year (year < 1900), returns the next earliest anniversary
+     * that is after the current point in time (in the local time zone). Otherwise, returns the
+     * adjusted Date in the local time zone.
+     */
+    public static Date getNextAnnualDate(Calendar target) {
+        final Calendar today = Calendar.getInstance();
+        today.setTime(new Date());
+
+        // Round the current time to the exact start of today so that when we compare
+        // today against the target date, both dates are set to exactly 0000H.
+        today.set(Calendar.HOUR_OF_DAY, 0);
+        today.set(Calendar.MINUTE, 0);
+        today.set(Calendar.SECOND, 0);
+        today.set(Calendar.MILLISECOND, 0);
+
+        final boolean isYearSet = isYearSet(target);
+        final int targetYear = target.get(Calendar.YEAR);
+        final int targetMonth = target.get(Calendar.MONTH);
+        final int targetDay = target.get(Calendar.DAY_OF_MONTH);
+        final boolean isFeb29 = (targetMonth == Calendar.FEBRUARY && targetDay == 29);
+        final GregorianCalendar anniversary = new GregorianCalendar();
+        // Convert from the UTC date to the local date. Set the year to today's year if the
+        // there is no provided year (targetYear < 1900)
+        anniversary.set(!isYearSet ? today.get(Calendar.YEAR) : targetYear,
+                targetMonth, targetDay);
+        // If the anniversary's date is before the start of today and there is no year set,
+        // increment the year by 1 so that the returned date is always equal to or greater than
+        // today. If the day is a leap year, keep going until we get the next leap year anniversary
+        // Otherwise if there is already a year set, simply return the exact date.
+        if (!isYearSet) {
+            int anniversaryYear = today.get(Calendar.YEAR);
+            if (anniversary.before(today) ||
+                    (isFeb29 && !anniversary.isLeapYear(anniversaryYear))) {
+                // If the target date is not Feb 29, then set the anniversary to the next year.
+                // Otherwise, keep going until we find the next leap year (this is not guaranteed
+                // to be in 4 years time).
+                do {
+                    anniversaryYear +=1;
+                } while (isFeb29 && !anniversary.isLeapYear(anniversaryYear));
+                anniversary.set(anniversaryYear, targetMonth, targetDay);
+            }
+        }
+        return anniversary.getTime();
+    }
+}
diff --git a/src/com/android/contacts/util/DeviceLocalAccountTypeFactory.java b/src/com/android/contacts/util/DeviceLocalAccountTypeFactory.java
new file mode 100644
index 0000000..59ee7e5
--- /dev/null
+++ b/src/com/android/contacts/util/DeviceLocalAccountTypeFactory.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.util;
+
+import android.content.Context;
+import android.support.annotation.IntDef;
+
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.DeviceLocalAccountType;
+
+import java.lang.annotation.Retention;
+
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Reports whether a value from RawContacts.ACCOUNT_TYPE should be considered a "Device"
+ * account
+ */
+public interface DeviceLocalAccountTypeFactory {
+
+    @Retention(SOURCE)
+    @IntDef({TYPE_OTHER, TYPE_DEVICE, TYPE_SIM})
+    @interface LocalAccountType {}
+    static final int TYPE_OTHER = 0;
+    static final int TYPE_DEVICE = 1;
+    static final int TYPE_SIM = 2;
+
+    @DeviceLocalAccountTypeFactory.LocalAccountType int classifyAccount(String accountType);
+
+    AccountType getAccountType(String accountType);
+
+    class Util {
+        private Util() { }
+
+        public static boolean isLocalAccountType(@LocalAccountType int type) {
+            return type == TYPE_SIM || type == TYPE_DEVICE;
+        }
+
+        public static boolean isLocalAccountType(DeviceLocalAccountTypeFactory factory,
+                String type) {
+
+            return isLocalAccountType(factory.classifyAccount(type));
+        }
+    }
+
+    class Default implements DeviceLocalAccountTypeFactory {
+        private Context mContext;
+
+        public Default(Context context) {
+            mContext = context;
+        }
+
+        @Override
+        public int classifyAccount(String accountType) {
+            return accountType == null ? TYPE_DEVICE : TYPE_OTHER;
+        }
+
+        @Override
+        public AccountType getAccountType(String accountType) {
+            if (accountType != null) {
+                throw new IllegalArgumentException(accountType + " is not a device account type.");
+            }
+            return new DeviceLocalAccountType(mContext);
+        }
+    }
+}
diff --git a/src/com/android/contacts/util/EmptyService.java b/src/com/android/contacts/util/EmptyService.java
new file mode 100644
index 0000000..2e6a159
--- /dev/null
+++ b/src/com/android/contacts/util/EmptyService.java
@@ -0,0 +1,33 @@
+/*
+ * 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.util;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.IBinder;
+
+/**
+ * Background {@link Service} that is used to keep our process alive long enough
+ * for background threads to finish. Started and stopped directly by specific
+ * background tasks when needed.
+ */
+public class EmptyService extends Service {
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+}
diff --git a/src/com/android/contacts/util/ImageViewDrawableSetter.java b/src/com/android/contacts/util/ImageViewDrawableSetter.java
index 6147c39..b90cf1f 100644
--- a/src/com/android/contacts/util/ImageViewDrawableSetter.java
+++ b/src/com/android/contacts/util/ImageViewDrawableSetter.java
@@ -26,10 +26,10 @@
 import android.text.TextUtils;
 import android.widget.ImageView;
 
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
-import com.android.contacts.common.model.Contact;
+import com.android.contacts.ContactPhotoManager;
+import com.android.contacts.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.lettertiles.LetterTileDrawable;
+import com.android.contacts.model.Contact;
 
 import java.util.Arrays;
 
diff --git a/src/com/android/contacts/util/ImplicitIntentsUtil.java b/src/com/android/contacts/util/ImplicitIntentsUtil.java
new file mode 100644
index 0000000..191c185
--- /dev/null
+++ b/src/com/android/contacts/util/ImplicitIntentsUtil.java
@@ -0,0 +1,245 @@
+/*
+ * 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.util;
+
+import static com.android.contacts.list.ShortcutIntentBuilder.INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.QuickContact;
+import android.provider.Settings;
+import android.text.TextUtils;
+
+import com.android.contacts.Experiments;
+import com.android.contacts.logging.ScreenEvent.ScreenType;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contacts.quickcontact.QuickContactActivity;
+import com.android.contactsbind.ObjectFactory;
+import com.android.contactsbind.experiments.Flags;
+
+import java.util.List;
+
+/**
+ * Utility for forcing intents to be started inside the current app. This is useful for avoiding
+ * senseless disambiguation dialogs. Ie, if a user clicks a contact inside Contacts we assume
+ * they want to view the contact inside the Contacts app as opposed to a 3rd party contacts app.
+ *
+ * Methods are designed to replace the use of startActivity() for implicit intents. This class isn't
+ * necessary for explicit intents. No attempt is made to replace startActivityForResult(), since
+ * startActivityForResult() is always used with explicit intents in this project.
+ *
+ * Why not just always use explicit intents? The Contacts/Dialer app implements standard intent
+ * actions used by others apps. We want to continue exercising these intent filters to make sure
+ * they still work. Plus we sometimes don't know an explicit intent would work. See
+ * {@link #startActivityInAppIfPossible}.
+ *
+ * Some ContactsCommon code that is only used by Dialer doesn't use ImplicitIntentsUtil.
+ */
+public class ImplicitIntentsUtil {
+
+    /**
+     * Start an intent. If it is possible for this app to handle the intent, force this app's
+     * activity to handle the intent. Sometimes it is impossible to know whether this app
+     * can handle an intent while coding since the code is used inside both Dialer and Contacts.
+     * This method is particularly useful in such circumstances.
+     *
+     * On a Nexus 5 with a small number of apps, this method consistently added 3-16ms of delay
+     * in order to talk to the package manager.
+     */
+    public static void startActivityInAppIfPossible(Context context, Intent intent) {
+        final Intent appIntent = getIntentInAppIfExists(context, intent);
+        if (appIntent != null) {
+            context.startActivity(appIntent);
+        } else {
+            context.startActivity(intent);
+        }
+    }
+
+    /**
+     * Start intent using an activity inside this app. This method is useful if you are certain
+     * that the intent can be handled inside this app, and you care about shaving milliseconds.
+     */
+    public static void startActivityInApp(Context context, Intent intent) {
+        String packageName = context.getPackageName();
+        intent.setPackage(packageName);
+        context.startActivity(intent);
+    }
+
+    /**
+     * Start an intent normally. Assert that the intent can't be opened inside this app.
+     */
+    public static void startActivityOutsideApp(Context context, Intent intent) {
+        final boolean isPlatformDebugBuild = Build.TYPE.equals("eng")
+                || Build.TYPE.equals("userdebug");
+        if (isPlatformDebugBuild) {
+            if (getIntentInAppIfExists(context, intent) != null) {
+                throw new AssertionError("startActivityOutsideApp() was called for an intent" +
+                        " that can be handled inside the app");
+            }
+        }
+        context.startActivity(intent);
+    }
+
+    /**
+     * Starts QuickContact in app with the default mode and specified previous screen type.
+     */
+    public static void startQuickContact(Activity activity, Uri contactLookupUri,
+            int previousScreenType) {
+        startQuickContact(activity, contactLookupUri, previousScreenType, /* requestCode */ -1);
+    }
+
+    /**
+     * Starts QuickContact for result with the default mode and specified previous screen type.
+     */
+    public static void startQuickContactForResult(Activity activity, Uri contactLookupUri,
+            int previousScreenType, int requestCode) {
+        startQuickContact(activity, contactLookupUri, previousScreenType, requestCode);
+    }
+
+    private static void startQuickContact(Activity activity, Uri contactLookupUri,
+            int previousScreenType, int requestCode) {
+
+        if (Flags.getInstance().getBoolean(Experiments.CONTACT_SHEET)) {
+            final Intent intent = ObjectFactory.getContactSheetIntent(activity, contactLookupUri);
+            if (intent != null) {
+                // We must start ContactSheet "for result" with a requestCode that is >= 0
+                // so that ContactSheet can validate that the caller is a 1P app.
+                activity.startActivityForResult(intent, requestCode >= 0 ? requestCode : 0);
+                return;
+            }
+        }
+
+        final Intent intent = ImplicitIntentsUtil.composeQuickContactIntent(
+                activity, contactLookupUri, previousScreenType);
+
+        // For the non ContactSheet case we only start "for result" if specifically requested.
+        if (requestCode >= 0) {
+            intent.setPackage(activity.getPackageName());
+            activity.startActivityForResult(intent, requestCode);
+        } else {
+            startActivityInApp(activity, intent);
+        }
+    }
+
+    /**
+     * Returns an implicit intent for opening QuickContacts with the default mode and specified
+     * previous screen type.
+     */
+    public static Intent composeQuickContactIntent(Context context, Uri contactLookupUri,
+            int previousScreenType) {
+        return composeQuickContactIntent(context, contactLookupUri,
+                QuickContactActivity.MODE_FULLY_EXPANDED, previousScreenType);
+    }
+
+    /**
+     * Returns an implicit intent for opening QuickContacts.
+     */
+    public static Intent composeQuickContactIntent(Context context, Uri contactLookupUri,
+            int mode, int previousScreenType) {
+        final Intent intent = new Intent(context, QuickContactActivity.class);
+        intent.setAction(QuickContact.ACTION_QUICK_CONTACT);
+        intent.setData(contactLookupUri);
+        intent.putExtra(QuickContact.EXTRA_MODE, mode);
+        // Make sure not to show QuickContacts on top of another QuickContacts.
+        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+        intent.putExtra(QuickContactActivity.EXTRA_PREVIOUS_SCREEN_TYPE, previousScreenType);
+        return intent;
+    }
+
+    /**
+     * Returns an Intent to open the Settings add account activity filtered to only
+     * display contact provider account types.
+     */
+    public static Intent getIntentForAddingAccount() {
+        final Intent intent = new Intent(Settings.ACTION_SYNC_SETTINGS);
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+        intent.putExtra(Settings.EXTRA_AUTHORITIES,
+                new String[]{ContactsContract.AUTHORITY});
+        return intent;
+    }
+
+    /**
+     * Returns an Intent to add a google account.
+     */
+    public static Intent getIntentForAddingGoogleAccount() {
+        final Intent intent = new Intent(Settings.ACTION_ADD_ACCOUNT);
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
+        intent.putExtra(Settings.EXTRA_ACCOUNT_TYPES,
+                new String[]{GoogleAccountType.ACCOUNT_TYPE});
+        return intent;
+    }
+
+    public static Intent getIntentForQuickContactLauncherShortcut(Context context, Uri contactUri) {
+        final Intent intent = composeQuickContactIntent(context, contactUri,
+                QuickContact.MODE_LARGE, ScreenType.UNKNOWN);
+        intent.setPackage(context.getPackageName());
+
+        // When starting from the launcher, start in a new, cleared task.
+        // CLEAR_WHEN_TASK_RESET cannot reset the root of a task, so we
+        // clear the whole thing preemptively here since QuickContactActivity will
+        // finish itself when launching other detail activities. We need to use
+        // Intent.FLAG_ACTIVITY_NO_ANIMATION since not all versions of launcher will respect
+        // the INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION intent extra.
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK
+                | Intent.FLAG_ACTIVITY_NO_ANIMATION);
+
+        // Tell the launcher to not do its animation, because we are doing our own
+        intent.putExtra(INTENT_EXTRA_IGNORE_LAUNCH_ANIMATION, true);
+
+        intent.putExtra(QuickContact.EXTRA_EXCLUDE_MIMES, (String[])null);
+
+        return intent;
+    }
+
+    /**
+     * Returns a copy of {@param intent} with a class name set, if a class inside this app
+     * has a corresponding intent filter.
+     */
+    private static Intent getIntentInAppIfExists(Context context, Intent intent) {
+        try {
+            final Intent intentCopy = new Intent(intent);
+            // Force this intentCopy to open inside the current app.
+            intentCopy.setPackage(context.getPackageName());
+            final List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(
+                    intentCopy, PackageManager.MATCH_DEFAULT_ONLY);
+            if (list != null && list.size() != 0) {
+                // Now that we know the intentCopy will work inside the current app, we
+                // can return this intent non-null.
+                if (list.get(0).activityInfo != null
+                        && !TextUtils.isEmpty(list.get(0).activityInfo.name)) {
+                    // Now that we know the class name, we may as well attach it to intentCopy
+                    // to prevent the package manager from needing to find it again inside
+                    // startActivity(). This is only needed for efficiency.
+                    intentCopy.setClassName(context.getPackageName(),
+                            list.get(0).activityInfo.name);
+                }
+                return intentCopy;
+            }
+            return null;
+        } catch (Exception e) {
+            // Don't let the package manager crash our app. If the package manager can't resolve the
+            // intent here, then we can still call startActivity without calling setClass() first.
+            return null;
+        }
+    }
+}
diff --git a/src/com/android/contacts/util/LocalizedNameResolver.java b/src/com/android/contacts/util/LocalizedNameResolver.java
new file mode 100644
index 0000000..e6acc64
--- /dev/null
+++ b/src/com/android/contacts/util/LocalizedNameResolver.java
@@ -0,0 +1,145 @@
+/*
+ * 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.util;
+
+import android.accounts.AccountManager;
+import android.accounts.AuthenticatorDescription;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources;
+import android.content.res.Resources.NotFoundException;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.util.AttributeSet;
+import android.util.Xml;
+
+import com.android.contacts.R;
+import com.android.contacts.model.account.ExternalAccountType;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/**
+ * Retrieves localized names per account type. This allows customizing texts like
+ * "All Contacts" for certain account types, but e.g. "All Friends" or "All Connections" for others.
+ */
+public class LocalizedNameResolver  {
+    private static final String TAG = "LocalizedNameResolver";
+
+    private static final String CONTACTS_DATA_KIND = "ContactsDataKind";
+
+    /**
+     * Returns the name for All Contacts for the specified account type.
+     */
+    public static String getAllContactsName(Context context, String accountType) {
+        if (context == null) throw new IllegalArgumentException("Context must not be null");
+        if (accountType == null) return null;
+
+        return resolveAllContactsName(context, accountType);
+     }
+
+    /**
+     * Finds "All Contacts"-Name for the specified account type.
+     */
+    private static String resolveAllContactsName(Context context, String accountType) {
+        final AccountManager am = AccountManager.get(context);
+
+        for (AuthenticatorDescription auth : am.getAuthenticatorTypes()) {
+            if (accountType.equals(auth.type)) {
+                return resolveAllContactsNameFromMetaData(context, auth.packageName);
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Finds the meta-data XML containing the contacts configuration and
+     * reads the picture priority from that file.
+     */
+    private static String resolveAllContactsNameFromMetaData(Context context, String packageName) {
+        final XmlResourceParser parser = ExternalAccountType.loadContactsXml(context, packageName);
+        if (parser != null) {
+            return loadAllContactsNameFromXml(context, parser, packageName);
+        }
+        return null;
+    }
+
+    private static String loadAllContactsNameFromXml(Context context, XmlPullParser parser,
+            String packageName) {
+        try {
+            final AttributeSet attrs = Xml.asAttributeSet(parser);
+            int type;
+            while ((type = parser.next()) != XmlPullParser.START_TAG
+                    && type != XmlPullParser.END_DOCUMENT) {
+                // Drain comments and whitespace
+            }
+
+            if (type != XmlPullParser.START_TAG) {
+                throw new IllegalStateException("No start tag found");
+            }
+
+            final int depth = parser.getDepth();
+            while (((type = parser.next()) != XmlPullParser.END_TAG || parser.getDepth() > depth)
+                    && type != XmlPullParser.END_DOCUMENT) {
+                String name = parser.getName();
+                if (type == XmlPullParser.START_TAG && CONTACTS_DATA_KIND.equals(name)) {
+                    final TypedArray typedArray = context.obtainStyledAttributes(attrs,
+                            R.styleable.ContactsDataKind);
+                    try {
+                        // See if a string has been hardcoded directly into the xml
+                        final String nonResourceString = typedArray.getNonResourceString(
+                                R.styleable.ContactsDataKind_android_allContactsName);
+                        if (nonResourceString != null) {
+                            return nonResourceString;
+                        }
+
+                        // See if a resource is referenced. We can't rely on getString
+                        // to automatically resolve it as the resource lives in a different package
+                        int id = typedArray.getResourceId(
+                                R.styleable.ContactsDataKind_android_allContactsName, 0);
+                        if (id == 0) return null;
+
+                        // Resolve the resource Id
+                        final PackageManager packageManager = context.getPackageManager();
+                        final Resources resources;
+                        try {
+                            resources = packageManager.getResourcesForApplication(packageName);
+                        } catch (NameNotFoundException e) {
+                            return null;
+                        }
+                        try {
+                            return resources.getString(id);
+                        } catch (NotFoundException e) {
+                            return null;
+                        }
+                    } finally {
+                        typedArray.recycle();
+                    }
+                }
+            }
+            return null;
+        } catch (XmlPullParserException e) {
+            throw new IllegalStateException("Problem reading XML", e);
+        } catch (IOException e) {
+            throw new IllegalStateException("Problem reading XML", e);
+        }
+    }
+}
diff --git a/src/com/android/contacts/util/MaterialColorMapUtils.java b/src/com/android/contacts/util/MaterialColorMapUtils.java
new file mode 100644
index 0000000..b54ec0e
--- /dev/null
+++ b/src/com/android/contacts/util/MaterialColorMapUtils.java
@@ -0,0 +1,205 @@
+/*
+ * 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.util;
+
+import android.app.Activity;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.Trace;
+import android.support.v4.content.ContextCompat;
+
+import com.android.contacts.ContactsDrawerActivity;
+import com.android.contacts.R;
+
+public class MaterialColorMapUtils {
+    private final TypedArray sPrimaryColors;
+    private final TypedArray sSecondaryColors;
+
+    public MaterialColorMapUtils(Resources resources) {
+        sPrimaryColors = resources.obtainTypedArray(
+                com.android.contacts.R.array.letter_tile_colors);
+        sSecondaryColors = resources.obtainTypedArray(
+                com.android.contacts.R.array.letter_tile_colors_dark);
+    }
+
+    public static class MaterialPalette implements Parcelable {
+        public MaterialPalette(int primaryColor, int secondaryColor) {
+            mPrimaryColor = primaryColor;
+            mSecondaryColor = secondaryColor;
+        }
+        public final int mPrimaryColor;
+        public final int mSecondaryColor;
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            MaterialPalette other = (MaterialPalette) obj;
+            if (mPrimaryColor != other.mPrimaryColor) {
+                return false;
+            }
+            if (mSecondaryColor != other.mSecondaryColor) {
+                return false;
+            }
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            final int prime = 31;
+            int result = 1;
+            result = prime * result + mPrimaryColor;
+            result = prime * result + mSecondaryColor;
+            return result;
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeInt(mPrimaryColor);
+            dest.writeInt(mSecondaryColor);
+        }
+
+        private MaterialPalette(Parcel in) {
+            mPrimaryColor = in.readInt();
+            mSecondaryColor = in.readInt();
+        }
+
+        public static final Creator<MaterialPalette> CREATOR = new Creator<MaterialPalette>() {
+                @Override
+                public MaterialPalette createFromParcel(Parcel in) {
+                    return new MaterialPalette(in);
+                }
+
+                @Override
+                public MaterialPalette[] newArray(int size) {
+                    return new MaterialPalette[size];
+                }
+        };
+    }
+
+    /**
+     * Return primary and secondary colors from the Material color palette that are similar to
+     * {@param color}.
+     */
+    public MaterialPalette calculatePrimaryAndSecondaryColor(int color) {
+        Trace.beginSection("calculatePrimaryAndSecondaryColor");
+
+        final float colorHue = hue(color);
+        float minimumDistance = Float.MAX_VALUE;
+        int indexBestMatch = 0;
+        for (int i = 0; i < sPrimaryColors.length(); i++) {
+            final int primaryColor = sPrimaryColors.getColor(i, 0);
+            final float comparedHue = hue(primaryColor);
+            // No need to be perceptually accurate when calculating color distances since
+            // we are only mapping to 15 colors. Being slightly inaccurate isn't going to change
+            // the mapping very often.
+            final float distance = Math.abs(comparedHue - colorHue);
+            if (distance < minimumDistance) {
+                minimumDistance = distance;
+                indexBestMatch = i;
+            }
+        }
+
+        Trace.endSection();
+        return new MaterialPalette(sPrimaryColors.getColor(indexBestMatch, 0),
+                sSecondaryColors.getColor(indexBestMatch, 0));
+    }
+
+    public static MaterialPalette getDefaultPrimaryAndSecondaryColors(Resources resources) {
+        final int primaryColor = resources.getColor(
+                R.color.quickcontact_default_photo_tint_color);
+        final int secondaryColor = resources.getColor(
+                R.color.quickcontact_default_photo_tint_color_dark);
+        return new MaterialPalette(primaryColor, secondaryColor);
+    }
+
+    /**
+     * Returns the hue component of a color int.
+     *
+     * @return A value between 0.0f and 1.0f
+     */
+    public static float hue(int color) {
+        int r = (color >> 16) & 0xFF;
+        int g = (color >> 8) & 0xFF;
+        int b = color & 0xFF;
+
+        int V = Math.max(b, Math.max(r, g));
+        int temp = Math.min(b, Math.min(r, g));
+
+        float H;
+
+        if (V == temp) {
+            H = 0;
+        } else {
+            final float vtemp = V - temp;
+            final float cr = (V - r) / vtemp;
+            final float cg = (V - g) / vtemp;
+            final float cb = (V - b) / vtemp;
+
+            if (r == V) {
+                H = cb - cg;
+            } else if (g == V) {
+                H = 2 + cr - cb;
+            } else {
+                H = 4 + cg - cr;
+            }
+
+            H /= 6.f;
+            if (H < 0) {
+                H++;
+            }
+        }
+
+        return H;
+    }
+
+    /**
+     * Returns status bar color for group view and non-group views.
+     */
+    public static int getStatusBarColor(Activity activity) {
+        final boolean isGroupView = activity instanceof ContactsDrawerActivity
+                && ((ContactsDrawerActivity) activity).isGroupView();
+        return isGroupView
+                ? ContextCompat.getColor(activity, R.color.group_primary_color_dark)
+                : ContextCompat.getColor(activity, R.color.primary_color_dark);
+    }
+
+    /**
+     * Returns toolbar color for group view and non-group views.
+     */
+    public static int getToolBarColor(Activity activity) {
+        final boolean isGroupView = activity instanceof ContactsDrawerActivity
+                && ((ContactsDrawerActivity) activity).isGroupView();
+        return isGroupView
+                ? ContextCompat.getColor(activity, R.color.group_primary_color)
+                : ContextCompat.getColor(activity, R.color.primary_color);
+    }
+}
diff --git a/src/com/android/contacts/util/NameConverter.java b/src/com/android/contacts/util/NameConverter.java
new file mode 100644
index 0000000..2d9f6fd
--- /dev/null
+++ b/src/com/android/contacts/util/NameConverter.java
@@ -0,0 +1,158 @@
+/*
+ * 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.util;
+
+
+import android.content.ContentValues;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.net.Uri.Builder;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.text.TextUtils;
+
+import com.android.contacts.model.dataitem.StructuredNameDataItem;
+
+/**
+ * Utility class for converting between a display name and structured name (and vice-versa), via
+ * calls to the contact provider.
+ */
+public class NameConverter {
+
+    /**
+     * The array of fields that comprise a structured name.
+     */
+    public static final String[] STRUCTURED_NAME_FIELDS = new String[] {
+            StructuredName.PREFIX,
+            StructuredName.GIVEN_NAME,
+            StructuredName.MIDDLE_NAME,
+            StructuredName.FAMILY_NAME,
+            StructuredName.SUFFIX
+    };
+
+    /**
+     * Converts the given structured name (provided as ContentValues) into a display name string.
+     * @param context Activity context.
+     * @param values The content values containing values comprising the structured name.
+     * @return
+     */
+    public static String structuredNameToDisplayName(Context context, ContentValues values) {
+        Builder builder = ContactsContract.AUTHORITY_URI.buildUpon().appendPath("complete_name");
+        for (String key : STRUCTURED_NAME_FIELDS) {
+            if (values.containsKey(key)) {
+                appendQueryParameter(builder, key, values.getAsString(key));
+            }
+        }
+        return fetchDisplayName(context, builder.build());
+    }
+
+    /**
+     * Helper method for fetching the display name via the given URI.
+     */
+    private static String fetchDisplayName(Context context, Uri uri) {
+        String displayName = null;
+        Cursor cursor = context.getContentResolver().query(uri, new String[]{
+                StructuredName.DISPLAY_NAME,
+        }, null, null, null);
+
+        if (cursor != null) {
+            try {
+                if (cursor.moveToFirst()) {
+                    displayName = cursor.getString(0);
+                }
+            } finally {
+                cursor.close();
+            }
+        }
+        return displayName;
+    }
+
+    private static void appendQueryParameter(Builder builder, String field, String value) {
+        if (!TextUtils.isEmpty(value)) {
+            builder.appendQueryParameter(field, value);
+        }
+    }
+
+
+    /**
+     * Parses phonetic name and returns parsed data (family, middle, given) as ContentValues.
+     * Parsed data should be {@link StructuredName#PHONETIC_FAMILY_NAME},
+     * {@link StructuredName#PHONETIC_MIDDLE_NAME}, and
+     * {@link StructuredName#PHONETIC_GIVEN_NAME}.
+     * If this method cannot parse given phoneticName, null values will be stored.
+     *
+     * @param phoneticName Phonetic name to be parsed
+     * @param values ContentValues to be used for storing data. If null, new instance will be
+     * created.
+     * @return ContentValues with parsed data. Those data can be null.
+     */
+    public static StructuredNameDataItem parsePhoneticName(String phoneticName,
+            StructuredNameDataItem item) {
+        String family = null;
+        String middle = null;
+        String given = null;
+
+        if (!TextUtils.isEmpty(phoneticName)) {
+            String[] strings = phoneticName.split(" ", 3);
+            switch (strings.length) {
+                case 1:
+                    family = strings[0];
+                    break;
+                case 2:
+                    family = strings[0];
+                    given = strings[1];
+                    break;
+                case 3:
+                    family = strings[0];
+                    middle = strings[1];
+                    given = strings[2];
+                    break;
+            }
+        }
+
+        if (item == null) {
+            item = new StructuredNameDataItem();
+        }
+        item.setPhoneticFamilyName(family);
+        item.setPhoneticMiddleName(middle);
+        item.setPhoneticGivenName(given);
+        return item;
+    }
+
+    /**
+     * Constructs and returns a phonetic full name from given parts.
+     */
+    public static String buildPhoneticName(String family, String middle, String given) {
+        if (!TextUtils.isEmpty(family) || !TextUtils.isEmpty(middle)
+                || !TextUtils.isEmpty(given)) {
+            StringBuilder sb = new StringBuilder();
+            if (!TextUtils.isEmpty(family)) {
+                sb.append(family.trim()).append(' ');
+            }
+            if (!TextUtils.isEmpty(middle)) {
+                sb.append(middle.trim()).append(' ');
+            }
+            if (!TextUtils.isEmpty(given)) {
+                sb.append(given.trim()).append(' ');
+            }
+            sb.setLength(sb.length() - 1); // Yank the last space
+            return sb.toString();
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/src/com/android/contacts/util/PermissionsUtil.java b/src/com/android/contacts/util/PermissionsUtil.java
new file mode 100644
index 0000000..c56b13e
--- /dev/null
+++ b/src/com/android/contacts/util/PermissionsUtil.java
@@ -0,0 +1,108 @@
+/*
+ * 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.util;
+
+import android.Manifest.permission;
+import android.app.AppOpsManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.os.Process;
+import android.support.v4.content.ContextCompat;
+import android.support.v4.content.LocalBroadcastManager;
+
+/**
+ * Utility class to help with runtime permissions.
+ */
+public class PermissionsUtil {
+    // Each permission in this list is a cherry-picked permission from a particular permission
+    // group. Granting a permission group enables access to all permissions in that group so we
+    // only need to check a single permission in each group.
+    // Note: This assumes that the app has correctly requested for all the relevant permissions
+    // in its Manifest file.
+    public static final String PHONE = permission.CALL_PHONE;
+    public static final String CONTACTS = permission.READ_CONTACTS;
+    public static final String LOCATION = permission.ACCESS_FINE_LOCATION;
+
+    public static boolean hasPhonePermissions(Context context) {
+        return hasPermission(context, PHONE);
+    }
+
+    public static boolean hasContactsPermissions(Context context) {
+        return hasPermission(context, CONTACTS);
+    }
+
+    public static boolean hasLocationPermissions(Context context) {
+        return hasPermission(context, LOCATION);
+    }
+
+    public static boolean hasPermission(Context context, String permission) {
+        return ContextCompat.checkSelfPermission(context, permission)
+                == PackageManager.PERMISSION_GRANTED;
+    }
+
+    public static boolean hasAppOp(Context context, String appOp) {
+        final AppOpsManager appOpsManager =
+                (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
+        final int mode = appOpsManager.checkOpNoThrow(appOp, Process.myUid(),
+                context.getPackageName());
+        return mode == AppOpsManager.MODE_ALLOWED;
+    }
+
+    /**
+     * Rudimentary methods wrapping the use of a LocalBroadcastManager to simplify the process
+     * of notifying other classes when a particular fragment is notified that a permission is
+     * granted.
+     *
+     * To be notified when a permission has been granted, create a new broadcast receiver
+     * and register it using {@link #registerPermissionReceiver(Context, BroadcastReceiver, String)}
+     *
+     * E.g.
+     *
+     * final BroadcastReceiver receiver = new BroadcastReceiver() {
+     *     @Override
+     *     public void onReceive(Context context, Intent intent) {
+     *         refreshContactsView();
+     *     }
+     * }
+     *
+     * PermissionsUtil.registerPermissionReceiver(getActivity(), receiver, READ_CONTACTS);
+     *
+     * If you register to listen for multiple permissions, you can identify which permission was
+     * granted by inspecting {@link Intent#getAction()}.
+     *
+     * In the fragment that requests for the permission, be sure to call
+     * {@link #notifyPermissionGranted(Context, String)} when the permission is granted so that
+     * any interested listeners are notified of the change.
+     */
+    public static void registerPermissionReceiver(Context context, BroadcastReceiver receiver,
+            String permission) {
+        final IntentFilter filter = new IntentFilter(permission);
+        LocalBroadcastManager.getInstance(context).registerReceiver(receiver, filter);
+    }
+
+    public static void unregisterPermissionReceiver(Context context, BroadcastReceiver receiver) {
+        LocalBroadcastManager.getInstance(context).unregisterReceiver(receiver);
+    }
+
+    public static void notifyPermissionGranted(Context context, String permission) {
+        final Intent intent = new Intent(permission);
+        LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
+    }
+}
diff --git a/src/com/android/contacts/util/PhoneCapabilityTester.java b/src/com/android/contacts/util/PhoneCapabilityTester.java
index d1373f4..9753b88 100644
--- a/src/com/android/contacts/util/PhoneCapabilityTester.java
+++ b/src/com/android/contacts/util/PhoneCapabilityTester.java
@@ -27,8 +27,8 @@
 import android.provider.Telephony;
 import android.telephony.TelephonyManager;
 
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.compat.TelephonyManagerCompat;
+import com.android.contacts.ContactsUtils;
+import com.android.contacts.compat.TelephonyManagerCompat;
 
 import java.util.List;
 
diff --git a/src/com/android/contacts/util/PhoneNumberFormatter.java b/src/com/android/contacts/util/PhoneNumberFormatter.java
new file mode 100644
index 0000000..58d6800
--- /dev/null
+++ b/src/com/android/contacts/util/PhoneNumberFormatter.java
@@ -0,0 +1,89 @@
+/*
+ * 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.util;
+
+import android.content.Context;
+import android.os.AsyncTask;
+import android.telephony.PhoneNumberFormattingTextWatcher;
+import android.widget.TextView;
+
+import com.android.contacts.GeoUtil;
+import com.android.contacts.compat.PhoneNumberFormattingTextWatcherCompat;
+
+public final class PhoneNumberFormatter {
+    private PhoneNumberFormatter() {}
+
+    /**
+     * Load {@link TextWatcherLoadAsyncTask} in a worker thread and set it to a {@link TextView}.
+     */
+    private static class TextWatcherLoadAsyncTask extends
+            AsyncTask<Void, Void, PhoneNumberFormattingTextWatcher> {
+        private final String mCountryCode;
+        private final TextView mTextView;
+        private final boolean mFormatAfterWatcherSet;
+
+        public TextWatcherLoadAsyncTask(
+                String countryCode, TextView textView, boolean formatAfterWatcherSet) {
+            mCountryCode = countryCode;
+            mTextView = textView;
+            mFormatAfterWatcherSet = formatAfterWatcherSet;
+        }
+
+        @Override
+        protected PhoneNumberFormattingTextWatcher doInBackground(Void... params) {
+            return PhoneNumberFormattingTextWatcherCompat.newInstance(mCountryCode);
+        }
+
+        @Override
+        protected void onPostExecute(PhoneNumberFormattingTextWatcher watcher) {
+            if (watcher == null || isCancelled()) {
+                return; // May happen if we cancel the task.
+            }
+
+            // Setting a text changed listener is safe even after the view is detached.
+            mTextView.addTextChangedListener(watcher);
+
+            // Forcing formatting the existing phone number
+            if (mFormatAfterWatcherSet) {
+                watcher.afterTextChanged(mTextView.getEditableText());
+            }
+        }
+    }
+
+    /**
+     * Delay-set {@link PhoneNumberFormattingTextWatcher} to a {@link TextView}.
+     */
+    public static final void setPhoneNumberFormattingTextWatcher(Context context,
+            TextView textView) {
+        setPhoneNumberFormattingTextWatcher(context, textView,
+                /* formatAfterWatcherSet =*/ false);
+    }
+
+    /**
+     * Delay-sets {@link PhoneNumberFormattingTextWatcher} to a {@link TextView}
+     * and formats the number immediately if formatAfterWaterSet is true.
+     * In some cases, formatting before user editing might cause unwanted results
+     * (e.g. the editor thinks the user changed the content, and would save
+     * when closed even when the user didn't make other changes.)
+     */
+    public static final void setPhoneNumberFormattingTextWatcher(
+            Context context, TextView textView, boolean formatAfterWatcherSet) {
+        new TextWatcherLoadAsyncTask(GeoUtil.getCurrentCountryIso(context),
+                textView, formatAfterWatcherSet)
+                .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void[]) null);
+    }
+}
diff --git a/src/com/android/contacts/util/PhoneNumberHelper.java b/src/com/android/contacts/util/PhoneNumberHelper.java
new file mode 100644
index 0000000..eb070b2
--- /dev/null
+++ b/src/com/android/contacts/util/PhoneNumberHelper.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.util;
+
+import android.telephony.PhoneNumberUtils;
+import android.util.Log;
+
+/**
+ * This class wraps several PhoneNumberUtil calls and TelephonyManager calls. Some of them are
+ * the same as the ones in the framework's code base. We can remove those once they are part of
+ * the public API.
+ */
+public class PhoneNumberHelper {
+
+    private static final String LOG_TAG = PhoneNumberHelper.class.getSimpleName();
+
+    private static final String KOREA_ISO_COUNTRY_CODE = "KR";
+    /**
+     * Determines if the specified number is actually a URI (i.e. a SIP address) rather than a
+     * regular PSTN phone number, based on whether or not the number contains an "@" character.
+     *
+     * @param number Phone number
+     * @return true if number contains @
+     *
+     * TODO: Remove if PhoneNumberUtils.isUriNumber(String number) is made public.
+     */
+    public static boolean isUriNumber(String number) {
+        // Note we allow either "@" or "%40" to indicate a URI, in case
+        // the passed-in string is URI-escaped.  (Neither "@" nor "%40"
+        // will ever be found in a legal PSTN number.)
+        return number != null && (number.contains("@") || number.contains("%40"));
+    }
+
+    /**
+     * Normalize a phone number by removing the characters other than digits. If
+     * the given number has keypad letters, the letters will be converted to
+     * digits first.
+     *
+     * @param phoneNumber The number to be normalized.
+     * @return The normalized number.
+     *
+     * TODO: Remove if PhoneNumberUtils.normalizeNumber(String phoneNumber) is made public.
+     */
+    public static String normalizeNumber(String phoneNumber) {
+        StringBuilder sb = new StringBuilder();
+        int len = phoneNumber.length();
+        for (int i = 0; i < len; i++) {
+            char c = phoneNumber.charAt(i);
+            // Character.digit() supports ASCII and Unicode digits (fullwidth, Arabic-Indic, etc.)
+            int digit = Character.digit(c, 10);
+            if (digit != -1) {
+                sb.append(digit);
+            } else if (i == 0 && c == '+') {
+                sb.append(c);
+            } else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
+                return normalizeNumber(PhoneNumberUtils.convertKeypadLettersToDigits(phoneNumber));
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * @return the "username" part of the specified SIP address, i.e. the part before the "@"
+     * character (or "%40").
+     *
+     * @param number SIP address of the form "username@domainname" (or the URI-escaped equivalent
+     * "username%40domainname")
+     *
+     * TODO: Remove if PhoneNumberUtils.getUsernameFromUriNumber(String number) is made public.
+     */
+    public static String getUsernameFromUriNumber(String number) {
+        // The delimiter between username and domain name can be
+        // either "@" or "%40" (the URI-escaped equivalent.)
+        int delimiterIndex = number.indexOf('@');
+        if (delimiterIndex < 0) {
+            delimiterIndex = number.indexOf("%40");
+        }
+        if (delimiterIndex < 0) {
+            Log.w(LOG_TAG,
+                    "getUsernameFromUriNumber: no delimiter found in SIP addr '" + number + "'");
+            return number;
+        }
+        return number.substring(0, delimiterIndex);
+    }
+}
diff --git a/src/com/android/contacts/util/SchedulingUtils.java b/src/com/android/contacts/util/SchedulingUtils.java
index fbb2458..f851339 100644
--- a/src/com/android/contacts/util/SchedulingUtils.java
+++ b/src/com/android/contacts/util/SchedulingUtils.java
@@ -17,7 +17,6 @@
 package com.android.contacts.util;
 
 import android.view.View;
-import android.view.ViewTreeObserver.OnDrawListener;
 import android.view.ViewTreeObserver.OnGlobalLayoutListener;
 import android.view.ViewTreeObserver.OnPreDrawListener;
 
diff --git a/src/com/android/contacts/util/SearchUtil.java b/src/com/android/contacts/util/SearchUtil.java
new file mode 100644
index 0000000..d80fc53
--- /dev/null
+++ b/src/com/android/contacts/util/SearchUtil.java
@@ -0,0 +1,204 @@
+/*
+ * 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.util;
+
+import com.google.common.annotations.VisibleForTesting;
+
+/**
+ * Methods related to search.
+ */
+public class SearchUtil {
+
+    public static class MatchedLine {
+
+        public int startIndex = -1;
+        public String line;
+
+        @Override
+        public String toString() {
+            return "MatchedLine{" +
+                    "line='" + line + '\'' +
+                    ", startIndex=" + startIndex +
+                    '}';
+        }
+    }
+
+    /**
+     * Given a string with lines delimited with '\n', finds the matching line to the given
+     * substring.
+     *
+     * @param contents The string to search.
+     * @param substring The substring to search for.
+     * @return A MatchedLine object containing the matching line and the startIndex of the substring
+     * match within that line.
+     */
+    public static MatchedLine findMatchingLine(String contents, String substring) {
+        final MatchedLine matched = new MatchedLine();
+
+        // Snippet may contain multiple lines separated by "\n".
+        // Locate the lines of the content that contain the substring.
+        final int index = SearchUtil.contains(contents, substring);
+        if (index != -1) {
+            // Match found.  Find the corresponding line.
+            int start = index - 1;
+            while (start > -1) {
+                if (contents.charAt(start) == '\n') {
+                    break;
+                }
+                start--;
+            }
+            int end = index + 1;
+            while (end < contents.length()) {
+                if (contents.charAt(end) == '\n') {
+                    break;
+                }
+                end++;
+            }
+            matched.line = contents.substring(start + 1, end);
+            matched.startIndex = index - (start + 1);
+        }
+        return matched;
+    }
+
+    /**
+     * Similar to String.contains() with two main differences:
+     * <p>
+     * 1) Only searches token prefixes.  A token is defined as any combination of letters or
+     * numbers.
+     * <p>
+     * 2) Returns the starting index where the substring is found.
+     *
+     * @param value The string to search.
+     * @param substring The substring to look for.
+     * @return The starting index where the substring is found. {@literal -1} if substring is not
+     *         found in value.
+     */
+    @VisibleForTesting
+    static int contains(String value, String substring) {
+        if (value.length() < substring.length()) {
+            return -1;
+        }
+
+        // i18n support
+        // Generate the code points for the substring once.
+        // There will be a maximum of substring.length code points.  But may be fewer.
+        // Since the array length is not an accurate size, we need to keep a separate variable.
+        final int[] substringCodePoints = new int[substring.length()];
+        int substringLength = 0;  // may not equal substring.length()!!
+        for (int i = 0; i < substring.length(); ) {
+            final int codePoint = Character.codePointAt(substring, i);
+            substringCodePoints[substringLength] = codePoint;
+            substringLength++;
+            i += Character.charCount(codePoint);
+        }
+
+        for (int i = 0; i < value.length(); i = findNextTokenStart(value, i)) {
+            int numMatch = 0;
+            for (int j = i; j < value.length() && numMatch < substringLength; ++numMatch) {
+                int valueCp = Character.toLowerCase(value.codePointAt(j));
+                int substringCp = substringCodePoints[numMatch];
+                if (valueCp != substringCp) {
+                    break;
+                }
+                j += Character.charCount(valueCp);
+            }
+            if (numMatch == substringLength) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Find the start of the next token.  A token is composed of letters and numbers. Any other
+     * character are considered delimiters.
+     *
+     * @param line The string to search for the next token.
+     * @param startIndex The index to start searching.  0 based indexing.
+     * @return The index for the start of the next token.  line.length() if next token not found.
+     */
+    @VisibleForTesting
+    static int findNextTokenStart(String line, int startIndex) {
+        int index = startIndex;
+
+        // If already in token, eat remainder of token.
+        while (index <= line.length()) {
+            if (index == line.length()) {
+                // No more tokens.
+                return index;
+            }
+            final int codePoint = line.codePointAt(index);
+            if (!Character.isLetterOrDigit(codePoint)) {
+                break;
+            }
+            index += Character.charCount(codePoint);
+        }
+
+        // Out of token, eat all consecutive delimiters.
+        while (index <= line.length()) {
+            if (index == line.length()) {
+                return index;
+            }
+            final int codePoint = line.codePointAt(index);
+            if (Character.isLetterOrDigit(codePoint)) {
+                break;
+            }
+            index += Character.charCount(codePoint);
+        }
+
+        return index;
+    }
+
+    /**
+     * Anything other than letter and numbers are considered delimiters.  Remove start and end
+     * delimiters since they are not relevant to search.
+     *
+     * @param query The query string to clean.
+     * @return The cleaned query. Empty string if all characters are cleaned out.
+     */
+    public static String cleanStartAndEndOfSearchQuery(String query) {
+        int start = 0;
+        while (start < query.length()) {
+            int codePoint = query.codePointAt(start);
+            if (Character.isLetterOrDigit(codePoint)) {
+                break;
+            }
+            start += Character.charCount(codePoint);
+        }
+
+        if (start == query.length()) {
+            // All characters are delimiters.
+            return "";
+        }
+
+        int end = query.length() - 1;
+        while (end > -1) {
+            if (Character.isLowSurrogate(query.charAt(end))) {
+                // Assume valid i18n string.  There should be a matching high surrogate before it.
+                end--;
+            }
+            int codePoint = query.codePointAt(end);
+            if (Character.isLetterOrDigit(codePoint)) {
+                break;
+            }
+            end--;
+        }
+
+        // end is a letter or digit.
+        return query.substring(start, end + 1);
+    }
+}
diff --git a/src/com/android/contacts/util/SharedPreferenceUtil.java b/src/com/android/contacts/util/SharedPreferenceUtil.java
index 3d138fb..1604711 100644
--- a/src/com/android/contacts/util/SharedPreferenceUtil.java
+++ b/src/com/android/contacts/util/SharedPreferenceUtil.java
@@ -16,10 +16,11 @@
 
 package com.android.contacts.util;
 
+import android.app.backup.BackupManager;
 import android.content.Context;
 import android.content.SharedPreferences;
 
-import com.android.contacts.common.model.SimCard;
+import com.android.contacts.model.SimCard;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -36,13 +37,13 @@
     public static final String PREFERENCE_KEY_GLOBAL_SYNC_OFF_DISMISSES =
             "num-of-dismisses-auto-sync-off";
 
-    private static final String PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED =
+    public static final String PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED =
             "hamburgerPromoDisplayed";
 
-    private static final String PREFERENCE_KEY_HAMBURGER_MENU_CLICKED =
+    public static final String PREFERENCE_KEY_HAMBURGER_MENU_CLICKED =
             "hamburgerMenuClicked";
 
-    private static final String PREFERENCE_KEY_HAMBURGER_PROMO_TRIGGER_ACTION_HAPPENED =
+    public static final String PREFERENCE_KEY_HAMBURGER_PROMO_TRIGGER_ACTION_HAPPENED =
             "hamburgerPromoTriggerActionHappened";
 
     private static final String PREFERENCE_KEY_IMPORTED_SIM_CARDS =
@@ -69,6 +70,7 @@
         getSharedPreferences(context).edit()
                 .putBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_DISPLAYED, true)
                 .apply();
+        new BackupManager(context).dataChanged();
     }
 
     public static boolean getHamburgerMenuClickedBefore(Context context) {
@@ -80,6 +82,7 @@
         getSharedPreferences(context).edit()
                 .putBoolean(PREFERENCE_KEY_HAMBURGER_MENU_CLICKED, true)
                 .apply();
+        new BackupManager(context).dataChanged();
     }
 
     public static boolean getHamburgerPromoTriggerActionHappenedBefore(Context context) {
@@ -91,6 +94,7 @@
         getSharedPreferences(context).edit()
                 .putBoolean(PREFERENCE_KEY_HAMBURGER_PROMO_TRIGGER_ACTION_HAPPENED, true)
                 .apply();
+        new BackupManager(context).dataChanged();
     }
 
     /**
@@ -109,7 +113,12 @@
     }
 
     protected static SharedPreferences getSharedPreferences(Context context) {
-        return context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
+        return context.getSharedPreferences(getSharedPreferencesFilename(context),
+                Context.MODE_PRIVATE);
+    }
+
+    public static String getSharedPreferencesFilename(Context context) {
+        return context.getPackageName();
     }
 
     public static int getNumOfDismissesForAutoSyncOff(Context context) {
@@ -244,9 +253,11 @@
     public static void setWelcomeCardDismissed(Context context, boolean isDismissed) {
         getSharedPreferences(context).edit().putBoolean(PREFERENCE_WELCOME_CARD_DISMISSED,
                 isDismissed).apply();
+        new BackupManager(context).dataChanged();
     }
 
     public static void clear(Context context) {
         getSharedPreferences(context).edit().clear().commit();
+        new BackupManager(context).dataChanged();
     }
 }
diff --git a/src/com/android/contacts/util/StopWatch.java b/src/com/android/contacts/util/StopWatch.java
new file mode 100644
index 0000000..c53f346
--- /dev/null
+++ b/src/com/android/contacts/util/StopWatch.java
@@ -0,0 +1,110 @@
+/*
+ * 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.util;
+
+import android.util.Log;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+
+/**
+ * A {@link StopWatch} records start, laps and stop, and print them to logcat.
+ */
+public class StopWatch {
+
+    private final String mLabel;
+
+    private final ArrayList<Long> mTimes = Lists.newArrayList();
+    private final ArrayList<String> mLapLabels = Lists.newArrayList();
+
+    private StopWatch(String label) {
+        mLabel = label;
+        lap("");
+    }
+
+    /**
+     * Create a new instance and start it.
+     */
+    public static StopWatch start(String label) {
+        return new StopWatch(label);
+    }
+
+    /**
+     * Record a lap.
+     */
+    public void lap(String lapLabel) {
+        mTimes.add(System.currentTimeMillis());
+        mLapLabels.add(lapLabel);
+    }
+
+    /**
+     * Stop it and log the result, if the total time >= {@code timeThresholdToLog}.
+     */
+    public void stopAndLog(String TAG, int timeThresholdToLog) {
+
+        lap("");
+
+        final long start = mTimes.get(0);
+        final long stop = mTimes.get(mTimes.size() - 1);
+
+        final long total = stop - start;
+        if (total < timeThresholdToLog) return;
+
+        final StringBuilder sb = new StringBuilder();
+        sb.append(mLabel);
+        sb.append(",");
+        sb.append(total);
+        sb.append(": ");
+
+        long last = start;
+        for (int i = 1; i < mTimes.size(); i++) {
+            final long current = mTimes.get(i);
+            sb.append(mLapLabels.get(i));
+            sb.append(",");
+            sb.append((current - last));
+            sb.append(" ");
+            last = current;
+        }
+        Log.v(TAG, sb.toString());
+    }
+
+    /**
+     * Return a dummy instance that does no operations.
+     */
+    public static StopWatch getNullStopWatch() {
+        return NullStopWatch.INSTANCE;
+    }
+
+    private static class NullStopWatch extends StopWatch {
+        public static final NullStopWatch INSTANCE = new NullStopWatch();
+
+        public NullStopWatch() {
+            super(null);
+        }
+
+        @Override
+        public void lap(String lapLabel) {
+            // noop
+        }
+
+        @Override
+        public void stopAndLog(String TAG, int timeThresholdToLog) {
+            // noop
+        }
+    }
+}
diff --git a/src/com/android/contacts/util/SyncUtil.java b/src/com/android/contacts/util/SyncUtil.java
index 34e6e8c..ce10937 100644
--- a/src/com/android/contacts/util/SyncUtil.java
+++ b/src/com/android/contacts/util/SyncUtil.java
@@ -22,7 +22,8 @@
 import android.net.NetworkInfo;
 import android.provider.ContactsContract;
 
-import com.android.contacts.common.model.account.GoogleAccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
 
 import java.util.List;
 
@@ -48,6 +49,19 @@
     }
 
     /**
+     * Returns true {@link ContentResolver#isSyncPending(Account, String)} or
+     * {@link ContentResolver#isSyncActive(Account, String)} is true for any account in accounts
+     */
+    public static final boolean isAnySyncing(List<AccountWithDataSet> accounts) {
+        for (AccountWithDataSet accountWithDataSet : accounts) {
+            if (isSyncStatusPendingOrActive(accountWithDataSet.getAccountOrNull())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
      * Returns true if the given Google account is not syncable.
      */
     public static final boolean isUnsyncableGoogleAccount(Account account) {
diff --git a/src/com/android/contacts/util/TelephonyManagerUtils.java b/src/com/android/contacts/util/TelephonyManagerUtils.java
new file mode 100644
index 0000000..ef1544c
--- /dev/null
+++ b/src/com/android/contacts/util/TelephonyManagerUtils.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.util;
+
+import android.content.Context;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import java.util.Locale;
+
+/**
+ * This class provides several TelephonyManager util functions.
+ */
+public class TelephonyManagerUtils {
+
+    private static final String LOG_TAG = TelephonyManagerUtils.class.getSimpleName();
+
+    /**
+     * Gets the voicemail tag from Telephony Manager.
+     * @param context Current application context
+     * @return Voicemail tag, the alphabetic identifier associated with the voice mail number.
+     */
+    public static String getVoiceMailAlphaTag(Context context) {
+        final TelephonyManager telephonyManager =
+                (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+        final String voiceMailLabel = telephonyManager.getVoiceMailAlphaTag();
+        return voiceMailLabel;
+    }
+
+    /**
+     * @return The ISO 3166-1 two letters country code of the country the user
+     *         is in based on the network location. If the network location does not exist, fall
+     *         back to the locale setting.
+     */
+    public static String getCurrentCountryIso(Context context, Locale locale) {
+        // Without framework function calls, this seems to be the most accurate location service
+        // we can rely on.
+        final TelephonyManager telephonyManager =
+            (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+        String countryIso = telephonyManager.getNetworkCountryIso().toUpperCase();
+
+        if (countryIso == null) {
+            countryIso = locale.getCountry();
+            Log.w(LOG_TAG, "No CountryDetector; falling back to countryIso based on locale: "
+                    + countryIso);
+        }
+        return countryIso;
+    }
+
+    /**
+     * @param context Current application context.
+     * @return True if there is a subscription which supports video calls. False otherwise.
+     */
+    public static boolean hasVideoCallSubscription(Context context) {
+        // TODO: Check the telephony manager's subscriptions to see if any support video calls.
+        return true;
+    }
+}
diff --git a/src/com/android/contacts/util/TrafficStatsTags.java b/src/com/android/contacts/util/TrafficStatsTags.java
new file mode 100644
index 0000000..617aa4d
--- /dev/null
+++ b/src/com/android/contacts/util/TrafficStatsTags.java
@@ -0,0 +1,21 @@
+/*
+ * 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.util;
+
+public class TrafficStatsTags {
+    public static final int CONTACT_PHOTO_DOWNLOAD_TAG = 0x0001;
+    public static final int TAG_MAX = 0x9999;
+}
diff --git a/src/com/android/contacts/util/UriUtils.java b/src/com/android/contacts/util/UriUtils.java
new file mode 100644
index 0000000..419304f
--- /dev/null
+++ b/src/com/android/contacts/util/UriUtils.java
@@ -0,0 +1,94 @@
+/*
+ * 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.util;
+
+import android.net.Uri;
+import android.provider.ContactsContract;
+
+import java.util.List;
+
+/**
+ * Utility methods for dealing with URIs.
+ */
+public class UriUtils {
+    /** Static helper, not instantiable. */
+    private UriUtils() {}
+
+    /** Checks whether two URI are equal, taking care of the case where either is null. */
+    public static boolean areEqual(Uri uri1, Uri uri2) {
+        if (uri1 == null && uri2 == null) {
+            return true;
+        }
+        if (uri1 == null || uri2 == null) {
+            return false;
+        }
+        return uri1.equals(uri2);
+    }
+
+    /** Parses a string into a URI and returns null if the given string is null. */
+    public static Uri parseUriOrNull(String uriString) {
+        if (uriString == null) {
+            return null;
+        }
+        return Uri.parse(uriString);
+    }
+
+    /** Converts a URI into a string, returns null if the given URI is null. */
+    public static String uriToString(Uri uri) {
+        return uri == null ? null : uri.toString();
+    }
+
+    public static boolean isEncodedContactUri(Uri uri) {
+        if (uri == null) {
+            return false;
+        }
+        final String lastPathSegment = uri.getLastPathSegment();
+        if (lastPathSegment == null) {
+            return false;
+        }
+        return lastPathSegment.equals(Constants.LOOKUP_URI_ENCODED);
+    }
+
+    /**
+     * @return {@code uri} as-is if the authority is of contacts provider.  Otherwise
+     * or {@code uri} is null, return null otherwise
+     */
+    public static Uri nullForNonContactsUri(Uri uri) {
+        if (uri == null) {
+            return null;
+        }
+        return ContactsContract.AUTHORITY.equals(uri.getAuthority()) ? uri : null;
+    }
+
+    /**
+     * Parses the given URI to determine the original lookup key of the contact.
+     */
+    public static String getLookupKeyFromUri(Uri lookupUri) {
+        // Would be nice to be able to persist the lookup key somehow to avoid having to parse
+        // the uri entirely just to retrieve the lookup key, but every uri is already parsed
+        // once anyway to check if it is an encoded JSON uri, so this has negligible effect
+        // on performance.
+        if (lookupUri != null && !UriUtils.isEncodedContactUri(lookupUri)) {
+            final List<String> segments = lookupUri.getPathSegments();
+            // This returns the third path segment of the uri, where the lookup key is located.
+            // See {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}.
+            return (segments.size() < 3) ? null : Uri.encode(segments.get(2));
+        } else {
+            return null;
+        }
+    }
+}
diff --git a/src/com/android/contacts/util/ViewUtil.java b/src/com/android/contacts/util/ViewUtil.java
new file mode 100644
index 0000000..ccb8a82
--- /dev/null
+++ b/src/com/android/contacts/util/ViewUtil.java
@@ -0,0 +1,127 @@
+/*
+ * 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.util;
+
+import android.content.res.Resources;
+import android.graphics.Outline;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewOutlineProvider;
+import android.widget.ListView;
+
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+
+/**
+ * Provides static functions to work with views
+ */
+public class ViewUtil {
+    private ViewUtil() {}
+
+    /**
+     * Returns the width as specified in the LayoutParams
+     * @throws IllegalStateException Thrown if the view's width is unknown before a layout pass
+     * s
+     */
+    public static int getConstantPreLayoutWidth(View view) {
+        // We haven't been layed out yet, so get the size from the LayoutParams
+        final ViewGroup.LayoutParams p = view.getLayoutParams();
+        if (p.width < 0) {
+            throw new IllegalStateException("Expecting view's width to be a constant rather " +
+                    "than a result of the layout pass");
+        }
+        return p.width;
+    }
+
+    /**
+     * Returns a boolean indicating whether or not the view's layout direction is RTL
+     *
+     * @param view - A valid view
+     * @return True if the view's layout direction is RTL
+     */
+    public static boolean isViewLayoutRtl(View view) {
+        return view.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
+    }
+
+    private static final ViewOutlineProvider OVAL_OUTLINE_PROVIDER;
+    static {
+        if (CompatUtils.isLollipopCompatible()) {
+            OVAL_OUTLINE_PROVIDER = new ViewOutlineProvider() {
+                @Override
+                public void getOutline(View view, Outline outline) {
+                    outline.setOval(0, 0, view.getWidth(), view.getHeight());
+                }
+            };
+        } else {
+            OVAL_OUTLINE_PROVIDER = null;
+        }
+    }
+
+    private static final ViewOutlineProvider RECT_OUTLINE_PROVIDER;
+    static {
+        if (CompatUtils.isLollipopCompatible()) {
+            RECT_OUTLINE_PROVIDER = new ViewOutlineProvider() {
+                @Override
+                public void getOutline(View view, Outline outline) {
+                    outline.setRect(0, 0, view.getWidth(), view.getHeight());
+                }
+            };
+        } else {
+            RECT_OUTLINE_PROVIDER = null;
+        }
+    }
+
+    /**
+     * Adds a rectangular outline to a view. This can be useful when you want to add a shadow
+     * to a transparent view. See b/16856049.
+     * @param view view that the outline is added to
+     * @param res The resources file.
+     */
+    public static void addRectangularOutlineProvider(View view, Resources res) {
+        if (CompatUtils.isLollipopCompatible()) {
+            view.setOutlineProvider(RECT_OUTLINE_PROVIDER);
+        }
+    }
+
+    /**
+     * Configures the floating action button, clipping it to a circle and setting its translation z.
+     * @param view The float action button's view.
+     * @param res The resources file.
+     */
+    public static void setupFloatingActionButton(View view, Resources res) {
+        if (CompatUtils.isLollipopCompatible()) {
+            view.setOutlineProvider(OVAL_OUTLINE_PROVIDER);
+            view.setTranslationZ(
+                    res.getDimensionPixelSize(R.dimen.floating_action_button_translation_z));
+        }
+    }
+
+    /**
+     * Adds padding to the bottom of the given {@link ListView} so that the floating action button
+     * does not obscure any content.
+     *
+     * @param listView to add the padding to
+     * @param res valid resources object
+     */
+    public static void addBottomPaddingToListViewForFab(ListView listView, Resources res) {
+        final int fabPadding = res.getDimensionPixelSize(
+                R.dimen.floating_action_button_list_bottom_padding);
+        listView.setPaddingRelative(listView.getPaddingStart(), listView.getPaddingTop(),
+                listView.getPaddingEnd(), listView.getPaddingBottom() + fabPadding);
+        listView.setClipToPadding(false);
+    }
+}
diff --git a/src/com/android/contacts/util/WeakAsyncTask.java b/src/com/android/contacts/util/WeakAsyncTask.java
new file mode 100644
index 0000000..f60cfd7
--- /dev/null
+++ b/src/com/android/contacts/util/WeakAsyncTask.java
@@ -0,0 +1,69 @@
+/*
+ * 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.util;
+
+import android.os.AsyncTask;
+
+import java.lang.ref.WeakReference;
+
+public abstract class WeakAsyncTask<Params, Progress, Result, WeakTarget> extends
+        AsyncTask<Params, Progress, Result> {
+    protected WeakReference<WeakTarget> mTarget;
+
+    public WeakAsyncTask(WeakTarget target) {
+        mTarget = new WeakReference<WeakTarget>(target);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected final void onPreExecute() {
+        final WeakTarget target = mTarget.get();
+        if (target != null) {
+            this.onPreExecute(target);
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected final Result doInBackground(Params... params) {
+        final WeakTarget target = mTarget.get();
+        if (target != null) {
+            return this.doInBackground(target, params);
+        } else {
+            return null;
+        }
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    protected final void onPostExecute(Result result) {
+        final WeakTarget target = mTarget.get();
+        if (target != null) {
+            this.onPostExecute(target, result);
+        }
+    }
+
+    protected void onPreExecute(WeakTarget target) {
+        // No default action
+    }
+
+    protected abstract Result doInBackground(WeakTarget target, Params... params);
+
+    protected void onPostExecute(WeakTarget target, Result result) {
+        // No default action
+    }
+}
diff --git a/src/com/android/contacts/util/concurrent/ContactsExecutors.java b/src/com/android/contacts/util/concurrent/ContactsExecutors.java
new file mode 100644
index 0000000..58a6c1f
--- /dev/null
+++ b/src/com/android/contacts/util/concurrent/ContactsExecutors.java
@@ -0,0 +1,242 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+package com.android.contacts.util.concurrent;
+
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.os.Looper;
+import android.support.annotation.NonNull;
+
+import com.google.common.util.concurrent.ForwardingFuture;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
+import com.google.common.util.concurrent.SettableFuture;
+
+import java.util.List;
+import java.util.concurrent.AbstractExecutorService;
+import java.util.concurrent.Callable;
+import java.util.concurrent.Delayed;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.RunnableScheduledFuture;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * Provides some common executors for use with {@link Futures}
+ */
+public class ContactsExecutors {
+
+    private ContactsExecutors() {}
+
+    private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors();
+    private static final int CORE_POOL_SIZE = CPU_COUNT + 1;
+
+    // AsyncTask.THREAD_POOL_EXECUTOR is a ThreadPoolExecutor so we should end up always using that
+    // but we have a fallback in case the platform implementation changes in some future release.
+    private static final ListeningExecutorService DEFAULT_THREAD_POOL_EXECUTOR =
+            (AsyncTask.THREAD_POOL_EXECUTOR instanceof ExecutorService) ?
+                    MoreExecutors.listeningDecorator(
+                            (ExecutorService) AsyncTask.THREAD_POOL_EXECUTOR) :
+                    MoreExecutors.listeningDecorator(
+                            Executors.newFixedThreadPool(CORE_POOL_SIZE));
+
+    // We initialize this lazily since in some cases we may never even read from the SIM card
+    private static ListeningExecutorService sSimExecutor;
+
+    /**
+     * Returns the default thread pool that can be used for background work.
+     */
+    public static ListeningExecutorService getDefaultThreadPoolExecutor() {
+        return DEFAULT_THREAD_POOL_EXECUTOR;
+    }
+
+    /**
+     * Creates an executor that runs commands on the application UI thread
+     */
+    public static ScheduledExecutorService newUiThreadExecutor() {
+        return newHandlerExecutor(new Handler(Looper.getMainLooper()));
+    }
+
+    /**
+     * Create an executor that posts commands to the provided handler
+     */
+    public static ScheduledExecutorService newHandlerExecutor(final Handler handler) {
+        return new HandlerExecutorService(handler);
+    }
+
+    /**
+     * Returns an ExecutorService that can be used to read from the SIM card.
+     *
+     * <p>See b/32831092</p>
+     * <p>A different executor than {@link ContactsExecutors#getDefaultThreadPoolExecutor()} is
+     * provided for this case because reads of the SIM card can block for long periods of time
+     * and if they do we might exhaust our thread pool. Additionally it appears that reading from
+     * the SIM provider from multiple threads concurrently can cause problems.
+     * </p>
+     */
+    public synchronized static ListeningExecutorService getSimReadExecutor() {
+        if (sSimExecutor == null) {
+            final ThreadPoolExecutor executor = new ThreadPoolExecutor(
+                    1, 1, 30, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
+            executor.allowCoreThreadTimeOut(true);
+            sSimExecutor = MoreExecutors.listeningDecorator(executor);
+        }
+        return sSimExecutor;
+    }
+
+    /**
+     * Wrapper around a handler that implements a subset of the ScheduledExecutorService
+     *
+     * <p>This class is useful for testability because Handler can't be mocked since it's
+     * methods are final. It might be better to just use Executors.newSingleThreadScheduledExecutor
+     * in the cases where we need to run some time based tasks.
+     * </p>
+     */
+    private static class HandlerExecutorService extends AbstractExecutorService
+            implements ScheduledExecutorService {
+        private final Handler mHandler;
+
+        private HandlerExecutorService(Handler handler) {
+            mHandler = handler;
+        }
+
+        @NonNull
+        @Override
+        public ScheduledFuture<?> schedule(final Runnable command, long delay, TimeUnit unit) {
+            final HandlerFuture<Void> future = HandlerFuture
+                    .fromRunnable(mHandler, delay, unit, command);
+            mHandler.postDelayed(future, unit.toMillis(delay));
+            return future;
+        }
+
+        @NonNull
+        @Override
+        public <V> ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit) {
+            final HandlerFuture<V> future = new HandlerFuture<>(mHandler, delay, unit, callable);
+            mHandler.postDelayed(future, unit.toMillis(delay));
+            return future;
+        }
+
+        @NonNull
+        @Override
+        public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay,
+                long period, TimeUnit unit) {
+            throw new UnsupportedOperationException();
+        }
+
+        @NonNull
+        @Override
+        public ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay,
+                long delay, TimeUnit unit) {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public void shutdown() {
+        }
+
+        @Override
+        public List<Runnable> shutdownNow() {
+            return null;
+        }
+
+        @Override
+        public boolean isShutdown() {
+            return false;
+        }
+
+        @Override
+        public boolean isTerminated() {
+            return false;
+        }
+
+        @Override
+        public boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedException {
+            throw new UnsupportedOperationException();
+        }
+
+        @Override
+        public void execute(Runnable command) {
+            mHandler.post(command);
+        }
+    }
+
+    private static class HandlerFuture<T> extends ForwardingFuture<T> implements
+            RunnableScheduledFuture<T> {
+
+        private final Handler mHandler;
+        private final long mDelayMillis;
+        private final Callable<T> mTask;
+        private final SettableFuture<T> mDelegate = SettableFuture.create();
+
+        private final AtomicLong mStart = new AtomicLong(-1);
+
+        private HandlerFuture(Handler handler, long delay, TimeUnit timeUnit, Callable<T> task) {
+            mHandler = handler;
+            mDelayMillis = timeUnit.toMillis(delay);
+            mTask = task;
+        }
+
+        @Override
+        public boolean isPeriodic() {
+            return false;
+        }
+
+        @Override
+        public long getDelay(TimeUnit unit) {
+            long start = mStart.get();
+            if (start < 0) {
+                return mDelayMillis;
+            }
+            long remaining = mDelayMillis - (System.currentTimeMillis() - start);
+            return TimeUnit.MILLISECONDS.convert(remaining, unit);
+        }
+
+        @Override
+        public int compareTo(Delayed o) {
+            return Long.compare(getDelay(TimeUnit.MILLISECONDS),
+                    o.getDelay(TimeUnit.MILLISECONDS));
+        }
+
+        @Override
+        protected Future<T> delegate() {
+            return mDelegate;
+        }
+
+        @Override
+        public boolean cancel(boolean b) {
+            mHandler.removeCallbacks(this);
+            return super.cancel(b);
+        }
+
+        @Override
+        public void run() {
+            if (!mStart.compareAndSet(-1, System.currentTimeMillis())) {
+                // Already started
+                return;
+            }
+            try {
+                mDelegate.set(mTask.call());
+            } catch (Exception e) {
+                mDelegate.setException(e);
+            }
+        }
+
+        public static HandlerFuture<Void> fromRunnable(Handler handler, long delay, TimeUnit unit,
+                final Runnable command) {
+            return new HandlerFuture<>(handler, delay, unit, new Callable<Void>() {
+                @Override
+                public Void call() throws Exception {
+                    command.run();
+                    return null;
+                }
+            });
+        }
+    }
+}
diff --git a/src/com/android/contacts/util/concurrent/FuturesUtil.java b/src/com/android/contacts/util/concurrent/FuturesUtil.java
new file mode 100644
index 0000000..113af93
--- /dev/null
+++ b/src/com/android/contacts/util/concurrent/FuturesUtil.java
@@ -0,0 +1,59 @@
+// Copyright 2016 Google Inc. All Rights Reserved.
+package com.android.contacts.util.concurrent;
+
+import android.os.Handler;
+
+import com.google.common.util.concurrent.FutureFallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Has utility methods for operating on ListenableFutures
+ */
+public class FuturesUtil {
+
+    /**
+     * See
+     * {@link FuturesUtil#withTimeout(ListenableFuture, long, TimeUnit, ScheduledExecutorService)}
+     */
+    public static <V> ListenableFuture<V> withTimeout(final ListenableFuture<V> future, long time,
+            TimeUnit unit, Handler handler) {
+        return withTimeout(future, time, unit, ContactsExecutors.newHandlerExecutor(handler));
+    }
+
+    /**
+     * Returns a future that completes with the result from the input future unless the specified
+     * time elapses before it finishes in which case the result will contain a TimeoutException and
+     * the input future will be canceled.
+     *
+     * <p>Guava has Futures.withTimeout but it isn't available until v19.0 and we depend on v14.0
+     * right now. Replace usages of this method if we upgrade our dependency.</p>
+     */
+    public static <V> ListenableFuture<V> withTimeout(final ListenableFuture<V> future, long time,
+            TimeUnit unit, ScheduledExecutorService executor) {
+        final AtomicBoolean didTimeout = new AtomicBoolean(false);
+        executor.schedule(new Runnable() {
+            @Override
+            public void run() {
+                didTimeout.set(!future.isDone() && !future.isCancelled());
+                future.cancel(true);
+            }
+        }, time, unit);
+
+        return Futures.withFallback(future, new FutureFallback<V>() {
+            @Override
+            public ListenableFuture<V> create(Throwable t) throws Exception {
+                if ((t instanceof CancellationException) && didTimeout.get()) {
+                    return Futures.immediateFailedFuture(new TimeoutException("Timeout expired"));
+                }
+                return Futures.immediateFailedFuture(t);
+            }
+        });
+    }
+}
diff --git a/src/com/android/contacts/util/concurrent/ListenableFutureLoader.java b/src/com/android/contacts/util/concurrent/ListenableFutureLoader.java
new file mode 100644
index 0000000..441ca68
--- /dev/null
+++ b/src/com/android/contacts/util/concurrent/ListenableFutureLoader.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.util.concurrent;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.Loader;
+import android.support.v4.content.LocalBroadcastManager;
+import android.util.Log;
+
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.concurrent.CancellationException;
+import java.util.concurrent.Executor;
+
+/**
+ * Wraps a ListenableFuture for integration with {@link android.app.LoaderManager}
+ *
+ * <p>Using a loader ensures that the result is delivered while the receiving component (activity
+ * or fragment) is resumed and also prevents leaking references these components
+ * </p>
+ */
+public abstract class ListenableFutureLoader<D> extends Loader<D> {
+    private static final String TAG = "FutureLoader";
+
+    private final IntentFilter mReloadFilter;
+    private final Executor mUiExecutor;
+    private final LocalBroadcastManager mLocalBroadcastManager;
+
+    private ListenableFuture<D> mFuture;
+    private D mLoadedData;
+
+    private BroadcastReceiver mReceiver;
+
+    /**
+     * Stores away the application context associated with context.
+     * Since Loaders can be used across multiple activities it's dangerous to
+     * store the context directly; always use {@link #getContext()} to retrieve
+     * the Loader's Context, don't use the constructor argument directly.
+     * The Context returned by {@link #getContext} is safe to use across
+     * Activity instances.
+     *
+     * @param context used to retrieve the application context.
+     */
+    public ListenableFutureLoader(Context context) {
+        this(context, null);
+    }
+
+    public ListenableFutureLoader(Context context, IntentFilter reloadBroadcastFilter) {
+        super(context);
+        mUiExecutor = ContactsExecutors.newUiThreadExecutor();
+        mReloadFilter = reloadBroadcastFilter;
+        mLocalBroadcastManager = LocalBroadcastManager.getInstance(context);
+    }
+
+    @Override
+    protected void onStartLoading() {
+        if (mReloadFilter != null && mReceiver == null) {
+            mReceiver = new ForceLoadReceiver();
+            mLocalBroadcastManager.registerReceiver(mReceiver, mReloadFilter);
+        }
+
+        if (mLoadedData != null) {
+            deliverResult(mLoadedData);
+        }
+        if (mFuture == null) {
+            takeContentChanged();
+            forceLoad();
+        } else if (takeContentChanged()) {
+            forceLoad();
+        }
+    }
+
+    @Override
+    protected void onForceLoad() {
+        mFuture = loadData();
+        Futures.addCallback(mFuture, new FutureCallback<D>() {
+            @Override
+            public void onSuccess(D result) {
+                if (mLoadedData == null || !isSameData(mLoadedData, result)) {
+                    deliverResult(result);
+                }
+                mLoadedData = result;
+                commitContentChanged();
+            }
+
+            @Override
+            public void onFailure(Throwable t) {
+                if (t instanceof CancellationException) {
+                    Log.i(TAG, "Loading cancelled", t);
+                    rollbackContentChanged();
+                } else {
+                    Log.e(TAG, "Failed to load accounts", t);
+                }
+            }
+        }, mUiExecutor);
+    }
+
+    @Override
+    protected void onStopLoading() {
+        if (mFuture != null) {
+            mFuture.cancel(false);
+            mFuture = null;
+        }
+    }
+
+    @Override
+    protected void onReset() {
+        mFuture = null;
+        mLoadedData = null;
+        if (mReceiver != null) {
+            mLocalBroadcastManager.unregisterReceiver(mReceiver);
+        }
+    }
+
+    protected abstract ListenableFuture<D> loadData();
+
+    /**
+     * Returns whether the newly loaded data is the same as the cached value
+     *
+     * <p>This allows subclasses to suppress delivering results when the data hasn't
+     * actually changed. By default it will always return false.
+     * </p>
+     */
+    protected boolean isSameData(D previousData, D newData) {
+        return false;
+    }
+
+    public final D getLoadedData() {
+        return mLoadedData;
+    }
+
+    public class ForceLoadReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            onContentChanged();
+        }
+    }
+}
diff --git a/src/com/android/contacts/vcard/CancelActivity.java b/src/com/android/contacts/vcard/CancelActivity.java
new file mode 100644
index 0000000..5787d62
--- /dev/null
+++ b/src/com/android/contacts/vcard/CancelActivity.java
@@ -0,0 +1,130 @@
+/*
+ * 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.vcard;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.util.Log;
+
+import com.android.contacts.R;
+
+/**
+ * The Activity for canceling vCard import/export.
+ */
+public class CancelActivity extends Activity implements ServiceConnection {
+    private final String LOG_TAG = "VCardCancel";
+
+    /* package */ final static String JOB_ID = "job_id";
+    /* package */ final static String DISPLAY_NAME = "display_name";
+
+    /**
+     * Type of the process to be canceled. Only used for choosing appropriate title/message.
+     * Must be {@link VCardService#TYPE_IMPORT} or {@link VCardService#TYPE_EXPORT}.
+     */
+    /* package */ final static String TYPE = "type";
+
+    private class RequestCancelListener implements DialogInterface.OnClickListener {
+        @Override
+        public void onClick(DialogInterface dialog, int which) {
+            bindService(new Intent(CancelActivity.this,
+                    VCardService.class), CancelActivity.this, Context.BIND_AUTO_CREATE);
+        }
+    }
+
+    private class CancelListener
+            implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
+        @Override
+        public void onClick(DialogInterface dialog, int which) {
+            finish();
+        }
+        @Override
+        public void onCancel(DialogInterface dialog) {
+            finish();
+        }
+    }
+
+    private final CancelListener mCancelListener = new CancelListener();
+    private int mJobId;
+    private String mDisplayName;
+    private int mType;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        final Uri uri = getIntent().getData();
+        mJobId = Integer.parseInt(uri.getQueryParameter(JOB_ID));
+        mDisplayName = uri.getQueryParameter(DISPLAY_NAME);
+        mType = Integer.parseInt(uri.getQueryParameter(TYPE));
+        showDialog(R.id.dialog_cancel_confirmation);
+    }
+
+    @Override
+    protected Dialog onCreateDialog(int id, Bundle bundle) {
+        if (id == R.id.dialog_cancel_confirmation) {
+            final String message;
+            if (mType == VCardService.TYPE_IMPORT) {
+                message = getString(R.string.cancel_import_confirmation_message, mDisplayName);
+            } else {
+                message = getString(R.string.cancel_export_confirmation_message, mDisplayName);
+            }
+            final AlertDialog.Builder builder = new AlertDialog.Builder(this)
+                    .setMessage(message)
+                    .setPositiveButton(android.R.string.ok, new RequestCancelListener())
+                    .setOnCancelListener(mCancelListener)
+                    .setNegativeButton(android.R.string.cancel, mCancelListener);
+            return builder.create();
+        } else if (id == R.id.dialog_cancel_failed) {
+            final AlertDialog.Builder builder = new AlertDialog.Builder(this)
+                    .setTitle(R.string.cancel_vcard_import_or_export_failed)
+                    .setIconAttribute(android.R.attr.alertDialogIcon)
+                    .setMessage(getString(R.string.fail_reason_unknown))
+                    .setOnCancelListener(mCancelListener)
+                    .setPositiveButton(android.R.string.ok, mCancelListener);
+            return builder.create();
+        } else {
+            Log.w(LOG_TAG, "Unknown dialog id: " + id);
+            return super.onCreateDialog(id, bundle);
+        }
+    }
+
+    @Override
+    public void onServiceConnected(ComponentName name, IBinder binder) {
+        VCardService service = ((VCardService.MyBinder) binder).getService();
+
+        try {
+            final CancelRequest request = new CancelRequest(mJobId, mDisplayName);
+            service.handleCancelRequest(request, null);
+        } finally {
+            unbindService(this);
+        }
+
+        finish();
+    }
+
+    @Override
+    public void onServiceDisconnected(ComponentName name) {
+        // do nothing
+    }
+}
diff --git a/src/com/android/contacts/vcard/CancelRequest.java b/src/com/android/contacts/vcard/CancelRequest.java
new file mode 100644
index 0000000..0b4baee
--- /dev/null
+++ b/src/com/android/contacts/vcard/CancelRequest.java
@@ -0,0 +1,32 @@
+/*
+ * 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.vcard;
+
+/**
+ * Class representing one request for canceling vCard import/export.
+ */
+public class CancelRequest {
+    public final int jobId;
+    /**
+     * Name used for showing users some useful info. Typically a file name.
+     * Must not be used to do some actual operations.
+     */
+    public final String displayName;
+    public CancelRequest(int jobId, String displayName) {
+        this.jobId = jobId;
+        this.displayName = displayName;
+    }
+}
diff --git a/src/com/android/contacts/vcard/ExportProcessor.java b/src/com/android/contacts/vcard/ExportProcessor.java
new file mode 100644
index 0000000..c1171d8
--- /dev/null
+++ b/src/com/android/contacts/vcard/ExportProcessor.java
@@ -0,0 +1,340 @@
+/*
+ * 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.vcard;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Message;
+import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.RawContactsEntity;
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contactsbind.FeedbackHelper;
+import com.android.vcard.VCardComposer;
+import com.android.vcard.VCardConfig;
+
+import java.io.BufferedWriter;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+
+/**
+ * Class for processing one export request from a user. Dropped after exporting requested Uri(s).
+ * {@link VCardService} will create another object when there is another export request.
+ */
+public class ExportProcessor extends ProcessorBase {
+    private static final String LOG_TAG = "VCardExport";
+    private static final boolean DEBUG = VCardService.DEBUG;
+
+    private final VCardService mService;
+    private final ContentResolver mResolver;
+    private final NotificationManager mNotificationManager;
+    private final ExportRequest mExportRequest;
+    private final int mJobId;
+    private final String mCallingActivity;
+
+    private volatile boolean mCanceled;
+    private volatile boolean mDone;
+
+    private final int SHOW_READY_TOAST = 1;
+    private final Handler handler = new Handler() {
+        public void handleMessage(Message msg) {
+            if (msg.arg1 == SHOW_READY_TOAST) {
+                // This message is long, so we set the duration to LENGTH_LONG.
+                Toast.makeText(mService,
+                        R.string.exporting_vcard_finished_toast, Toast.LENGTH_LONG).show();
+            }
+
+        }
+    };
+
+    public ExportProcessor(VCardService service, ExportRequest exportRequest, int jobId,
+            String callingActivity) {
+        mService = service;
+        mResolver = service.getContentResolver();
+        mNotificationManager =
+                (NotificationManager)mService.getSystemService(Context.NOTIFICATION_SERVICE);
+        mExportRequest = exportRequest;
+        mJobId = jobId;
+        mCallingActivity = callingActivity;
+    }
+
+    @Override
+    public final int getType() {
+        return VCardService.TYPE_EXPORT;
+    }
+
+    @Override
+    public void run() {
+        // ExecutorService ignores RuntimeException, so we need to show it here.
+        try {
+            runInternal();
+
+            if (isCancelled()) {
+                doCancelNotification();
+            }
+        } catch (OutOfMemoryError|RuntimeException e) {
+            FeedbackHelper.sendFeedback(mService, LOG_TAG, "Failed to process vcard export", e);
+            throw e;
+        } finally {
+            synchronized (this) {
+                mDone = true;
+            }
+        }
+    }
+
+    private void runInternal() {
+        if (DEBUG) Log.d(LOG_TAG, String.format("vCard export (id: %d) has started.", mJobId));
+        final ExportRequest request = mExportRequest;
+        VCardComposer composer = null;
+        Writer writer = null;
+        boolean successful = false;
+        try {
+            if (isCancelled()) {
+                Log.i(LOG_TAG, "Export request is cancelled before handling the request");
+                return;
+            }
+            final Uri uri = request.destUri;
+            final OutputStream outputStream;
+            try {
+                outputStream = mResolver.openOutputStream(uri);
+            } catch (FileNotFoundException e) {
+                Log.w(LOG_TAG, "FileNotFoundException thrown", e);
+                // Need concise title.
+
+                final String errorReason =
+                    mService.getString(R.string.fail_reason_could_not_open_file,
+                            uri, e.getMessage());
+                doFinishNotification(errorReason, null);
+                return;
+            }
+
+            final String exportType = request.exportType;
+            final int vcardType;
+            if (TextUtils.isEmpty(exportType)) {
+                vcardType = VCardConfig.getVCardTypeFromString(
+                        mService.getString(R.string.config_export_vcard_type));
+            } else {
+                vcardType = VCardConfig.getVCardTypeFromString(exportType);
+            }
+
+            composer = new VCardComposer(mService, vcardType, true);
+
+            // for test
+            // int vcardType = (VCardConfig.VCARD_TYPE_V21_GENERIC |
+            //     VCardConfig.FLAG_USE_QP_TO_PRIMARY_PROPERTIES);
+            // composer = new VCardComposer(ExportVCardActivity.this, vcardType, true);
+
+            writer = new BufferedWriter(new OutputStreamWriter(outputStream));
+            final Uri contentUriForRawContactsEntity = RawContactsEntity.CONTENT_URI;
+            // TODO: should provide better selection.
+            if (!composer.init(Contacts.CONTENT_URI, new String[] {Contacts._ID},
+                    null, null,
+                    null, contentUriForRawContactsEntity)) {
+                final String errorReason = composer.getErrorReason();
+                Log.e(LOG_TAG, "initialization of vCard composer failed: " + errorReason);
+                final String translatedErrorReason =
+                        translateComposerError(errorReason);
+                final String title =
+                        mService.getString(R.string.fail_reason_could_not_initialize_exporter,
+                                translatedErrorReason);
+                doFinishNotification(title, null);
+                return;
+            }
+
+            final int total = composer.getCount();
+            if (total == 0) {
+                final String title =
+                        mService.getString(R.string.fail_reason_no_exportable_contact);
+                doFinishNotification(title, null);
+                return;
+            }
+
+            int current = 1;  // 1-origin
+            while (!composer.isAfterLast()) {
+                if (isCancelled()) {
+                    Log.i(LOG_TAG, "Export request is cancelled during composing vCard");
+                    return;
+                }
+                try {
+                    writer.write(composer.createOneEntry());
+                } catch (IOException e) {
+                    final String errorReason = composer.getErrorReason();
+                    Log.e(LOG_TAG, "Failed to read a contact: " + errorReason);
+                    final String translatedErrorReason =
+                            translateComposerError(errorReason);
+                    final String title =
+                            mService.getString(R.string.fail_reason_error_occurred_during_export,
+                                    translatedErrorReason);
+                    doFinishNotification(title, null);
+                    return;
+                }
+
+                // vCard export is quite fast (compared to import), and frequent notifications
+                // bother notification bar too much.
+                if (current % 100 == 1) {
+                    doProgressNotification(uri, total, current);
+                }
+                current++;
+            }
+            Log.i(LOG_TAG, "Successfully finished exporting vCard " + request.destUri);
+
+            if (DEBUG) {
+                Log.d(LOG_TAG, "Ask MediaScanner to scan the file: " + request.destUri.getPath());
+            }
+            mService.updateMediaScanner(request.destUri.getPath());
+
+            successful = true;
+            final String filename = ExportVCardActivity.getOpenableUriDisplayName(mService, uri);
+            // If it is a local file (i.e. not a file from Drive), we need to allow user to share
+            // the file by pressing the notification; otherwise, it would be a file in Drive, we
+            // don't need to enable this action in notification since the file is already uploaded.
+            if (isLocalFile(uri)) {
+                final Message msg = handler.obtainMessage();
+                msg.arg1 = SHOW_READY_TOAST;
+                handler.sendMessage(msg);
+                doFinishNotificationWithShareAction(
+                        mService.getString(R.string.exporting_vcard_finished_title_fallback),
+                        mService.getString(R.string.touch_to_share_contacts), uri);
+            } else {
+                final String title = filename == null
+                        ? mService.getString(R.string.exporting_vcard_finished_title_fallback)
+                        : mService.getString(R.string.exporting_vcard_finished_title, filename);
+                doFinishNotification(title, null);
+            }
+        } finally {
+            if (composer != null) {
+                composer.terminate();
+            }
+            if (writer != null) {
+                try {
+                    writer.close();
+                } catch (IOException e) {
+                    Log.w(LOG_TAG, "IOException is thrown during close(). Ignored. " + e);
+                }
+            }
+            mService.handleFinishExportNotification(mJobId, successful);
+        }
+    }
+
+    private boolean isLocalFile(Uri uri) {
+        final String authority = uri.getAuthority();
+        return mService.getString(R.string.contacts_file_provider_authority).equals(authority);
+    }
+
+    private String translateComposerError(String errorMessage) {
+        final Resources resources = mService.getResources();
+        if (VCardComposer.FAILURE_REASON_FAILED_TO_GET_DATABASE_INFO.equals(errorMessage)) {
+            return resources.getString(R.string.composer_failed_to_get_database_infomation);
+        } else if (VCardComposer.FAILURE_REASON_NO_ENTRY.equals(errorMessage)) {
+            return resources.getString(R.string.composer_has_no_exportable_contact);
+        } else if (VCardComposer.FAILURE_REASON_NOT_INITIALIZED.equals(errorMessage)) {
+            return resources.getString(R.string.composer_not_initialized);
+        } else {
+            return errorMessage;
+        }
+    }
+
+    private void doProgressNotification(Uri uri, int totalCount, int currentCount) {
+        final String displayName = uri.getLastPathSegment();
+        final String description =
+                mService.getString(R.string.exporting_contact_list_message, displayName);
+        final String tickerText =
+                mService.getString(R.string.exporting_contact_list_title);
+        final Notification notification =
+                NotificationImportExportListener.constructProgressNotification(mService,
+                        VCardService.TYPE_EXPORT, description, tickerText, mJobId, displayName,
+                        totalCount, currentCount);
+        mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
+                mJobId, notification);
+    }
+
+    private void doCancelNotification() {
+        if (DEBUG) Log.d(LOG_TAG, "send cancel notification");
+        final String description = mService.getString(R.string.exporting_vcard_canceled_title,
+                mExportRequest.destUri.getLastPathSegment());
+        final Notification notification =
+                NotificationImportExportListener.constructCancelNotification(mService, description);
+        mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
+                mJobId, notification);
+    }
+
+    private void doFinishNotification(final String title, final String description) {
+        if (DEBUG) Log.d(LOG_TAG, "send finish notification: " + title + ", " + description);
+        final Intent intent = new Intent();
+        intent.setClassName(mService, mCallingActivity);
+        final Notification notification =
+                NotificationImportExportListener.constructFinishNotification(mService, title,
+                        description, intent);
+        mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
+                mJobId, notification);
+    }
+
+    /**
+     * Pass intent with ACTION_SEND to notification so that user can press the notification to
+     * share contacts.
+     */
+    private void doFinishNotificationWithShareAction(final String title, final String
+            description, Uri uri) {
+        if (DEBUG) Log.d(LOG_TAG, "send finish notification: " + title + ", " + description);
+        final Intent intent = new Intent(Intent.ACTION_SEND);
+        intent.setType(Contacts.CONTENT_VCARD_TYPE);
+        intent.putExtra(Intent.EXTRA_STREAM, uri);
+        // Securely grant access using temporary access permissions
+        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+        // Build notification
+        final Notification notification =
+                NotificationImportExportListener.constructFinishNotificationWithFlags(
+                        mService, title, description, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
+        mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
+                mJobId, notification);
+    }
+
+    @Override
+    public synchronized boolean cancel(boolean mayInterruptIfRunning) {
+        if (DEBUG) Log.d(LOG_TAG, "received cancel request");
+        if (mDone || mCanceled) {
+            return false;
+        }
+        mCanceled = true;
+        return true;
+    }
+
+    @Override
+    public synchronized boolean isCancelled() {
+        return mCanceled;
+    }
+
+    @Override
+    public synchronized boolean isDone() {
+        return mDone;
+    }
+
+    public ExportRequest getRequest() {
+        return mExportRequest;
+    }
+}
diff --git a/src/com/android/contacts/vcard/ExportRequest.java b/src/com/android/contacts/vcard/ExportRequest.java
new file mode 100644
index 0000000..65e395e
--- /dev/null
+++ b/src/com/android/contacts/vcard/ExportRequest.java
@@ -0,0 +1,35 @@
+/*
+ * 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.vcard;
+
+import android.net.Uri;
+
+public class ExportRequest {
+    public final Uri destUri;
+    /**
+     * Can be null.
+     */
+    public final String exportType;
+
+    public ExportRequest(Uri destUri) {
+        this(destUri, null);
+    }
+
+    public ExportRequest(Uri destUri, String exportType) {
+        this.destUri = destUri;
+        this.exportType = exportType;
+    }
+}
diff --git a/src/com/android/contacts/vcard/ExportVCardActivity.java b/src/com/android/contacts/vcard/ExportVCardActivity.java
new file mode 100644
index 0000000..1f1e21b
--- /dev/null
+++ b/src/com/android/contacts/vcard/ExportVCardActivity.java
@@ -0,0 +1,246 @@
+/*
+ * 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.vcard;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.provider.OpenableColumns;
+import android.text.BidiFormatter;
+import android.text.TextDirectionHeuristics;
+import android.util.Log;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.RequestImportVCardPermissionsActivity;
+
+import java.util.List;
+
+/**
+ * Shows a dialog confirming the export and asks actual vCard export to {@link VCardService}
+ *
+ * This Activity first connects to VCardService and ask an available file name and shows it to
+ * a user. After the user's confirmation, it send export request with the file name, assuming the
+ * file name is not reserved yet.
+ */
+public class ExportVCardActivity extends Activity implements ServiceConnection,
+        DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
+    private static final String LOG_TAG = "VCardExport";
+    protected static final boolean DEBUG = VCardService.DEBUG;
+    private static final int REQUEST_CREATE_DOCUMENT = 100;
+
+    /**
+     * True when this Activity is connected to {@link VCardService}.
+     *
+     * Should be touched inside synchronized block.
+     */
+    protected boolean mConnected;
+
+    /**
+     * True when users need to do something and this Activity should not disconnect from
+     * VCardService. False when all necessary procedures are done (including sending export request)
+     * or there's some error occured.
+     */
+    private volatile boolean mProcessOngoing = true;
+
+    protected VCardService mService;
+    private static final BidiFormatter mBidiFormatter = BidiFormatter.getInstance();
+
+    // String for storing error reason temporarily.
+    private String mErrorReason;
+
+    @Override
+    protected void onCreate(Bundle bundle) {
+        super.onCreate(bundle);
+
+        if (RequestImportVCardPermissionsActivity.startPermissionActivity(this)) {
+            return;
+        }
+
+        if (!hasExportIntentHandler()) {
+            Log.e(LOG_TAG, "Couldn't find export intent handler");
+            showErrorDialog();
+            return;
+        }
+
+        connectVCardService();
+    }
+
+    private void connectVCardService() {
+        final String callingActivity = getIntent().getExtras()
+                .getString(VCardCommonArguments.ARG_CALLING_ACTIVITY);
+        Intent intent = new Intent(this, VCardService.class);
+        intent.putExtra(VCardCommonArguments.ARG_CALLING_ACTIVITY, callingActivity);
+
+        if (startService(intent) == null) {
+            Log.e(LOG_TAG, "Failed to start vCard service");
+            showErrorDialog();
+            return;
+        }
+
+        if (!bindService(intent, this, Context.BIND_AUTO_CREATE)) {
+            Log.e(LOG_TAG, "Failed to connect to vCard service.");
+            showErrorDialog();
+        }
+        // Continued to onServiceConnected()
+    }
+
+    private boolean hasExportIntentHandler() {
+        final Intent intent = getCreateDocIntent();
+        final List<ResolveInfo> receivers = getPackageManager().queryIntentActivities(intent,
+                PackageManager.MATCH_DEFAULT_ONLY);
+        return receivers != null && receivers.size() > 0;
+    }
+
+    private Intent getCreateDocIntent() {
+        final Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
+        intent.addCategory(Intent.CATEGORY_OPENABLE);
+        intent.setType(VCardService.X_VCARD_MIME_TYPE);
+        intent.putExtra(Intent.EXTRA_TITLE, mBidiFormatter.unicodeWrap(
+                getString(R.string.exporting_vcard_filename), TextDirectionHeuristics.LTR));
+        return intent;
+    }
+
+    private void showErrorDialog() {
+        mErrorReason = getString(R.string.fail_reason_unknown);
+        showDialog(R.id.dialog_fail_to_export_with_reason);
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+        if (requestCode == REQUEST_CREATE_DOCUMENT) {
+            if (resultCode == Activity.RESULT_OK && mService != null &&
+                    data != null && data.getData() != null) {
+                final Uri targetFileName = data.getData();
+                if (DEBUG) Log.d(LOG_TAG, "exporting to " + targetFileName);
+                final ExportRequest request = new ExportRequest(targetFileName);
+                // The connection object will call finish().
+                mService.handleExportRequest(request, new NotificationImportExportListener(
+                        ExportVCardActivity.this));
+            } else if (DEBUG) {
+                if (mService == null) {
+                    Log.d(LOG_TAG, "No vCard service.");
+                } else {
+                    Log.d(LOG_TAG, "create document cancelled or no data returned");
+                }
+            }
+            finish();
+        }
+    }
+
+    @Override
+    public synchronized void onServiceConnected(ComponentName name, IBinder binder) {
+        if (DEBUG) Log.d(LOG_TAG, "connected to service, requesting a destination file name");
+        mConnected = true;
+        mService = ((VCardService.MyBinder) binder).getService();
+
+        // Have the user choose where vcards will be exported to
+        startActivityForResult(getCreateDocIntent(), REQUEST_CREATE_DOCUMENT);
+    }
+
+    // Use synchronized since we don't want to call finish() just after this call.
+    @Override
+    public synchronized void onServiceDisconnected(ComponentName name) {
+        if (DEBUG) Log.d(LOG_TAG, "onServiceDisconnected()");
+        mService = null;
+        mConnected = false;
+        if (mProcessOngoing) {
+            // Unexpected disconnect event.
+            Log.w(LOG_TAG, "Disconnected from service during the process ongoing.");
+            showErrorDialog();
+        }
+    }
+
+    @Override
+    protected Dialog onCreateDialog(int id, Bundle bundle) {
+        if (id == R.id.dialog_fail_to_export_with_reason) {
+            mProcessOngoing = false;
+            return new AlertDialog.Builder(this)
+                    .setTitle(R.string.exporting_contact_failed_title)
+                    .setMessage(getString(R.string.exporting_contact_failed_message,
+                            mErrorReason != null ? mErrorReason :
+                                    getString(R.string.fail_reason_unknown)))
+                    .setPositiveButton(android.R.string.ok, this)
+                    .setOnCancelListener(this)
+                    .create();
+        }
+        return super.onCreateDialog(id, bundle);
+    }
+
+    @Override
+    protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
+        if (id == R.id.dialog_fail_to_export_with_reason) {
+            ((AlertDialog)dialog).setMessage(mErrorReason);
+        } else {
+            super.onPrepareDialog(id, dialog, args);
+        }
+    }
+
+    @Override
+    public void onClick(DialogInterface dialog, int which) {
+        if (DEBUG) Log.d(LOG_TAG, "ExportVCardActivity#onClick() is called");
+        finish();
+    }
+
+    @Override
+    public void onCancel(DialogInterface dialog) {
+        if (DEBUG) Log.d(LOG_TAG, "ExportVCardActivity#onCancel() is called");
+        mProcessOngoing = false;
+        finish();
+    }
+
+    @Override
+    public void unbindService(ServiceConnection conn) {
+        mProcessOngoing = false;
+        super.unbindService(conn);
+    }
+
+    @Override
+    protected void onDestroy() {
+        if (mConnected) {
+            unbindService(this);
+            mConnected = false;
+        }
+        super.onDestroy();
+    }
+
+    /**
+     * Returns the display name for the given openable Uri or null if it could not be resolved. */
+    static String getOpenableUriDisplayName(Context context, Uri uri) {
+        if (uri == null) return null;
+        final Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
+        try {
+            if (cursor != null && cursor.moveToFirst()) {
+                return cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
+            }
+        } finally {
+            if (cursor != null)  {
+                cursor.close();
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/com/android/contacts/vcard/ImportProcessor.java b/src/com/android/contacts/vcard/ImportProcessor.java
new file mode 100644
index 0000000..d6483b8
--- /dev/null
+++ b/src/com/android/contacts/vcard/ImportProcessor.java
@@ -0,0 +1,298 @@
+/*
+ * 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.vcard;
+
+import android.accounts.Account;
+import android.content.ContentResolver;
+import android.net.Uri;
+import android.util.Log;
+
+import com.android.contactsbind.FeedbackHelper;
+import com.android.vcard.VCardEntry;
+import com.android.vcard.VCardEntryCommitter;
+import com.android.vcard.VCardEntryConstructor;
+import com.android.vcard.VCardEntryHandler;
+import com.android.vcard.VCardInterpreter;
+import com.android.vcard.VCardParser;
+import com.android.vcard.VCardParser_V21;
+import com.android.vcard.VCardParser_V30;
+import com.android.vcard.exception.VCardException;
+import com.android.vcard.exception.VCardNotSupportedException;
+import com.android.vcard.exception.VCardVersionException;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Class for processing one import request from a user. Dropped after importing requested Uri(s).
+ * {@link VCardService} will create another object when there is another import request.
+ */
+public class ImportProcessor extends ProcessorBase implements VCardEntryHandler {
+    private static final String LOG_TAG = "VCardImport";
+    private static final boolean DEBUG = VCardService.DEBUG;
+
+    private final VCardService mService;
+    private final ContentResolver mResolver;
+    private final ImportRequest mImportRequest;
+    private final int mJobId;
+    private final VCardImportExportListener mListener;
+
+    // TODO: remove and show appropriate message instead.
+    private final List<Uri> mFailedUris = new ArrayList<Uri>();
+
+    private VCardParser mVCardParser;
+
+    private volatile boolean mCanceled;
+    private volatile boolean mDone;
+
+    private int mCurrentCount = 0;
+    private int mTotalCount = 0;
+
+    public ImportProcessor(final VCardService service, final VCardImportExportListener listener,
+            final ImportRequest request, final int jobId) {
+        mService = service;
+        mResolver = mService.getContentResolver();
+        mListener = listener;
+
+        mImportRequest = request;
+        mJobId = jobId;
+    }
+
+    @Override
+    public void onStart() {
+        // do nothing
+    }
+
+    @Override
+    public void onEnd() {
+        // do nothing
+    }
+
+    @Override
+    public void onEntryCreated(VCardEntry entry) {
+        mCurrentCount++;
+        if (mListener != null) {
+            mListener.onImportParsed(mImportRequest, mJobId, entry, mCurrentCount, mTotalCount);
+        }
+    }
+
+    @Override
+    public final int getType() {
+        return VCardService.TYPE_IMPORT;
+    }
+
+    @Override
+    public void run() {
+        // ExecutorService ignores RuntimeException, so we need to show it here.
+        try {
+            runInternal();
+
+            if (isCancelled() && mListener != null) {
+                mListener.onImportCanceled(mImportRequest, mJobId);
+            }
+        } catch (OutOfMemoryError|RuntimeException e) {
+            FeedbackHelper.sendFeedback(mService, LOG_TAG, "Vcard import failed", e);
+        } finally {
+            synchronized (this) {
+                mDone = true;
+            }
+        }
+    }
+
+    private void runInternal() {
+        Log.i(LOG_TAG, String.format("vCard import (id: %d) has started.", mJobId));
+        final ImportRequest request = mImportRequest;
+        if (isCancelled()) {
+            Log.i(LOG_TAG, "Canceled before actually handling parameter (" + request.uri + ")");
+            return;
+        }
+        final int[] possibleVCardVersions;
+        if (request.vcardVersion == ImportVCardActivity.VCARD_VERSION_AUTO_DETECT) {
+            /**
+             * Note: this code assumes that a given Uri is able to be opened more than once,
+             * which may not be true in certain conditions.
+             */
+            possibleVCardVersions = new int[] {
+                    ImportVCardActivity.VCARD_VERSION_V21,
+                    ImportVCardActivity.VCARD_VERSION_V30
+            };
+        } else {
+            possibleVCardVersions = new int[] {
+                    request.vcardVersion
+            };
+        }
+
+        final Uri uri = request.uri;
+        final Account account = request.account;
+        final int estimatedVCardType = request.estimatedVCardType;
+        final String estimatedCharset = request.estimatedCharset;
+        final int entryCount = request.entryCount;
+        mTotalCount += entryCount;
+
+        final VCardEntryConstructor constructor =
+                new VCardEntryConstructor(estimatedVCardType, account, estimatedCharset);
+        final VCardEntryCommitter committer = new VCardEntryCommitter(mResolver);
+        constructor.addEntryHandler(committer);
+        constructor.addEntryHandler(this);
+
+        InputStream is = null;
+        boolean successful = false;
+        try {
+            if (uri != null) {
+                Log.i(LOG_TAG, "start importing one vCard (Uri: " + uri + ")");
+                is = mResolver.openInputStream(uri);
+            } else if (request.data != null){
+                Log.i(LOG_TAG, "start importing one vCard (byte[])");
+                is = new ByteArrayInputStream(request.data);
+            }
+
+            if (is != null) {
+                successful = readOneVCard(is, estimatedVCardType, estimatedCharset, constructor,
+                        possibleVCardVersions);
+            }
+        } catch (IOException e) {
+            successful = false;
+        } finally {
+            if (is != null) {
+                try {
+                    is.close();
+                } catch (Exception e) {
+                    // ignore
+                }
+            }
+        }
+
+        mService.handleFinishImportNotification(mJobId, successful);
+
+        if (successful) {
+            // TODO: successful becomes true even when cancelled. Should return more appropriate
+            // value
+            if (isCancelled()) {
+                Log.i(LOG_TAG, "vCard import has been canceled (uri: " + uri + ")");
+                // Cancel notification will be done outside this method.
+            } else {
+                Log.i(LOG_TAG, "Successfully finished importing one vCard file: " + uri);
+                List<Uri> uris = committer.getCreatedUris();
+                if (mListener != null) {
+                    if (uris != null && uris.size() == 1) {
+                        mListener.onImportFinished(mImportRequest, mJobId, uris.get(0));
+                    } else {
+                        if (uris == null || uris.size() == 0) {
+                            // Not critical, but suspicious.
+                            Log.w(LOG_TAG,  "Created Uris is null or 0 length " +
+                                    "though the creation itself is successful.");
+                        }
+                        mListener.onImportFinished(mImportRequest, mJobId, null);
+                    }
+                }
+            }
+        } else {
+            Log.w(LOG_TAG, "Failed to read one vCard file: " + uri);
+            mFailedUris.add(uri);
+        }
+    }
+
+    private boolean readOneVCard(InputStream is, int vcardType, String charset,
+            final VCardInterpreter interpreter,
+            final int[] possibleVCardVersions) {
+        boolean successful = false;
+        final int length = possibleVCardVersions.length;
+        for (int i = 0; i < length; i++) {
+            final int vcardVersion = possibleVCardVersions[i];
+            try {
+                if (i > 0 && (interpreter instanceof VCardEntryConstructor)) {
+                    // Let the object clean up internal temporary objects,
+                    ((VCardEntryConstructor) interpreter).clear();
+                }
+
+                // We need synchronized block here,
+                // since we need to handle mCanceled and mVCardParser at once.
+                // In the worst case, a user may call cancel() just before creating
+                // mVCardParser.
+                synchronized (this) {
+                    mVCardParser = (vcardVersion == ImportVCardActivity.VCARD_VERSION_V30 ?
+                            new VCardParser_V30(vcardType) :
+                                new VCardParser_V21(vcardType));
+                    if (isCancelled()) {
+                        Log.i(LOG_TAG, "ImportProcessor already recieves cancel request, so " +
+                                "send cancel request to vCard parser too.");
+                        mVCardParser.cancel();
+                    }
+                }
+                mVCardParser.parse(is, interpreter);
+
+                successful = true;
+                break;
+            } catch (IOException|VCardNotSupportedException e) {
+                // VCardNestedException (a subclass of VCardNotSupportedException) should
+                // not be thrown here. We should instead handle it
+                // in the preprocessing session in ImportVCardActivity, as we don't try
+                // to detect the type of given vCard here.
+                //
+                // TODO: Handle this case appropriately, which should mean we have to have
+                // code trying to auto-detect the type of given vCard twice (both in
+                // ImportVCardActivity and ImportVCardService).
+                FeedbackHelper.sendFeedback(mService, LOG_TAG, "Failed to read vcard", e);
+            } catch (VCardVersionException e) {
+                if (i == length - 1) {
+                    Log.e(LOG_TAG, "Appropriate version for this vCard is not found.");
+                } else {
+                    // We'll try the other (v30) version.
+                }
+            } catch (VCardException e) {
+                Log.e(LOG_TAG, e.toString());
+            } finally {
+                if (is != null) {
+                    try {
+                        is.close();
+                    } catch (IOException e) {
+                    }
+                }
+            }
+        }
+
+        return successful;
+    }
+
+    @Override
+    public synchronized boolean cancel(boolean mayInterruptIfRunning) {
+        if (DEBUG) Log.d(LOG_TAG, "ImportProcessor received cancel request");
+        if (mDone || mCanceled) {
+            return false;
+        }
+        mCanceled = true;
+        synchronized (this) {
+            if (mVCardParser != null) {
+                mVCardParser.cancel();
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public synchronized boolean isCancelled() {
+        return mCanceled;
+    }
+
+
+    @Override
+    public synchronized boolean isDone() {
+        return mDone;
+    }
+}
diff --git a/src/com/android/contacts/vcard/ImportRequest.java b/src/com/android/contacts/vcard/ImportRequest.java
new file mode 100644
index 0000000..6e9470f
--- /dev/null
+++ b/src/com/android/contacts/vcard/ImportRequest.java
@@ -0,0 +1,111 @@
+/*
+ * 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.vcard;
+
+import android.accounts.Account;
+import android.net.Uri;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.vcard.VCardSourceDetector;
+
+/**
+ * Class representing one request for importing vCard (given as a Uri).
+ *
+ * Mainly used when {@link ImportVCardActivity} requests {@link VCardService}
+ * to import some specific Uri.
+ *
+ * Note: This object's accepting only One Uri does NOT mean that
+ * there's only one vCard entry inside the instance, as one Uri often has multiple
+ * vCard entries inside it.
+ */
+public class ImportRequest {
+    /**
+     * Can be null (typically when there's no Account available in the system).
+     */
+    public final Account account;
+
+    /**
+     * Uri to be imported. May have different content than originally given from users, so
+     * when displaying user-friendly information (e.g. "importing xxx.vcf"), use
+     * {@link #displayName} instead.
+     *
+     * If this is null {@link #data} contains the byte stream of the vcard.
+     */
+    public final Uri uri;
+
+    /**
+     * Holds the byte stream of the vcard, if {@link #uri} is null.
+     */
+    public final byte[] data;
+
+    /**
+     * String to be displayed to the user to indicate the source of the VCARD.
+     */
+    public final String displayName;
+
+    /**
+     * Can be {@link VCardSourceDetector#PARSE_TYPE_UNKNOWN}.
+     */
+    public final int estimatedVCardType;
+
+    /**
+     * Can be null, meaning no preferable charset is available.
+     */
+    public final String estimatedCharset;
+
+    /**
+     * Assumes that one Uri contains only one version, while there's a (tiny) possibility
+     * we may have two types in one vCard.
+     *
+     * e.g.
+     * BEGIN:VCARD
+     * VERSION:2.1
+     * ...
+     * END:VCARD
+     * BEGIN:VCARD
+     * VERSION:3.0
+     * ...
+     * END:VCARD
+     *
+     * We've never seen this kind of a file, but we may have to cope with it in the future.
+     */
+    public final int vcardVersion;
+
+    /**
+     * The count of vCard entries in {@link #uri}. A receiver of this object can use it
+     * when showing the progress of import. Thus a receiver must be able to torelate this
+     * variable being invalid because of vCard's limitation.
+     *
+     * vCard does not let us know this count without looking over a whole file content,
+     * which means we have to open and scan over {@link #uri} to know this value, while
+     * it may not be opened more than once (Uri does not require it to be opened multiple times
+     * and may become invalid after its close() request).
+     */
+    public final int entryCount;
+
+    public ImportRequest(AccountWithDataSet account,
+            byte[] data, Uri uri, String displayName, int estimatedType, String estimatedCharset,
+            int vcardVersion, int entryCount) {
+        this.account = account != null ? account.getAccountOrNull() : null;
+        this.data = data;
+        this.uri = uri;
+        this.displayName = displayName;
+        this.estimatedVCardType = estimatedType;
+        this.estimatedCharset = estimatedCharset;
+        this.vcardVersion = vcardVersion;
+        this.entryCount = entryCount;
+    }
+}
diff --git a/src/com/android/contacts/vcard/ImportVCardActivity.java b/src/com/android/contacts/vcard/ImportVCardActivity.java
new file mode 100644
index 0000000..6d486e3
--- /dev/null
+++ b/src/com/android/contacts/vcard/ImportVCardActivity.java
@@ -0,0 +1,811 @@
+/*
+ * 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.vcard;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.ProgressDialog;
+import android.content.ClipData;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.PowerManager;
+import android.provider.OpenableColumns;
+import android.text.TextUtils;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.RequestImportVCardPermissionsActivity;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contactsbind.FeedbackHelper;
+import com.android.vcard.VCardEntryCounter;
+import com.android.vcard.VCardParser;
+import com.android.vcard.VCardParser_V21;
+import com.android.vcard.VCardParser_V30;
+import com.android.vcard.VCardSourceDetector;
+import com.android.vcard.exception.VCardException;
+import com.android.vcard.exception.VCardNestedException;
+import com.android.vcard.exception.VCardVersionException;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.channels.WritableByteChannel;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * The class letting users to import vCard. This includes the UI part for letting them select
+ * an Account and posssibly a file if there's no Uri is given from its caller Activity.
+ *
+ * Note that this Activity assumes that the instance is a "one-shot Activity", which will be
+ * finished (with the method {@link Activity#finish()}) after the import and never reuse
+ * any Dialog in the instance. So this code is careless about the management around managed
+ * dialogs stuffs (like how onCreateDialog() is used).
+ */
+public class ImportVCardActivity extends Activity implements ImportVCardDialogFragment.Listener {
+    private static final String LOG_TAG = "VCardImport";
+
+    private static final int SELECT_ACCOUNT = 0;
+
+    /* package */ final static int VCARD_VERSION_AUTO_DETECT = 0;
+    /* package */ final static int VCARD_VERSION_V21 = 1;
+    /* package */ final static int VCARD_VERSION_V30 = 2;
+
+    private static final int REQUEST_OPEN_DOCUMENT = 100;
+
+    /**
+     * Notification id used when error happened before sending an import request to VCardServer.
+     */
+    private static final int FAILURE_NOTIFICATION_ID = 1;
+
+    private static final String LOCAL_TMP_FILE_NAME_EXTRA =
+            "com.android.contacts.vcard.LOCAL_TMP_FILE_NAME";
+
+    private static final String SOURCE_URI_DISPLAY_NAME =
+            "com.android.contacts.vcard.SOURCE_URI_DISPLAY_NAME";
+
+    private static final String STORAGE_VCARD_URI_PREFIX = "file:///storage";
+
+    private AccountWithDataSet mAccount;
+
+    private ProgressDialog mProgressDialogForCachingVCard;
+
+    private VCardCacheThread mVCardCacheThread;
+    private ImportRequestConnection mConnection;
+    /* package */ VCardImportExportListener mListener;
+
+    private String mErrorMessage;
+
+    private Handler mHandler = new Handler();
+
+    // Runs on the UI thread.
+    private class DialogDisplayer implements Runnable {
+        private final int mResId;
+        public DialogDisplayer(int resId) {
+            mResId = resId;
+        }
+        public DialogDisplayer(String errorMessage) {
+            mResId = R.id.dialog_error_with_message;
+            mErrorMessage = errorMessage;
+        }
+        @Override
+        public void run() {
+            if (!isFinishing()) {
+                showDialog(mResId);
+            }
+        }
+    }
+
+    private class CancelListener
+        implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
+        @Override
+        public void onClick(DialogInterface dialog, int which) {
+            finish();
+        }
+        @Override
+        public void onCancel(DialogInterface dialog) {
+            finish();
+        }
+    }
+
+    private CancelListener mCancelListener = new CancelListener();
+
+    private class ImportRequestConnection implements ServiceConnection {
+        private VCardService mService;
+
+        public void sendImportRequest(final List<ImportRequest> requests) {
+            Log.i(LOG_TAG, "Send an import request");
+            mService.handleImportRequest(requests, mListener);
+        }
+
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder binder) {
+            mService = ((VCardService.MyBinder) binder).getService();
+            Log.i(LOG_TAG,
+                    String.format("Connected to VCardService. Kick a vCard cache thread (uri: %s)",
+                            Arrays.toString(mVCardCacheThread.getSourceUris())));
+            mVCardCacheThread.start();
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            Log.i(LOG_TAG, "Disconnected from VCardService");
+        }
+    }
+
+    /**
+     * Caches given vCard files into a local directory, and sends actual import request to
+     * {@link VCardService}.
+     *
+     * We need to cache given files into local storage. One of reasons is that some data (as Uri)
+     * may have special permissions. Callers may allow only this Activity to access that content,
+     * not what this Activity launched (like {@link VCardService}).
+     */
+    private class VCardCacheThread extends Thread
+            implements DialogInterface.OnCancelListener {
+        private boolean mCanceled;
+        private PowerManager.WakeLock mWakeLock;
+        private VCardParser mVCardParser;
+        private final Uri[] mSourceUris;  // Given from a caller.
+        private final String[] mSourceDisplayNames; // Display names for each Uri in mSourceUris.
+        private final byte[] mSource;
+        private final String mDisplayName;
+
+        public VCardCacheThread(final Uri[] sourceUris, String[] sourceDisplayNames) {
+            mSourceUris = sourceUris;
+            mSourceDisplayNames = sourceDisplayNames;
+            mSource = null;
+            final Context context = ImportVCardActivity.this;
+            final PowerManager powerManager =
+                    (PowerManager)context.getSystemService(Context.POWER_SERVICE);
+            mWakeLock = powerManager.newWakeLock(
+                    PowerManager.SCREEN_DIM_WAKE_LOCK |
+                    PowerManager.ON_AFTER_RELEASE, LOG_TAG);
+            mDisplayName = null;
+        }
+
+        @Override
+        public void finalize() {
+            if (mWakeLock != null && mWakeLock.isHeld()) {
+                Log.w(LOG_TAG, "WakeLock is being held.");
+                mWakeLock.release();
+            }
+        }
+
+        @Override
+        public void run() {
+            Log.i(LOG_TAG, "vCard cache thread starts running.");
+            if (mConnection == null) {
+                throw new NullPointerException("vCard cache thread must be launched "
+                        + "after a service connection is established");
+            }
+
+            mWakeLock.acquire();
+            try {
+                if (mCanceled == true) {
+                    Log.i(LOG_TAG, "vCard cache operation is canceled.");
+                    return;
+                }
+
+                final Context context = ImportVCardActivity.this;
+                // Uris given from caller applications may not be opened twice: consider when
+                // it is not from local storage (e.g. "file:///...") but from some special
+                // provider (e.g. "content://...").
+                // Thus we have to once copy the content of Uri into local storage, and read
+                // it after it.
+                //
+                // We may be able to read content of each vCard file during copying them
+                // to local storage, but currently vCard code does not allow us to do so.
+                int cache_index = 0;
+                ArrayList<ImportRequest> requests = new ArrayList<ImportRequest>();
+                if (mSource != null) {
+                    try {
+                        requests.add(constructImportRequest(mSource, null, mDisplayName));
+                    } catch (VCardException e) {
+                        FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
+                                "Failed to cache vcard", e);
+                        showFailureNotification(R.string.fail_reason_not_supported);
+                        return;
+                    }
+                } else {
+                    int i = 0;
+                    for (Uri sourceUri : mSourceUris) {
+                        if (mCanceled) {
+                            Log.i(LOG_TAG, "vCard cache operation is canceled.");
+                            break;
+                        }
+
+                        String sourceDisplayName = mSourceDisplayNames[i++];
+
+                        final ImportRequest request;
+                        try {
+                            request = constructImportRequest(null, sourceUri, sourceDisplayName);
+                        } catch (VCardException e) {
+                            FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
+                                    "Failed to cache vcard", e);
+                            showFailureNotification(R.string.fail_reason_not_supported);
+                            return;
+                        } catch (IOException e) {
+                            FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
+                                    "Failed to cache vcard", e);
+                            showFailureNotification(R.string.fail_reason_io_error);
+                            return;
+                        }
+                        if (mCanceled) {
+                            Log.i(LOG_TAG, "vCard cache operation is canceled.");
+                            return;
+                        }
+                        requests.add(request);
+                    }
+                }
+                if (!requests.isEmpty()) {
+                    mConnection.sendImportRequest(requests);
+                } else {
+                    Log.w(LOG_TAG, "Empty import requests. Ignore it.");
+                }
+            } catch (OutOfMemoryError e) {
+                FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
+                        "OutOfMemoryError occured during caching vCard", e);
+                System.gc();
+                runOnUiThread(new DialogDisplayer(
+                        getString(R.string.fail_reason_low_memory_during_import)));
+            } catch (IOException e) {
+                FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
+                        "IOException during caching vCard", e);
+                runOnUiThread(new DialogDisplayer(
+                        getString(R.string.fail_reason_io_error)));
+            } finally {
+                Log.i(LOG_TAG, "Finished caching vCard.");
+                mWakeLock.release();
+                try {
+                    unbindService(mConnection);
+                } catch (IllegalArgumentException e) {
+                    FeedbackHelper.sendFeedback(ImportVCardActivity.this, LOG_TAG,
+                            "Cannot unbind service connection", e);
+                }
+                mProgressDialogForCachingVCard.dismiss();
+                mProgressDialogForCachingVCard = null;
+                finish();
+            }
+        }
+
+        /**
+         * Reads localDataUri (possibly multiple times) and constructs {@link ImportRequest} from
+         * its content.
+         *
+         * @arg localDataUri Uri actually used for the import. Should be stored in
+         * app local storage, as we cannot guarantee other types of Uris can be read
+         * multiple times. This variable populates {@link ImportRequest#uri}.
+         * @arg displayName Used for displaying information to the user. This variable populates
+         * {@link ImportRequest#displayName}.
+         */
+        private ImportRequest constructImportRequest(final byte[] data,
+                final Uri localDataUri, final String displayName)
+                throws IOException, VCardException {
+            final ContentResolver resolver = ImportVCardActivity.this.getContentResolver();
+            VCardEntryCounter counter = null;
+            VCardSourceDetector detector = null;
+            int vcardVersion = VCARD_VERSION_V21;
+            try {
+                boolean shouldUseV30 = false;
+                InputStream is;
+                if (data != null) {
+                    is = new ByteArrayInputStream(data);
+                } else {
+                    is = resolver.openInputStream(localDataUri);
+                }
+                mVCardParser = new VCardParser_V21();
+                try {
+                    counter = new VCardEntryCounter();
+                    detector = new VCardSourceDetector();
+                    mVCardParser.addInterpreter(counter);
+                    mVCardParser.addInterpreter(detector);
+                    mVCardParser.parse(is);
+                } catch (VCardVersionException e1) {
+                    try {
+                        is.close();
+                    } catch (IOException e) {
+                    }
+
+                    shouldUseV30 = true;
+                    if (data != null) {
+                        is = new ByteArrayInputStream(data);
+                    } else {
+                        is = resolver.openInputStream(localDataUri);
+                    }
+                    mVCardParser = new VCardParser_V30();
+                    try {
+                        counter = new VCardEntryCounter();
+                        detector = new VCardSourceDetector();
+                        mVCardParser.addInterpreter(counter);
+                        mVCardParser.addInterpreter(detector);
+                        mVCardParser.parse(is);
+                    } catch (VCardVersionException e2) {
+                        throw new VCardException("vCard with unspported version.");
+                    }
+                } finally {
+                    if (is != null) {
+                        try {
+                            is.close();
+                        } catch (IOException e) {
+                        }
+                    }
+                }
+
+                vcardVersion = shouldUseV30 ? VCARD_VERSION_V30 : VCARD_VERSION_V21;
+            } catch (VCardNestedException e) {
+                Log.w(LOG_TAG, "Nested Exception is found (it may be false-positive).");
+                // Go through without throwing the Exception, as we may be able to detect the
+                // version before it
+            }
+            return new ImportRequest(mAccount,
+                    data, localDataUri, displayName,
+                    detector.getEstimatedType(),
+                    detector.getEstimatedCharset(),
+                    vcardVersion, counter.getCount());
+        }
+
+        public Uri[] getSourceUris() {
+            return mSourceUris;
+        }
+
+        public void cancel() {
+            mCanceled = true;
+            if (mVCardParser != null) {
+                mVCardParser.cancel();
+            }
+        }
+
+        @Override
+        public void onCancel(DialogInterface dialog) {
+            Log.i(LOG_TAG, "Cancel request has come. Abort caching vCard.");
+            cancel();
+        }
+    }
+
+    private void importVCard(final Uri uri, final String sourceDisplayName) {
+        importVCard(new Uri[] {uri}, new String[] {sourceDisplayName});
+    }
+
+    private void importVCard(final Uri[] uris, final String[] sourceDisplayNames) {
+        runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                if (!isFinishing()) {
+                    mVCardCacheThread = new VCardCacheThread(uris, sourceDisplayNames);
+                    mListener = new NotificationImportExportListener(ImportVCardActivity.this);
+                    showDialog(R.id.dialog_cache_vcard);
+                }
+            }
+        });
+    }
+
+    private String getDisplayName(Uri sourceUri) {
+        if (sourceUri == null) {
+            return null;
+        }
+        final ContentResolver resolver = ImportVCardActivity.this.getContentResolver();
+        String displayName = null;
+        Cursor cursor = null;
+        // Try to get a display name from the given Uri. If it fails, we just
+        // pick up the last part of the Uri.
+        try {
+            cursor = resolver.query(sourceUri,
+                    new String[] { OpenableColumns.DISPLAY_NAME },
+                    null, null, null);
+            if (cursor != null && cursor.getCount() > 0 && cursor.moveToFirst()) {
+                if (cursor.getCount() > 1) {
+                    Log.w(LOG_TAG, "Unexpected multiple rows: "
+                            + cursor.getCount());
+                }
+                int index = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
+                if (index >= 0) {
+                    displayName = cursor.getString(index);
+                }
+            }
+        } finally {
+            if (cursor != null) {
+                cursor.close();
+            }
+        }
+        if (TextUtils.isEmpty(displayName)){
+            displayName = sourceUri.getLastPathSegment();
+        }
+        return displayName;
+    }
+
+    /**
+     * Copy the content of sourceUri to the destination.
+     */
+    private Uri copyTo(final Uri sourceUri, String filename) throws IOException {
+        Log.i(LOG_TAG, String.format("Copy a Uri to app local storage (%s -> %s)",
+                sourceUri, filename));
+        final Context context = ImportVCardActivity.this;
+        final ContentResolver resolver = context.getContentResolver();
+        ReadableByteChannel inputChannel = null;
+        WritableByteChannel outputChannel = null;
+        Uri destUri = null;
+        try {
+            inputChannel = Channels.newChannel(resolver.openInputStream(sourceUri));
+            destUri = Uri.parse(context.getFileStreamPath(filename).toURI().toString());
+            outputChannel = context.openFileOutput(filename, Context.MODE_PRIVATE).getChannel();
+            final ByteBuffer buffer = ByteBuffer.allocateDirect(8192);
+            while (inputChannel.read(buffer) != -1) {
+                buffer.flip();
+                outputChannel.write(buffer);
+                buffer.compact();
+            }
+            buffer.flip();
+            while (buffer.hasRemaining()) {
+                outputChannel.write(buffer);
+            }
+        } finally {
+            if (inputChannel != null) {
+                try {
+                    inputChannel.close();
+                } catch (IOException e) {
+                    Log.w(LOG_TAG, "Failed to close inputChannel.");
+                }
+            }
+            if (outputChannel != null) {
+                try {
+                    outputChannel.close();
+                } catch(IOException e) {
+                    Log.w(LOG_TAG, "Failed to close outputChannel");
+                }
+            }
+        }
+        return destUri;
+    }
+
+    /**
+     * Reads the file from {@param sourceUri} and copies it to local cache file.
+     * Returns the local file name which stores the file from sourceUri.
+     */
+    private String readUriToLocalFile(Uri sourceUri) {
+        // Read the uri to local first.
+        int cache_index = 0;
+        String localFilename = null;
+        // Note: caches are removed by VCardService.
+        while (true) {
+            localFilename = VCardService.CACHE_FILE_PREFIX + cache_index + ".vcf";
+            final File file = getFileStreamPath(localFilename);
+            if (!file.exists()) {
+                break;
+            } else {
+                if (cache_index == Integer.MAX_VALUE) {
+                    throw new RuntimeException("Exceeded cache limit");
+                }
+                cache_index++;
+            }
+        }
+        try {
+            copyTo(sourceUri, localFilename);
+        } catch (IOException|SecurityException e) {
+            FeedbackHelper.sendFeedback(this, LOG_TAG, "Failed to copy vcard to local file", e);
+            showFailureNotification(R.string.fail_reason_io_error);
+            return null;
+        }
+
+        if (localFilename == null) {
+            Log.e(LOG_TAG, "Cannot load uri to local storage.");
+            showFailureNotification(R.string.fail_reason_io_error);
+            return null;
+        }
+
+        return localFilename;
+    }
+
+    private Uri readUriToLocalUri(Uri sourceUri) {
+        final String fileName = readUriToLocalFile(sourceUri);
+        if (fileName == null) {
+            return null;
+        }
+        return Uri.parse(getFileStreamPath(fileName).toURI().toString());
+    }
+
+    // Returns true if uri is from Storage.
+    private boolean isStorageUri(Uri uri) {
+        return uri != null && uri.toString().startsWith(STORAGE_VCARD_URI_PREFIX);
+    }
+
+    @Override
+    protected void onCreate(Bundle bundle) {
+        super.onCreate(bundle);
+
+        Uri sourceUri = getIntent().getData();
+
+        // Reading uris from non-storage needs the permission granted from the source intent,
+        // instead of permissions from RequestImportVCardPermissionActivity. So skipping requesting
+        // permissions from RequestImportVCardPermissionActivity for uris from non-storage source.
+        if (isStorageUri(sourceUri) && RequestImportVCardPermissionsActivity
+                .startPermissionActivity(this, isCallerSelf(this))) {
+            return;
+        }
+
+        String sourceDisplayName = null;
+        if (sourceUri != null) {
+            // Read the uri to local first.
+            String localTmpFileName = getIntent().getStringExtra(LOCAL_TMP_FILE_NAME_EXTRA);
+            sourceDisplayName = getIntent().getStringExtra(SOURCE_URI_DISPLAY_NAME);
+            if (TextUtils.isEmpty(localTmpFileName)) {
+                localTmpFileName = readUriToLocalFile(sourceUri);
+                sourceDisplayName = getDisplayName(sourceUri);
+                if (localTmpFileName == null) {
+                    Log.e(LOG_TAG, "Cannot load uri to local storage.");
+                    showFailureNotification(R.string.fail_reason_io_error);
+                    return;
+                }
+                getIntent().putExtra(LOCAL_TMP_FILE_NAME_EXTRA, localTmpFileName);
+                getIntent().putExtra(SOURCE_URI_DISPLAY_NAME, sourceDisplayName);
+            }
+            sourceUri = Uri.parse(getFileStreamPath(localTmpFileName).toURI().toString());
+        }
+
+        // Always request required permission for contacts before importing the vcard.
+        if (RequestImportVCardPermissionsActivity.startPermissionActivity(this,
+                isCallerSelf(this))) {
+            return;
+        }
+
+        String accountName = null;
+        String accountType = null;
+        String dataSet = null;
+        final Intent intent = getIntent();
+        if (intent != null) {
+            accountName = intent.getStringExtra(SelectAccountActivity.ACCOUNT_NAME);
+            accountType = intent.getStringExtra(SelectAccountActivity.ACCOUNT_TYPE);
+            dataSet = intent.getStringExtra(SelectAccountActivity.DATA_SET);
+        } else {
+            Log.e(LOG_TAG, "intent does not exist");
+        }
+
+        if (!TextUtils.isEmpty(accountName) && !TextUtils.isEmpty(accountType)) {
+            mAccount = new AccountWithDataSet(accountName, accountType, dataSet);
+        } else {
+            final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
+            final List<AccountWithDataSet> accountList = accountTypes.getAccounts(true);
+            if (accountList.size() == 0) {
+                mAccount = null;
+            } else if (accountList.size() == 1) {
+                mAccount = accountList.get(0);
+            } else {
+                startActivityForResult(new Intent(this, SelectAccountActivity.class),
+                        SELECT_ACCOUNT);
+                return;
+            }
+        }
+
+        if (isCallerSelf(this)) {
+            startImport(sourceUri, sourceDisplayName);
+        } else {
+            ImportVCardDialogFragment.show(this, sourceUri, sourceDisplayName);
+        }
+    }
+
+    private static boolean isCallerSelf(Activity activity) {
+        // {@link Activity#getCallingActivity()} is a safer alternative to
+        // {@link Activity#getCallingPackage()} that works around a
+        // framework bug where getCallingPackage() can sometimes return null even when the
+        // current activity *was* in fact launched via a startActivityForResult() call.
+        //
+        // (The bug happens if the task stack needs to be re-created by the framework after
+        // having been killed due to memory pressure or by the "Don't keep activities"
+        // developer option; see bug 7494866 for the full details.)
+        //
+        // Turns out that {@link Activity#getCallingActivity()} *does* return correct info
+        // even in the case where getCallingPackage() is broken, so the workaround is simply
+        // to get the package name from getCallingActivity().getPackageName() instead.
+        final ComponentName callingActivity = activity.getCallingActivity();
+        if (callingActivity == null) return false;
+        final String packageName = callingActivity.getPackageName();
+        if (packageName == null) return false;
+        return packageName.equals(activity.getApplicationContext().getPackageName());
+    }
+
+    @Override
+    public void onImportVCardConfirmed(Uri sourceUri, String sourceDisplayName) {
+        startImport(sourceUri, sourceDisplayName);
+    }
+
+    @Override
+    public void onImportVCardDenied() {
+        finish();
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
+        if (requestCode == SELECT_ACCOUNT) {
+            if (resultCode == Activity.RESULT_OK) {
+                mAccount = new AccountWithDataSet(
+                        intent.getStringExtra(SelectAccountActivity.ACCOUNT_NAME),
+                        intent.getStringExtra(SelectAccountActivity.ACCOUNT_TYPE),
+                        intent.getStringExtra(SelectAccountActivity.DATA_SET));
+                final Uri sourceUri = getIntent().getData();
+                if (sourceUri == null) {
+                    startImport(sourceUri, /* sourceDisplayName =*/ null);
+                } else {
+                    final String sourceDisplayName = getIntent().getStringExtra(
+                            SOURCE_URI_DISPLAY_NAME);
+                    final String localFileName = getIntent().getStringExtra(
+                            LOCAL_TMP_FILE_NAME_EXTRA);
+                    final Uri localUri = Uri.parse(
+                            getFileStreamPath(localFileName).toURI().toString());
+                    startImport(localUri, sourceDisplayName);
+                }
+            } else {
+                if (resultCode != Activity.RESULT_CANCELED) {
+                    Log.w(LOG_TAG, "Result code was not OK nor CANCELED: " + resultCode);
+                }
+                finish();
+            }
+        } else if (requestCode == REQUEST_OPEN_DOCUMENT) {
+            if (resultCode == Activity.RESULT_OK) {
+                final ClipData clipData = intent.getClipData();
+                if (clipData != null) {
+                    final ArrayList<Uri> uris = new ArrayList<>();
+                    final ArrayList<String> sourceDisplayNames = new ArrayList<>();
+                    for (int i = 0; i < clipData.getItemCount(); i++) {
+                        ClipData.Item item = clipData.getItemAt(i);
+                        final Uri uri = item.getUri();
+                        if (uri != null) {
+                            final Uri localUri = readUriToLocalUri(uri);
+                            if (localUri != null) {
+                                final String sourceDisplayName = getDisplayName(uri);
+                                uris.add(localUri);
+                                sourceDisplayNames.add(sourceDisplayName);
+                            }
+                        }
+                    }
+                    if (uris.isEmpty()) {
+                        Log.w(LOG_TAG, "No vCard was selected for import");
+                        finish();
+                    } else {
+                        Log.i(LOG_TAG, "Multiple vCards selected for import: " + uris);
+                        importVCard(uris.toArray(new Uri[0]),
+                                sourceDisplayNames.toArray(new String[0]));
+                    }
+                } else {
+                    final Uri uri = intent.getData();
+                    if (uri != null) {
+                        Log.i(LOG_TAG, "vCard selected for import: " + uri);
+                        final Uri localUri = readUriToLocalUri(uri);
+                        if (localUri != null) {
+                            final String sourceDisplayName = getDisplayName(uri);
+                            importVCard(localUri, sourceDisplayName);
+                        } else {
+                            Log.w(LOG_TAG, "No local URI for vCard import");
+                            finish();
+                        }
+                    } else {
+                        Log.w(LOG_TAG, "No vCard was selected for import");
+                        finish();
+                    }
+                }
+            } else {
+                if (resultCode != Activity.RESULT_CANCELED) {
+                    Log.w(LOG_TAG, "Result code was not OK nor CANCELED" + resultCode);
+                }
+                finish();
+            }
+        }
+    }
+
+    private void startImport(Uri uri, String sourceDisplayName) {
+        // Handle inbound files
+        if (uri != null) {
+            Log.i(LOG_TAG, "Starting vCard import using Uri " + uri);
+            importVCard(uri, sourceDisplayName);
+        } else {
+            Log.i(LOG_TAG, "Start vCard without Uri. The user will select vCard manually.");
+            final Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+            intent.addCategory(Intent.CATEGORY_OPENABLE);
+            intent.setType(VCardService.X_VCARD_MIME_TYPE);
+            intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
+            startActivityForResult(intent, REQUEST_OPEN_DOCUMENT);
+        }
+    }
+
+    @Override
+    protected Dialog onCreateDialog(int resId, Bundle bundle) {
+        if (resId == R.id.dialog_cache_vcard) {
+            if (mProgressDialogForCachingVCard == null) {
+                final String title = getString(R.string.caching_vcard_title);
+                final String message = getString(R.string.caching_vcard_message);
+                mProgressDialogForCachingVCard = new ProgressDialog(this);
+                mProgressDialogForCachingVCard.setTitle(title);
+                mProgressDialogForCachingVCard.setMessage(message);
+                mProgressDialogForCachingVCard.setProgressStyle(ProgressDialog.STYLE_SPINNER);
+                mProgressDialogForCachingVCard.setOnCancelListener(mVCardCacheThread);
+                startVCardService();
+            }
+            return mProgressDialogForCachingVCard;
+        } else if (resId == R.id.dialog_error_with_message) {
+            String message = mErrorMessage;
+            if (TextUtils.isEmpty(message)) {
+                Log.e(LOG_TAG, "Error message is null while it must not.");
+                message = getString(R.string.fail_reason_unknown);
+            }
+            final AlertDialog.Builder builder = new AlertDialog.Builder(this)
+                .setTitle(getString(R.string.reading_vcard_failed_title))
+                .setIconAttribute(android.R.attr.alertDialogIcon)
+                .setMessage(message)
+                .setOnCancelListener(mCancelListener)
+                .setPositiveButton(android.R.string.ok, mCancelListener);
+            return builder.create();
+        }
+
+        return super.onCreateDialog(resId, bundle);
+    }
+
+    /* package */ void startVCardService() {
+        mConnection = new ImportRequestConnection();
+
+        Log.i(LOG_TAG, "Bind to VCardService.");
+        // We don't want the service finishes itself just after this connection.
+        Intent intent = new Intent(this, VCardService.class);
+        startService(intent);
+        bindService(new Intent(this, VCardService.class),
+                mConnection, Context.BIND_AUTO_CREATE);
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Bundle savedInstanceState) {
+        super.onRestoreInstanceState(savedInstanceState);
+        if (mProgressDialogForCachingVCard != null) {
+            Log.i(LOG_TAG, "Cache thread is still running. Show progress dialog again.");
+            showDialog(R.id.dialog_cache_vcard);
+        }
+    }
+
+    /* package */ void showFailureNotification(int reasonId) {
+        final NotificationManager notificationManager =
+                (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
+        final Notification notification =
+                NotificationImportExportListener.constructImportFailureNotification(
+                        ImportVCardActivity.this,
+                        getString(reasonId));
+        notificationManager.notify(NotificationImportExportListener.FAILURE_NOTIFICATION_TAG,
+                FAILURE_NOTIFICATION_ID, notification);
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                Toast.makeText(ImportVCardActivity.this,
+                        getString(R.string.vcard_import_failed), Toast.LENGTH_LONG).show();
+            }
+        });
+    }
+}
diff --git a/src/com/android/contacts/vcard/ImportVCardDialogFragment.java b/src/com/android/contacts/vcard/ImportVCardDialogFragment.java
new file mode 100644
index 0000000..521a610
--- /dev/null
+++ b/src/com/android/contacts/vcard/ImportVCardDialogFragment.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.vcard;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.DialogInterface;
+import android.net.Uri;
+import android.os.Bundle;
+
+import com.android.contacts.R;
+
+/** Asks for confirmation before importing contacts from a vcard. */
+public class ImportVCardDialogFragment extends DialogFragment {
+
+    static final String TAG = "importVCardDialog";
+
+    private static final String ARG_SOURCE_URI = "sourceUri";
+    private static final String ARG_SOURCE_DISPLAY_NAME = "sourceDisplayName";
+
+    /** Callbacks for hosts of the {@link ImportVCardDialogFragment}. */
+    public interface Listener {
+
+        /** Invoked after the user has confirmed that contacts should be imported. */
+        void onImportVCardConfirmed(Uri sourceUri, String sourceDisplayName);
+
+        /** Invoked after the user has rejected importing contacts. */
+        void onImportVCardDenied();
+    }
+
+    /** Displays the dialog asking for confirmation before importing contacts. */
+    public static void show(Activity activity, Uri sourceUri,
+            String sourceDisplayName) {
+        if (!(activity instanceof Listener)) {
+            throw new IllegalArgumentException(
+                    "Activity must implement " + Listener.class.getName());
+        }
+
+        final Bundle args = new Bundle();
+        args.putParcelable(ARG_SOURCE_URI, sourceUri);
+        args.putString(ARG_SOURCE_DISPLAY_NAME, sourceDisplayName);
+
+        final ImportVCardDialogFragment dialog = new ImportVCardDialogFragment();
+        dialog.setArguments(args);
+        dialog.show(activity.getFragmentManager(), TAG);
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        final Uri sourceUri = getArguments().getParcelable(ARG_SOURCE_URI);
+        final String sourceDisplayName = getArguments().getString(ARG_SOURCE_DISPLAY_NAME);
+
+        return new AlertDialog.Builder(getActivity())
+                .setIconAttribute(android.R.attr.alertDialogIcon)
+                .setMessage(R.string.import_from_vcf_file_confirmation_message)
+                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int whichButton) {
+                        final Listener listener = (Listener) getActivity();
+                        if (listener != null) {
+                            listener.onImportVCardConfirmed(sourceUri, sourceDisplayName);
+                        }
+                    }
+                })
+                .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int whichButton) {
+                        final Listener listener = (Listener) getActivity();
+                        if (listener != null) {
+                            listener.onImportVCardDenied();
+                        }
+                    }
+                })
+                .create();
+    }
+}
diff --git a/src/com/android/contacts/vcard/NfcImportVCardActivity.java b/src/com/android/contacts/vcard/NfcImportVCardActivity.java
new file mode 100644
index 0000000..4793d47
--- /dev/null
+++ b/src/com/android/contacts/vcard/NfcImportVCardActivity.java
@@ -0,0 +1,310 @@
+/*
+ * 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.vcard;
+
+import android.app.Activity;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.net.Uri;
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+import android.nfc.NfcAdapter;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.provider.ContactsContract.RawContacts;
+import android.util.Log;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.contacts.activities.RequestPermissionsActivity;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.ImplicitIntentsUtil;
+import com.android.contactsbind.FeedbackHelper;
+import com.android.vcard.VCardEntry;
+import com.android.vcard.VCardEntryCounter;
+import com.android.vcard.VCardParser;
+import com.android.vcard.VCardParser_V21;
+import com.android.vcard.VCardParser_V30;
+import com.android.vcard.VCardSourceDetector;
+import com.android.vcard.exception.VCardException;
+import com.android.vcard.exception.VCardNestedException;
+import com.android.vcard.exception.VCardVersionException;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class NfcImportVCardActivity extends Activity implements ServiceConnection,
+        VCardImportExportListener {
+    private static final String TAG = "NfcImportVCardActivity";
+
+    private static final int SELECT_ACCOUNT = 1;
+
+    private NdefRecord mRecord;
+    private AccountWithDataSet mAccount;
+    private Handler mHandler = new Handler();
+
+    /**
+     * Notification id used when error happened before sending an import request to VCardServer.
+     */
+    private static final int FAILURE_NOTIFICATION_ID = 1;
+
+    /* package */ class ImportTask extends AsyncTask<VCardService, Void, ImportRequest> {
+        @Override
+        public ImportRequest doInBackground(VCardService... services) {
+            ImportRequest request = createImportRequest();
+            if (request == null) {
+                return null;
+            }
+
+            ArrayList<ImportRequest> requests = new ArrayList<ImportRequest>();
+            requests.add(request);
+            services[0].handleImportRequest(requests, NfcImportVCardActivity.this);
+            return request;
+        }
+
+        @Override
+        public void onCancelled() {
+            unbindService(NfcImportVCardActivity.this);
+        }
+
+        @Override
+        public void onPostExecute(ImportRequest request) {
+            if (request == null) {
+                // Finish the activity in case of error so it doesn't stay in view.
+                finish();
+            }
+            unbindService(NfcImportVCardActivity.this);
+        }
+    }
+
+    /* package */ ImportRequest createImportRequest() {
+        VCardParser parser;
+        VCardEntryCounter counter = null;
+        VCardSourceDetector detector = null;
+        int vcardVersion = ImportVCardActivity.VCARD_VERSION_V21;
+        try {
+            ByteArrayInputStream is = new ByteArrayInputStream(mRecord.getPayload());
+            is.mark(0);
+            parser = new VCardParser_V21();
+            try {
+                counter = new VCardEntryCounter();
+                detector = new VCardSourceDetector();
+                parser.addInterpreter(counter);
+                parser.addInterpreter(detector);
+                parser.parse(is);
+            } catch (VCardVersionException e1) {
+                is.reset();
+                vcardVersion = ImportVCardActivity.VCARD_VERSION_V30;
+                parser = new VCardParser_V30();
+                try {
+                    counter = new VCardEntryCounter();
+                    detector = new VCardSourceDetector();
+                    parser.addInterpreter(counter);
+                    parser.addInterpreter(detector);
+                    parser.parse(is);
+                } catch (VCardVersionException e2) {
+                    FeedbackHelper.sendFeedback(this, TAG, "vcard with unsupported version", e2);
+                    showFailureNotification(R.string.fail_reason_not_supported);
+                    return null;
+                }
+            } finally {
+                try {
+                    if (is != null) is.close();
+                } catch (IOException e) {
+                }
+            }
+        } catch (IOException e) {
+            FeedbackHelper.sendFeedback(this, TAG, "Failed to read vcard data", e);
+            showFailureNotification(R.string.fail_reason_io_error);
+            return null;
+        } catch (VCardNestedException e) {
+            Log.w(TAG, "Nested Exception is found (it may be false-positive).");
+            // Go through without throwing the Exception, as we may be able to detect the
+            // version before it
+        } catch (VCardException e) {
+            FeedbackHelper.sendFeedback(this, TAG, "Failed to parse vcard", e);
+            showFailureNotification(R.string.fail_reason_not_supported);
+            return null;
+        }
+
+        return new ImportRequest(mAccount, mRecord.getPayload(), null,
+                getString(R.string.nfc_vcard_file_name), detector.getEstimatedType(),
+                detector.getEstimatedCharset(), vcardVersion, counter.getCount());
+    }
+
+    @Override
+    public void onServiceConnected(ComponentName name, IBinder binder) {
+        VCardService service = ((VCardService.MyBinder) binder).getService();
+        new ImportTask().execute(service);
+    }
+
+    @Override
+    public void onServiceDisconnected(ComponentName name) {
+        // Do nothing
+    }
+
+    @Override
+    protected void onCreate(Bundle bundle) {
+        super.onCreate(bundle);
+
+        if (RequestPermissionsActivity.startPermissionActivity(this)) {
+            return;
+        }
+
+        Intent intent = getIntent();
+        if (!NfcAdapter.ACTION_NDEF_DISCOVERED.equals(intent.getAction())) {
+            Log.w(TAG, "Unknowon intent " + intent);
+            finish();
+            return;
+        }
+
+        String type = intent.getType();
+        if (type == null ||
+                (!"text/x-vcard".equals(type) && !"text/vcard".equals(type))) {
+            Log.w(TAG, "Not a vcard");
+            //setStatus(getString(R.string.fail_reason_not_supported));
+            finish();
+            return;
+        }
+        NdefMessage msg = (NdefMessage) intent.getParcelableArrayExtra(
+                NfcAdapter.EXTRA_NDEF_MESSAGES)[0];
+        mRecord = msg.getRecords()[0];
+
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
+        final List<AccountWithDataSet> accountList = accountTypes.getAccounts(true);
+        if (accountList.size() == 0) {
+            mAccount = null;
+        } else if (accountList.size() == 1) {
+            mAccount = accountList.get(0);
+        } else {
+            startActivityForResult(new Intent(this, SelectAccountActivity.class), SELECT_ACCOUNT);
+            return;
+        }
+
+        startImport();
+    }
+
+    @Override
+    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
+        if (requestCode == SELECT_ACCOUNT) {
+            if (resultCode == RESULT_OK) {
+                mAccount = new AccountWithDataSet(
+                        intent.getStringExtra(SelectAccountActivity.ACCOUNT_NAME),
+                        intent.getStringExtra(SelectAccountActivity.ACCOUNT_TYPE),
+                        intent.getStringExtra(SelectAccountActivity.DATA_SET));
+                startImport();
+            } else {
+                finish();
+            }
+        }
+    }
+
+    private void startImport() {
+        // We don't want the service finishes itself just after this connection.
+        Intent intent = new Intent(this, VCardService.class);
+        startService(intent);
+        bindService(intent, this, Context.BIND_AUTO_CREATE);
+    }
+
+    @Override
+    public void onImportProcessed(ImportRequest request, int jobId, int sequence) {
+        // do nothing
+    }
+
+    @Override
+    public void onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
+            int totalCount) {
+        // do nothing
+    }
+
+    @Override
+    public void onImportFinished(ImportRequest request, int jobId, Uri uri) {
+        if (isFinishing()) {
+            Log.i(TAG, "Late import -- ignoring");
+            return;
+        }
+
+        if (uri != null) {
+            Uri contactUri = RawContacts.getContactLookupUri(getContentResolver(), uri);
+            Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);
+            ImplicitIntentsUtil.startActivityInAppIfPossible(this, intent);
+            finish();
+        }
+    }
+
+    @Override
+    public void onImportFailed(ImportRequest request) {
+        if (isFinishing()) {
+            Log.i(TAG, "Late import failure -- ignoring");
+            return;
+        }
+        showFailureNotification(R.string.vcard_import_request_rejected_message);
+        finish();
+    }
+
+    @Override
+    public void onImportCanceled(ImportRequest request, int jobId) {
+        // do nothing
+    }
+
+    @Override
+    public void onExportProcessed(ExportRequest request, int jobId) {
+        // do nothing
+    }
+
+    @Override
+    public void onExportFailed(ExportRequest request) {
+        // do nothing
+    }
+
+    @Override
+    public void onCancelRequest(CancelRequest request, int type) {
+        // do nothing
+    }
+
+    @Override
+    public void onComplete() {
+        // do nothing
+    }
+
+    /* package */ void showFailureNotification(int reasonId) {
+        final NotificationManager notificationManager =
+                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+        final Notification notification =
+                NotificationImportExportListener.constructImportFailureNotification(
+                        this,
+                        getString(reasonId));
+        notificationManager.notify(NotificationImportExportListener.FAILURE_NOTIFICATION_TAG,
+                FAILURE_NOTIFICATION_ID, notification);
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                Toast.makeText(NfcImportVCardActivity.this,
+                        getString(R.string.vcard_import_failed), Toast.LENGTH_LONG).show();
+            }
+        });
+    }
+}
diff --git a/src/com/android/contacts/vcard/NotificationImportExportListener.java b/src/com/android/contacts/vcard/NotificationImportExportListener.java
new file mode 100644
index 0000000..cf815bc
--- /dev/null
+++ b/src/com/android/contacts/vcard/NotificationImportExportListener.java
@@ -0,0 +1,318 @@
+/*
+ * 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.vcard;
+
+import android.app.Activity;
+import android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.Message;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+import android.support.v4.app.NotificationCompat;
+import android.widget.Toast;
+
+import com.android.contacts.R;
+import com.android.vcard.VCardEntry;
+
+import java.text.NumberFormat;
+
+public class NotificationImportExportListener implements VCardImportExportListener,
+        Handler.Callback {
+    /** The tag used by vCard-related notifications. */
+    /* package */ static final String DEFAULT_NOTIFICATION_TAG = "VCardServiceProgress";
+    /**
+     * The tag used by vCard-related failure notifications.
+     * <p>
+     * Use a different tag from {@link #DEFAULT_NOTIFICATION_TAG} so that failures do not get
+     * replaced by other notifications and vice-versa.
+     */
+    /* package */ static final String FAILURE_NOTIFICATION_TAG = "VCardServiceFailure";
+
+    private final NotificationManager mNotificationManager;
+    private final Activity mContext;
+    private final Handler mHandler;
+
+    public NotificationImportExportListener(Activity activity) {
+        mContext = activity;
+        mNotificationManager = (NotificationManager) activity.getSystemService(
+                Context.NOTIFICATION_SERVICE);
+        mHandler = new Handler(this);
+    }
+
+    @Override
+    public boolean handleMessage(Message msg) {
+        String text = (String) msg.obj;
+        Toast.makeText(mContext, text, Toast.LENGTH_LONG).show();
+        return true;
+    }
+
+    @Override
+    public void onImportProcessed(ImportRequest request, int jobId, int sequence) {
+        // Show a notification about the status
+        final String displayName;
+        final String message;
+        if (request.displayName != null) {
+            displayName = request.displayName;
+            message = mContext.getString(R.string.vcard_import_will_start_message, displayName);
+        } else {
+            displayName = mContext.getString(R.string.vcard_unknown_filename);
+            message = mContext.getString(
+                    R.string.vcard_import_will_start_message_with_default_name);
+        }
+
+        // We just want to show notification for the first vCard.
+        if (sequence == 0) {
+            // TODO: Ideally we should detect the current status of import/export and
+            // show "started" when we can import right now and show "will start" when
+            // we cannot.
+            mHandler.obtainMessage(0, message).sendToTarget();
+        }
+
+        final Notification notification = constructProgressNotification(mContext,
+                VCardService.TYPE_IMPORT, message, message, jobId, displayName, -1, 0);
+        mNotificationManager.notify(DEFAULT_NOTIFICATION_TAG, jobId, notification);
+    }
+
+    @Override
+    public void onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
+            int totalCount) {
+        if (entry.isIgnorable()) {
+            return;
+        }
+
+        final String totalCountString = String.valueOf(totalCount);
+        final String tickerText =
+                mContext.getString(R.string.progress_notifier_message,
+                        String.valueOf(currentCount),
+                        totalCountString,
+                        entry.getDisplayName());
+        final String description = mContext.getString(R.string.importing_vcard_description,
+                entry.getDisplayName());
+
+        final Notification notification = constructProgressNotification(
+                mContext.getApplicationContext(), VCardService.TYPE_IMPORT, description, tickerText,
+                jobId, request.displayName, totalCount, currentCount);
+        mNotificationManager.notify(DEFAULT_NOTIFICATION_TAG, jobId, notification);
+    }
+
+    @Override
+    public void onImportFinished(ImportRequest request, int jobId, Uri createdUri) {
+        final String description = mContext.getString(R.string.importing_vcard_finished_title,
+                request.displayName);
+        final Intent intent;
+        if (createdUri != null) {
+            final long rawContactId = ContentUris.parseId(createdUri);
+            final Uri contactUri = RawContacts.getContactLookupUri(
+                    mContext.getContentResolver(), ContentUris.withAppendedId(
+                            RawContacts.CONTENT_URI, rawContactId));
+            intent = new Intent(Intent.ACTION_VIEW, contactUri);
+        } else {
+            intent = new Intent(Intent.ACTION_VIEW);
+            intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
+        }
+        intent.setPackage(mContext.getPackageName());
+        final Notification notification =
+                NotificationImportExportListener.constructFinishNotification(mContext,
+                description, null, intent);
+        mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
+                jobId, notification);
+    }
+
+    @Override
+    public void onImportFailed(ImportRequest request) {
+        // TODO: a little unkind to show Toast in this case, which is shown just a moment.
+        // Ideally we should show some persistent something users can notice more easily.
+        mHandler.obtainMessage(0,
+                mContext.getString(R.string.vcard_import_request_rejected_message)).sendToTarget();
+    }
+
+    @Override
+    public void onImportCanceled(ImportRequest request, int jobId) {
+        final String description = mContext.getString(R.string.importing_vcard_canceled_title,
+                request.displayName);
+        final Notification notification =
+                NotificationImportExportListener.constructCancelNotification(mContext, description);
+        mNotificationManager.notify(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG,
+                jobId, notification);
+    }
+
+    @Override
+    public void onExportProcessed(ExportRequest request, int jobId) {
+        final String displayName = ExportVCardActivity.getOpenableUriDisplayName(mContext,
+                request.destUri);
+        final String message = mContext.getString(R.string.contacts_export_will_start_message);
+
+        mHandler.obtainMessage(0, message).sendToTarget();
+        final Notification notification =
+                NotificationImportExportListener.constructProgressNotification(mContext,
+                        VCardService.TYPE_EXPORT, message, message, jobId, displayName, -1, 0);
+        mNotificationManager.notify(DEFAULT_NOTIFICATION_TAG, jobId, notification);
+    }
+
+    @Override
+    public void onExportFailed(ExportRequest request) {
+        mHandler.obtainMessage(0,
+                mContext.getString(R.string.vcard_export_request_rejected_message)).sendToTarget();
+    }
+
+    @Override
+    public void onCancelRequest(CancelRequest request, int type) {
+        final String description = type == VCardService.TYPE_IMPORT ?
+                mContext.getString(R.string.importing_vcard_canceled_title, request.displayName) :
+                mContext.getString(R.string.exporting_vcard_canceled_title, request.displayName);
+        final Notification notification = constructCancelNotification(mContext, description);
+        mNotificationManager.notify(DEFAULT_NOTIFICATION_TAG, request.jobId, notification);
+    }
+
+    /**
+     * Constructs a {@link Notification} showing the current status of import/export.
+     * Users can cancel the process with the Notification.
+     *
+     * @param context
+     * @param type import/export
+     * @param description Content of the Notification.
+     * @param tickerText
+     * @param jobId
+     * @param displayName Name to be shown to the Notification (e.g. "finished importing XXXX").
+     * Typycally a file name.
+     * @param totalCount The number of vCard entries to be imported. Used to show progress bar.
+     * -1 lets the system show the progress bar with "indeterminate" state.
+     * @param currentCount The index of current vCard. Used to show progress bar.
+     */
+    /* package */ static Notification constructProgressNotification(
+            Context context, int type, String description, String tickerText,
+            int jobId, String displayName, int totalCount, int currentCount) {
+        // Note: We cannot use extra values here (like setIntExtra()), as PendingIntent doesn't
+        // preserve them across multiple Notifications. PendingIntent preserves the first extras
+        // (when flag is not set), or update them when PendingIntent#getActivity() is called
+        // (See PendingIntent#FLAG_UPDATE_CURRENT). In either case, we cannot preserve extras as we
+        // expect (for each vCard import/export request).
+        //
+        // We use query parameter in Uri instead.
+        // Scheme and Authority is arbitorary, assuming CancelActivity never refers them.
+        final Intent intent = new Intent(context, CancelActivity.class);
+        final Uri uri = (new Uri.Builder())
+                .scheme("invalidscheme")
+                .authority("invalidauthority")
+                .appendQueryParameter(CancelActivity.JOB_ID, String.valueOf(jobId))
+                .appendQueryParameter(CancelActivity.DISPLAY_NAME, displayName)
+                .appendQueryParameter(CancelActivity.TYPE, String.valueOf(type)).build();
+        intent.setData(uri);
+
+        final NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
+        builder.setOngoing(true)
+                .setProgress(totalCount, currentCount, totalCount == - 1)
+                .setTicker(tickerText)
+                .setContentTitle(description)
+                .setColor(context.getResources().getColor(R.color.dialtacts_theme_color))
+                .setSmallIcon(type == VCardService.TYPE_IMPORT
+                        ? android.R.drawable.stat_sys_download
+                        : android.R.drawable.stat_sys_upload)
+                .setContentIntent(PendingIntent.getActivity(context, 0, intent, 0));
+        if (totalCount > 0) {
+            String percentage =
+                    NumberFormat.getPercentInstance().format((double) currentCount / totalCount);
+            builder.setContentText(percentage);
+        }
+        return builder.getNotification();
+    }
+
+    /**
+     * Constructs a Notification telling users the process is canceled.
+     *
+     * @param context
+     * @param description Content of the Notification
+     */
+    /* package */ static Notification constructCancelNotification(
+            Context context, String description) {
+        return new NotificationCompat.Builder(context)
+                .setAutoCancel(true)
+                .setSmallIcon(android.R.drawable.stat_notify_error)
+                .setColor(context.getResources().getColor(R.color.dialtacts_theme_color))
+                .setContentTitle(description)
+                .setContentText(description)
+                // Launch an intent that won't resolve to anything. Restrict the intent to this
+                // app to make sure that no other app can steal this pending-intent b/19296918.
+                .setContentIntent(PendingIntent
+                        .getActivity(context, 0, new Intent(context.getPackageName(), null), 0))
+                .getNotification();
+    }
+
+    /**
+     * Constructs a Notification telling users the process is finished.
+     *
+     * @param context
+     * @param description Content of the Notification
+     * @param intent Intent to be launched when the Notification is clicked. Can be null.
+     */
+    /* package */ static Notification constructFinishNotification(
+            Context context, String title, String description, Intent intent) {
+        return constructFinishNotificationWithFlags(context, title, description, intent, 0);
+    }
+
+    /**
+     * @param flags use FLAG_ACTIVITY_NEW_TASK to set it as new task, to get rid of cached files.
+     */
+    /* package */ static Notification constructFinishNotificationWithFlags(
+            Context context, String title, String description, Intent intent, int flags) {
+        return new NotificationCompat.Builder(context)
+                .setAutoCancel(true)
+                .setColor(context.getResources().getColor(R.color.dialtacts_theme_color))
+                .setSmallIcon(R.drawable.quantum_ic_done_vd_theme_24)
+                .setContentTitle(title)
+                .setContentText(description)
+                // If no intent provided, include an intent that won't resolve to anything.
+                // Restrict the intent to this app to make sure that no other app can steal this
+                // pending-intent b/19296918.
+                .setContentIntent(PendingIntent.getActivity(context, 0,
+                        (intent != null ? intent : new Intent(context.getPackageName(), null)),
+                        flags))
+                .getNotification();
+    }
+
+    /**
+     * Constructs a Notification telling the vCard import has failed.
+     *
+     * @param context
+     * @param reason The reason why the import has failed. Shown in description field.
+     */
+    /* package */ static Notification constructImportFailureNotification(
+            Context context, String reason) {
+        return new NotificationCompat.Builder(context)
+                .setAutoCancel(true)
+                .setColor(context.getResources().getColor(R.color.dialtacts_theme_color))
+                .setSmallIcon(android.R.drawable.stat_notify_error)
+                .setContentTitle(context.getString(R.string.vcard_import_failed))
+                .setContentText(reason)
+                // Launch an intent that won't resolve to anything. Restrict the intent to this
+                // app to make sure that no other app can steal this pending-intent b/19296918.
+                .setContentIntent(PendingIntent
+                        .getActivity(context, 0, new Intent(context.getPackageName(), null), 0))
+                .getNotification();
+    }
+
+    @Override
+    public void onComplete() {
+        mContext.finish();
+    }
+}
diff --git a/src/com/android/contacts/vcard/ProcessorBase.java b/src/com/android/contacts/vcard/ProcessorBase.java
new file mode 100644
index 0000000..1ce21cf
--- /dev/null
+++ b/src/com/android/contacts/vcard/ProcessorBase.java
@@ -0,0 +1,75 @@
+/*
+ * 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.vcard;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.RunnableFuture;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A base processor class. One instance processes vCard one import/export request (imports a given
+ * vCard or exports a vCard). Expected to be used with {@link ExecutorService}.
+ *
+ * This instance starts itself with {@link #run()} method, and can be cancelled with
+ * {@link #cancel(boolean)}. Users can check the processor's status using {@link #isCancelled()}
+ * and {@link #isDone()} asynchronously.
+ *
+ * {@link #get()} and {@link #get(long, TimeUnit)}, which are form {@link Future}, aren't
+ * supported and {@link UnsupportedOperationException} will be just thrown when they are called.
+ */
+public abstract class ProcessorBase implements RunnableFuture<Object> {
+
+    /**
+     * @return the type of the processor. Must be {@link VCardService#TYPE_IMPORT} or
+     * {@link VCardService#TYPE_EXPORT}.
+     */
+    public abstract int getType();
+
+    @Override
+    public abstract void run();
+
+    /**
+     * Cancels this operation.
+     *
+     * @param mayInterruptIfRunning ignored. When this method is called, the instance
+     * stops processing and finish itself even if the thread is running.
+     *
+     * @see Future#cancel(boolean)
+     */
+    @Override
+    public abstract boolean cancel(boolean mayInterruptIfRunning);
+    @Override
+    public abstract boolean isCancelled();
+    @Override
+    public abstract boolean isDone();
+
+    /**
+     * Just throws {@link UnsupportedOperationException}.
+     */
+    @Override
+    public final Object get() {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Just throws {@link UnsupportedOperationException}.
+     */
+    @Override
+    public final Object get(long timeout, TimeUnit unit) {
+        throw new UnsupportedOperationException();
+    }
+}
diff --git a/src/com/android/contacts/vcard/SelectAccountActivity.java b/src/com/android/contacts/vcard/SelectAccountActivity.java
new file mode 100644
index 0000000..8809fac
--- /dev/null
+++ b/src/com/android/contacts/vcard/SelectAccountActivity.java
@@ -0,0 +1,112 @@
+/*
+ * 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.vcard;
+
+import android.app.Activity;
+import android.app.Dialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
+
+import com.android.contacts.R;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.util.AccountSelectionUtil;
+
+import java.util.List;
+
+public class SelectAccountActivity extends Activity {
+    private static final String LOG_TAG = "SelectAccountActivity";
+
+    public static final String ACCOUNT_NAME = "account_name";
+    public static final String ACCOUNT_TYPE = "account_type";
+    public static final String DATA_SET = "data_set";
+
+    private class CancelListener
+            implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
+        public void onClick(DialogInterface dialog, int which) {
+            finish();
+        }
+        public void onCancel(DialogInterface dialog) {
+            finish();
+        }
+    }
+
+    private AccountSelectionUtil.AccountSelectedListener mAccountSelectionListener;
+
+    @Override
+    protected void onCreate(Bundle bundle) {
+        super.onCreate(bundle);
+
+        // There's three possibilities:
+        // - more than one accounts -> ask the user
+        // - just one account -> use the account without asking the user
+        // - no account -> use phone-local storage without asking the user
+        final int resId = R.string.import_from_vcf_file;
+        final AccountTypeManager accountTypes = AccountTypeManager.getInstance(this);
+        final List<AccountWithDataSet> accountList = accountTypes.getAccounts(true);
+        if (accountList.size() == 0) {
+            Log.w(LOG_TAG, "Account does not exist");
+            finish();
+            return;
+        } else if (accountList.size() == 1) {
+            final AccountWithDataSet account = accountList.get(0);
+            final Intent intent = new Intent();
+            intent.putExtra(ACCOUNT_NAME, account.name);
+            intent.putExtra(ACCOUNT_TYPE, account.type);
+            intent.putExtra(DATA_SET, account.dataSet);
+            setResult(RESULT_OK, intent);
+            finish();
+            return;
+        }
+
+        Log.i(LOG_TAG, "The number of available accounts: " + accountList.size());
+
+        // Multiple accounts. Let users to select one.
+        mAccountSelectionListener =
+                new AccountSelectionUtil.AccountSelectedListener(
+                        this, accountList, resId) {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        dialog.dismiss();
+                        final AccountWithDataSet account = mAccountList.get(which);
+                        final Intent intent = new Intent();
+                        intent.putExtra(ACCOUNT_NAME, account.name);
+                        intent.putExtra(ACCOUNT_TYPE, account.type);
+                        intent.putExtra(DATA_SET, account.dataSet);
+                        setResult(RESULT_OK, intent);
+                        finish();
+                    }
+                };
+        showDialog(resId);
+        return;
+    }
+
+    @Override
+    protected Dialog onCreateDialog(int resId, Bundle bundle) {
+        if (resId == R.string.import_from_vcf_file) {
+            if (mAccountSelectionListener == null) {
+                throw new NullPointerException(
+                        "mAccountSelectionListener must not be null.");
+            }
+            return AccountSelectionUtil.getSelectAccountDialog(this, resId,
+                    mAccountSelectionListener,
+                    new CancelListener());
+        }
+        return super.onCreateDialog(resId, bundle);
+    }
+}
diff --git a/src/com/android/contacts/vcard/ShareVCardActivity.java b/src/com/android/contacts/vcard/ShareVCardActivity.java
new file mode 100644
index 0000000..787ddc6
--- /dev/null
+++ b/src/com/android/contacts/vcard/ShareVCardActivity.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.vcard;
+
+import android.content.ComponentName;
+import android.net.Uri;
+import android.os.IBinder;
+import android.support.v4.content.FileProvider;
+import android.util.Log;
+
+import com.android.contacts.R;
+import com.android.contactsbind.FeedbackHelper;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+/**
+ * This activity connects to VCardService, creates a .vcf file in cache directory and send export
+ * request with the file URI so as to write contacts data to the file in background.
+ */
+public class ShareVCardActivity extends ExportVCardActivity {
+    private static final String LOG_TAG = "VCardShare";
+    private final String EXPORT_FILE_PREFIX = "vcards_";
+    private final long A_DAY_IN_MILLIS = 1000 * 60 * 60 * 24;
+
+    @Override
+    public synchronized void onServiceConnected(ComponentName name, IBinder binder) {
+        if (DEBUG) Log.d(LOG_TAG, "connected to service, requesting a destination file name");
+        mConnected = true;
+        mService = ((VCardService.MyBinder) binder).getService();
+
+        clearExportFiles();
+
+        final File file = getLocalFile();
+        try {
+            file.createNewFile();
+        } catch (IOException e) {
+            FeedbackHelper.sendFeedback(this, LOG_TAG, "Failed to create .vcf file", e);
+            finish();
+            return;
+        }
+
+        final Uri contentUri = FileProvider.getUriForFile(this,
+                getString(R.string.contacts_file_provider_authority), file);
+        if (DEBUG) Log.d(LOG_TAG, "exporting to " + contentUri);
+
+        final ExportRequest request = new ExportRequest(contentUri);
+        // The connection object will call finish().
+        mService.handleExportRequest(request, new NotificationImportExportListener(
+                ShareVCardActivity.this));
+        finish();
+    }
+
+    /**
+     * Delete the files (that are untouched for more than 1 day) in the cache directory.
+     * We cannot rely on VCardService to delete export files because it will delete export files
+     * right after finishing writing so no files could be shared. Therefore, our approach to
+     * deleting export files is:
+     * 1. put export files in cache directory so that Android may delete them;
+     * 2. manually delete the files that are older than 1 day when service is connected.
+     */
+    private void clearExportFiles() {
+        for (File file : getCacheDir().listFiles()) {
+            final long ageInMillis = System.currentTimeMillis() - file.lastModified();
+            if (file.getName().startsWith(EXPORT_FILE_PREFIX) && ageInMillis > A_DAY_IN_MILLIS) {
+                file.delete();
+            }
+        }
+    }
+
+    private File getLocalFile() {
+        final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.US);
+        final String currentDateString = dateFormat.format(new Date()).toString();
+        final String localFilename = EXPORT_FILE_PREFIX + currentDateString + ".vcf";
+        return new File(getCacheDir(), localFilename);
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/contacts/vcard/VCardCommonArguments.java b/src/com/android/contacts/vcard/VCardCommonArguments.java
new file mode 100644
index 0000000..06b49a2
--- /dev/null
+++ b/src/com/android/contacts/vcard/VCardCommonArguments.java
@@ -0,0 +1,27 @@
+/*
+ * 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.vcard;
+
+/**
+ * Argument constants used by many activities and services.
+ */
+public class VCardCommonArguments {
+
+    // Argument used to pass calling activities to the target activity or service.
+    // The value should be a string class name (e.g. com.android.contacts.vcard.VCardCommonArgs)
+    public static final String ARG_CALLING_ACTIVITY = "CALLING_ACTIVITY";
+}
diff --git a/src/com/android/contacts/vcard/VCardImportExportListener.java b/src/com/android/contacts/vcard/VCardImportExportListener.java
new file mode 100644
index 0000000..82d7c21
--- /dev/null
+++ b/src/com/android/contacts/vcard/VCardImportExportListener.java
@@ -0,0 +1,36 @@
+/*
+ * 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.vcard;
+
+import android.net.Uri;
+
+import com.android.vcard.VCardEntry;
+
+interface VCardImportExportListener {
+    void onImportProcessed(ImportRequest request, int jobId, int sequence);
+    void onImportParsed(ImportRequest request, int jobId, VCardEntry entry, int currentCount,
+            int totalCount);
+    void onImportFinished(ImportRequest request, int jobId, Uri uri);
+    void onImportFailed(ImportRequest request);
+    void onImportCanceled(ImportRequest request, int jobId);
+
+    void onExportProcessed(ExportRequest request, int jobId);
+    void onExportFailed(ExportRequest request);
+
+    void onCancelRequest(CancelRequest request, int type);
+    void onComplete();
+}
diff --git a/src/com/android/contacts/vcard/VCardService.java b/src/com/android/contacts/vcard/VCardService.java
new file mode 100644
index 0000000..f5387a1
--- /dev/null
+++ b/src/com/android/contacts/vcard/VCardService.java
@@ -0,0 +1,387 @@
+/*
+ * 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.vcard;
+
+import android.app.Service;
+import android.content.Intent;
+import android.media.MediaScannerConnection;
+import android.media.MediaScannerConnection.MediaScannerConnectionClient;
+import android.net.Uri;
+import android.os.Binder;
+import android.os.IBinder;
+import android.util.Log;
+import android.util.SparseArray;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.RejectedExecutionException;
+
+/**
+ * The class responsible for handling vCard import/export requests.
+ *
+ * This Service creates one ImportRequest/ExportRequest object (as Runnable) per request and push
+ * it to {@link ExecutorService} with single thread executor. The executor handles each request
+ * one by one, and notifies users when needed.
+ */
+// TODO: Using IntentService looks simpler than using Service + ServiceConnection though this
+// works fine enough. Investigate the feasibility.
+public class VCardService extends Service {
+    private final static String LOG_TAG = "VCardService";
+
+    /* package */ final static boolean DEBUG = false;
+
+    /**
+     * Specifies the type of operation. Used when constructing a notification, canceling
+     * some operation, etc.
+     */
+    /* package */ static final int TYPE_IMPORT = 1;
+    /* package */ static final int TYPE_EXPORT = 2;
+
+    /* package */ static final String CACHE_FILE_PREFIX = "import_tmp_";
+
+    /* package */ static final String X_VCARD_MIME_TYPE = "text/x-vcard";
+
+    private class CustomMediaScannerConnectionClient implements MediaScannerConnectionClient {
+        final MediaScannerConnection mConnection;
+        final String mPath;
+
+        public CustomMediaScannerConnectionClient(String path) {
+            mConnection = new MediaScannerConnection(VCardService.this, this);
+            mPath = path;
+        }
+
+        public void start() {
+            mConnection.connect();
+        }
+
+        @Override
+        public void onMediaScannerConnected() {
+            if (DEBUG) { Log.d(LOG_TAG, "Connected to MediaScanner. Start scanning."); }
+            mConnection.scanFile(mPath, null);
+        }
+
+        @Override
+        public void onScanCompleted(String path, Uri uri) {
+            if (DEBUG) { Log.d(LOG_TAG, "scan completed: " + path); }
+            mConnection.disconnect();
+            removeConnectionClient(this);
+        }
+    }
+
+    // Should be single thread, as we don't want to simultaneously handle import and export
+    // requests.
+    private final ExecutorService mExecutorService = Executors.newSingleThreadExecutor();
+
+    private int mCurrentJobId;
+
+    // Stores all unfinished import/export jobs which will be executed by mExecutorService.
+    // Key is jobId.
+    private final SparseArray<ProcessorBase> mRunningJobMap = new SparseArray<ProcessorBase>();
+    // Stores ScannerConnectionClient objects until they finish scanning requested files.
+    // Uses List class for simplicity. It's not costly as we won't have multiple objects in
+    // almost all cases.
+    private final List<CustomMediaScannerConnectionClient> mRemainingScannerConnections =
+            new ArrayList<CustomMediaScannerConnectionClient>();
+
+    private MyBinder mBinder;
+
+    private String mCallingActivity;
+
+    // File names currently reserved by some export job.
+    private final Set<String> mReservedDestination = new HashSet<String>();
+    /* ** end of vCard exporter params ** */
+
+    public class MyBinder extends Binder {
+        public VCardService getService() {
+            return VCardService.this;
+        }
+    }
+
+   @Override
+    public void onCreate() {
+        super.onCreate();
+        mBinder = new MyBinder();
+        if (DEBUG) Log.d(LOG_TAG, "vCard Service is being created.");
+    }
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int id) {
+        if (intent != null && intent.getExtras() != null) {
+            mCallingActivity = intent.getExtras().getString(
+                    VCardCommonArguments.ARG_CALLING_ACTIVITY);
+        } else {
+            mCallingActivity = null;
+        }
+        return START_STICKY;
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return mBinder;
+    }
+
+    @Override
+    public void onDestroy() {
+        if (DEBUG) Log.d(LOG_TAG, "VCardService is being destroyed.");
+        cancelAllRequestsAndShutdown();
+        clearCache();
+        super.onDestroy();
+    }
+
+    public synchronized void handleImportRequest(List<ImportRequest> requests,
+            VCardImportExportListener listener) {
+        if (DEBUG) {
+            final ArrayList<String> uris = new ArrayList<String>();
+            final ArrayList<String> displayNames = new ArrayList<String>();
+            for (ImportRequest request : requests) {
+                uris.add(request.uri.toString());
+                displayNames.add(request.displayName);
+            }
+            Log.d(LOG_TAG,
+                    String.format("received multiple import request (uri: %s, displayName: %s)",
+                            uris.toString(), displayNames.toString()));
+        }
+        final int size = requests.size();
+        for (int i = 0; i < size; i++) {
+            ImportRequest request = requests.get(i);
+
+            if (tryExecute(new ImportProcessor(this, listener, request, mCurrentJobId))) {
+                if (listener != null) {
+                    listener.onImportProcessed(request, mCurrentJobId, i);
+                }
+                mCurrentJobId++;
+            } else {
+                if (listener != null) {
+                    listener.onImportFailed(request);
+                }
+                // A rejection means executor doesn't run any more. Exit.
+                break;
+            }
+        }
+    }
+
+    public synchronized void handleExportRequest(ExportRequest request,
+            VCardImportExportListener listener) {
+        if (tryExecute(new ExportProcessor(this, request, mCurrentJobId, mCallingActivity))) {
+            final String path = request.destUri.getEncodedPath();
+            if (DEBUG) Log.d(LOG_TAG, "Reserve the path " + path);
+            if (!mReservedDestination.add(path)) {
+                Log.w(LOG_TAG,
+                        String.format("The path %s is already reserved. Reject export request",
+                                path));
+                if (listener != null) {
+                    listener.onExportFailed(request);
+                }
+                return;
+            }
+
+            if (listener != null) {
+                listener.onExportProcessed(request, mCurrentJobId);
+            }
+            mCurrentJobId++;
+        } else {
+            if (listener != null) {
+                listener.onExportFailed(request);
+            }
+        }
+    }
+
+    /**
+     * Tries to call {@link ExecutorService#execute(Runnable)} toward a given processor.
+     * @return true when successful.
+     */
+    private synchronized boolean tryExecute(ProcessorBase processor) {
+        try {
+            if (DEBUG) {
+                Log.d(LOG_TAG, "Executor service status: shutdown: " + mExecutorService.isShutdown()
+                        + ", terminated: " + mExecutorService.isTerminated());
+            }
+            mExecutorService.execute(processor);
+            mRunningJobMap.put(mCurrentJobId, processor);
+            return true;
+        } catch (RejectedExecutionException e) {
+            Log.w(LOG_TAG, "Failed to excetute a job.", e);
+            return false;
+        }
+    }
+
+    public synchronized void handleCancelRequest(CancelRequest request,
+            VCardImportExportListener listener) {
+        final int jobId = request.jobId;
+        if (DEBUG) Log.d(LOG_TAG, String.format("Received cancel request. (id: %d)", jobId));
+
+        final ProcessorBase processor = mRunningJobMap.get(jobId);
+        mRunningJobMap.remove(jobId);
+
+        if (processor != null) {
+            processor.cancel(true);
+            final int type = processor.getType();
+            if (listener != null) {
+                listener.onCancelRequest(request, type);
+            }
+            if (type == TYPE_EXPORT) {
+                final String path =
+                        ((ExportProcessor)processor).getRequest().destUri.getEncodedPath();
+                Log.i(LOG_TAG,
+                        String.format("Cancel reservation for the path %s if appropriate", path));
+                if (!mReservedDestination.remove(path)) {
+                    Log.w(LOG_TAG, "Not reserved.");
+                }
+            }
+        } else {
+            Log.w(LOG_TAG, String.format("Tried to remove unknown job (id: %d)", jobId));
+        }
+        stopServiceIfAppropriate();
+    }
+
+    /**
+     * Checks job list and call {@link #stopSelf()} when there's no job and no scanner connection
+     * is remaining.
+     * A new job (import/export) cannot be submitted any more after this call.
+     */
+    private synchronized void stopServiceIfAppropriate() {
+        if (mRunningJobMap.size() > 0) {
+            final int size = mRunningJobMap.size();
+
+            // Check if there are processors which aren't finished yet. If we still have ones to
+            // process, we cannot stop the service yet. Also clean up already finished processors
+            // here.
+
+            // Job-ids to be removed. At first all elements in the array are invalid and will
+            // be filled with real job-ids from the array's top. When we find a not-yet-finished
+            // processor, then we start removing those finished jobs. In that case latter half of
+            // this array will be invalid.
+            final int[] toBeRemoved = new int[size];
+            for (int i = 0; i < size; i++) {
+                final int jobId = mRunningJobMap.keyAt(i);
+                final ProcessorBase processor = mRunningJobMap.valueAt(i);
+                if (!processor.isDone()) {
+                    Log.i(LOG_TAG, String.format("Found unfinished job (id: %d)", jobId));
+
+                    // Remove processors which are already "done", all of which should be before
+                    // processors which aren't done yet.
+                    for (int j = 0; j < i; j++) {
+                        mRunningJobMap.remove(toBeRemoved[j]);
+                    }
+                    return;
+                }
+
+                // Remember the finished processor.
+                toBeRemoved[i] = jobId;
+            }
+
+            // We're sure we can remove all. Instead of removing one by one, just call clear().
+            mRunningJobMap.clear();
+        }
+
+        if (!mRemainingScannerConnections.isEmpty()) {
+            Log.i(LOG_TAG, "MediaScanner update is in progress.");
+            return;
+        }
+
+        Log.i(LOG_TAG, "No unfinished job. Stop this service.");
+        mExecutorService.shutdown();
+        stopSelf();
+    }
+
+    /* package */ synchronized void updateMediaScanner(String path) {
+        if (DEBUG) {
+            Log.d(LOG_TAG, "MediaScanner is being updated: " + path);
+        }
+
+        if (mExecutorService.isShutdown()) {
+            Log.w(LOG_TAG, "MediaScanner update is requested after executor's being shut down. " +
+                    "Ignoring the update request");
+            return;
+        }
+        final CustomMediaScannerConnectionClient client =
+                new CustomMediaScannerConnectionClient(path);
+        mRemainingScannerConnections.add(client);
+        client.start();
+    }
+
+    private synchronized void removeConnectionClient(
+            CustomMediaScannerConnectionClient client) {
+        if (DEBUG) {
+            Log.d(LOG_TAG, "Removing custom MediaScannerConnectionClient.");
+        }
+        mRemainingScannerConnections.remove(client);
+        stopServiceIfAppropriate();
+    }
+
+    /* package */ synchronized void handleFinishImportNotification(
+            int jobId, boolean successful) {
+        if (DEBUG) {
+            Log.d(LOG_TAG, String.format("Received vCard import finish notification (id: %d). "
+                    + "Result: %b", jobId, (successful ? "success" : "failure")));
+        }
+        mRunningJobMap.remove(jobId);
+        stopServiceIfAppropriate();
+    }
+
+    /* package */ synchronized void handleFinishExportNotification(
+            int jobId, boolean successful) {
+        if (DEBUG) {
+            Log.d(LOG_TAG, String.format("Received vCard export finish notification (id: %d). "
+                    + "Result: %b", jobId, (successful ? "success" : "failure")));
+        }
+        final ProcessorBase job = mRunningJobMap.get(jobId);
+        mRunningJobMap.remove(jobId);
+        if (job == null) {
+            Log.w(LOG_TAG, String.format("Tried to remove unknown job (id: %d)", jobId));
+        } else if (!(job instanceof ExportProcessor)) {
+            Log.w(LOG_TAG,
+                    String.format("Removed job (id: %s) isn't ExportProcessor", jobId));
+        } else {
+            final String path = ((ExportProcessor)job).getRequest().destUri.getEncodedPath();
+            if (DEBUG) Log.d(LOG_TAG, "Remove reserved path " + path);
+            mReservedDestination.remove(path);
+        }
+
+        stopServiceIfAppropriate();
+    }
+
+    /**
+     * Cancels all the import/export requests and calls {@link ExecutorService#shutdown()}, which
+     * means this Service becomes no longer ready for import/export requests.
+     *
+     * Mainly called from onDestroy().
+     */
+    private synchronized void cancelAllRequestsAndShutdown() {
+        for (int i = 0; i < mRunningJobMap.size(); i++) {
+            mRunningJobMap.valueAt(i).cancel(true);
+        }
+        mRunningJobMap.clear();
+        mExecutorService.shutdown();
+    }
+
+    /**
+     * Removes import caches stored locally.
+     */
+    private void clearCache() {
+        for (final String fileName : fileList()) {
+            if (fileName.startsWith(CACHE_FILE_PREFIX)) {
+                // We don't want to keep all the caches so we remove cache files old enough.
+                Log.i(LOG_TAG, "Remove a temporary file: " + fileName);
+                deleteFile(fileName);
+            }
+        }
+    }
+}
diff --git a/src/com/android/contacts/widget/ActivityTouchLinearLayout.java b/src/com/android/contacts/widget/ActivityTouchLinearLayout.java
new file mode 100644
index 0000000..bcedb72
--- /dev/null
+++ b/src/com/android/contacts/widget/ActivityTouchLinearLayout.java
@@ -0,0 +1,44 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.widget.LinearLayout;
+
+import com.android.contacts.interactions.TouchPointManager;
+
+/**
+ * Linear layout for an activity that listens to all touch events on the screen and saves the touch
+ * point.
+ * Typically touch events are handled by child views--this class intercepts those touch events
+ * before passing them on to the child.
+ */
+public class ActivityTouchLinearLayout extends LinearLayout {
+    public ActivityTouchLinearLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent (MotionEvent ev) {
+        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+            TouchPointManager.getInstance().setPoint((int) ev.getRawX(), (int) ev.getRawY());
+        }
+        return false;
+    }
+}
diff --git a/src/com/android/contacts/widget/FloatingActionButtonController.java b/src/com/android/contacts/widget/FloatingActionButtonController.java
new file mode 100644
index 0000000..f649808
--- /dev/null
+++ b/src/com/android/contacts/widget/FloatingActionButtonController.java
@@ -0,0 +1,229 @@
+/*
+ * 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.widget;
+
+import android.app.Activity;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+import android.view.animation.AnimationUtils;
+import android.view.animation.Interpolator;
+import android.widget.ImageButton;
+
+import com.android.contacts.R;
+import com.android.contacts.util.ViewUtil;
+import com.android.phone.common.animation.AnimUtils;
+
+/**
+ * Controls the movement and appearance of the FAB (Floating Action Button).
+ */
+public class FloatingActionButtonController {
+    public static final int ALIGN_MIDDLE = 0;
+    public static final int ALIGN_QUARTER_END = 1;
+    public static final int ALIGN_END = 2;
+
+    private static final int FAB_SCALE_IN_DURATION = 186;
+    private static final int FAB_SCALE_IN_FADE_IN_DELAY = 70;
+    private static final int FAB_ICON_FADE_OUT_DURATION = 46;
+
+    private final int mAnimationDuration;
+    private final int mFloatingActionButtonWidth;
+    private final int mFloatingActionButtonMarginRight;
+    private final View mFloatingActionButtonContainer;
+    private final ImageButton mFloatingActionButton;
+    private final Interpolator mFabInterpolator;
+    private int mScreenWidth;
+
+    public FloatingActionButtonController(Activity activity, View container, ImageButton button) {
+        Resources resources = activity.getResources();
+        mFabInterpolator = AnimationUtils.loadInterpolator(activity,
+                android.R.interpolator.fast_out_slow_in);
+        mFloatingActionButtonWidth = resources.getDimensionPixelSize(
+                R.dimen.floating_action_button_width);
+        mFloatingActionButtonMarginRight = resources.getDimensionPixelOffset(
+                R.dimen.floating_action_button_margin_right);
+        mAnimationDuration = resources.getInteger(
+                R.integer.floating_action_button_animation_duration);
+        mFloatingActionButtonContainer = container;
+        mFloatingActionButton = button;
+        ViewUtil.setupFloatingActionButton(mFloatingActionButtonContainer, resources);
+    }
+
+    /**
+     * Passes the screen width into the class. Necessary for translation calculations.
+     * Should be called as soon as parent View width is available.
+     *
+     * @param screenWidth The width of the screen in pixels.
+     */
+    public void setScreenWidth(int screenWidth) {
+        mScreenWidth = screenWidth;
+    }
+
+    /**
+     * Sets FAB as View.VISIBLE or View.GONE.
+     *
+     * @param visible Whether or not to make the container visible.
+     */
+    public void setVisible(boolean visible) {
+        mFloatingActionButtonContainer.setVisibility(visible ? View.VISIBLE : View.GONE);
+    }
+
+    public boolean isVisible() {
+        return mFloatingActionButtonContainer.getVisibility() == View.VISIBLE;
+    }
+
+    public void changeIcon(Drawable icon, String description) {
+        if (mFloatingActionButton.getDrawable() != icon
+                || !mFloatingActionButton.getContentDescription().equals(description)) {
+            mFloatingActionButton.setImageDrawable(icon);
+            mFloatingActionButton.setContentDescription(description);
+        }
+    }
+
+    /**
+     * Updates the FAB location (middle to right position) as the PageView scrolls.
+     *
+     * @param positionOffset A fraction used to calculate position of the FAB during page scroll.
+     */
+    public void onPageScrolled(float positionOffset) {
+        // As the page is scrolling, if we're on the first tab, update the FAB position so it
+        // moves along with it.
+        mFloatingActionButtonContainer.setTranslationX(
+                (int) (positionOffset * getTranslationXForAlignment(ALIGN_END)));
+    }
+
+    /**
+     * Aligns the FAB to the described location
+     *
+     * @param align One of ALIGN_MIDDLE, ALIGN_QUARTER_RIGHT, or ALIGN_RIGHT.
+     * @param animate Whether or not to animate the transition.
+     */
+    public void align(int align, boolean animate) {
+        align(align, 0 /*offsetX */, 0 /* offsetY */, animate);
+    }
+
+    /**
+     * Aligns the FAB to the described location plus specified additional offsets.
+     *
+     * @param align One of ALIGN_MIDDLE, ALIGN_QUARTER_RIGHT, or ALIGN_RIGHT.
+     * @param offsetX Additional offsetX to translate by.
+     * @param offsetY Additional offsetY to translate by.
+     * @param animate Whether or not to animate the transition.
+     */
+    public void align(int align, int offsetX, int offsetY, boolean animate) {
+        if (mScreenWidth == 0) {
+            return;
+        }
+
+        int translationX = getTranslationXForAlignment(align);
+
+        // Skip animation if container is not shown; animation causes container to show again.
+        if (animate && mFloatingActionButtonContainer.isShown()) {
+            mFloatingActionButtonContainer.animate()
+                    .translationX(translationX + offsetX)
+                    .translationY(offsetY)
+                    .setInterpolator(mFabInterpolator)
+                    .setDuration(mAnimationDuration)
+                    .start();
+        } else {
+            mFloatingActionButtonContainer.setTranslationX(translationX + offsetX);
+            mFloatingActionButtonContainer.setTranslationY(offsetY);
+        }
+    }
+
+    /**
+     * Resizes width and height of the floating action bar container.
+     * @param dimension The new dimensions for the width and height.
+     * @param animate Whether to animate this change.
+     */
+    public void resize(int dimension, boolean animate) {
+        if (animate) {
+            AnimUtils.changeDimensions(mFloatingActionButtonContainer, dimension, dimension);
+        } else {
+            mFloatingActionButtonContainer.getLayoutParams().width = dimension;
+            mFloatingActionButtonContainer.getLayoutParams().height = dimension;
+            mFloatingActionButtonContainer.requestLayout();
+        }
+    }
+
+    /**
+     * Scales the floating action button from no height and width to its actual dimensions. This is
+     * an animation for showing the floating action button.
+     * @param delayMs The delay for the effect, in milliseconds.
+     */
+    public void scaleIn(int delayMs) {
+        setVisible(true);
+        AnimUtils.scaleIn(mFloatingActionButtonContainer, FAB_SCALE_IN_DURATION, delayMs);
+        AnimUtils.fadeIn(mFloatingActionButton, FAB_SCALE_IN_DURATION,
+                delayMs + FAB_SCALE_IN_FADE_IN_DELAY, null);
+    }
+
+    /**
+     * Immediately remove the affects of the last call to {@link #scaleOut}.
+     */
+    public void resetIn() {
+        mFloatingActionButton.setAlpha(1f);
+        mFloatingActionButton.setVisibility(View.VISIBLE);
+        mFloatingActionButtonContainer.setScaleX(1);
+        mFloatingActionButtonContainer.setScaleY(1);
+    }
+
+    /**
+     * Scales the floating action button from its actual dimensions to no height and width. This is
+     * an animation for hiding the floating action button.
+     */
+    public void scaleOut() {
+        AnimUtils.scaleOut(mFloatingActionButtonContainer, mAnimationDuration);
+        // Fade out the icon faster than the scale out animation, so that the icon scaling is less
+        // obvious. We don't want it to scale, but the resizing the container is not as performant.
+        AnimUtils.fadeOut(mFloatingActionButton, FAB_ICON_FADE_OUT_DURATION, null);
+    }
+
+    /**
+     * Calculates the X offset of the FAB to the given alignment, adjusted for whether or not the
+     * view is in RTL mode.
+     *
+     * @param align One of ALIGN_MIDDLE, ALIGN_QUARTER_RIGHT, or ALIGN_RIGHT.
+     * @return The translationX for the given alignment.
+     */
+    public int getTranslationXForAlignment(int align) {
+        int result = 0;
+        switch (align) {
+            case ALIGN_MIDDLE:
+                // Moves the FAB to exactly center screen.
+                return 0;
+            case ALIGN_QUARTER_END:
+                // Moves the FAB a quarter of the screen width.
+                result = mScreenWidth / 4;
+                break;
+            case ALIGN_END:
+                // Moves the FAB half the screen width. Same as aligning right with a marginRight.
+                result = mScreenWidth / 2
+                        - mFloatingActionButtonWidth / 2
+                        - mFloatingActionButtonMarginRight;
+                break;
+        }
+        if (isLayoutRtl()) {
+            result *= -1;
+        }
+        return result;
+    }
+
+    private boolean isLayoutRtl() {
+        return mFloatingActionButtonContainer.getLayoutDirection() == View.LAYOUT_DIRECTION_RTL;
+    }
+}
diff --git a/src/com/android/contacts/widget/LayoutSuppressingImageView.java b/src/com/android/contacts/widget/LayoutSuppressingImageView.java
new file mode 100644
index 0000000..d80aeea
--- /dev/null
+++ b/src/com/android/contacts/widget/LayoutSuppressingImageView.java
@@ -0,0 +1,39 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+
+/**
+ * Custom {@link ImageView} that improves layouting performance.
+ *
+ * This improves the performance by not passing requestLayout() to its parent, taking advantage
+ * of knowing that image size won't change once set.
+ */
+public class LayoutSuppressingImageView extends ImageView {
+
+    public LayoutSuppressingImageView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    public void requestLayout() {
+        forceLayout();
+    }
+}
diff --git a/src/com/android/contacts/widget/LayoutSuppressingQuickContactBadge.java b/src/com/android/contacts/widget/LayoutSuppressingQuickContactBadge.java
new file mode 100644
index 0000000..3413e53
--- /dev/null
+++ b/src/com/android/contacts/widget/LayoutSuppressingQuickContactBadge.java
@@ -0,0 +1,39 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.QuickContactBadge;
+
+/**
+ * Custom {@link QuickContactBadge} that improves layouting performance.
+ *
+ * This improves the performance by not passing requestLayout() to its parent, taking advantage
+ * of knowing that image size won't change once set.
+ */
+public class LayoutSuppressingQuickContactBadge extends QuickContactBadge {
+
+    public LayoutSuppressingQuickContactBadge(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    public void requestLayout() {
+        forceLayout();
+    }
+}
diff --git a/src/com/android/contacts/widget/MultiShrinkScroller.java b/src/com/android/contacts/widget/MultiShrinkScroller.java
index b86bebf..ffe0487 100644
--- a/src/com/android/contacts/widget/MultiShrinkScroller.java
+++ b/src/com/android/contacts/widget/MultiShrinkScroller.java
@@ -1,12 +1,5 @@
 package com.android.contacts.widget;
 
-import com.android.contacts.R;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.compat.EdgeEffectCompat;
-import com.android.contacts.quickcontact.ExpandingEntryCardView;
-import com.android.contacts.test.NeededForReflection;
-import com.android.contacts.util.SchedulingUtils;
-
 import android.animation.Animator;
 import android.animation.Animator.AnimatorListener;
 import android.animation.AnimatorListenerAdapter;
@@ -31,18 +24,25 @@
 import android.view.MotionEvent;
 import android.view.VelocityTracker;
 import android.view.View;
-import android.view.ViewGroup;
 import android.view.ViewConfiguration;
+import android.view.ViewGroup;
 import android.view.animation.AnimationUtils;
 import android.view.animation.Interpolator;
 import android.widget.EdgeEffect;
 import android.widget.FrameLayout;
 import android.widget.LinearLayout;
-import android.widget.Scroller;
 import android.widget.ScrollView;
+import android.widget.Scroller;
 import android.widget.TextView;
 import android.widget.Toolbar;
 
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.compat.EdgeEffectCompat;
+import com.android.contacts.quickcontact.ExpandingEntryCardView;
+import com.android.contacts.test.NeededForReflection;
+import com.android.contacts.util.SchedulingUtils;
+
 /**
  * A custom {@link ViewGroup} that operates similarly to a {@link ScrollView}, except with multiple
  * subviews. These subviews are scrolled or shrinked one at a time, until each reaches their
diff --git a/src/com/android/contacts/widget/ProportionalLayout.java b/src/com/android/contacts/widget/ProportionalLayout.java
new file mode 100644
index 0000000..79c58ec
--- /dev/null
+++ b/src/com/android/contacts/widget/ProportionalLayout.java
@@ -0,0 +1,146 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.contacts.R;
+
+/**
+ * Layout that calculates its height based on its width, or vice versa (depending on the set
+ * {@link #setDirection(Direction)}. The factor is specified in {@link #setRatio(float)}.
+ * <p>For {@link Direction#heightToWidth}: width := height * factor</p>
+ * <p>For {@link Direction#widthToHeight}: height := width * factor</p>
+ * <p>Only one child is allowed; if more are required, another ViewGroup can be used as the direct
+ * child of this layout.</p>
+ */
+public class ProportionalLayout extends ViewGroup {
+    /** Specifies whether the width should be calculated based on the height or vice-versa  */
+    public enum Direction {
+        widthToHeight("widthToHeight"),
+        heightToWidth("heightToWidth");
+
+        public final String XmlName;
+
+        private Direction(String xmlName) {
+            XmlName = xmlName;
+        }
+
+        /**
+         * Parses the given direction string and returns the Direction instance. This
+         * should be used when inflating from xml
+         */
+        public static Direction parse(String value) {
+            if (widthToHeight.XmlName.equals(value)) {
+                return Direction.widthToHeight;
+            } else if (heightToWidth.XmlName.equals(value)) {
+                return Direction.heightToWidth;
+            } else {
+                throw new IllegalStateException("direction must be either " +
+                        widthToHeight.XmlName + " or " + heightToWidth.XmlName);
+            }
+        }
+    }
+
+    private Direction mDirection;
+    private float mRatio;
+
+    public ProportionalLayout(Context context) {
+        super(context);
+    }
+
+    public ProportionalLayout(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        initFromAttributes(context, attrs);
+    }
+
+    public ProportionalLayout(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+        initFromAttributes(context, attrs);
+    }
+
+    private void initFromAttributes(Context context, AttributeSet attrs) {
+        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ProportionalLayout);
+
+        mDirection = Direction.parse(a.getString(R.styleable.ProportionalLayout_direction));
+        mRatio = a.getFloat(R.styleable.ProportionalLayout_ratio, 1.0f);
+
+        a.recycle();
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        if (getChildCount() != 1) {
+            throw new IllegalStateException("ProportionalLayout requires exactly one child");
+        }
+
+        final View child = getChildAt(0);
+
+        // Do a first pass to get the optimal size
+        measureChild(child, widthMeasureSpec, heightMeasureSpec);
+        final int childWidth = child.getMeasuredWidth();
+        final int childHeight = child.getMeasuredHeight();
+
+        final int width;
+        final int height;
+        if (mDirection == Direction.heightToWidth) {
+            width = Math.round(childHeight * mRatio);
+            height = childHeight;
+        } else {
+            width = childWidth;
+            height = Math.round(childWidth * mRatio);
+        }
+
+        // Do a second pass so that all children are informed of the new size
+        measureChild(child,
+                MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+                MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY));
+
+        setMeasuredDimension(
+                resolveSize(width, widthMeasureSpec), resolveSize(height, heightMeasureSpec));
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        if (getChildCount() != 1) {
+            throw new IllegalStateException("ProportionalLayout requires exactly one child");
+        }
+
+        final View child = getChildAt(0);
+        child.layout(0, 0, right-left, bottom-top);
+    }
+
+    public Direction getDirection() {
+        return mDirection;
+    }
+
+    public void setDirection(Direction direction) {
+        mDirection = direction;
+    }
+
+    public float getRatio() {
+        return mRatio;
+    }
+
+    public void setRatio(float ratio) {
+        mRatio = ratio;
+    }
+}
diff --git a/src/com/android/contacts/widget/QuickContactImageView.java b/src/com/android/contacts/widget/QuickContactImageView.java
index f85fe16..2943912 100644
--- a/src/com/android/contacts/widget/QuickContactImageView.java
+++ b/src/com/android/contacts/widget/QuickContactImageView.java
@@ -1,7 +1,5 @@
 package com.android.contacts.widget;
 
-import com.android.contacts.common.lettertiles.LetterTileDrawable;
-
 import android.content.Context;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
@@ -9,6 +7,7 @@
 import android.widget.ImageView;
 
 import com.android.contacts.R;
+import com.android.contacts.lettertiles.LetterTileDrawable;
 
 /**
  * An {@link ImageView} designed to display QuickContact's contact photo. When requested to draw
diff --git a/src/com/android/contacts/widget/SelectPhoneAccountDialogFragment.java b/src/com/android/contacts/widget/SelectPhoneAccountDialogFragment.java
new file mode 100644
index 0000000..da2b468
--- /dev/null
+++ b/src/com/android/contacts/widget/SelectPhoneAccountDialogFragment.java
@@ -0,0 +1,280 @@
+/*
+ * 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.widget;
+
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.ResultReceiver;
+import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.ListAdapter;
+import android.widget.TextView;
+
+import com.android.contacts.R;
+import com.android.contacts.compat.PhoneAccountCompat;
+import com.android.contacts.compat.PhoneNumberUtilsCompat;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Dialog that allows the user to select a phone accounts for a given action. Optionally provides
+ * the choice to set the phone account as default.
+ */
+public class SelectPhoneAccountDialogFragment extends DialogFragment {
+    private static final String ARG_TITLE_RES_ID = "title_res_id";
+    private static final String ARG_CAN_SET_DEFAULT = "can_set_default";
+    private static final String ARG_ACCOUNT_HANDLES = "account_handles";
+    private static final String ARG_IS_DEFAULT_CHECKED = "is_default_checked";
+    private static final String ARG_LISTENER = "listener";
+
+    private int mTitleResId;
+    private boolean mCanSetDefault;
+    private List<PhoneAccountHandle> mAccountHandles;
+    private boolean mIsSelected;
+    private boolean mIsDefaultChecked;
+    private TelecomManager mTelecomManager;
+    private SelectPhoneAccountListener mListener;
+
+    /**
+     * Create new fragment instance with default title and no option to set as default.
+     *
+     * @param accountHandles The {@code PhoneAccountHandle}s available to select from.
+     * @param listener The listener for the results of the account selection.
+     */
+    public static SelectPhoneAccountDialogFragment newInstance(
+            List<PhoneAccountHandle> accountHandles, SelectPhoneAccountListener listener) {
+        return newInstance(R.string.select_account_dialog_title, false,
+                accountHandles, listener);
+    }
+
+    /**
+     * Create new fragment instance.
+     * This method also allows specifying a custom title and "set default" checkbox.
+     *
+     * @param titleResId The resource ID for the string to use in the title of the dialog.
+     * @param canSetDefault {@code true} if the dialog should include an option to set the selection
+     * as the default. False otherwise.
+     * @param accountHandles The {@code PhoneAccountHandle}s available to select from.
+     * @param listener The listener for the results of the account selection.
+     */
+    public static SelectPhoneAccountDialogFragment newInstance(int titleResId,
+            boolean canSetDefault, List<PhoneAccountHandle> accountHandles,
+            SelectPhoneAccountListener listener) {
+        ArrayList<PhoneAccountHandle> accountHandlesCopy = new ArrayList<PhoneAccountHandle>();
+        if (accountHandles != null) {
+            accountHandlesCopy.addAll(accountHandles);
+        }
+        SelectPhoneAccountDialogFragment fragment = new SelectPhoneAccountDialogFragment();
+        final Bundle args = new Bundle();
+        args.putInt(ARG_TITLE_RES_ID, titleResId);
+        args.putBoolean(ARG_CAN_SET_DEFAULT, canSetDefault);
+        args.putParcelableArrayList(ARG_ACCOUNT_HANDLES, accountHandlesCopy);
+        args.putParcelable(ARG_LISTENER, listener);
+        fragment.setArguments(args);
+        fragment.setListener(listener);
+        return fragment;
+    }
+
+    public SelectPhoneAccountDialogFragment() {
+    }
+
+    public void setListener(SelectPhoneAccountListener listener) {
+        mListener = listener;
+    }
+
+    public static class SelectPhoneAccountListener extends ResultReceiver {
+        static final int RESULT_SELECTED = 1;
+        static final int RESULT_DISMISSED = 2;
+
+        static final String EXTRA_SELECTED_ACCOUNT_HANDLE = "extra_selected_account_handle";
+        static final String EXTRA_SET_DEFAULT = "extra_set_default";
+
+        public SelectPhoneAccountListener() {
+            super(new Handler());
+        }
+
+        @Override
+        protected void onReceiveResult(int resultCode, Bundle resultData) {
+            if (resultCode == RESULT_SELECTED) {
+                onPhoneAccountSelected(
+                        (PhoneAccountHandle) resultData.getParcelable(
+                                EXTRA_SELECTED_ACCOUNT_HANDLE),
+                        resultData.getBoolean(EXTRA_SET_DEFAULT));
+            } else if (resultCode == RESULT_DISMISSED) {
+                onDialogDismissed();
+            }
+        }
+
+        public void onPhoneAccountSelected(PhoneAccountHandle selectedAccountHandle,
+                boolean setDefault) {}
+
+        public void onDialogDismissed() {}
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        outState.putBoolean(ARG_IS_DEFAULT_CHECKED, mIsDefaultChecked);
+    }
+
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        mTitleResId = getArguments().getInt(ARG_TITLE_RES_ID);
+        mCanSetDefault = getArguments().getBoolean(ARG_CAN_SET_DEFAULT);
+        mAccountHandles = getArguments().getParcelableArrayList(ARG_ACCOUNT_HANDLES);
+        mListener = getArguments().getParcelable(ARG_LISTENER);
+        if (savedInstanceState != null) {
+            mIsDefaultChecked = savedInstanceState.getBoolean(ARG_IS_DEFAULT_CHECKED);
+        }
+        mIsSelected = false;
+        mTelecomManager =
+                (TelecomManager) getActivity().getSystemService(Context.TELECOM_SERVICE);
+
+        final DialogInterface.OnClickListener selectionListener =
+                new DialogInterface.OnClickListener() {
+            @Override
+            public void onClick(DialogInterface dialog, int which) {
+                mIsSelected = true;
+                PhoneAccountHandle selectedAccountHandle = mAccountHandles.get(which);
+                final Bundle result = new Bundle();
+                result.putParcelable(SelectPhoneAccountListener.EXTRA_SELECTED_ACCOUNT_HANDLE,
+                        selectedAccountHandle);
+                result.putBoolean(SelectPhoneAccountListener.EXTRA_SET_DEFAULT,
+                        mIsDefaultChecked);
+                if (mListener != null) {
+                    mListener.onReceiveResult(SelectPhoneAccountListener.RESULT_SELECTED, result);
+                }
+            }
+        };
+
+        final CompoundButton.OnCheckedChangeListener checkListener =
+                new CompoundButton.OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(CompoundButton check, boolean isChecked) {
+                mIsDefaultChecked = isChecked;
+            }
+        };
+
+        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+        ListAdapter selectAccountListAdapter = new SelectAccountListAdapter(
+                builder.getContext(),
+                R.layout.select_account_list_item,
+                mAccountHandles);
+
+        AlertDialog dialog = builder.setTitle(mTitleResId)
+                .setAdapter(selectAccountListAdapter, selectionListener)
+                .create();
+
+        if (mCanSetDefault) {
+            // Generate custom checkbox view
+            LinearLayout checkboxLayout = (LinearLayout) getActivity()
+                    .getLayoutInflater()
+                    .inflate(R.layout.default_account_checkbox, null);
+
+            CheckBox cb =
+                    (CheckBox) checkboxLayout.findViewById(R.id.default_account_checkbox_view);
+            cb.setOnCheckedChangeListener(checkListener);
+            cb.setChecked(mIsDefaultChecked);
+
+            dialog.getListView().addFooterView(checkboxLayout);
+        }
+
+        return dialog;
+    }
+
+    private class SelectAccountListAdapter extends ArrayAdapter<PhoneAccountHandle> {
+        private int mResId;
+
+        public SelectAccountListAdapter(
+                Context context, int resource, List<PhoneAccountHandle> accountHandles) {
+            super(context, resource, accountHandles);
+            mResId = resource;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            LayoutInflater inflater = (LayoutInflater)
+                    getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+            View rowView;
+            final ViewHolder holder;
+
+            if (convertView == null) {
+                // Cache views for faster scrolling
+                rowView = inflater.inflate(mResId, null);
+                holder = new ViewHolder();
+                holder.labelTextView = (TextView) rowView.findViewById(R.id.label);
+                holder.numberTextView = (TextView) rowView.findViewById(R.id.number);
+                holder.imageView = (ImageView) rowView.findViewById(R.id.icon);
+                rowView.setTag(holder);
+            }
+            else {
+                rowView = convertView;
+                holder = (ViewHolder) rowView.getTag();
+            }
+
+            PhoneAccountHandle accountHandle = getItem(position);
+            PhoneAccount account = mTelecomManager.getPhoneAccount(accountHandle);
+            if (account == null) {
+                return rowView;
+            }
+            holder.labelTextView.setText(account.getLabel());
+            if (account.getAddress() == null ||
+                    TextUtils.isEmpty(account.getAddress().getSchemeSpecificPart())) {
+                holder.numberTextView.setVisibility(View.GONE);
+            } else {
+                holder.numberTextView.setVisibility(View.VISIBLE);
+                holder.numberTextView.setText(
+                        PhoneNumberUtilsCompat.createTtsSpannable(
+                                account.getAddress().getSchemeSpecificPart()));
+            }
+            holder.imageView.setImageDrawable(PhoneAccountCompat.createIconDrawable(account,
+                    getContext()));
+            return rowView;
+        }
+
+        private class ViewHolder {
+            TextView labelTextView;
+            TextView numberTextView;
+            ImageView imageView;
+        }
+    }
+
+    @Override
+    public void onStop() {
+        if (!mIsSelected && mListener != null) {
+            mListener.onReceiveResult(SelectPhoneAccountListener.RESULT_DISMISSED, null);
+        }
+        super.onStop();
+    }
+}
diff --git a/tests/Android.mk b/tests/Android.mk
index 583980a..09c97cd 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -7,7 +7,7 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
-res_dirs := res ../res-icons
+res_dirs := res
 LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))
 
 LOCAL_PACKAGE_NAME := ContactsTests
diff --git a/res-icons/mipmap-hdpi/ic_contacts_launcher.png b/tests/res/mipmap-hdpi/ic_contacts_launcher.png
similarity index 100%
copy from res-icons/mipmap-hdpi/ic_contacts_launcher.png
copy to tests/res/mipmap-hdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res-icons/mipmap-mdpi/ic_contacts_launcher.png b/tests/res/mipmap-mdpi/ic_contacts_launcher.png
similarity index 100%
copy from res-icons/mipmap-mdpi/ic_contacts_launcher.png
copy to tests/res/mipmap-mdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res-icons/mipmap-xhdpi/ic_contacts_launcher.png b/tests/res/mipmap-xhdpi/ic_contacts_launcher.png
similarity index 100%
copy from res-icons/mipmap-xhdpi/ic_contacts_launcher.png
copy to tests/res/mipmap-xhdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res-icons/mipmap-xxhdpi/ic_contacts_launcher.png b/tests/res/mipmap-xxhdpi/ic_contacts_launcher.png
similarity index 100%
copy from res-icons/mipmap-xxhdpi/ic_contacts_launcher.png
copy to tests/res/mipmap-xxhdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/res-icons/mipmap-xxxhdpi/ic_contacts_launcher.png b/tests/res/mipmap-xxxhdpi/ic_contacts_launcher.png
similarity index 100%
copy from res-icons/mipmap-xxxhdpi/ic_contacts_launcher.png
copy to tests/res/mipmap-xxxhdpi/ic_contacts_launcher.png
Binary files differ
diff --git a/tests/src/com/android/contacts/ContactsLaunchPerformance.java b/tests/src/com/android/contacts/ContactsLaunchPerformance.java
index 894ae2c..3aaf483 100644
--- a/tests/src/com/android/contacts/ContactsLaunchPerformance.java
+++ b/tests/src/com/android/contacts/ContactsLaunchPerformance.java
@@ -21,7 +21,7 @@
 import android.content.Intent;
 import android.os.Bundle;
 
-import com.android.contacts.common.test.LaunchPerformanceBase;
+import com.android.contacts.test.LaunchPerformanceBase;
 
 /**
  * Instrumentation class for Address Book launch performance testing.
diff --git a/tests/src/com/android/contacts/ContactsUtilsTests.java b/tests/src/com/android/contacts/ContactsUtilsTests.java
new file mode 100644
index 0000000..114ce67
--- /dev/null
+++ b/tests/src/com/android/contacts/ContactsUtilsTests.java
@@ -0,0 +1,187 @@
+/*
+ * 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;
+
+import android.content.ContentValues;
+import android.content.Intent;
+import android.net.Uri;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.Pair;
+
+import com.android.contacts.model.dataitem.DataItem;
+import com.android.contacts.model.dataitem.EmailDataItem;
+import com.android.contacts.model.dataitem.ImDataItem;
+
+/**
+ * Tests for {@link ContactsUtils}.
+ */
+@SmallTest
+public class ContactsUtilsTests extends AndroidTestCase {
+
+    private static final String TEST_ADDRESS = "user@example.org";
+    private static final String TEST_PROTOCOL = "prot%col";
+
+    public void testIsGraphicNull() throws Exception {
+        assertFalse(ContactsUtils.isGraphic(null));
+    }
+
+    public void testIsGraphicEmpty() throws Exception {
+        assertFalse(ContactsUtils.isGraphic(""));
+    }
+
+    public void testIsGraphicSpaces() throws Exception {
+        assertFalse(ContactsUtils.isGraphic("  "));
+    }
+
+    public void testIsGraphicPunctuation() throws Exception {
+        assertTrue(ContactsUtils.isGraphic("."));
+    }
+
+    public void testAreObjectsEqual() throws Exception {
+        assertTrue("null:null", ContactsUtils.areObjectsEqual(null, null));
+        assertTrue("1:1", ContactsUtils.areObjectsEqual(1, 1));
+
+        assertFalse("null:1", ContactsUtils.areObjectsEqual(null, 1));
+        assertFalse("1:null", ContactsUtils.areObjectsEqual(1, null));
+        assertFalse("1:2", ContactsUtils.areObjectsEqual(1, 2));
+    }
+
+    public void testAreIntentActionEqual() throws Exception {
+        assertTrue("1", ContactsUtils.areIntentActionEqual(null, null));
+        assertTrue("1", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent("a")));
+
+        assertFalse("11", ContactsUtils.areIntentActionEqual(new Intent("a"), null));
+        assertFalse("12", ContactsUtils.areIntentActionEqual(null, new Intent("a")));
+
+        assertFalse("21", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent()));
+        assertFalse("22", ContactsUtils.areIntentActionEqual(new Intent(), new Intent("b")));
+        assertFalse("23", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent("b")));
+    }
+
+    public void testImIntentCustom() throws Exception {
+        // Custom IM types have encoded authority. We send the imto Intent here, because
+        // legacy third party apps might not accept xmpp yet
+        final ContentValues values = new ContentValues();
+        values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+        values.put(Im.TYPE, Im.TYPE_HOME);
+        values.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
+        values.put(Im.CUSTOM_PROTOCOL, TEST_PROTOCOL);
+        values.put(Im.DATA, TEST_ADDRESS);
+        final ImDataItem im = (ImDataItem) DataItem.createFrom(values);
+
+        final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
+        final Intent imIntent = intents.first;
+
+        assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
+
+        final Uri data = imIntent.getData();
+        assertEquals("imto", data.getScheme());
+        assertEquals(TEST_PROTOCOL, data.getAuthority());
+        assertEquals(TEST_ADDRESS, data.getPathSegments().get(0));
+
+        assertNull(intents.second);
+    }
+
+    public void testImIntent() throws Exception {
+        // Test GTalk XMPP URI. No chat capabilities provided
+        final ContentValues values = new ContentValues();
+        values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+        values.put(Im.TYPE, Im.TYPE_HOME);
+        values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
+        values.put(Im.DATA, TEST_ADDRESS);
+        final ImDataItem im = (ImDataItem) DataItem.createFrom(values);
+
+        final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
+        final Intent imIntent = intents.first;
+
+        assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
+        assertEquals("xmpp:" + TEST_ADDRESS + "?message", imIntent.getData().toString());
+
+        assertNull(intents.second);
+    }
+
+    public void testImIntentWithAudio() throws Exception {
+        // Test GTalk XMPP URI. Audio chat capabilities provided
+        final ContentValues values = new ContentValues();
+        values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+        values.put(Im.TYPE, Im.TYPE_HOME);
+        values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
+        values.put(Im.DATA, TEST_ADDRESS);
+        values.put(Im.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO);
+        final ImDataItem im = (ImDataItem) DataItem.createFrom(values);
+
+        final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
+        final Intent imIntent = intents.first;
+
+        assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
+        assertEquals("xmpp:" + TEST_ADDRESS + "?message", imIntent.getData().toString());
+
+        final Intent secondaryIntent = intents.second;
+        assertEquals(Intent.ACTION_SENDTO, secondaryIntent.getAction());
+        assertEquals("xmpp:" + TEST_ADDRESS + "?call", secondaryIntent.getData().toString());
+    }
+
+    public void testImIntentWithVideo() throws Exception {
+        // Test GTalk XMPP URI. Video chat capabilities provided
+        final ContentValues values = new ContentValues();
+        values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+        values.put(Im.TYPE, Im.TYPE_HOME);
+        values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
+        values.put(Im.DATA, TEST_ADDRESS);
+        values.put(Im.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO |
+                Im.CAPABILITY_HAS_VOICE);
+        final ImDataItem im = (ImDataItem) DataItem.createFrom(values);
+
+        final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
+        final Intent imIntent = intents.first;
+
+        assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
+        assertEquals("xmpp:" + TEST_ADDRESS + "?message", imIntent.getData().toString());
+
+        final Intent secondaryIntent = intents.second;
+        assertEquals(Intent.ACTION_SENDTO, secondaryIntent.getAction());
+        assertEquals("xmpp:" + TEST_ADDRESS + "?call", secondaryIntent.getData().toString());
+    }
+
+
+    public void testImEmailIntent() throws Exception {
+        // Email addresses are treated as Google Talk entries
+        // This test only tests the VIDEO+CAMERA case. The other cases have been addressed by the
+        // Im tests
+        final ContentValues values = new ContentValues();
+        values.put(Email.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+        values.put(Email.TYPE, Email.TYPE_HOME);
+        values.put(Email.DATA, TEST_ADDRESS);
+        values.put(Email.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO |
+                Im.CAPABILITY_HAS_VOICE);
+        final ImDataItem im = ImDataItem.createFromEmail(
+                (EmailDataItem) DataItem.createFrom(values));
+
+        final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
+        final Intent imIntent = intents.first;
+
+        assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
+        assertEquals("xmpp:" + TEST_ADDRESS + "?message", imIntent.getData().toString());
+
+        final Intent secondaryIntent = intents.second;
+        assertEquals(Intent.ACTION_SENDTO, secondaryIntent.getAction());
+        assertEquals("xmpp:" + TEST_ADDRESS + "?call", secondaryIntent.getData().toString());
+    }
+}
diff --git a/tests/src/com/android/contacts/DynamicShortcutsTests.java b/tests/src/com/android/contacts/DynamicShortcutsTests.java
index 2945663..3074efb 100644
--- a/tests/src/com/android/contacts/DynamicShortcutsTests.java
+++ b/tests/src/com/android/contacts/DynamicShortcutsTests.java
@@ -33,7 +33,7 @@
 import android.test.mock.MockContentResolver;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.contacts.common.test.mocks.MockContentProvider;
+import com.android.contacts.test.mocks.MockContentProvider;
 
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
diff --git a/tests/src/com/android/contacts/GroupsDaoIntegrationTests.java b/tests/src/com/android/contacts/GroupsDaoIntegrationTests.java
index 9b9b4fe..4057ee8 100644
--- a/tests/src/com/android/contacts/GroupsDaoIntegrationTests.java
+++ b/tests/src/com/android/contacts/GroupsDaoIntegrationTests.java
@@ -32,7 +32,7 @@
 import android.test.InstrumentationTestCase;
 import android.test.suitebuilder.annotation.MediumTest;
 
-import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.AccountWithDataSet;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/tests/src/com/android/contacts/MoreContactUtilsTest.java b/tests/src/com/android/contacts/MoreContactUtilsTest.java
new file mode 100644
index 0000000..6c9d541
--- /dev/null
+++ b/tests/src/com/android/contacts/MoreContactUtilsTest.java
@@ -0,0 +1,176 @@
+package com.android.contacts;
+
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for MoreContactsUtils.
+ */
+@SmallTest
+public class MoreContactUtilsTest extends TestCase {
+
+    public void testShouldCollapse() throws Exception {
+        assertCollapses("1", true, null, null, null, null);
+        assertCollapses("2", true, "a", "b", "a", "b");
+
+        assertCollapses("11", false, "a", null, null, null);
+        assertCollapses("12", false, null, "a", null, null);
+        assertCollapses("13", false, null, null, "a", null);
+        assertCollapses("14", false, null, null, null, "a");
+
+        assertCollapses("21", false, "a", "b", null, null);
+        assertCollapses("22", false, "a", "b", "a", null);
+        assertCollapses("23", false, "a", "b", null, "b");
+        assertCollapses("24", false, "a", "b", "a", "x");
+        assertCollapses("25", false, "a", "b", "x", "b");
+
+        assertCollapses("31", false, null, null, "a", "b");
+        assertCollapses("32", false, "a", null, "a", "b");
+        assertCollapses("33", false, null, "b", "a", "b");
+        assertCollapses("34", false, "a", "x", "a", "b");
+        assertCollapses("35", false, "x", "b", "a", "b");
+
+        assertCollapses("41", true, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE, null);
+        assertCollapses("42", true, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "1");
+
+        assertCollapses("51", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "2");
+        assertCollapses("52", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, null);
+        assertCollapses("53", false, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE, "2");
+
+        // Test phone numbers
+        assertCollapses("60", true, Phone.CONTENT_ITEM_TYPE, "1234567", Phone.CONTENT_ITEM_TYPE,
+                "1234567");
+        assertCollapses("61", false, Phone.CONTENT_ITEM_TYPE, "1234567", Phone.CONTENT_ITEM_TYPE,
+                "1234568");
+        assertCollapses("62", true, Phone.CONTENT_ITEM_TYPE, "1234567;0", Phone.CONTENT_ITEM_TYPE,
+                "1234567;0");
+        assertCollapses("63", false, Phone.CONTENT_ITEM_TYPE, "1234567;89321",
+                Phone.CONTENT_ITEM_TYPE, "1234567;89322");
+        assertCollapses("64", true, Phone.CONTENT_ITEM_TYPE, "1234567;89321",
+                Phone.CONTENT_ITEM_TYPE, "1234567;89321");
+        assertCollapses("65", false, Phone.CONTENT_ITEM_TYPE, "1234567;0111111111",
+                Phone.CONTENT_ITEM_TYPE, "1234567;");
+        assertCollapses("66", false, Phone.CONTENT_ITEM_TYPE, "12345675426;91970xxxxx",
+                Phone.CONTENT_ITEM_TYPE, "12345675426");
+        assertCollapses("67", false, Phone.CONTENT_ITEM_TYPE, "12345675426;23456xxxxx",
+                Phone.CONTENT_ITEM_TYPE, "12345675426;234567xxxx");
+        assertCollapses("68", true, Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
+                Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567");
+        assertCollapses("69", false, Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
+                Phone.CONTENT_ITEM_TYPE, "1234567;1234567");
+
+        // test some numbers with country and area code
+        assertCollapses("70", true, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
+                Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678");
+        assertCollapses("71", true, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
+                Phone.CONTENT_ITEM_TYPE, "+49 (89)12345678");
+        assertCollapses("72", true, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234",
+                Phone.CONTENT_ITEM_TYPE, "+49 (8092)1234");
+        assertCollapses("73", false, Phone.CONTENT_ITEM_TYPE, "0049 (8092) 1234",
+                Phone.CONTENT_ITEM_TYPE, "+49/80921234");
+        assertCollapses("74", false, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
+                Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345679");
+
+        // test special handling of collapsing country code for NANP region only
+        // This is non symmetrical, because we prefer the number with the +1.
+        assertEquals("100", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "+1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
+        assertEquals("101", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "+14155551212", Phone.CONTENT_ITEM_TYPE, "4155551212"));
+        assertEquals("102", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "(415) 555-1212", Phone.CONTENT_ITEM_TYPE, "+1 (415) 555-1212"));
+        assertEquals("103", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "4155551212", Phone.CONTENT_ITEM_TYPE, "+14155551212"));
+        // Require explicit +1 country code declaration to collapse
+        assertEquals("104", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "1-415-555-1212", Phone.CONTENT_ITEM_TYPE, "415-555-1212"));
+        assertEquals("105", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "14155551212", Phone.CONTENT_ITEM_TYPE, "4155551212"));
+        assertEquals("106", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "+1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, " 1 (415) 555-1212"));
+        assertEquals("107", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "+14155551212", Phone.CONTENT_ITEM_TYPE, " 14155551212"));
+        assertEquals("108", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, "+1 (415) 555-1212"));
+        assertEquals("109", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "14155551212", Phone.CONTENT_ITEM_TYPE, "+14155551212"));
+
+        // test some numbers with wait symbol and area code
+        assertCollapses("200", true, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89321",
+                Phone.CONTENT_ITEM_TYPE, "+49/80921234;89321");
+        assertCollapses("201", false, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89321",
+                Phone.CONTENT_ITEM_TYPE, "+49/80921235;89321");
+        assertCollapses("202", false, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89322",
+                Phone.CONTENT_ITEM_TYPE, "+49/80921234;89321");
+        assertCollapses("203", true, Phone.CONTENT_ITEM_TYPE, "1234567;+49 (8092) 1234",
+                Phone.CONTENT_ITEM_TYPE, "1234567;+49/80921234");
+
+        assertCollapses("300", true, Phone.CONTENT_ITEM_TYPE, "", Phone.CONTENT_ITEM_TYPE, "");
+
+        assertCollapses("301", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "");
+
+        assertCollapses("302", false, Phone.CONTENT_ITEM_TYPE, "", Phone.CONTENT_ITEM_TYPE, "1");
+
+        assertCollapses("303", true, Phone.CONTENT_ITEM_TYPE, "---", Phone.CONTENT_ITEM_TYPE, "---");
+
+        assertCollapses("304", false, Phone.CONTENT_ITEM_TYPE, "1-/().", Phone.CONTENT_ITEM_TYPE,
+                "--$%1");
+
+        // Test numbers using keypad letters. This is non-symmetrical, because we prefer
+        // the version with letters.
+        assertEquals("400", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "abcdefghijklmnopqrstuvwxyz", Phone.CONTENT_ITEM_TYPE,
+                "22233344455566677778889999"));
+        assertEquals("401", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "22233344455566677778889999", Phone.CONTENT_ITEM_TYPE,
+                "abcdefghijklmnopqrstuvwxyz"));
+
+        assertCollapses("402", false, Phone.CONTENT_ITEM_TYPE, "1;2", Phone.CONTENT_ITEM_TYPE,
+                "12");
+
+        assertCollapses("403", false, Phone.CONTENT_ITEM_TYPE, "1,2", Phone.CONTENT_ITEM_TYPE,
+                "12");
+    }
+
+    public void testShouldCollapse_collapsesSameNumberWithDifferentFormats() {
+        assertEquals("1", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "555-1212", Phone.CONTENT_ITEM_TYPE, "5551212"));
+        assertEquals("1", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "415-555-1212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
+        assertEquals("2", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "4155551212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
+        assertEquals("3", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "1-415-555-1212", Phone.CONTENT_ITEM_TYPE, "1 (415) 555-1212"));
+        assertEquals("4", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
+                "14155551212", Phone.CONTENT_ITEM_TYPE, "1 (415) 555-1212"));
+    }
+
+    private void assertCollapses(String message, boolean expected, CharSequence mimetype1,
+            CharSequence data1, CharSequence mimetype2, CharSequence data2) {
+        assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype1, data1, mimetype2,
+                data2));
+        assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype2, data2, mimetype1,
+                data1));
+
+        // If data1 and data2 are the same instance, make sure the same test passes with different
+        // instances.
+        if (data1 == data2 && data1 != null) {
+            // Create a different instance
+            final CharSequence data2_newref = new StringBuilder(data2).append("").toString();
+
+            if (data1 == data2_newref) {
+                // In some cases no matter what we do the runtime reuses the same instance, so
+                // we can't do the "different instance" test.
+                return;
+            }
+
+            // we have two different instances, now make sure we get the same result as before
+            assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype1, data1,
+                    mimetype2, data2_newref));
+            assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype2, data2_newref,
+                    mimetype1, data1));
+        }
+    }
+}
diff --git a/tests/src/com/android/contacts/NoPermissionsLaunchSmokeTest.java b/tests/src/com/android/contacts/NoPermissionsLaunchSmokeTest.java
index c9ea3b6..be545a9 100644
--- a/tests/src/com/android/contacts/NoPermissionsLaunchSmokeTest.java
+++ b/tests/src/com/android/contacts/NoPermissionsLaunchSmokeTest.java
@@ -1,5 +1,9 @@
 package com.android.contacts;
 
+import static com.android.contacts.util.PermissionsUtil.hasPermission;
+
+import static org.junit.Assume.assumeTrue;
+
 import android.Manifest;
 import android.content.Context;
 import android.content.Intent;
@@ -17,9 +21,6 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import static com.android.contacts.common.util.PermissionsUtil.hasPermission;
-import static org.junit.Assume.assumeTrue;
-
 /**
  * Make sure the app doesn't crash when it is started without permissions. Note: this won't
  * run in most environments because permissions will already have been granted.
diff --git a/tests/src/com/android/contacts/activities/PeopleActivityTest.java b/tests/src/com/android/contacts/activities/PeopleActivityTest.java
index bb463e8..4e57969 100644
--- a/tests/src/com/android/contacts/activities/PeopleActivityTest.java
+++ b/tests/src/com/android/contacts/activities/PeopleActivityTest.java
@@ -18,37 +18,28 @@
 
 import android.content.ContentUris;
 import android.content.ContentValues;
-import android.content.Intent;
-import android.content.Loader;
 import android.net.Uri;
 import android.provider.ContactsContract;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Directory;
 import android.provider.ContactsContract.Groups;
 import android.provider.ContactsContract.ProviderStatus;
-import android.provider.Settings;
 import android.test.ActivityInstrumentationTestCase2;
 import android.test.suitebuilder.annotation.SmallTest;
-import android.widget.TextView;
 
+import com.android.contacts.ContactPhotoManager;
 import com.android.contacts.ContactsApplication;
-import com.android.contacts.R;
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.testing.InjectedServices;
-import com.android.contacts.common.test.mocks.ContactsMockContext;
-import com.android.contacts.common.test.mocks.MockContentProvider;
-import com.android.contacts.common.test.mocks.MockContentProvider.Query;
-import com.android.contacts.interactions.TestLoaderManager;
-import com.android.contacts.list.ContactBrowseListFragment;
-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.model.account.BaseAccountType;
-import com.android.contacts.common.preference.ContactsPreferences;
-import com.android.contacts.common.test.mocks.MockAccountTypeManager;
-import com.android.contacts.common.test.mocks.MockContactPhotoManager;
-import com.android.contacts.common.test.mocks.MockSharedPreferences;
-import com.android.contacts.util.PhoneCapabilityTester;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.BaseAccountType;
+import com.android.contacts.test.mocks.ContactsMockContext;
+import com.android.contacts.test.mocks.MockAccountTypeManager;
+import com.android.contacts.test.mocks.MockContactPhotoManager;
+import com.android.contacts.test.mocks.MockContentProvider;
+import com.android.contacts.test.mocks.MockContentProvider.Query;
+import com.android.contacts.test.mocks.MockSharedPreferences;
+import com.android.contacts.testing.InjectedServices;
 
 /**
  * This test is so outdated that it's disabled temporarily.  TODO Update the test and re-enable it.
diff --git a/tests/src/com/android/contacts/activities/SimImportActivityTest.java b/tests/src/com/android/contacts/activities/SimImportActivityTest.java
new file mode 100644
index 0000000..64b86e2
--- /dev/null
+++ b/tests/src/com/android/contacts/activities/SimImportActivityTest.java
@@ -0,0 +1,349 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.activities;
+
+import static com.android.contacts.tests.ContactsMatchers.DataCursor.hasMimeType;
+import static com.android.contacts.tests.ContactsMatchers.hasRowMatching;
+import static com.android.contacts.tests.ContactsMatchers.hasValueForColumn;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.allOf;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.BroadcastReceiver;
+import android.content.ContentProviderClient;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ActivityInfo;
+import android.database.Cursor;
+import android.os.Build;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Data;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.LargeTest;
+import android.support.test.filters.SdkSuppress;
+import android.support.test.runner.AndroidJUnit4;
+import android.support.test.uiautomator.By;
+import android.support.test.uiautomator.UiDevice;
+import android.support.test.uiautomator.Until;
+import android.support.v4.content.LocalBroadcastManager;
+import android.telephony.TelephonyManager;
+import android.test.mock.MockContentResolver;
+
+import com.android.contacts.SimImportService;
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.database.SimContactDaoImpl;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.test.mocks.ForwardingContentProvider;
+import com.android.contacts.test.mocks.MockContentProvider;
+import com.android.contacts.tests.AccountsTestHelper;
+import com.android.contacts.tests.ContactsMatchers;
+import com.android.contacts.tests.FakeSimContactDao;
+import com.android.contacts.tests.StringableCursor;
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.SettableFuture;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * UI Tests for {@link SimImportActivity}
+ *
+ * These should probably be converted to espresso tests because espresso does a better job of
+ * waiting for the app to be idle once espresso library is added
+ */
+@LargeTest
+@RunWith(AndroidJUnit4.class)
+@SdkSuppress(minSdkVersion = Build.VERSION_CODES.M)
+@TargetApi(Build.VERSION_CODES.M)
+public class SimImportActivityTest {
+
+    public static final int TIMEOUT = 3000;
+    private Context mContext;
+    private UiDevice mDevice;
+    private Instrumentation mInstrumentation;
+    private FakeSimContactDao mDao;
+    private AccountsTestHelper mAccountHelper;
+    private Activity mActivity;
+
+    @Before
+    public void setUp() throws Exception {
+        mContext = InstrumentationRegistry.getTargetContext();
+        mInstrumentation = InstrumentationRegistry.getInstrumentation();
+        mDao = new FakeSimContactDao();
+        SimContactDao.setFactoryForTest(Functions.<SimContactDao>constant(mDao));
+        mDevice = UiDevice.getInstance(mInstrumentation);
+
+        // Add some test accounts so that account picker is exercised
+        mAccountHelper = new AccountsTestHelper();
+        mAccountHelper.addTestAccount(mAccountHelper.generateAccountName("SimImportActivity1_"));
+        mAccountHelper.addTestAccount(mAccountHelper.generateAccountName("SimImportActivity2_"));
+        mAccountHelper.addTestAccount(mAccountHelper.generateAccountName("SimImportActivity3_"));
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        SimContactDao.setFactoryForTest(SimContactDao.DEFAULT_FACTORY);
+        mAccountHelper.cleanup();
+        AccountTypeManager.setInstanceForTest(null);
+        if (mActivity != null) {
+            mActivity.finish();
+            mInstrumentation.waitForIdleSync();
+        }
+    }
+
+    @Test
+    public void shouldDisplaySimContacts() {
+        mDao.addSim(someSimCard(),
+                        new SimContact(1, "Sim One", "5550101"),
+                        new SimContact(2, "Sim Two", null),
+                        new SimContact(3, null, "5550103")
+                );
+        mActivity = mInstrumentation.startActivitySync(new Intent(mContext, SimImportActivity.class)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+        mDevice.waitForIdle();
+
+        assertTrue(mDevice.wait(Until.hasObject(By.text("Sim One")), TIMEOUT));
+
+        assertTrue(mDevice.hasObject(By.text("Sim One")));
+        assertTrue(mDevice.hasObject(By.text("Sim Two")));
+        assertTrue(mDevice.hasObject(By.text("5550103")));
+    }
+
+    @Test
+    public void shouldHaveEmptyState() {
+        mDao.addSim(someSimCard());
+
+        mInstrumentation.startActivitySync(new Intent(mContext, SimImportActivity.class)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+        mDevice.waitForIdle();
+
+        assertTrue(mDevice.wait(Until.hasObject(By.textStartsWith("No contacts")), TIMEOUT));
+    }
+
+    @Test
+    public void smokeRotateInEmptyState() {
+        mDao.addSim(someSimCard());
+
+        mActivity = mInstrumentation.startActivitySync(
+                new Intent(mContext, SimImportActivity.class)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+        assertTrue(mDevice.wait(Until.hasObject(By.textStartsWith("No contacts")), TIMEOUT));
+
+        mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+
+        mDevice.waitForIdle();
+
+        assertTrue(mDevice.wait(Until.hasObject(By.textStartsWith("No contacts")), TIMEOUT));
+    }
+
+    @Test
+    public void smokeRotateInNonEmptyState() throws Exception {
+        mDao.addSim(someSimCard(), new SimContact(1, "Name One", "5550101"),
+                new SimContact(2, "Name Two", "5550102"));
+
+        mActivity = mInstrumentation.startActivitySync(
+                new Intent(mContext, SimImportActivity.class)
+                .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+        assertTrue(mDevice.wait(Until.hasObject(By.textStartsWith("Name One")), TIMEOUT));
+
+        mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+
+        mDevice.waitForIdle();
+
+        assertTrue(mDevice.wait(Until.hasObject(By.textStartsWith("Name One")), TIMEOUT));
+    }
+
+    /**
+     * Tests a complete import flow
+     *
+     * <p>Test case outline:</p>
+     * <ul>
+     * <li>Load SIM contacts
+     * <li>Change to a specific target account
+     * <li>Deselect 3 specific SIM contacts
+     * <li>Rotate the screen to landscape
+     * <li>Rotate the screen back to portrait
+     * <li>Press the import button
+     * <li>Wait for import to complete
+     * <li>Query contacts in target account and verify that they match selected contacts
+     * <li>Start import activity again
+     * <li>Switch to target account
+     * <li>Verify that previously imported contacts are disabled and not checked
+     * </ul>
+     *
+     * <p>This mocks out the IccProvider and stubs the canReadSimContacts method to make it work on
+     * an emulator but otherwise uses real dependency.
+     * </p>
+     */
+    @Test
+    public void selectionsAreImportedAndDisabledOnSubsequentImports() throws Exception {
+        // Clear out the instance so that it will have the most recent accounts when reloaded
+        AccountTypeManager.setInstanceForTest(null);
+
+        final AccountWithDataSet targetAccount = mAccountHelper.addTestAccount(
+                mAccountHelper.generateAccountName("SimImportActivity_target_"));
+
+        final MockContentProvider iccProvider = new MockContentProvider();
+        iccProvider.expect(MockContentProvider.Query.forAnyUri())
+                .withDefaultProjection(new String[] {SimContactDaoImpl._ID, SimContactDaoImpl.NAME,
+                        SimContactDaoImpl.NUMBER, SimContactDaoImpl.EMAILS })
+                .anyNumberOfTimes()
+                .returnRow(toCursorRow(new SimContact(1, "Import One", "5550101")))
+                .returnRow(toCursorRow(new SimContact(2, "Skip Two", "5550102")))
+                .returnRow(toCursorRow(new SimContact(3, "Import Three", "5550103")))
+                .returnRow(toCursorRow(new SimContact(4, "Skip Four", "5550104")))
+                .returnRow(toCursorRow(new SimContact(5, "Skip Five", "5550105")))
+                .returnRow(toCursorRow(new SimContact(6, "Import Six", "5550106")));
+        final MockContentResolver mockResolver = new MockContentResolver();
+        mockResolver.addProvider("icc", iccProvider);
+        final ContentProviderClient contactsProviderClient = mContext.getContentResolver()
+                .acquireContentProviderClient(ContactsContract.AUTHORITY);
+        mockResolver.addProvider(ContactsContract.AUTHORITY, new ForwardingContentProvider(
+                contactsProviderClient));
+
+        SimContactDao.setFactoryForTest(new Function<Context, SimContactDao>() {
+            @Override
+            public SimContactDao apply(Context input) {
+                final SimContactDaoImpl spy = spy(new SimContactDaoImpl(
+                        mContext, mockResolver,
+                        (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE)));
+                when(spy.canReadSimContacts()).thenReturn(true);
+                return spy;
+            }
+        });
+
+        mActivity = mInstrumentation.startActivitySync(
+                new Intent(mContext, SimImportActivity.class)
+                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+        assertTrue(mDevice.wait(Until.hasObject(By.desc("Show more")), TIMEOUT));
+
+        mDevice.findObject(By.desc("Show more")).clickAndWait(Until.newWindow(), TIMEOUT);
+        mDevice.findObject(By.textStartsWith("SimImportActivity_target_")).click();
+
+        assertTrue(mDevice.wait(Until.hasObject(By.text("Skip Two")), TIMEOUT));
+
+        mDevice.findObject(By.text("Skip Two")).click();
+        mDevice.findObject(By.text("Skip Four")).click();
+        mDevice.findObject(By.text("Skip Five")).click();
+        mDevice.waitForIdle();
+
+        assertTrue(mDevice.hasObject(By.text("Skip Two").checked(false)));
+        assertTrue(mDevice.hasObject(By.text("Skip Five").checked(false)));
+
+        mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
+        mDevice.wait(Until.hasObject(By.text("Import One")), TIMEOUT);
+        mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);
+        mDevice.wait(Until.hasObject(By.text("Import One")), TIMEOUT);
+
+        ListenableFuture<?> nextImportFuture = nextImportCompleteBroadcast();
+
+        mDevice.findObject(By.text("IMPORT").clickable(true)).click();
+
+        // Block until import completes
+        nextImportFuture.get(TIMEOUT, TimeUnit.MILLISECONDS);
+
+        final Cursor cursor = new StringableCursor(
+                mContext.getContentResolver().query(Data.CONTENT_URI, null,
+                        ContactsContract.RawContacts.ACCOUNT_NAME + "=? AND " +
+                                ContactsContract.RawContacts.ACCOUNT_TYPE+ "=?",
+                        new String[] {
+                                targetAccount.name,
+                                targetAccount.type
+                        }, null));
+        // 3 contacts imported with one row for name and one for phone
+        assertThat(cursor, ContactsMatchers.hasCount(3 * 2));
+
+        assertThat(cursor, hasRowMatching(allOf(
+                hasMimeType(Phone.CONTENT_ITEM_TYPE),
+                hasValueForColumn(Phone.DISPLAY_NAME, "Import One"),
+                hasValueForColumn(Phone.NUMBER, "5550101")
+        )));
+        assertThat(cursor, hasRowMatching(allOf(
+                hasMimeType(Phone.CONTENT_ITEM_TYPE),
+                hasValueForColumn(Phone.DISPLAY_NAME, "Import Three"),
+                hasValueForColumn(Phone.NUMBER, "5550103")
+        )));
+        assertThat(cursor, hasRowMatching(allOf(
+                hasMimeType(Phone.CONTENT_ITEM_TYPE),
+                hasValueForColumn(Phone.DISPLAY_NAME, "Import Six"),
+                hasValueForColumn(Phone.NUMBER, "5550106")
+        )));
+
+        cursor.close();
+
+
+        mActivity = mInstrumentation.startActivitySync(
+                new Intent(mContext, SimImportActivity.class)
+                        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
+
+        assertTrue(mDevice.wait(Until.hasObject(By.text("Import One")), TIMEOUT));
+
+        mDevice.findObject(By.descStartsWith("Show more")).clickAndWait(Until.newWindow(), TIMEOUT);
+        mDevice.findObject(By.textContains(targetAccount.name)).click();
+        mDevice.waitForIdle();
+
+        assertTrue(mDevice.wait(Until.hasObject(By.text("Import One").checked(false).enabled(false)), TIMEOUT));
+        assertTrue(mDevice.hasObject(By.text("Import Three").checked(false).enabled(false)));
+        assertTrue(mDevice.hasObject(By.text("Import Six").checked(false).enabled(false)));
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            contactsProviderClient.close();
+        }
+    }
+
+    private ListenableFuture<Intent> nextImportCompleteBroadcast() {
+        final SettableFuture<Intent> result = SettableFuture.create();
+        final BroadcastReceiver receiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                result.set(intent);
+                LocalBroadcastManager.getInstance(mContext).unregisterReceiver(this);
+            }
+        };
+        LocalBroadcastManager.getInstance(mContext).registerReceiver(receiver, new IntentFilter(
+                SimImportService.BROADCAST_SIM_IMPORT_COMPLETE));
+        return result;
+    }
+
+    private Object[] toCursorRow(SimContact contact) {
+        return new Object[] { contact.getId(), contact.getName(), contact.getPhone(), null };
+    }
+
+    private SimCard someSimCard() {
+        return new SimCard("id", 1, "Carrier", "SIM", "18005550101", "us");
+    }
+}
diff --git a/tests/src/com/android/contacts/common/ContactsUtilsTests.java b/tests/src/com/android/contacts/common/ContactsUtilsTests.java
deleted file mode 100644
index a209fb2..0000000
--- a/tests/src/com/android/contacts/common/ContactsUtilsTests.java
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common;
-
-import android.content.ContentValues;
-import android.content.Intent;
-import android.net.Uri;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.util.Pair;
-
-import com.android.contacts.common.ContactsUtils;
-import com.android.contacts.common.model.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.EmailDataItem;
-import com.android.contacts.common.model.dataitem.ImDataItem;
-
-/**
- * Tests for {@link ContactsUtils}.
- */
-@SmallTest
-public class ContactsUtilsTests extends AndroidTestCase {
-
-    private static final String TEST_ADDRESS = "user@example.org";
-    private static final String TEST_PROTOCOL = "prot%col";
-
-    public void testIsGraphicNull() throws Exception {
-        assertFalse(ContactsUtils.isGraphic(null));
-    }
-
-    public void testIsGraphicEmpty() throws Exception {
-        assertFalse(ContactsUtils.isGraphic(""));
-    }
-
-    public void testIsGraphicSpaces() throws Exception {
-        assertFalse(ContactsUtils.isGraphic("  "));
-    }
-
-    public void testIsGraphicPunctuation() throws Exception {
-        assertTrue(ContactsUtils.isGraphic("."));
-    }
-
-    public void testAreObjectsEqual() throws Exception {
-        assertTrue("null:null", ContactsUtils.areObjectsEqual(null, null));
-        assertTrue("1:1", ContactsUtils.areObjectsEqual(1, 1));
-
-        assertFalse("null:1", ContactsUtils.areObjectsEqual(null, 1));
-        assertFalse("1:null", ContactsUtils.areObjectsEqual(1, null));
-        assertFalse("1:2", ContactsUtils.areObjectsEqual(1, 2));
-    }
-
-    public void testAreIntentActionEqual() throws Exception {
-        assertTrue("1", ContactsUtils.areIntentActionEqual(null, null));
-        assertTrue("1", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent("a")));
-
-        assertFalse("11", ContactsUtils.areIntentActionEqual(new Intent("a"), null));
-        assertFalse("12", ContactsUtils.areIntentActionEqual(null, new Intent("a")));
-
-        assertFalse("21", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent()));
-        assertFalse("22", ContactsUtils.areIntentActionEqual(new Intent(), new Intent("b")));
-        assertFalse("23", ContactsUtils.areIntentActionEqual(new Intent("a"), new Intent("b")));
-    }
-
-    public void testImIntentCustom() throws Exception {
-        // Custom IM types have encoded authority. We send the imto Intent here, because
-        // legacy third party apps might not accept xmpp yet
-        final ContentValues values = new ContentValues();
-        values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-        values.put(Im.TYPE, Im.TYPE_HOME);
-        values.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
-        values.put(Im.CUSTOM_PROTOCOL, TEST_PROTOCOL);
-        values.put(Im.DATA, TEST_ADDRESS);
-        final ImDataItem im = (ImDataItem) DataItem.createFrom(values);
-
-        final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
-        final Intent imIntent = intents.first;
-
-        assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
-
-        final Uri data = imIntent.getData();
-        assertEquals("imto", data.getScheme());
-        assertEquals(TEST_PROTOCOL, data.getAuthority());
-        assertEquals(TEST_ADDRESS, data.getPathSegments().get(0));
-
-        assertNull(intents.second);
-    }
-
-    public void testImIntent() throws Exception {
-        // Test GTalk XMPP URI. No chat capabilities provided
-        final ContentValues values = new ContentValues();
-        values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-        values.put(Im.TYPE, Im.TYPE_HOME);
-        values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
-        values.put(Im.DATA, TEST_ADDRESS);
-        final ImDataItem im = (ImDataItem) DataItem.createFrom(values);
-
-        final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
-        final Intent imIntent = intents.first;
-
-        assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
-        assertEquals("xmpp:" + TEST_ADDRESS + "?message", imIntent.getData().toString());
-
-        assertNull(intents.second);
-    }
-
-    public void testImIntentWithAudio() throws Exception {
-        // Test GTalk XMPP URI. Audio chat capabilities provided
-        final ContentValues values = new ContentValues();
-        values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-        values.put(Im.TYPE, Im.TYPE_HOME);
-        values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
-        values.put(Im.DATA, TEST_ADDRESS);
-        values.put(Im.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO);
-        final ImDataItem im = (ImDataItem) DataItem.createFrom(values);
-
-        final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
-        final Intent imIntent = intents.first;
-
-        assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
-        assertEquals("xmpp:" + TEST_ADDRESS + "?message", imIntent.getData().toString());
-
-        final Intent secondaryIntent = intents.second;
-        assertEquals(Intent.ACTION_SENDTO, secondaryIntent.getAction());
-        assertEquals("xmpp:" + TEST_ADDRESS + "?call", secondaryIntent.getData().toString());
-    }
-
-    public void testImIntentWithVideo() throws Exception {
-        // Test GTalk XMPP URI. Video chat capabilities provided
-        final ContentValues values = new ContentValues();
-        values.put(Im.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-        values.put(Im.TYPE, Im.TYPE_HOME);
-        values.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
-        values.put(Im.DATA, TEST_ADDRESS);
-        values.put(Im.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO |
-                Im.CAPABILITY_HAS_VOICE);
-        final ImDataItem im = (ImDataItem) DataItem.createFrom(values);
-
-        final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
-        final Intent imIntent = intents.first;
-
-        assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
-        assertEquals("xmpp:" + TEST_ADDRESS + "?message", imIntent.getData().toString());
-
-        final Intent secondaryIntent = intents.second;
-        assertEquals(Intent.ACTION_SENDTO, secondaryIntent.getAction());
-        assertEquals("xmpp:" + TEST_ADDRESS + "?call", secondaryIntent.getData().toString());
-    }
-
-
-    public void testImEmailIntent() throws Exception {
-        // Email addresses are treated as Google Talk entries
-        // This test only tests the VIDEO+CAMERA case. The other cases have been addressed by the
-        // Im tests
-        final ContentValues values = new ContentValues();
-        values.put(Email.MIMETYPE, Email.CONTENT_ITEM_TYPE);
-        values.put(Email.TYPE, Email.TYPE_HOME);
-        values.put(Email.DATA, TEST_ADDRESS);
-        values.put(Email.CHAT_CAPABILITY, Im.CAPABILITY_HAS_VOICE | Im.CAPABILITY_HAS_VIDEO |
-                Im.CAPABILITY_HAS_VOICE);
-        final ImDataItem im = ImDataItem.createFromEmail(
-                (EmailDataItem) DataItem.createFrom(values));
-
-        final Pair<Intent, Intent> intents = ContactsUtils.buildImIntent(getContext(), im);
-        final Intent imIntent = intents.first;
-
-        assertEquals(Intent.ACTION_SENDTO, imIntent.getAction());
-        assertEquals("xmpp:" + TEST_ADDRESS + "?message", imIntent.getData().toString());
-
-        final Intent secondaryIntent = intents.second;
-        assertEquals(Intent.ACTION_SENDTO, secondaryIntent.getAction());
-        assertEquals("xmpp:" + TEST_ADDRESS + "?call", secondaryIntent.getData().toString());
-    }
-}
diff --git a/tests/src/com/android/contacts/common/MoreContactUtilsTest.java b/tests/src/com/android/contacts/common/MoreContactUtilsTest.java
deleted file mode 100644
index 8d74455..0000000
--- a/tests/src/com/android/contacts/common/MoreContactUtilsTest.java
+++ /dev/null
@@ -1,176 +0,0 @@
-package com.android.contacts.common;
-
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import junit.framework.TestCase;
-
-/**
- * Tests for MoreContactsUtils.
- */
-@SmallTest
-public class MoreContactUtilsTest extends TestCase {
-
-    public void testShouldCollapse() throws Exception {
-        assertCollapses("1", true, null, null, null, null);
-        assertCollapses("2", true, "a", "b", "a", "b");
-
-        assertCollapses("11", false, "a", null, null, null);
-        assertCollapses("12", false, null, "a", null, null);
-        assertCollapses("13", false, null, null, "a", null);
-        assertCollapses("14", false, null, null, null, "a");
-
-        assertCollapses("21", false, "a", "b", null, null);
-        assertCollapses("22", false, "a", "b", "a", null);
-        assertCollapses("23", false, "a", "b", null, "b");
-        assertCollapses("24", false, "a", "b", "a", "x");
-        assertCollapses("25", false, "a", "b", "x", "b");
-
-        assertCollapses("31", false, null, null, "a", "b");
-        assertCollapses("32", false, "a", null, "a", "b");
-        assertCollapses("33", false, null, "b", "a", "b");
-        assertCollapses("34", false, "a", "x", "a", "b");
-        assertCollapses("35", false, "x", "b", "a", "b");
-
-        assertCollapses("41", true, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE, null);
-        assertCollapses("42", true, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "1");
-
-        assertCollapses("51", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "2");
-        assertCollapses("52", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, null);
-        assertCollapses("53", false, Phone.CONTENT_ITEM_TYPE, null, Phone.CONTENT_ITEM_TYPE, "2");
-
-        // Test phone numbers
-        assertCollapses("60", true, Phone.CONTENT_ITEM_TYPE, "1234567", Phone.CONTENT_ITEM_TYPE,
-                "1234567");
-        assertCollapses("61", false, Phone.CONTENT_ITEM_TYPE, "1234567", Phone.CONTENT_ITEM_TYPE,
-                "1234568");
-        assertCollapses("62", true, Phone.CONTENT_ITEM_TYPE, "1234567;0", Phone.CONTENT_ITEM_TYPE,
-                "1234567;0");
-        assertCollapses("63", false, Phone.CONTENT_ITEM_TYPE, "1234567;89321",
-                Phone.CONTENT_ITEM_TYPE, "1234567;89322");
-        assertCollapses("64", true, Phone.CONTENT_ITEM_TYPE, "1234567;89321",
-                Phone.CONTENT_ITEM_TYPE, "1234567;89321");
-        assertCollapses("65", false, Phone.CONTENT_ITEM_TYPE, "1234567;0111111111",
-                Phone.CONTENT_ITEM_TYPE, "1234567;");
-        assertCollapses("66", false, Phone.CONTENT_ITEM_TYPE, "12345675426;91970xxxxx",
-                Phone.CONTENT_ITEM_TYPE, "12345675426");
-        assertCollapses("67", false, Phone.CONTENT_ITEM_TYPE, "12345675426;23456xxxxx",
-                Phone.CONTENT_ITEM_TYPE, "12345675426;234567xxxx");
-        assertCollapses("68", true, Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
-                Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567");
-        assertCollapses("69", false, Phone.CONTENT_ITEM_TYPE, "1234567;1234567;1234567",
-                Phone.CONTENT_ITEM_TYPE, "1234567;1234567");
-
-        // test some numbers with country and area code
-        assertCollapses("70", true, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
-                Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678");
-        assertCollapses("71", true, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
-                Phone.CONTENT_ITEM_TYPE, "+49 (89)12345678");
-        assertCollapses("72", true, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234",
-                Phone.CONTENT_ITEM_TYPE, "+49 (8092)1234");
-        assertCollapses("73", false, Phone.CONTENT_ITEM_TYPE, "0049 (8092) 1234",
-                Phone.CONTENT_ITEM_TYPE, "+49/80921234");
-        assertCollapses("74", false, Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345678",
-                Phone.CONTENT_ITEM_TYPE, "+49 (89) 12345679");
-
-        // test special handling of collapsing country code for NANP region only
-        // This is non symmetrical, because we prefer the number with the +1.
-        assertEquals("100", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "+1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
-        assertEquals("101", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "+14155551212", Phone.CONTENT_ITEM_TYPE, "4155551212"));
-        assertEquals("102", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "(415) 555-1212", Phone.CONTENT_ITEM_TYPE, "+1 (415) 555-1212"));
-        assertEquals("103", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "4155551212", Phone.CONTENT_ITEM_TYPE, "+14155551212"));
-        // Require explicit +1 country code declaration to collapse
-        assertEquals("104", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "1-415-555-1212", Phone.CONTENT_ITEM_TYPE, "415-555-1212"));
-        assertEquals("105", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "14155551212", Phone.CONTENT_ITEM_TYPE, "4155551212"));
-        assertEquals("106", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "+1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, " 1 (415) 555-1212"));
-        assertEquals("107", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "+14155551212", Phone.CONTENT_ITEM_TYPE, " 14155551212"));
-        assertEquals("108", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "1 (415) 555-1212", Phone.CONTENT_ITEM_TYPE, "+1 (415) 555-1212"));
-        assertEquals("109", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "14155551212", Phone.CONTENT_ITEM_TYPE, "+14155551212"));
-
-        // test some numbers with wait symbol and area code
-        assertCollapses("200", true, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89321",
-                Phone.CONTENT_ITEM_TYPE, "+49/80921234;89321");
-        assertCollapses("201", false, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89321",
-                Phone.CONTENT_ITEM_TYPE, "+49/80921235;89321");
-        assertCollapses("202", false, Phone.CONTENT_ITEM_TYPE, "+49 (8092) 1234;89322",
-                Phone.CONTENT_ITEM_TYPE, "+49/80921234;89321");
-        assertCollapses("203", true, Phone.CONTENT_ITEM_TYPE, "1234567;+49 (8092) 1234",
-                Phone.CONTENT_ITEM_TYPE, "1234567;+49/80921234");
-
-        assertCollapses("300", true, Phone.CONTENT_ITEM_TYPE, "", Phone.CONTENT_ITEM_TYPE, "");
-
-        assertCollapses("301", false, Phone.CONTENT_ITEM_TYPE, "1", Phone.CONTENT_ITEM_TYPE, "");
-
-        assertCollapses("302", false, Phone.CONTENT_ITEM_TYPE, "", Phone.CONTENT_ITEM_TYPE, "1");
-
-        assertCollapses("303", true, Phone.CONTENT_ITEM_TYPE, "---", Phone.CONTENT_ITEM_TYPE, "---");
-
-        assertCollapses("304", false, Phone.CONTENT_ITEM_TYPE, "1-/().", Phone.CONTENT_ITEM_TYPE,
-                "--$%1");
-
-        // Test numbers using keypad letters. This is non-symmetrical, because we prefer
-        // the version with letters.
-        assertEquals("400", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "abcdefghijklmnopqrstuvwxyz", Phone.CONTENT_ITEM_TYPE,
-                "22233344455566677778889999"));
-        assertEquals("401", false, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "22233344455566677778889999", Phone.CONTENT_ITEM_TYPE,
-                "abcdefghijklmnopqrstuvwxyz"));
-
-        assertCollapses("402", false, Phone.CONTENT_ITEM_TYPE, "1;2", Phone.CONTENT_ITEM_TYPE,
-                "12");
-
-        assertCollapses("403", false, Phone.CONTENT_ITEM_TYPE, "1,2", Phone.CONTENT_ITEM_TYPE,
-                "12");
-    }
-
-    public void testShouldCollapse_collapsesSameNumberWithDifferentFormats() {
-        assertEquals("1", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "555-1212", Phone.CONTENT_ITEM_TYPE, "5551212"));
-        assertEquals("1", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "415-555-1212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
-        assertEquals("2", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "4155551212", Phone.CONTENT_ITEM_TYPE, "(415) 555-1212"));
-        assertEquals("3", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "1-415-555-1212", Phone.CONTENT_ITEM_TYPE, "1 (415) 555-1212"));
-        assertEquals("4", true, MoreContactUtils.shouldCollapse(Phone.CONTENT_ITEM_TYPE,
-                "14155551212", Phone.CONTENT_ITEM_TYPE, "1 (415) 555-1212"));
-    }
-
-    private void assertCollapses(String message, boolean expected, CharSequence mimetype1,
-            CharSequence data1, CharSequence mimetype2, CharSequence data2) {
-        assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype1, data1, mimetype2,
-                data2));
-        assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype2, data2, mimetype1,
-                data1));
-
-        // If data1 and data2 are the same instance, make sure the same test passes with different
-        // instances.
-        if (data1 == data2 && data1 != null) {
-            // Create a different instance
-            final CharSequence data2_newref = new StringBuilder(data2).append("").toString();
-
-            if (data1 == data2_newref) {
-                // In some cases no matter what we do the runtime reuses the same instance, so
-                // we can't do the "different instance" test.
-                return;
-            }
-
-            // we have two different instances, now make sure we get the same result as before
-            assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype1, data1,
-                    mimetype2, data2_newref));
-            assertEquals(message, expected, MoreContactUtils.shouldCollapse(mimetype2, data2_newref,
-                    mimetype1, data1));
-        }
-    }
-}
diff --git a/tests/src/com/android/contacts/common/RawContactDeltaListTests.java b/tests/src/com/android/contacts/common/RawContactDeltaListTests.java
deleted file mode 100644
index 77acb98..0000000
--- a/tests/src/com/android/contacts/common/RawContactDeltaListTests.java
+++ /dev/null
@@ -1,608 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common;
-
-import android.content.ContentProviderOperation;
-import android.content.ContentValues;
-import android.content.Context;
-import android.net.Uri;
-import android.provider.BaseColumns;
-import android.provider.ContactsContract.AggregationExceptions;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.RawContacts;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-import com.android.contacts.common.RawContactModifierTests.MockContactsSource;
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.model.CPOWrapper;
-import com.android.contacts.common.model.RawContact;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.account.AccountType;
-import com.google.common.collect.Lists;
-
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Collections;
-
-/**
- * Tests for {@link RawContactDeltaList} which focus on "diff" operations that should
- * create {@link AggregationExceptions} in certain cases.
- */
-@LargeTest
-public class RawContactDeltaListTests extends AndroidTestCase {
-    public static final String TAG = RawContactDeltaListTests.class.getSimpleName();
-
-    // From android.content.ContentProviderOperation
-    public static final int TYPE_INSERT = 1;
-    public static final int TYPE_UPDATE = 2;
-    public static final int TYPE_DELETE = 3;
-    public static final int TYPE_ASSERT = 4;
-
-    private static final long CONTACT_FIRST = 1;
-    private static final long CONTACT_SECOND = 2;
-
-    public static final long CONTACT_BOB = 10;
-    public static final long CONTACT_MARY = 11;
-
-    public static final long PHONE_RED = 20;
-    public static final long PHONE_GREEN = 21;
-    public static final long PHONE_BLUE = 22;
-
-    public static final long EMAIL_YELLOW = 25;
-
-    public static final long VER_FIRST = 100;
-    public static final long VER_SECOND = 200;
-
-    public static final String TEST_PHONE = "555-1212";
-    public static final String TEST_ACCOUNT = "org.example.test";
-
-    public RawContactDeltaListTests() {
-        super();
-    }
-
-    @Override
-    public void setUp() {
-        mContext = getContext();
-    }
-
-    /**
-     * Build a {@link AccountType} that has various odd constraints for
-     * testing purposes.
-     */
-    protected AccountType getAccountType() {
-        return new MockContactsSource();
-    }
-
-    static ContentValues getValues(ContentProviderOperation operation)
-            throws NoSuchFieldException, IllegalAccessException {
-        final Field field = ContentProviderOperation.class.getDeclaredField("mValues");
-        field.setAccessible(true);
-        return (ContentValues) field.get(operation);
-    }
-
-    static RawContactDelta getUpdate(Context context, long rawContactId) {
-        final RawContact before = RawContactDeltaTests.getRawContact(context, rawContactId,
-                RawContactDeltaTests.TEST_PHONE_ID);
-        return RawContactDelta.fromBefore(before);
-    }
-
-    static RawContactDelta getInsert() {
-        final ContentValues after = new ContentValues();
-        after.put(RawContacts.ACCOUNT_NAME, RawContactDeltaTests.TEST_ACCOUNT_NAME);
-        after.put(RawContacts.SEND_TO_VOICEMAIL, 1);
-
-        final ValuesDelta values = ValuesDelta.fromAfter(after);
-        return new RawContactDelta(values);
-    }
-
-    static RawContactDeltaList buildSet(RawContactDelta... deltas) {
-        final RawContactDeltaList set = new RawContactDeltaList();
-        Collections.addAll(set, deltas);
-        return set;
-    }
-
-    static RawContactDelta buildBeforeEntity(Context context, long rawContactId, long version,
-            ContentValues... entries) {
-        // Build an existing contact read from database
-        final ContentValues contact = new ContentValues();
-        contact.put(RawContacts.VERSION, version);
-        contact.put(RawContacts._ID, rawContactId);
-        final RawContact before = new RawContact(contact);
-        for (ContentValues entry : entries) {
-            before.addDataItemValues(entry);
-        }
-        return RawContactDelta.fromBefore(before);
-    }
-
-    static RawContactDelta buildAfterEntity(ContentValues... entries) {
-        // Build an existing contact read from database
-        final ContentValues contact = new ContentValues();
-        contact.put(RawContacts.ACCOUNT_TYPE, TEST_ACCOUNT);
-        final RawContactDelta after = new RawContactDelta(ValuesDelta.fromAfter(contact));
-        for (ContentValues entry : entries) {
-            after.addEntry(ValuesDelta.fromAfter(entry));
-        }
-        return after;
-    }
-
-    static ContentValues buildPhone(long phoneId) {
-        return buildPhone(phoneId, Long.toString(phoneId));
-    }
-
-    static ContentValues buildPhone(long phoneId, String value) {
-        final ContentValues values = new ContentValues();
-        values.put(Data._ID, phoneId);
-        values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        values.put(Phone.NUMBER, value);
-        values.put(Phone.TYPE, Phone.TYPE_HOME);
-        return values;
-    }
-
-    static ContentValues buildEmail(long emailId) {
-        final ContentValues values = new ContentValues();
-        values.put(Data._ID, emailId);
-        values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
-        values.put(Email.DATA, Long.toString(emailId));
-        values.put(Email.TYPE, Email.TYPE_HOME);
-        return values;
-    }
-
-    static void insertPhone(RawContactDeltaList set, long rawContactId, ContentValues values) {
-        final RawContactDelta match = set.getByRawContactId(rawContactId);
-        match.addEntry(ValuesDelta.fromAfter(values));
-    }
-
-    static ValuesDelta getPhone(RawContactDeltaList set, long rawContactId, long dataId) {
-        final RawContactDelta match = set.getByRawContactId(rawContactId);
-        return match.getEntry(dataId);
-    }
-
-    static void assertDiffPattern(RawContactDelta delta, CPOWrapper... pattern) {
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        delta.buildAssertWrapper(diff);
-        delta.buildDiffWrapper(diff);
-        assertDiffPattern(diff, pattern);
-    }
-
-    static void assertDiffPattern(RawContactDeltaList set, CPOWrapper... pattern) {
-        assertDiffPattern(set.buildDiffWrapper(), pattern);
-    }
-
-    static void assertDiffPattern(ArrayList<CPOWrapper> diff, CPOWrapper... pattern) {
-        assertEquals("Unexpected operations", pattern.length, diff.size());
-        for (int i = 0; i < pattern.length; i++) {
-            final CPOWrapper expected = pattern[i];
-            final CPOWrapper found = diff.get(i);
-
-            assertEquals("Unexpected uri",
-                    expected.getOperation().getUri(), found.getOperation().getUri());
-
-            final String expectedType = getTypeString(expected);
-            final String foundType = getTypeString(found);
-            assertEquals("Unexpected type", expectedType, foundType);
-
-            if (CompatUtils.isDeleteCompat(expected)) continue;
-
-            try {
-                final ContentValues expectedValues = getValues(expected.getOperation());
-                final ContentValues foundValues = getValues(found.getOperation());
-
-                expectedValues.remove(BaseColumns._ID);
-                foundValues.remove(BaseColumns._ID);
-
-                assertEquals("Unexpected values", expectedValues, foundValues);
-            } catch (NoSuchFieldException e) {
-                fail(e.toString());
-            } catch (IllegalAccessException e) {
-                fail(e.toString());
-            }
-        }
-    }
-
-    static String getTypeString(CPOWrapper cpoWrapper) {
-        if (CompatUtils.isAssertQueryCompat(cpoWrapper)) {
-            return "TYPE_ASSERT";
-        } else if (CompatUtils.isInsertCompat(cpoWrapper)) {
-            return "TYPE_INSERT";
-        } else if (CompatUtils.isUpdateCompat(cpoWrapper)) {
-            return "TYPE_UPDATE";
-        } else if (CompatUtils.isDeleteCompat(cpoWrapper)) {
-            return "TYPE_DELETE";
-        }
-        return "TYPE_UNKNOWN";
-    }
-
-    static CPOWrapper buildAssertVersion(long version) {
-        final ContentValues values = new ContentValues();
-        values.put(RawContacts.VERSION, version);
-        return buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_ASSERT, values);
-    }
-
-    static CPOWrapper buildAggregationModeUpdate(int mode) {
-        final ContentValues values = new ContentValues();
-        values.put(RawContacts.AGGREGATION_MODE, mode);
-        return buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_UPDATE, values);
-    }
-
-    static CPOWrapper buildUpdateAggregationSuspended() {
-        return buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_SUSPENDED);
-    }
-
-    static CPOWrapper buildUpdateAggregationDefault() {
-        return buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT);
-    }
-
-    static CPOWrapper buildUpdateAggregationKeepTogether(long rawContactId) {
-        final ContentValues values = new ContentValues();
-        values.put(AggregationExceptions.RAW_CONTACT_ID1, rawContactId);
-        values.put(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_TOGETHER);
-        return buildCPOWrapper(AggregationExceptions.CONTENT_URI, TYPE_UPDATE, values);
-    }
-
-    static ContentValues buildDataInsert(ValuesDelta values, long rawContactId) {
-        final ContentValues insertValues = values.getCompleteValues();
-        insertValues.put(Data.RAW_CONTACT_ID, rawContactId);
-        return insertValues;
-    }
-
-    static CPOWrapper buildDelete(Uri uri) {
-        return buildCPOWrapper(uri, TYPE_DELETE, (ContentValues) null);
-    }
-
-    static ContentProviderOperation buildOper(Uri uri, int type, ValuesDelta values) {
-        return buildOper(uri, type, values.getCompleteValues());
-    }
-
-    static ContentProviderOperation buildOper(Uri uri, int type, ContentValues values) {
-        switch (type) {
-            case TYPE_ASSERT:
-                return ContentProviderOperation.newAssertQuery(uri).withValues(values).build();
-            case TYPE_INSERT:
-                return ContentProviderOperation.newInsert(uri).withValues(values).build();
-            case TYPE_UPDATE:
-                return ContentProviderOperation.newUpdate(uri).withValues(values).build();
-            case TYPE_DELETE:
-                return ContentProviderOperation.newDelete(uri).build();
-        }
-        return null;
-    }
-
-    static CPOWrapper buildCPOWrapper(Uri uri, int type, ContentValues values) {
-        if (type == TYPE_ASSERT || type == TYPE_INSERT || type == TYPE_UPDATE
-                || type == TYPE_DELETE) {
-            return new CPOWrapper(buildOper(uri, type, values), type);
-        }
-        return null;
-    }
-
-    static Long getVersion(RawContactDeltaList set, Long rawContactId) {
-        return set.getByRawContactId(rawContactId).getValues().getAsLong(RawContacts.VERSION);
-    }
-
-    /**
-     * Count number of {@link AggregationExceptions} updates contained in the
-     * given list of {@link CPOWrapper}.
-     */
-    static int countExceptionUpdates(ArrayList<CPOWrapper> diff) {
-        int updateCount = 0;
-        for (CPOWrapper cpoWrapper : diff) {
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            if (AggregationExceptions.CONTENT_URI.equals(oper.getUri())
-                    && CompatUtils.isUpdateCompat(cpoWrapper)) {
-                updateCount++;
-            }
-        }
-        return updateCount;
-    }
-
-    public void testInsert() {
-        final RawContactDelta insert = getInsert();
-        final RawContactDeltaList set = buildSet(insert);
-
-        // Inserting single shouldn't create rules
-        final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
-        final int exceptionCount = countExceptionUpdates(diff);
-        assertEquals("Unexpected exception updates", 0, exceptionCount);
-    }
-
-    public void testUpdateUpdate() {
-        final RawContactDelta updateFirst = getUpdate(mContext, CONTACT_FIRST);
-        final RawContactDelta updateSecond = getUpdate(mContext, CONTACT_SECOND);
-        final RawContactDeltaList set = buildSet(updateFirst, updateSecond);
-
-        // Updating two existing shouldn't create rules
-        final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
-        final int exceptionCount = countExceptionUpdates(diff);
-        assertEquals("Unexpected exception updates", 0, exceptionCount);
-    }
-
-    public void testUpdateInsert() {
-        final RawContactDelta update = getUpdate(mContext, CONTACT_FIRST);
-        final RawContactDelta insert = getInsert();
-        final RawContactDeltaList set = buildSet(update, insert);
-
-        // New insert should only create one rule
-        final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
-        final int exceptionCount = countExceptionUpdates(diff);
-        assertEquals("Unexpected exception updates", 1, exceptionCount);
-    }
-
-    public void testInsertUpdateInsert() {
-        final RawContactDelta insertFirst = getInsert();
-        final RawContactDelta update = getUpdate(mContext, CONTACT_FIRST);
-        final RawContactDelta insertSecond = getInsert();
-        final RawContactDeltaList set = buildSet(insertFirst, update, insertSecond);
-
-        // Two inserts should create two rules to bind against single existing
-        final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
-        final int exceptionCount = countExceptionUpdates(diff);
-        assertEquals("Unexpected exception updates", 2, exceptionCount);
-    }
-
-    public void testInsertInsertInsert() {
-        final RawContactDelta insertFirst = getInsert();
-        final RawContactDelta insertSecond = getInsert();
-        final RawContactDelta insertThird = getInsert();
-        final RawContactDeltaList set = buildSet(insertFirst, insertSecond, insertThird);
-
-        // Three new inserts should create only two binding rules
-        final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
-        final int exceptionCount = countExceptionUpdates(diff);
-        assertEquals("Unexpected exception updates", 2, exceptionCount);
-    }
-
-    public void testMergeDataRemoteInsert() {
-        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_FIRST, buildPhone(PHONE_RED)));
-        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_SECOND, buildPhone(PHONE_RED), buildPhone(PHONE_GREEN)));
-
-        // Merge in second version, verify they match
-        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
-        assertEquals("Unexpected change when merging", second, merged);
-    }
-
-    public void testMergeDataLocalUpdateRemoteInsert() {
-        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_FIRST, buildPhone(PHONE_RED)));
-        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_SECOND, buildPhone(PHONE_RED), buildPhone(PHONE_GREEN)));
-
-        // Change the local number to trigger update
-        final ValuesDelta phone = getPhone(first, CONTACT_BOB, PHONE_RED);
-        phone.put(Phone.NUMBER, TEST_PHONE);
-
-        assertDiffPattern(first,
-                buildAssertVersion(VER_FIRST),
-                buildUpdateAggregationSuspended(),
-                buildCPOWrapper(Data.CONTENT_URI, TYPE_UPDATE, phone.getAfter()),
-                buildUpdateAggregationDefault());
-
-        // Merge in the second version, verify diff matches
-        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
-        assertDiffPattern(merged,
-                buildAssertVersion(VER_SECOND),
-                buildUpdateAggregationSuspended(),
-                buildCPOWrapper(Data.CONTENT_URI, TYPE_UPDATE, phone.getAfter()),
-                buildUpdateAggregationDefault());
-    }
-
-    public void testMergeDataLocalUpdateRemoteDelete() {
-        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_FIRST, buildPhone(PHONE_RED)));
-        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_SECOND, buildPhone(PHONE_GREEN)));
-
-        // Change the local number to trigger update
-        final ValuesDelta phone = getPhone(first, CONTACT_BOB, PHONE_RED);
-        phone.put(Phone.NUMBER, TEST_PHONE);
-
-        assertDiffPattern(first,
-                buildAssertVersion(VER_FIRST),
-                buildUpdateAggregationSuspended(),
-                buildCPOWrapper(Data.CONTENT_URI, TYPE_UPDATE, phone.getAfter()),
-                buildUpdateAggregationDefault());
-
-        // Merge in the second version, verify that our update changed to
-        // insert, since RED was deleted on remote side
-        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
-        assertDiffPattern(merged,
-                buildAssertVersion(VER_SECOND),
-                buildUpdateAggregationSuspended(),
-                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, buildDataInsert(phone, CONTACT_BOB)),
-                buildUpdateAggregationDefault());
-    }
-
-    public void testMergeDataLocalDeleteRemoteUpdate() {
-        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_FIRST, buildPhone(PHONE_RED)));
-        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_SECOND, buildPhone(PHONE_RED, TEST_PHONE)));
-
-        // Delete phone locally
-        final ValuesDelta phone = getPhone(first, CONTACT_BOB, PHONE_RED);
-        phone.markDeleted();
-
-        assertDiffPattern(first,
-                buildAssertVersion(VER_FIRST),
-                buildUpdateAggregationSuspended(),
-                buildDelete(Data.CONTENT_URI),
-                buildUpdateAggregationDefault());
-
-        // Merge in the second version, verify that our delete remains
-        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
-        assertDiffPattern(merged,
-                buildAssertVersion(VER_SECOND),
-                buildUpdateAggregationSuspended(),
-                buildDelete(Data.CONTENT_URI),
-                buildUpdateAggregationDefault());
-    }
-
-    public void testMergeDataLocalInsertRemoteInsert() {
-        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_FIRST, buildPhone(PHONE_RED)));
-        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_SECOND, buildPhone(PHONE_RED), buildPhone(PHONE_GREEN)));
-
-        // Insert new phone locally
-        final ValuesDelta bluePhone = ValuesDelta.fromAfter(buildPhone(PHONE_BLUE));
-        first.getByRawContactId(CONTACT_BOB).addEntry(bluePhone);
-        assertDiffPattern(first,
-                buildAssertVersion(VER_FIRST),
-                buildUpdateAggregationSuspended(),
-                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, buildDataInsert(bluePhone, CONTACT_BOB)),
-                buildUpdateAggregationDefault());
-
-        // Merge in the second version, verify that our insert remains
-        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
-        assertDiffPattern(merged,
-                buildAssertVersion(VER_SECOND),
-                buildUpdateAggregationSuspended(),
-                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, buildDataInsert(bluePhone, CONTACT_BOB)),
-                buildUpdateAggregationDefault());
-    }
-
-    public void testMergeRawContactLocalInsertRemoteInsert() {
-        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_FIRST, buildPhone(PHONE_RED)));
-        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_SECOND, buildPhone(PHONE_RED)), buildBeforeEntity(mContext, CONTACT_MARY,
-                        VER_SECOND, buildPhone(PHONE_RED)));
-
-        // Add new contact locally, should remain insert
-        final ContentValues joePhoneInsert = buildPhone(PHONE_BLUE);
-        final RawContactDelta joeContact = buildAfterEntity(joePhoneInsert);
-        final ContentValues joeContactInsert = joeContact.getValues().getCompleteValues();
-        joeContactInsert.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED);
-        first.add(joeContact);
-        assertDiffPattern(first,
-                buildAssertVersion(VER_FIRST),
-                buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_INSERT, joeContactInsert),
-                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, joePhoneInsert),
-                buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT),
-                buildUpdateAggregationKeepTogether(CONTACT_BOB));
-
-        // Merge in the second version, verify that our insert remains
-        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
-        assertDiffPattern(merged,
-                buildAssertVersion(VER_SECOND),
-                buildAssertVersion(VER_SECOND),
-                buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_INSERT, joeContactInsert),
-                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, joePhoneInsert),
-                buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT),
-                buildUpdateAggregationKeepTogether(CONTACT_BOB));
-    }
-
-    public void testMergeRawContactLocalDeleteRemoteDelete() {
-        final RawContactDeltaList first = buildSet(
-                buildBeforeEntity(mContext, CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED)),
-                buildBeforeEntity(mContext, CONTACT_MARY, VER_FIRST, buildPhone(PHONE_RED)));
-        final RawContactDeltaList second = buildSet(
-                buildBeforeEntity(mContext, CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED)));
-
-        // Remove contact locally
-        first.getByRawContactId(CONTACT_MARY).markDeleted();
-        assertDiffPattern(first,
-                buildAssertVersion(VER_FIRST),
-                buildAssertVersion(VER_FIRST),
-                buildDelete(RawContacts.CONTENT_URI));
-
-        // Merge in the second version, verify that our delete isn't needed
-        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
-        assertDiffPattern(merged);
-    }
-
-    public void testMergeRawContactLocalUpdateRemoteDelete() {
-        final RawContactDeltaList first = buildSet(
-                buildBeforeEntity(mContext, CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED)),
-                buildBeforeEntity(mContext, CONTACT_MARY, VER_FIRST, buildPhone(PHONE_RED)));
-        final RawContactDeltaList second = buildSet(
-                buildBeforeEntity(mContext, CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED)));
-
-        // Perform local update
-        final ValuesDelta phone = getPhone(first, CONTACT_MARY, PHONE_RED);
-        phone.put(Phone.NUMBER, TEST_PHONE);
-        assertDiffPattern(first,
-                buildAssertVersion(VER_FIRST),
-                buildAssertVersion(VER_FIRST),
-                buildUpdateAggregationSuspended(),
-                buildCPOWrapper(Data.CONTENT_URI, TYPE_UPDATE, phone.getAfter()),
-                buildUpdateAggregationDefault());
-
-        final ContentValues phoneInsert = phone.getCompleteValues();
-        final ContentValues contactInsert = first.getByRawContactId(CONTACT_MARY).getValues()
-                .getCompleteValues();
-        contactInsert.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED);
-
-        // Merge and verify that update turned into insert
-        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
-        assertDiffPattern(merged,
-                buildAssertVersion(VER_SECOND),
-                buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_INSERT, contactInsert),
-                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, phoneInsert),
-                buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT),
-                buildUpdateAggregationKeepTogether(CONTACT_BOB));
-    }
-
-    public void testMergeUsesNewVersion() {
-        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_FIRST, buildPhone(PHONE_RED)));
-        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_SECOND, buildPhone(PHONE_RED)));
-
-        assertEquals((Long)VER_FIRST, getVersion(first, CONTACT_BOB));
-        assertEquals((Long)VER_SECOND, getVersion(second, CONTACT_BOB));
-
-        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
-        assertEquals((Long)VER_SECOND, getVersion(merged, CONTACT_BOB));
-    }
-
-    public void testMergeAfterEnsureAndTrim() {
-        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_FIRST, buildEmail(EMAIL_YELLOW)));
-        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
-                VER_SECOND, buildEmail(EMAIL_YELLOW)));
-
-        // Ensure we have at least one phone
-        final AccountType source = getAccountType();
-        final RawContactDelta bobContact = first.getByRawContactId(CONTACT_BOB);
-        RawContactModifier.ensureKindExists(bobContact, source, Phone.CONTENT_ITEM_TYPE);
-        final ValuesDelta bobPhone = bobContact.getSuperPrimaryEntry(Phone.CONTENT_ITEM_TYPE, true);
-
-        // Make sure the update would insert a row
-        assertDiffPattern(first,
-                buildAssertVersion(VER_FIRST),
-                buildUpdateAggregationSuspended(),
-                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, buildDataInsert(bobPhone, CONTACT_BOB)),
-                buildUpdateAggregationDefault());
-
-        // Trim values and ensure that we don't insert things
-        RawContactModifier.trimEmpty(bobContact, source);
-        assertDiffPattern(first);
-
-        // Now re-parent the change, which should remain no-op
-        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
-        assertDiffPattern(merged);
-    }
-}
diff --git a/tests/src/com/android/contacts/common/RawContactDeltaTests.java b/tests/src/com/android/contacts/common/RawContactDeltaTests.java
deleted file mode 100644
index e4690d9..0000000
--- a/tests/src/com/android/contacts/common/RawContactDeltaTests.java
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common;
-
-import android.content.ContentProviderOperation;
-import android.content.ContentValues;
-import android.content.Context;
-import android.os.Build;
-import android.os.Parcel;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.RawContacts;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.model.BuilderWrapper;
-import com.android.contacts.common.model.CPOWrapper;
-import com.android.contacts.common.model.RawContact;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-
-/**
- * Tests for {@link RawContactDelta} and {@link ValuesDelta}. These tests
- * focus on passing changes across {@link Parcel}, and verifying that they
- * correctly build expected "diff" operations.
- */
-@LargeTest
-public class RawContactDeltaTests extends AndroidTestCase {
-    public static final String TAG = "EntityDeltaTests";
-
-    public static final long TEST_CONTACT_ID = 12;
-    public static final long TEST_PHONE_ID = 24;
-
-    public static final String TEST_PHONE_NUMBER_1 = "218-555-1111";
-    public static final String TEST_PHONE_NUMBER_2 = "218-555-2222";
-
-    public static final String TEST_ACCOUNT_NAME = "TEST";
-
-    public RawContactDeltaTests() {
-        super();
-    }
-
-    @Override
-    public void setUp() {
-        mContext = getContext();
-    }
-
-    public static RawContact getRawContact(Context context, long contactId, long phoneId) {
-        // Build an existing contact read from database
-        final ContentValues contact = new ContentValues();
-        contact.put(RawContacts.VERSION, 43);
-        contact.put(RawContacts._ID, contactId);
-
-        final ContentValues phone = new ContentValues();
-        phone.put(Data._ID, phoneId);
-        phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_1);
-        phone.put(Phone.TYPE, Phone.TYPE_HOME);
-
-        final RawContact before = new RawContact(contact);
-        before.addDataItemValues(phone);
-        return before;
-    }
-
-    /**
-     * Test that {@link RawContactDelta#mergeAfter(RawContactDelta)} correctly passes
-     * any changes through the {@link Parcel} object. This enforces that
-     * {@link RawContactDelta} should be identical when serialized against the same
-     * "before" {@link RawContact}.
-     */
-    public void testParcelChangesNone() {
-        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
-        final RawContactDelta source = RawContactDelta.fromBefore(before);
-        final RawContactDelta dest = RawContactDelta.fromBefore(before);
-
-        // Merge modified values and assert they match
-        final RawContactDelta merged = RawContactDelta.mergeAfter(dest, source);
-        assertEquals("Unexpected change when merging", source, merged);
-    }
-
-    public void testParcelChangesInsert() {
-        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
-        final RawContactDelta source = RawContactDelta.fromBefore(before);
-        final RawContactDelta dest = RawContactDelta.fromBefore(before);
-
-        // Add a new row and pass across parcel, should be same
-        final ContentValues phone = new ContentValues();
-        phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
-        phone.put(Phone.TYPE, Phone.TYPE_WORK);
-        source.addEntry(ValuesDelta.fromAfter(phone));
-
-        // Merge modified values and assert they match
-        final RawContactDelta merged = RawContactDelta.mergeAfter(dest, source);
-        assertEquals("Unexpected change when merging", source, merged);
-    }
-
-    public void testParcelChangesUpdate() {
-        // Update existing row and pass across parcel, should be same
-        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
-        final RawContactDelta source = RawContactDelta.fromBefore(before);
-        final RawContactDelta dest = RawContactDelta.fromBefore(before);
-
-        final ValuesDelta child = source.getEntry(TEST_PHONE_ID);
-        child.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
-
-        // Merge modified values and assert they match
-        final RawContactDelta merged = RawContactDelta.mergeAfter(dest, source);
-        assertEquals("Unexpected change when merging", source, merged);
-    }
-
-    public void testParcelChangesDelete() {
-        // Delete a row and pass across parcel, should be same
-        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
-        final RawContactDelta source = RawContactDelta.fromBefore(before);
-        final RawContactDelta dest = RawContactDelta.fromBefore(before);
-
-        final ValuesDelta child = source.getEntry(TEST_PHONE_ID);
-        child.markDeleted();
-
-        // Merge modified values and assert they match
-        final RawContactDelta merged = RawContactDelta.mergeAfter(dest, source);
-        assertEquals("Unexpected change when merging", source, merged);
-    }
-
-    public void testValuesDiffDelete() {
-        final ContentValues before = new ContentValues();
-        before.put(Data._ID, TEST_PHONE_ID);
-        before.put(Phone.NUMBER, TEST_PHONE_NUMBER_1);
-
-        final ValuesDelta values = ValuesDelta.fromBefore(before);
-        values.markDeleted();
-
-        // Should produce a delete action
-        final BuilderWrapper builderWrapper = values.buildDiffWrapper(Data.CONTENT_URI);
-        final boolean isDelete = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
-                ? builderWrapper.getBuilder().build().isDelete()
-                : builderWrapper.getType() == CompatUtils.TYPE_DELETE;
-        assertTrue("Didn't produce delete action", isDelete);
-    }
-
-    /**
-     * Test that {@link RawContactDelta#buildDiffWrapper(ArrayList)} is correctly built for
-     * insert, update, and delete cases. This only tests a subset of possible
-     * {@link Data} row changes.
-     */
-    public void testEntityDiffNone() {
-        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
-        final RawContactDelta source = RawContactDelta.fromBefore(before);
-
-        // Assert that writing unchanged produces few operations
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        source.buildDiffWrapper(diff);
-
-        assertTrue("Created changes when none needed", (diff.size() == 0));
-    }
-
-    public void testEntityDiffNoneInsert() {
-        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
-        final RawContactDelta source = RawContactDelta.fromBefore(before);
-
-        // Insert a new phone number
-        final ContentValues phone = new ContentValues();
-        phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
-        phone.put(Phone.TYPE, Phone.TYPE_WORK);
-        source.addEntry(ValuesDelta.fromAfter(phone));
-
-        // Assert two operations: insert Data row and enforce version
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        source.buildAssertWrapper(diff);
-        source.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 4, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            assertTrue("Expected version enforcement", CompatUtils.isAssertQueryCompat(cpoWrapper));
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(1);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(2);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
-            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(3);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-    }
-
-    public void testEntityDiffUpdateInsert() {
-        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
-        final RawContactDelta source = RawContactDelta.fromBefore(before);
-
-        // Update parent contact values
-        source.getValues().put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED);
-
-        // Insert a new phone number
-        final ContentValues phone = new ContentValues();
-        phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
-        phone.put(Phone.TYPE, Phone.TYPE_WORK);
-        source.addEntry(ValuesDelta.fromAfter(phone));
-
-        // Assert three operations: update Contact, insert Data row, enforce version
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        source.buildAssertWrapper(diff);
-        source.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 5, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            assertTrue("Expected version enforcement", CompatUtils.isAssertQueryCompat(cpoWrapper));
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(1);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(2);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(3);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
-            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(4);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-    }
-
-    public void testEntityDiffNoneUpdate() {
-        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
-        final RawContactDelta source = RawContactDelta.fromBefore(before);
-
-        // Update existing phone number
-        final ValuesDelta child = source.getEntry(TEST_PHONE_ID);
-        child.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
-
-        // Assert that version is enforced
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        source.buildAssertWrapper(diff);
-        source.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 4, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            assertTrue("Expected version enforcement", CompatUtils.isAssertQueryCompat(cpoWrapper));
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(1);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(2);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(3);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-    }
-
-    public void testEntityDiffDelete() {
-        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
-        final RawContactDelta source = RawContactDelta.fromBefore(before);
-
-        // Delete entire entity
-        source.getValues().markDeleted();
-
-        // Assert two operations: delete Contact and enforce version
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        source.buildAssertWrapper(diff);
-        source.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 2, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            assertTrue("Expected version enforcement", CompatUtils.isAssertQueryCompat(cpoWrapper));
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(1);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-    }
-
-    public void testEntityDiffInsert() {
-        // Insert a RawContact
-        final ContentValues after = new ContentValues();
-        after.put(RawContacts.ACCOUNT_NAME, TEST_ACCOUNT_NAME);
-        after.put(RawContacts.SEND_TO_VOICEMAIL, 1);
-
-        final ValuesDelta values = ValuesDelta.fromAfter(after);
-        final RawContactDelta source = new RawContactDelta(values);
-
-        // Assert two operations: insert Contact and enforce version
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        source.buildAssertWrapper(diff);
-        source.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 2, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-    }
-
-    public void testEntityDiffInsertInsert() {
-        // Insert a RawContact
-        final ContentValues after = new ContentValues();
-        after.put(RawContacts.ACCOUNT_NAME, TEST_ACCOUNT_NAME);
-        after.put(RawContacts.SEND_TO_VOICEMAIL, 1);
-
-        final ValuesDelta values = ValuesDelta.fromAfter(after);
-        final RawContactDelta source = new RawContactDelta(values);
-
-        // Insert a new phone number
-        final ContentValues phone = new ContentValues();
-        phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
-        phone.put(Phone.TYPE, Phone.TYPE_WORK);
-        source.addEntry(ValuesDelta.fromAfter(phone));
-
-        // Assert two operations: delete Contact and enforce version
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        source.buildAssertWrapper(diff);
-        source.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 3, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(1);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
-            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
-
-        }
-    }
-}
diff --git a/tests/src/com/android/contacts/common/RawContactModifierTests.java b/tests/src/com/android/contacts/common/RawContactModifierTests.java
deleted file mode 100644
index 9765af6..0000000
--- a/tests/src/com/android/contacts/common/RawContactModifierTests.java
+++ /dev/null
@@ -1,1208 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common;
-
-import android.content.ContentProviderOperation;
-import android.content.ContentValues;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Intents.Insert;
-import android.provider.ContactsContract.RawContacts;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.CPOWrapper;
-import com.android.contacts.common.model.RawContact;
-import com.android.contacts.common.model.RawContactDelta;
-import com.android.contacts.common.model.ValuesDelta;
-import com.android.contacts.common.model.RawContactDeltaList;
-import com.android.contacts.common.model.RawContactModifier;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.account.ExchangeAccountType;
-import com.android.contacts.common.model.account.GoogleAccountType;
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.test.mocks.ContactsMockContext;
-import com.android.contacts.common.test.mocks.MockAccountTypeManager;
-import com.android.contacts.common.test.mocks.MockContentProvider;
-import com.google.common.collect.Lists;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Tests for {@link RawContactModifier} to verify that {@link AccountType}
- * constraints are being enforced correctly.
- */
-@LargeTest
-public class RawContactModifierTests extends AndroidTestCase {
-    public static final String TAG = "EntityModifierTests";
-
-    // From android.content.ContentProviderOperation
-    public static final int TYPE_INSERT = 1;
-
-    public static final long VER_FIRST = 100;
-
-    private static final long TEST_ID = 4;
-    private static final String TEST_PHONE = "218-555-1212";
-    private static final String TEST_NAME = "Adam Young";
-    private static final String TEST_NAME2 = "Breanne Duren";
-    private static final String TEST_IM = "example@example.com";
-    private static final String TEST_POSTAL = "1600 Amphitheatre Parkway";
-
-    private static final String TEST_ACCOUNT_NAME = "unittest@example.com";
-    private static final String TEST_ACCOUNT_TYPE = "com.example.unittest";
-
-    private static final String EXCHANGE_ACCT_TYPE = "com.android.exchange";
-
-    @Override
-    public void setUp() {
-        mContext = getContext();
-    }
-
-    public static class MockContactsSource extends AccountType {
-
-        MockContactsSource() {
-            try {
-                this.accountType = TEST_ACCOUNT_TYPE;
-
-                final DataKind nameKind = new DataKind(StructuredName.CONTENT_ITEM_TYPE,
-                        R.string.nameLabelsGroup, -1, true);
-                nameKind.typeOverallMax = 1;
-                addKind(nameKind);
-
-                // Phone allows maximum 2 home, 1 work, and unlimited other, with
-                // constraint of 5 numbers maximum.
-                final DataKind phoneKind = new DataKind(
-                        Phone.CONTENT_ITEM_TYPE, -1, 10, true);
-
-                phoneKind.typeOverallMax = 5;
-                phoneKind.typeColumn = Phone.TYPE;
-                phoneKind.typeList = Lists.newArrayList();
-                phoneKind.typeList.add(new EditType(Phone.TYPE_HOME, -1).setSpecificMax(2));
-                phoneKind.typeList.add(new EditType(Phone.TYPE_WORK, -1).setSpecificMax(1));
-                phoneKind.typeList.add(new EditType(Phone.TYPE_FAX_WORK, -1).setSecondary(true));
-                phoneKind.typeList.add(new EditType(Phone.TYPE_OTHER, -1));
-
-                phoneKind.fieldList = Lists.newArrayList();
-                phoneKind.fieldList.add(new EditField(Phone.NUMBER, -1, -1));
-                phoneKind.fieldList.add(new EditField(Phone.LABEL, -1, -1));
-
-                addKind(phoneKind);
-
-                // Email is unlimited
-                final DataKind emailKind = new DataKind(Email.CONTENT_ITEM_TYPE, -1, 10, true);
-                emailKind.typeOverallMax = -1;
-                emailKind.fieldList = Lists.newArrayList();
-                emailKind.fieldList.add(new EditField(Email.DATA, -1, -1));
-                addKind(emailKind);
-
-                // IM is only one
-                final DataKind imKind = new DataKind(Im.CONTENT_ITEM_TYPE, -1, 10, true);
-                imKind.typeOverallMax = 1;
-                imKind.fieldList = Lists.newArrayList();
-                imKind.fieldList.add(new EditField(Im.DATA, -1, -1));
-                addKind(imKind);
-
-                // Organization is only one
-                final DataKind orgKind = new DataKind(Organization.CONTENT_ITEM_TYPE, -1, 10, true);
-                orgKind.typeOverallMax = 1;
-                orgKind.fieldList = Lists.newArrayList();
-                orgKind.fieldList.add(new EditField(Organization.COMPANY, -1, -1));
-                orgKind.fieldList.add(new EditField(Organization.TITLE, -1, -1));
-                addKind(orgKind);
-            } catch (DefinitionException e) {
-                throw new RuntimeException(e);
-            }
-        }
-
-        @Override
-        public boolean isGroupMembershipEditable() {
-            return false;
-        }
-
-        @Override
-        public boolean areContactsWritable() {
-            return true;
-        }
-    }
-
-    /**
-     * Build a {@link AccountType} that has various odd constraints for
-     * testing purposes.
-     */
-    protected AccountType getAccountType() {
-        return new MockContactsSource();
-    }
-
-    /**
-     * Build {@link AccountTypeManager} instance.
-     */
-    protected AccountTypeManager getAccountTypes(AccountType... types) {
-        return new MockAccountTypeManager(types, null);
-    }
-
-    /**
-     * Build an {@link RawContact} with the requested set of phone numbers.
-     */
-    protected RawContactDelta getRawContact(Long existingId, ContentValues... entries) {
-        final ContentValues contact = new ContentValues();
-        if (existingId != null) {
-            contact.put(RawContacts._ID, existingId);
-        }
-        contact.put(RawContacts.ACCOUNT_NAME, TEST_ACCOUNT_NAME);
-        contact.put(RawContacts.ACCOUNT_TYPE, TEST_ACCOUNT_TYPE);
-
-        final RawContact before = new RawContact(contact);
-        for (ContentValues values : entries) {
-            before.addDataItemValues(values);
-        }
-        return RawContactDelta.fromBefore(before);
-    }
-
-    /**
-     * Assert this {@link List} contains the given {@link Object}.
-     */
-    protected void assertContains(List<?> list, Object object) {
-        assertTrue("Missing expected value", list.contains(object));
-    }
-
-    /**
-     * Assert this {@link List} does not contain the given {@link Object}.
-     */
-    protected void assertNotContains(List<?> list, Object object) {
-        assertFalse("Contained unexpected value", list.contains(object));
-    }
-
-    /**
-     * Insert various rows to test
-     * {@link RawContactModifier#getValidTypes(RawContactDelta, DataKind, EditType)}
-     */
-    public void testValidTypes() {
-        // Build a source and pull specific types
-        final AccountType source = getAccountType();
-        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-        final EditType typeWork = RawContactModifier.getType(kindPhone, Phone.TYPE_WORK);
-        final EditType typeOther = RawContactModifier.getType(kindPhone, Phone.TYPE_OTHER);
-
-        List<EditType> validTypes;
-
-        // Add first home, first work
-        final RawContactDelta state = getRawContact(TEST_ID);
-        RawContactModifier.insertChild(state, kindPhone, typeHome);
-        RawContactModifier.insertChild(state, kindPhone, typeWork);
-
-        // Expecting home, other
-        validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, true);
-        assertContains(validTypes, typeHome);
-        assertNotContains(validTypes, typeWork);
-        assertContains(validTypes, typeOther);
-
-        // Add second home
-        RawContactModifier.insertChild(state, kindPhone, typeHome);
-
-        // Expecting other
-        validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, true);
-        assertNotContains(validTypes, typeHome);
-        assertNotContains(validTypes, typeWork);
-        assertContains(validTypes, typeOther);
-
-        // Add third and fourth home (invalid, but possible)
-        RawContactModifier.insertChild(state, kindPhone, typeHome);
-        RawContactModifier.insertChild(state, kindPhone, typeHome);
-
-        // Expecting none
-        validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, true);
-        assertNotContains(validTypes, typeHome);
-        assertNotContains(validTypes, typeWork);
-        assertNotContains(validTypes, typeOther);
-    }
-
-    /**
-     * Test which valid types there are when trying to update the editor type.
-     * {@link RawContactModifier#getValidTypes(RawContactDelta, DataKind, EditType, Boolean)}
-     */
-    public void testValidTypesWhenUpdating() {
-        // Build a source and pull specific types
-        final AccountType source = getAccountType();
-        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-        final EditType typeWork = RawContactModifier.getType(kindPhone, Phone.TYPE_WORK);
-        final EditType typeOther = RawContactModifier.getType(kindPhone, Phone.TYPE_OTHER);
-
-        List<EditType> validTypes;
-
-        // Add first home, first work
-        final RawContactDelta state = getRawContact(TEST_ID);
-        RawContactModifier.insertChild(state, kindPhone, typeHome);
-        RawContactModifier.insertChild(state, kindPhone, typeWork);
-
-        // Update editor type for home.
-        validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, false);
-        assertContains(validTypes, typeHome);
-        assertNotContains(validTypes, typeWork);
-        assertContains(validTypes, typeOther);
-
-        // Add another 3 types. Overall limit is 5.
-        RawContactModifier.insertChild(state, kindPhone, typeHome);
-        RawContactModifier.insertChild(state, kindPhone, typeOther);
-        RawContactModifier.insertChild(state, kindPhone, typeOther);
-
-        // "Other" is valid when updating the editor type.
-        validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, false);
-        assertNotContains(validTypes, typeHome);
-        assertNotContains(validTypes, typeWork);
-        assertContains(validTypes, typeOther);
-    }
-
-    /**
-     * Test {@link RawContactModifier#canInsert(RawContactDelta, DataKind)} by
-     * inserting various rows.
-     */
-    public void testCanInsert() {
-        // Build a source and pull specific types
-        final AccountType source = getAccountType();
-        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-        final EditType typeWork = RawContactModifier.getType(kindPhone, Phone.TYPE_WORK);
-        final EditType typeOther = RawContactModifier.getType(kindPhone, Phone.TYPE_OTHER);
-
-        // Add first home, first work
-        final RawContactDelta state = getRawContact(TEST_ID);
-        RawContactModifier.insertChild(state, kindPhone, typeHome);
-        RawContactModifier.insertChild(state, kindPhone, typeWork);
-        assertTrue("Unable to insert", RawContactModifier.canInsert(state, kindPhone));
-
-        // Add two other, which puts us just under "5" overall limit
-        RawContactModifier.insertChild(state, kindPhone, typeOther);
-        RawContactModifier.insertChild(state, kindPhone, typeOther);
-        assertTrue("Unable to insert", RawContactModifier.canInsert(state, kindPhone));
-
-        // Add second home, which should push to snug limit
-        RawContactModifier.insertChild(state, kindPhone, typeHome);
-        assertFalse("Able to insert", RawContactModifier.canInsert(state, kindPhone));
-    }
-
-    /**
-     * Test
-     * {@link RawContactModifier#getBestValidType(RawContactDelta, DataKind, boolean, int)}
-     * by asserting expected best options in various states.
-     */
-    public void testBestValidType() {
-        // Build a source and pull specific types
-        final AccountType source = getAccountType();
-        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-        final EditType typeWork = RawContactModifier.getType(kindPhone, Phone.TYPE_WORK);
-        final EditType typeFaxWork = RawContactModifier.getType(kindPhone, Phone.TYPE_FAX_WORK);
-        final EditType typeOther = RawContactModifier.getType(kindPhone, Phone.TYPE_OTHER);
-
-        EditType suggested;
-
-        // Default suggestion should be home
-        final RawContactDelta state = getRawContact(TEST_ID);
-        suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
-        assertEquals("Unexpected suggestion", typeHome, suggested);
-
-        // Add first home, should now suggest work
-        RawContactModifier.insertChild(state, kindPhone, typeHome);
-        suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
-        assertEquals("Unexpected suggestion", typeWork, suggested);
-
-        // Add work fax, should still suggest work
-        RawContactModifier.insertChild(state, kindPhone, typeFaxWork);
-        suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
-        assertEquals("Unexpected suggestion", typeWork, suggested);
-
-        // Add other, should still suggest work
-        RawContactModifier.insertChild(state, kindPhone, typeOther);
-        suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
-        assertEquals("Unexpected suggestion", typeWork, suggested);
-
-        // Add work, now should suggest other
-        RawContactModifier.insertChild(state, kindPhone, typeWork);
-        suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
-        assertEquals("Unexpected suggestion", typeOther, suggested);
-    }
-
-    public void testIsEmptyEmpty() {
-        final AccountType source = getAccountType();
-        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-
-        // Test entirely empty row
-        final ContentValues after = new ContentValues();
-        final ValuesDelta values = ValuesDelta.fromAfter(after);
-
-        assertTrue("Expected empty", RawContactModifier.isEmpty(values, kindPhone));
-    }
-
-    public void testIsEmptyDirectFields() {
-        final AccountType source = getAccountType();
-        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-
-        // Test row that has type values, but core fields are empty
-        final RawContactDelta state = getRawContact(TEST_ID);
-        final ValuesDelta values = RawContactModifier.insertChild(state, kindPhone, typeHome);
-
-        assertTrue("Expected empty", RawContactModifier.isEmpty(values, kindPhone));
-
-        // Insert some data to trigger non-empty state
-        values.put(Phone.NUMBER, TEST_PHONE);
-
-        assertFalse("Expected non-empty", RawContactModifier.isEmpty(values, kindPhone));
-    }
-
-    public void testTrimEmptySingle() {
-        final AccountType source = getAccountType();
-        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-
-        // Test row that has type values, but core fields are empty
-        final RawContactDelta state = getRawContact(TEST_ID);
-        RawContactModifier.insertChild(state, kindPhone, typeHome);
-
-        // Build diff, expecting insert for data row and update enforcement
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 3, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(1);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
-            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(2);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-
-        // Trim empty rows and try again, expecting delete of overall contact
-        RawContactModifier.trimEmpty(state, source);
-        diff.clear();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 1, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-    }
-
-    public void testTrimEmptySpaces() {
-        final AccountType source = getAccountType();
-        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-
-        // Test row that has type values, but values are spaces
-        final RawContactDelta state = RawContactDeltaListTests.buildBeforeEntity(mContext, TEST_ID,
-                VER_FIRST);
-        final ValuesDelta values = RawContactModifier.insertChild(state, kindPhone, typeHome);
-        values.put(Phone.NUMBER, "   ");
-
-        // Build diff, expecting insert for data row and update enforcement
-        RawContactDeltaListTests.assertDiffPattern(state,
-                RawContactDeltaListTests.buildAssertVersion(VER_FIRST),
-                RawContactDeltaListTests.buildUpdateAggregationSuspended(),
-                RawContactDeltaListTests.buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT,
-                        RawContactDeltaListTests.buildDataInsert(values, TEST_ID)),
-                RawContactDeltaListTests.buildUpdateAggregationDefault());
-
-        // Trim empty rows and try again, expecting delete of overall contact
-        RawContactModifier.trimEmpty(state, source);
-        RawContactDeltaListTests.assertDiffPattern(state,
-                RawContactDeltaListTests.buildAssertVersion(VER_FIRST),
-                RawContactDeltaListTests.buildDelete(RawContacts.CONTENT_URI));
-    }
-
-    public void testTrimLeaveValid() {
-        final AccountType source = getAccountType();
-        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-
-        // Test row that has type values with valid number
-        final RawContactDelta state = RawContactDeltaListTests.buildBeforeEntity(mContext, TEST_ID,
-                VER_FIRST);
-        final ValuesDelta values = RawContactModifier.insertChild(state, kindPhone, typeHome);
-        values.put(Phone.NUMBER, TEST_PHONE);
-
-        // Build diff, expecting insert for data row and update enforcement
-        RawContactDeltaListTests.assertDiffPattern(state,
-                RawContactDeltaListTests.buildAssertVersion(VER_FIRST),
-                RawContactDeltaListTests.buildUpdateAggregationSuspended(),
-                RawContactDeltaListTests.buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT,
-                        RawContactDeltaListTests.buildDataInsert(values, TEST_ID)),
-                RawContactDeltaListTests.buildUpdateAggregationDefault());
-
-        // Trim empty rows and try again, expecting no differences
-        RawContactModifier.trimEmpty(state, source);
-        RawContactDeltaListTests.assertDiffPattern(state,
-                RawContactDeltaListTests.buildAssertVersion(VER_FIRST),
-                RawContactDeltaListTests.buildUpdateAggregationSuspended(),
-                RawContactDeltaListTests.buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT,
-                        RawContactDeltaListTests.buildDataInsert(values, TEST_ID)),
-                RawContactDeltaListTests.buildUpdateAggregationDefault());
-    }
-
-    public void testTrimEmptyUntouched() {
-        final AccountType source = getAccountType();
-        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-
-        // Build "before" that has empty row
-        final RawContactDelta state = getRawContact(TEST_ID);
-        final ContentValues before = new ContentValues();
-        before.put(Data._ID, TEST_ID);
-        before.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        state.addEntry(ValuesDelta.fromBefore(before));
-
-        // Build diff, expecting no changes
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 0, diff.size());
-
-        // Try trimming existing empty, which we shouldn't touch
-        RawContactModifier.trimEmpty(state, source);
-        diff.clear();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 0, diff.size());
-    }
-
-    public void testTrimEmptyAfterUpdate() {
-        final AccountType source = getAccountType();
-        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-
-        // Build "before" that has row with some phone number
-        final ContentValues before = new ContentValues();
-        before.put(Data._ID, TEST_ID);
-        before.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        before.put(kindPhone.typeColumn, typeHome.rawValue);
-        before.put(Phone.NUMBER, TEST_PHONE);
-        final RawContactDelta state = getRawContact(TEST_ID, before);
-
-        // Build diff, expecting no changes
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 0, diff.size());
-
-        // Now update row by changing number to empty string, expecting single update
-        final ValuesDelta child = state.getEntry(TEST_ID);
-        child.put(Phone.NUMBER, "");
-        diff.clear();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 3, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(1);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(2);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-
-        // Now run trim, which should turn that update into delete
-        RawContactModifier.trimEmpty(state, source);
-        diff.clear();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 1, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-    }
-
-    public void testTrimInsertEmpty() {
-        final AccountType accountType = getAccountType();
-        final AccountTypeManager accountTypes = getAccountTypes(accountType);
-        final DataKind kindPhone = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-
-        // Try creating a contact without any child entries
-        final RawContactDelta state = getRawContact(null);
-        final RawContactDeltaList set = new RawContactDeltaList();
-        set.add(state);
-
-        // Build diff, expecting single insert
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 2, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-
-        // Trim empty rows and try again, expecting no insert
-        RawContactModifier.trimEmpty(set, accountTypes);
-        diff.clear();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 0, diff.size());
-    }
-
-    public void testTrimInsertInsert() {
-        final AccountType accountType = getAccountType();
-        final AccountTypeManager accountTypes = getAccountTypes(accountType);
-        final DataKind kindPhone = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-
-        // Try creating a contact with single empty entry
-        final RawContactDelta state = getRawContact(null);
-        RawContactModifier.insertChild(state, kindPhone, typeHome);
-        final RawContactDeltaList set = new RawContactDeltaList();
-        set.add(state);
-
-        // Build diff, expecting two insert operations
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 3, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(1);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
-            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
-        }
-
-        // Trim empty rows and try again, expecting silence
-        RawContactModifier.trimEmpty(set, accountTypes);
-        diff.clear();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 0, diff.size());
-    }
-
-    public void testTrimUpdateRemain() {
-        final AccountType accountType = getAccountType();
-        final AccountTypeManager accountTypes = getAccountTypes(accountType);
-        final DataKind kindPhone = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-
-        // Build "before" with two phone numbers
-        final ContentValues first = new ContentValues();
-        first.put(Data._ID, TEST_ID);
-        first.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        first.put(kindPhone.typeColumn, typeHome.rawValue);
-        first.put(Phone.NUMBER, TEST_PHONE);
-
-        final ContentValues second = new ContentValues();
-        second.put(Data._ID, TEST_ID);
-        second.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        second.put(kindPhone.typeColumn, typeHome.rawValue);
-        second.put(Phone.NUMBER, TEST_PHONE);
-
-        final RawContactDelta state = getRawContact(TEST_ID, first, second);
-        final RawContactDeltaList set = new RawContactDeltaList();
-        set.add(state);
-
-        // Build diff, expecting no changes
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 0, diff.size());
-
-        // Now update row by changing number to empty string, expecting single update
-        final ValuesDelta child = state.getEntry(TEST_ID);
-        child.put(Phone.NUMBER, "");
-        diff.clear();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 3, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(1);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(2);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-
-        // Now run trim, which should turn that update into delete
-        RawContactModifier.trimEmpty(set, accountTypes);
-        diff.clear();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 3, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(1);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
-            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(2);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-    }
-
-    public void testTrimUpdateUpdate() {
-        final AccountType accountType = getAccountType();
-        final AccountTypeManager accountTypes = getAccountTypes(accountType);
-        final DataKind kindPhone = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
-
-        // Build "before" with two phone numbers
-        final ContentValues first = new ContentValues();
-        first.put(Data._ID, TEST_ID);
-        first.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        first.put(kindPhone.typeColumn, typeHome.rawValue);
-        first.put(Phone.NUMBER, TEST_PHONE);
-
-        final RawContactDelta state = getRawContact(TEST_ID, first);
-        final RawContactDeltaList set = new RawContactDeltaList();
-        set.add(state);
-
-        // Build diff, expecting no changes
-        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 0, diff.size());
-
-        // Now update row by changing number to empty string, expecting single update
-        final ValuesDelta child = state.getEntry(TEST_ID);
-        child.put(Phone.NUMBER, "");
-        diff.clear();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 3, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(1);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
-        }
-        {
-            final CPOWrapper cpoWrapper = diff.get(2);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-
-        // Now run trim, which should turn into deleting the whole contact
-        RawContactModifier.trimEmpty(set, accountTypes);
-        diff.clear();
-        state.buildDiffWrapper(diff);
-        assertEquals("Unexpected operations", 1, diff.size());
-        {
-            final CPOWrapper cpoWrapper = diff.get(0);
-            final ContentProviderOperation oper = cpoWrapper.getOperation();
-            assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
-            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
-        }
-    }
-
-    public void testParseExtrasExistingName() {
-        final AccountType accountType = getAccountType();
-
-        // Build "before" name
-        final ContentValues first = new ContentValues();
-        first.put(Data._ID, TEST_ID);
-        first.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
-        first.put(StructuredName.GIVEN_NAME, TEST_NAME);
-
-        // Parse extras, making sure we keep single name
-        final RawContactDelta state = getRawContact(TEST_ID, first);
-        final Bundle extras = new Bundle();
-        extras.putString(Insert.NAME, TEST_NAME2);
-        RawContactModifier.parseExtras(mContext, accountType, state, extras);
-
-        final int nameCount = state.getMimeEntriesCount(StructuredName.CONTENT_ITEM_TYPE, true);
-        assertEquals("Unexpected names", 1, nameCount);
-    }
-
-    public void testParseExtrasIgnoreLimit() {
-        final AccountType accountType = getAccountType();
-
-        // Build "before" IM
-        final ContentValues first = new ContentValues();
-        first.put(Data._ID, TEST_ID);
-        first.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-        first.put(Im.DATA, TEST_IM);
-
-        final RawContactDelta state = getRawContact(TEST_ID, first);
-        final int beforeCount = state.getMimeEntries(Im.CONTENT_ITEM_TYPE).size();
-
-        // We should ignore data that doesn't fit account type rules, since account type
-        // only allows single Im
-        final Bundle extras = new Bundle();
-        extras.putInt(Insert.IM_PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
-        extras.putString(Insert.IM_HANDLE, TEST_IM);
-        RawContactModifier.parseExtras(mContext, accountType, state, extras);
-
-        final int afterCount = state.getMimeEntries(Im.CONTENT_ITEM_TYPE).size();
-        assertEquals("Broke account type rules", beforeCount, afterCount);
-    }
-
-    public void testParseExtrasIgnoreUnhandled() {
-        final AccountType accountType = getAccountType();
-        final RawContactDelta state = getRawContact(TEST_ID);
-
-        // We should silently ignore types unsupported by account type
-        final Bundle extras = new Bundle();
-        extras.putString(Insert.POSTAL, TEST_POSTAL);
-        RawContactModifier.parseExtras(mContext, accountType, state, extras);
-
-        assertNull("Broke accoun type rules",
-                state.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE));
-    }
-
-    public void testParseExtrasJobTitle() {
-        final AccountType accountType = getAccountType();
-        final RawContactDelta state = getRawContact(TEST_ID);
-
-        // Make sure that we create partial Organizations
-        final Bundle extras = new Bundle();
-        extras.putString(Insert.JOB_TITLE, TEST_NAME);
-        RawContactModifier.parseExtras(mContext, accountType, state, extras);
-
-        final int count = state.getMimeEntries(Organization.CONTENT_ITEM_TYPE).size();
-        assertEquals("Expected to create organization", 1, count);
-    }
-
-    public void testMigrateNameFromGoogleToExchange() {
-        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
-        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
-        DataKind kind = newAccountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
-
-        ContactsMockContext context = new ContactsMockContext(getContext());
-
-        RawContactDelta oldState = new RawContactDelta();
-        ContentValues mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
-        mockNameValues.put(StructuredName.PREFIX, "prefix");
-        mockNameValues.put(StructuredName.GIVEN_NAME, "given");
-        mockNameValues.put(StructuredName.MIDDLE_NAME, "middle");
-        mockNameValues.put(StructuredName.FAMILY_NAME, "family");
-        mockNameValues.put(StructuredName.SUFFIX, "suffix");
-        mockNameValues.put(StructuredName.PHONETIC_FAMILY_NAME, "PHONETIC_FAMILY");
-        mockNameValues.put(StructuredName.PHONETIC_MIDDLE_NAME, "PHONETIC_MIDDLE");
-        mockNameValues.put(StructuredName.PHONETIC_GIVEN_NAME, "PHONETIC_GIVEN");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-
-        RawContactDelta newState = new RawContactDelta();
-        RawContactModifier.migrateStructuredName(context, oldState, newState, kind);
-        List<ValuesDelta> list = newState.getMimeEntries(StructuredName.CONTENT_ITEM_TYPE);
-        assertEquals(1, list.size());
-
-        ContentValues output = list.get(0).getAfter();
-        assertEquals("prefix", output.getAsString(StructuredName.PREFIX));
-        assertEquals("given", output.getAsString(StructuredName.GIVEN_NAME));
-        assertEquals("middle", output.getAsString(StructuredName.MIDDLE_NAME));
-        assertEquals("family", output.getAsString(StructuredName.FAMILY_NAME));
-        assertEquals("suffix", output.getAsString(StructuredName.SUFFIX));
-        // Phonetic middle name isn't supported by Exchange.
-        assertEquals("PHONETIC_FAMILY", output.getAsString(StructuredName.PHONETIC_FAMILY_NAME));
-        assertEquals("PHONETIC_GIVEN", output.getAsString(StructuredName.PHONETIC_GIVEN_NAME));
-    }
-
-    public void testMigratePostalFromGoogleToExchange() {
-        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
-        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
-        DataKind kind = newAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
-
-        RawContactDelta oldState = new RawContactDelta();
-        ContentValues mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
-        mockNameValues.put(StructuredPostal.FORMATTED_ADDRESS, "formatted_address");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-
-        RawContactDelta newState = new RawContactDelta();
-        RawContactModifier.migratePostal(oldState, newState, kind);
-
-        List<ValuesDelta> list = newState.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE);
-        assertNotNull(list);
-        assertEquals(1, list.size());
-        ContentValues outputValues = list.get(0).getAfter();
-        // FORMATTED_ADDRESS isn't supported by Exchange.
-        assertNull(outputValues.getAsString(StructuredPostal.FORMATTED_ADDRESS));
-        assertEquals("formatted_address", outputValues.getAsString(StructuredPostal.STREET));
-    }
-
-    public void testMigratePostalFromExchangeToGoogle() {
-        AccountType oldAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
-        AccountType newAccountType = new GoogleAccountType(getContext(), "");
-        DataKind kind = newAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
-
-        RawContactDelta oldState = new RawContactDelta();
-        ContentValues mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
-        mockNameValues.put(StructuredPostal.COUNTRY, "country");
-        mockNameValues.put(StructuredPostal.POSTCODE, "postcode");
-        mockNameValues.put(StructuredPostal.REGION, "region");
-        mockNameValues.put(StructuredPostal.CITY, "city");
-        mockNameValues.put(StructuredPostal.STREET, "street");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-
-        RawContactDelta newState = new RawContactDelta();
-        RawContactModifier.migratePostal(oldState, newState, kind);
-
-        List<ValuesDelta> list = newState.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE);
-        assertNotNull(list);
-        assertEquals(1, list.size());
-        ContentValues outputValues = list.get(0).getAfter();
-
-        // Check FORMATTED_ADDRESS contains all info.
-        String formattedAddress = outputValues.getAsString(StructuredPostal.FORMATTED_ADDRESS);
-        assertNotNull(formattedAddress);
-        assertTrue(formattedAddress.contains("country"));
-        assertTrue(formattedAddress.contains("postcode"));
-        assertTrue(formattedAddress.contains("region"));
-        assertTrue(formattedAddress.contains("postcode"));
-        assertTrue(formattedAddress.contains("city"));
-        assertTrue(formattedAddress.contains("street"));
-    }
-
-    public void testMigrateEventFromGoogleToExchange1() {
-        testMigrateEventCommon(new GoogleAccountType(getContext(), ""),
-                new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE));
-    }
-
-    public void testMigrateEventFromExchangeToGoogle() {
-        testMigrateEventCommon(new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE),
-                new GoogleAccountType(getContext(), ""));
-    }
-
-    private void testMigrateEventCommon(AccountType oldAccountType, AccountType newAccountType) {
-        DataKind kind = newAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE);
-
-        RawContactDelta oldState = new RawContactDelta();
-        ContentValues mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Event.START_DATE, "1972-02-08");
-        mockNameValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-
-        RawContactDelta newState = new RawContactDelta();
-        RawContactModifier.migrateEvent(oldState, newState, kind, 1990);
-
-        List<ValuesDelta> list = newState.getMimeEntries(Event.CONTENT_ITEM_TYPE);
-        assertNotNull(list);
-        assertEquals(1, list.size());  // Anniversary should be dropped.
-        ContentValues outputValues = list.get(0).getAfter();
-
-        assertEquals("1972-02-08", outputValues.getAsString(Event.START_DATE));
-        assertEquals(Event.TYPE_BIRTHDAY, outputValues.getAsInteger(Event.TYPE).intValue());
-    }
-
-    public void testMigrateEventFromGoogleToExchange2() {
-        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
-        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
-        DataKind kind = newAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE);
-
-        RawContactDelta oldState = new RawContactDelta();
-        ContentValues mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
-        // No year format is not supported by Exchange.
-        mockNameValues.put(Event.START_DATE, "--06-01");
-        mockNameValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-        mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Event.START_DATE, "1980-08-02");
-        // Anniversary is not supported by Exchange
-        mockNameValues.put(Event.TYPE, Event.TYPE_ANNIVERSARY);
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-
-        RawContactDelta newState = new RawContactDelta();
-        RawContactModifier.migrateEvent(oldState, newState, kind, 1990);
-
-        List<ValuesDelta> list = newState.getMimeEntries(Event.CONTENT_ITEM_TYPE);
-        assertNotNull(list);
-        assertEquals(1, list.size());  // Anniversary should be dropped.
-        ContentValues outputValues = list.get(0).getAfter();
-
-        // Default year should be used.
-        assertEquals("1990-06-01", outputValues.getAsString(Event.START_DATE));
-        assertEquals(Event.TYPE_BIRTHDAY, outputValues.getAsInteger(Event.TYPE).intValue());
-    }
-
-    public void testMigrateEmailFromGoogleToExchange() {
-        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
-        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
-        DataKind kind = newAccountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE);
-
-        RawContactDelta oldState = new RawContactDelta();
-        ContentValues mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Email.TYPE, Email.TYPE_CUSTOM);
-        mockNameValues.put(Email.LABEL, "custom_type");
-        mockNameValues.put(Email.ADDRESS, "address1");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-        mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Email.TYPE, Email.TYPE_HOME);
-        mockNameValues.put(Email.ADDRESS, "address2");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-        mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Email.TYPE, Email.TYPE_WORK);
-        mockNameValues.put(Email.ADDRESS, "address3");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-        // Exchange can have up to 3 email entries. This 4th entry should be dropped.
-        mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Email.TYPE, Email.TYPE_OTHER);
-        mockNameValues.put(Email.ADDRESS, "address4");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-
-        RawContactDelta newState = new RawContactDelta();
-        RawContactModifier.migrateGenericWithTypeColumn(oldState, newState, kind);
-
-        List<ValuesDelta> list = newState.getMimeEntries(Email.CONTENT_ITEM_TYPE);
-        assertNotNull(list);
-        assertEquals(3, list.size());
-
-        ContentValues outputValues = list.get(0).getAfter();
-        assertEquals(Email.TYPE_CUSTOM, outputValues.getAsInteger(Email.TYPE).intValue());
-        assertEquals("custom_type", outputValues.getAsString(Email.LABEL));
-        assertEquals("address1", outputValues.getAsString(Email.ADDRESS));
-
-        outputValues = list.get(1).getAfter();
-        assertEquals(Email.TYPE_HOME, outputValues.getAsInteger(Email.TYPE).intValue());
-        assertEquals("address2", outputValues.getAsString(Email.ADDRESS));
-
-        outputValues = list.get(2).getAfter();
-        assertEquals(Email.TYPE_WORK, outputValues.getAsInteger(Email.TYPE).intValue());
-        assertEquals("address3", outputValues.getAsString(Email.ADDRESS));
-    }
-
-    public void testMigrateImFromGoogleToExchange() {
-        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
-        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
-        DataKind kind = newAccountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE);
-
-        RawContactDelta oldState = new RawContactDelta();
-        ContentValues mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-        // Exchange doesn't support TYPE_HOME
-        mockNameValues.put(Im.TYPE, Im.TYPE_HOME);
-        mockNameValues.put(Im.PROTOCOL, Im.PROTOCOL_JABBER);
-        mockNameValues.put(Im.DATA, "im1");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-
-        mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-        // Exchange doesn't support TYPE_WORK
-        mockNameValues.put(Im.TYPE, Im.TYPE_WORK);
-        mockNameValues.put(Im.PROTOCOL, Im.PROTOCOL_YAHOO);
-        mockNameValues.put(Im.DATA, "im2");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-
-        mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Im.TYPE, Im.TYPE_OTHER);
-        mockNameValues.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
-        mockNameValues.put(Im.CUSTOM_PROTOCOL, "custom_protocol");
-        mockNameValues.put(Im.DATA, "im3");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-
-        // Exchange can have up to 3 IM entries. This 4th entry should be dropped.
-        mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Im.TYPE, Im.TYPE_OTHER);
-        mockNameValues.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
-        mockNameValues.put(Im.DATA, "im4");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-
-        RawContactDelta newState = new RawContactDelta();
-        RawContactModifier.migrateGenericWithTypeColumn(oldState, newState, kind);
-
-        List<ValuesDelta> list = newState.getMimeEntries(Im.CONTENT_ITEM_TYPE);
-        assertNotNull(list);
-        assertEquals(3, list.size());
-
-        assertNotNull(kind.defaultValues.getAsInteger(Im.TYPE));
-
-        int defaultType = kind.defaultValues.getAsInteger(Im.TYPE);
-
-        ContentValues outputValues = list.get(0).getAfter();
-        // HOME should become default type.
-        assertEquals(defaultType, outputValues.getAsInteger(Im.TYPE).intValue());
-        assertEquals(Im.PROTOCOL_JABBER, outputValues.getAsInteger(Im.PROTOCOL).intValue());
-        assertEquals("im1", outputValues.getAsString(Im.DATA));
-
-        outputValues = list.get(1).getAfter();
-        assertEquals(defaultType, outputValues.getAsInteger(Im.TYPE).intValue());
-        assertEquals(Im.PROTOCOL_YAHOO, outputValues.getAsInteger(Im.PROTOCOL).intValue());
-        assertEquals("im2", outputValues.getAsString(Im.DATA));
-
-        outputValues = list.get(2).getAfter();
-        assertEquals(defaultType, outputValues.getAsInteger(Im.TYPE).intValue());
-        assertEquals(Im.PROTOCOL_CUSTOM, outputValues.getAsInteger(Im.PROTOCOL).intValue());
-        assertEquals("custom_protocol", outputValues.getAsString(Im.CUSTOM_PROTOCOL));
-        assertEquals("im3", outputValues.getAsString(Im.DATA));
-    }
-
-    public void testMigratePhoneFromGoogleToExchange() {
-        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
-        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
-        DataKind kind = newAccountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-
-        // Create 5 numbers.
-        // - "1" -- HOME
-        // - "2" -- WORK
-        // - "3" -- CUSTOM
-        // - "4" -- WORK
-        // - "5" -- WORK_MOBILE
-        // Then we convert it to Exchange account type.
-        // - "1" -- HOME
-        // - "2" -- WORK
-        // - "3" -- Because CUSTOM is not supported, it'll be changed to the default, MOBILE
-        // - "4" -- WORK
-        // - "5" -- WORK_MOBILE not suppoted again, so will be MOBILE.
-        // But then, Exchange doesn't support multiple MOBILE numbers, so "5" will be removed.
-        // i.e. the result will be:
-        // - "1" -- HOME
-        // - "2" -- WORK
-        // - "3" -- MOBILE
-        // - "4" -- WORK
-
-        RawContactDelta oldState = new RawContactDelta();
-        ContentValues mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Phone.TYPE, Phone.TYPE_HOME);
-        mockNameValues.put(Phone.NUMBER, "1");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-        mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Phone.TYPE, Phone.TYPE_WORK);
-        mockNameValues.put(Phone.NUMBER, "2");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-        mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        // Exchange doesn't support this type. Default to MOBILE
-        mockNameValues.put(Phone.TYPE, Phone.TYPE_CUSTOM);
-        mockNameValues.put(Phone.LABEL, "custom_type");
-        mockNameValues.put(Phone.NUMBER, "3");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-        mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Phone.TYPE, Phone.TYPE_WORK);
-        mockNameValues.put(Phone.NUMBER, "4");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-        mockNameValues = new ContentValues();
-
-        mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Phone.TYPE, Phone.TYPE_WORK_MOBILE);
-        mockNameValues.put(Phone.NUMBER, "5");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-
-        RawContactDelta newState = new RawContactDelta();
-        RawContactModifier.migrateGenericWithTypeColumn(oldState, newState, kind);
-
-        List<ValuesDelta> list = newState.getMimeEntries(Phone.CONTENT_ITEM_TYPE);
-        assertNotNull(list);
-        assertEquals(4, list.size());
-
-        int defaultType = Phone.TYPE_MOBILE;
-
-        ContentValues outputValues = list.get(0).getAfter();
-        assertEquals(Phone.TYPE_HOME, outputValues.getAsInteger(Phone.TYPE).intValue());
-        assertEquals("1", outputValues.getAsString(Phone.NUMBER));
-        outputValues = list.get(1).getAfter();
-        assertEquals(Phone.TYPE_WORK, outputValues.getAsInteger(Phone.TYPE).intValue());
-        assertEquals("2", outputValues.getAsString(Phone.NUMBER));
-        outputValues = list.get(2).getAfter();
-        assertEquals(defaultType, outputValues.getAsInteger(Phone.TYPE).intValue());
-        assertNull(outputValues.getAsInteger(Phone.LABEL));
-        assertEquals("3", outputValues.getAsString(Phone.NUMBER));
-        outputValues = list.get(3).getAfter();
-        assertEquals(Phone.TYPE_WORK, outputValues.getAsInteger(Phone.TYPE).intValue());
-        assertEquals("4", outputValues.getAsString(Phone.NUMBER));
-    }
-
-    public void testMigrateOrganizationFromGoogleToExchange() {
-        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
-        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
-        DataKind kind = newAccountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
-
-        RawContactDelta oldState = new RawContactDelta();
-        ContentValues mockNameValues = new ContentValues();
-        mockNameValues.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
-        mockNameValues.put(Organization.COMPANY, "company1");
-        mockNameValues.put(Organization.DEPARTMENT, "department1");
-        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
-
-        RawContactDelta newState = new RawContactDelta();
-        RawContactModifier.migrateGenericWithoutTypeColumn(oldState, newState, kind);
-
-        List<ValuesDelta> list = newState.getMimeEntries(Organization.CONTENT_ITEM_TYPE);
-        assertNotNull(list);
-        assertEquals(1, list.size());
-
-        ContentValues outputValues = list.get(0).getAfter();
-        assertEquals("company1", outputValues.getAsString(Organization.COMPANY));
-        assertEquals("department1", outputValues.getAsString(Organization.DEPARTMENT));
-    }
-}
diff --git a/tests/src/com/android/contacts/common/compat/CompatUtilsTest.java b/tests/src/com/android/contacts/common/compat/CompatUtilsTest.java
deleted file mode 100644
index c1d6df9..0000000
--- a/tests/src/com/android/contacts/common/compat/CompatUtilsTest.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.contacts.common.compat;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-@SmallTest
-public class CompatUtilsTest extends AndroidTestCase {
-
-    public void testIsClassAvailable_NullClassName() {
-        assertFalse(CompatUtils.isClassAvailable(null));
-    }
-
-    public void testIsClassAvailable_EmptyClassName() {
-        assertFalse(CompatUtils.isClassAvailable(""));
-    }
-
-    public void testIsClassAvailable_NonexistentClass() {
-        assertFalse(CompatUtils.isClassAvailable("com.android.contacts.common.NonexistentClass"));
-    }
-
-    public void testIsClassAvailable() {
-        assertTrue(CompatUtils.isClassAvailable(BaseClass.class.getName()));
-    }
-
-    public void testIsMethodAvailable_NullClassName() {
-        assertFalse(CompatUtils.isMethodAvailable(null, "methodName"));
-    }
-
-    public void testIsMethodAvailable_EmptyClassName() {
-        assertFalse(CompatUtils.isMethodAvailable("", "methodName"));
-    }
-
-    public void testIsMethodAvailable_NullMethodName() {
-        assertFalse(CompatUtils.isMethodAvailable("className", null));
-    }
-
-    public void testIsMethodAvailable_EmptyMethodName() {
-        assertFalse(CompatUtils.isMethodAvailable("className", ""));
-    }
-
-    public void testIsMethodAvailable_NonexistentClass() {
-        assertFalse(CompatUtils.isMethodAvailable("com.android.contacts.common.NonexistentClass",
-                ""));
-    }
-
-    public void testIsMethodAvailable_NonexistentMethod() {
-        assertFalse(CompatUtils.isMethodAvailable(BaseClass.class.getName(), "derivedMethod"));
-    }
-
-    public void testIsMethodAvailable() {
-        assertTrue(CompatUtils.isMethodAvailable(BaseClass.class.getName(), "baseMethod"));
-    }
-
-    public void testIsMethodAvailable_InheritedMethod() {
-        assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "baseMethod"));
-    }
-
-    public void testIsMethodAvailable_OverloadedMethod() {
-        assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod"));
-        assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod",
-                Integer.TYPE));
-    }
-
-    public void testIsMethodAvailable_NonexistentOverload() {
-        assertFalse(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod",
-                Boolean.TYPE));
-    }
-
-    public void testInvokeMethod_NullMethodName() {
-        assertNull(CompatUtils.invokeMethod(new BaseClass(), null, null, null));
-    }
-
-    public void testInvokeMethod_EmptyMethodName() {
-        assertNull(CompatUtils.invokeMethod(new BaseClass(), "", null, null));
-    }
-
-    public void testInvokeMethod_NullClassInstance() {
-        assertNull(CompatUtils.invokeMethod(null, "", null, null));
-    }
-
-    public void testInvokeMethod_NonexistentMethod() {
-        assertNull(CompatUtils.invokeMethod(new BaseClass(), "derivedMethod", null, null));
-    }
-
-    public void testInvokeMethod_MethodWithNoParameters() {
-        assertEquals(1, CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod", null, null));
-    }
-
-    public void testInvokeMethod_MethodWithNoParameters_WithParameters() {
-        assertNull(CompatUtils.invokeMethod(new DerivedClass(), "derivedMethod",
-                new Class<?>[] {Integer.TYPE}, new Object[] {1}));
-    }
-
-    public void testInvokeMethod_MethodWithParameters_WithEmptyParameterList() {
-        assertNull(CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod",
-                new Class<?>[] {Integer.TYPE}, new Object[] {}));
-    }
-
-    public void testInvokeMethod_InvokeSimpleMethod() {
-        assertEquals(2, CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod",
-                new Class<?>[] {Integer.TYPE}, new Object[] {2}));
-    }
-
-    private class BaseClass {
-        public void baseMethod() {}
-    }
-
-    private class DerivedClass extends BaseClass {
-        public int derivedMethod() {
-            // This method needs to return something to differentiate a successful invocation from
-            // an unsuccessful one.
-            return 0;
-        }
-
-        public int overloadedMethod() {
-            return 1;
-        }
-
-        public int overloadedMethod(int i) {
-            return i;
-        }
-    }
-}
diff --git a/tests/src/com/android/contacts/common/database/NoNullCursorAsyncQueryHandlerTest.java b/tests/src/com/android/contacts/common/database/NoNullCursorAsyncQueryHandlerTest.java
deleted file mode 100644
index 99a43a8..0000000
--- a/tests/src/com/android/contacts/common/database/NoNullCursorAsyncQueryHandlerTest.java
+++ /dev/null
@@ -1,154 +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.common.database;
-
-import android.database.Cursor;
-import android.net.Uri;
-import android.test.InstrumentationTestCase;
-import android.test.mock.MockContentProvider;
-import android.test.mock.MockContentResolver;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Unit test for {@link NoNullCursorAsyncQueryHandler}
- */
-@SmallTest
-public class NoNullCursorAsyncQueryHandlerTest extends InstrumentationTestCase {
-
-    private MockContentResolver mMockContentResolver;
-
-    private static final String AUTHORITY = "com.android.contacts.common.unittest";
-    private static final Uri URI = Uri.parse("content://" + AUTHORITY);
-    private static final String[] PROJECTION = new String[]{"column1", "column2"};
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        mMockContentResolver = new MockContentResolver();
-        final MockContentProvider mMockContentProvider = new MockContentProvider() {
-            @Override
-            public Cursor query(Uri uri, String[] projection, String selection,
-                    String[] selectionArgs,
-                    String sortOrder) {
-                return null;
-            }
-        };
-
-        mMockContentResolver.addProvider(AUTHORITY, mMockContentProvider);
-    }
-
-    public void testCursorIsNotNull() throws Throwable {
-
-        final CountDownLatch latch = new CountDownLatch(1);
-        final ObjectHolder<Cursor> cursorHolder = ObjectHolder.newInstance();
-        final ObjectHolder<Boolean> ranHolder = ObjectHolder.newInstance(false);
-
-        runTestOnUiThread(new Runnable() {
-
-            @Override
-            public void run() {
-
-                NoNullCursorAsyncQueryHandler handler = new NoNullCursorAsyncQueryHandler(
-                        mMockContentResolver) {
-                    @Override
-                    protected void onNotNullableQueryComplete(int token, Object cookie,
-                            Cursor cursor) {
-                        cursorHolder.obj = cursor;
-                        ranHolder.obj = true;
-                        latch.countDown();
-                    }
-                };
-                handler.startQuery(1, null, URI, PROJECTION, null, null, null);
-            }
-        });
-
-        latch.await(5, TimeUnit.SECONDS);
-        assertFalse(cursorHolder.obj == null);
-        assertTrue(ranHolder.obj);
-    }
-
-    public void testCursorContainsCorrectCookies() throws Throwable {
-        final ObjectHolder<Boolean> ranHolder = ObjectHolder.newInstance(false);
-        final CountDownLatch latch = new CountDownLatch(1);
-        final ObjectHolder<Object> cookieHolder = ObjectHolder.newInstance();
-        final String cookie = "TEST COOKIE";
-        runTestOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                final NoNullCursorAsyncQueryHandler handler = new NoNullCursorAsyncQueryHandler(
-                        mMockContentResolver) {
-                    @Override
-                    protected void onNotNullableQueryComplete(int token, Object cookie,
-                            Cursor cursor) {
-                        ranHolder.obj = true;
-                        cookieHolder.obj = cookie;
-                        latch.countDown();
-                    }
-                };
-                handler.startQuery(1, cookie, URI, PROJECTION, null, null, null);
-            }
-        });
-
-        latch.await(5, TimeUnit.SECONDS);
-        assertSame(cookie, cookieHolder.obj);
-        assertTrue(ranHolder.obj);
-    }
-
-    public void testCursorContainsCorrectColumns() throws Throwable {
-        final ObjectHolder<Boolean> ranHolder = ObjectHolder.newInstance(false);
-        final CountDownLatch latch = new CountDownLatch(1);
-        final ObjectHolder<Cursor> cursorHolder = ObjectHolder.newInstance();
-        final String cookie = "TEST COOKIE";
-        runTestOnUiThread(new Runnable() {
-            @Override
-            public void run() {
-                final NoNullCursorAsyncQueryHandler handler = new NoNullCursorAsyncQueryHandler(
-                        mMockContentResolver) {
-                    @Override
-                    protected void onNotNullableQueryComplete(int token, Object cookie,
-                            Cursor cursor) {
-                        ranHolder.obj = true;
-                        cursorHolder.obj = cursor;
-                        latch.countDown();
-                    }
-                };
-                handler.startQuery(1, cookie, URI, PROJECTION, null, null, null);
-            }
-        });
-
-        latch.await(5, TimeUnit.SECONDS);
-        assertSame(PROJECTION, cursorHolder.obj.getColumnNames());
-        assertTrue(ranHolder.obj);
-    }
-
-    private static class ObjectHolder<T> {
-        public T obj;
-
-        public static <E> ObjectHolder<E> newInstance() {
-            return new ObjectHolder<E>();
-        }
-
-        public static <E> ObjectHolder<E> newInstance(E value) {
-            ObjectHolder<E> holder = new ObjectHolder<E>();
-            holder.obj = value;
-            return holder;
-        }
-    }
-}
diff --git a/tests/src/com/android/contacts/common/database/SimContactDaoTests.java b/tests/src/com/android/contacts/common/database/SimContactDaoTests.java
deleted file mode 100644
index ec03f0f..0000000
--- a/tests/src/com/android/contacts/common/database/SimContactDaoTests.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.database;
-
-import android.content.ContentProviderOperation;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.database.Cursor;
-import android.database.CursorWrapper;
-import android.database.DatabaseUtils;
-import android.provider.ContactsContract;
-import android.support.annotation.RequiresApi;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.LargeTest;
-import android.support.test.filters.MediumTest;
-import android.support.test.filters.SdkSuppress;
-import android.support.test.filters.Suppress;
-import android.support.test.runner.AndroidJUnit4;
-
-import com.android.contacts.common.model.SimContact;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.tests.AccountsTestHelper;
-import com.android.contacts.tests.SimContactsTestHelper;
-
-import org.hamcrest.BaseMatcher;
-import org.hamcrest.Description;
-import org.hamcrest.Matcher;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.experimental.runners.Enclosed;
-import org.junit.runner.RunWith;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static android.os.Build.VERSION_CODES;
-import static org.hamcrest.Matchers.allOf;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-@RunWith(Enclosed.class)
-public class SimContactDaoTests {
-
-    // On pre-M addAccountExplicitly (which we call via AccountsTestHelper) causes a
-    // SecurityException to be thrown unless we add AUTHENTICATE_ACCOUNTS permission to the app
-    // manifest. Instead of adding the extra permission just for tests we'll just only run them
-    // on M or newer
-    @SdkSuppress(minSdkVersion = VERSION_CODES.M)
-    // Lollipop MR1 is required for removeAccountExplicitly
-    @RequiresApi(api = VERSION_CODES.LOLLIPOP_MR1)
-    @LargeTest
-    @RunWith(AndroidJUnit4.class)
-    public static class ImportIntegrationTest {
-        private AccountWithDataSet mAccount;
-        private AccountsTestHelper mAccountsHelper;
-        private ContentResolver mResolver;
-
-        @Before
-        public void setUp() throws Exception {
-            mAccountsHelper = new AccountsTestHelper();
-            mAccount = mAccountsHelper.addTestAccount();
-            mResolver = getContext().getContentResolver();
-        }
-
-        @After
-        public void tearDown() throws Exception {
-            mAccountsHelper.cleanup();
-        }
-
-        @Test
-        public void importFromSim() throws Exception {
-            final SimContactDao sut = SimContactDao.create(getContext());
-
-            sut.importContacts(Arrays.asList(
-                    new SimContact(1, "Test One", "15095550101", null),
-                    new SimContact(2, "Test Two", "15095550102", null),
-                    new SimContact(3, "Test Three", "15095550103", new String[] {
-                            "user@example.com", "user2@example.com"
-                    })
-            ), mAccount);
-
-            Cursor cursor = queryContactWithName("Test One");
-            assertThat(cursor, hasCount(2));
-            assertThat(cursor, hasName("Test One"));
-            assertThat(cursor, hasPhone("15095550101"));
-            cursor.close();
-
-            cursor = queryContactWithName("Test Two");
-            assertThat(cursor, hasCount(2));
-            assertThat(cursor, hasName("Test Two"));
-            assertThat(cursor, hasPhone("15095550102"));
-            cursor.close();
-
-            cursor = queryContactWithName("Test Three");
-            assertThat(cursor, hasCount(4));
-            assertThat(cursor, hasName("Test Three"));
-            assertThat(cursor, hasPhone("15095550103"));
-            assertThat(cursor, allOf(hasEmail("user@example.com"), hasEmail("user2@example.com")));
-            cursor.close();
-        }
-
-        @Test
-        public void importContactWhichOnlyHasName() throws Exception {
-            final SimContactDao sut = SimContactDao.create(getContext());
-
-            sut.importContacts(Arrays.asList(
-                    new SimContact(1, "Test importJustName", null, null)
-            ), mAccount);
-
-            Cursor cursor = queryAllDataInAccount();
-
-            assertThat(cursor, hasCount(1));
-            assertThat(cursor, hasName("Test importJustName"));
-            cursor.close();
-        }
-
-        @Test
-        public void importContactWhichOnlyHasPhone() throws Exception {
-            final SimContactDao sut = SimContactDao.create(getContext());
-
-            sut.importContacts(Arrays.asList(
-                    new SimContact(1, null, "15095550111", null)
-            ), mAccount);
-
-            Cursor cursor = queryAllDataInAccount();
-
-            assertThat(cursor, hasCount(1));
-            assertThat(cursor, hasPhone("15095550111"));
-            cursor.close();
-        }
-
-        @Test
-        public void ignoresEmptyContacts() throws Exception {
-            final SimContactDao sut = SimContactDao.create(getContext());
-
-            // This probably isn't possible but we'll test it to demonstrate expected behavior and
-            // just in case it does occur
-            sut.importContacts(Arrays.asList(
-                    new SimContact(1, null, null, null),
-                    new SimContact(2, null, null, null),
-                    new SimContact(3, null, null, null),
-                    new SimContact(4, "Not null", null, null)
-            ), mAccount);
-
-            final Cursor contactsCursor = queryAllRawContactsInAccount();
-            assertThat(contactsCursor, hasCount(1));
-            contactsCursor.close();
-
-            final Cursor dataCursor = queryAllDataInAccount();
-            assertThat(dataCursor, hasCount(1));
-
-            dataCursor.close();
-        }
-
-        private Cursor queryAllRawContactsInAccount() {
-            return new StringableCursor(mResolver.query(ContactsContract.RawContacts.CONTENT_URI,
-                    null, ContactsContract.RawContacts.ACCOUNT_NAME + "=? AND " +
-                            ContactsContract.RawContacts.ACCOUNT_TYPE+ "=?",
-                    new String[] {
-                            mAccount.name,
-                            mAccount.type
-                    }, null));
-        }
-
-        private Cursor queryAllDataInAccount() {
-            return new StringableCursor(mResolver.query(ContactsContract.Data.CONTENT_URI, null,
-                    ContactsContract.RawContacts.ACCOUNT_NAME + "=? AND " +
-                            ContactsContract.RawContacts.ACCOUNT_TYPE+ "=?",
-                    new String[] {
-                            mAccount.name,
-                            mAccount.type
-                    }, null));
-        }
-
-        private Cursor queryContactWithName(String name) {
-            return new StringableCursor(mResolver.query(ContactsContract.Data.CONTENT_URI, null,
-                    ContactsContract.RawContacts.ACCOUNT_NAME + "=? AND " +
-                            ContactsContract.RawContacts.ACCOUNT_TYPE+ "=? AND " +
-                            ContactsContract.Data.DISPLAY_NAME + "=?",
-                    new String[] {
-                            mAccount.name,
-                            mAccount.type,
-                            name
-                    }, null));
-        }
-    }
-
-    @SdkSuppress(minSdkVersion = VERSION_CODES.M)
-    // Lollipop MR1 is required for removeAccountExplicitly
-    @RequiresApi(api = VERSION_CODES.LOLLIPOP_MR1)
-    @MediumTest
-    @RunWith(AndroidJUnit4.class)
-    public static class ExistingContactsTest {
-
-        private Context mContext;
-        private AccountsTestHelper mAccountHelper;
-        private AccountWithDataSet mAccount;
-        // We need to generate something distinct to prevent flakiness on devices that may not
-        // start with an empty CP2 DB
-        private String mNameSuffix = "";
-
-        @Before
-        public void setUp() {
-            mContext = InstrumentationRegistry.getTargetContext();
-            mAccountHelper = new AccountsTestHelper(InstrumentationRegistry.getContext());
-            mAccount = mAccountHelper.addTestAccount();
-            mNameSuffix = "testAt" + System.nanoTime();
-        }
-
-        @After
-        public void tearDown() {
-            mAccountHelper.cleanup();
-        }
-
-        @Test
-        public void findAccountsOfExistingContactsReturnsEmptyMapWhenNoMatchingContactsExist() {
-            final SimContactDao sut = createDao();
-
-            final List<SimContact> contacts = Arrays.asList(
-                    new SimContact(1, "Name 1 " + mNameSuffix, "15095550101", null),
-                    new SimContact(2, "Name 2 " + mNameSuffix, "15095550102", null),
-                    new SimContact(3, "Name 3 " + mNameSuffix, "15095550103", null),
-                    new SimContact(4, "Name 4 " + mNameSuffix, "15095550104", null));
-
-            final Map<AccountWithDataSet, Set<SimContact>> existing = sut
-                    .findAccountsOfExistingSimContacts(contacts);
-
-            assertTrue(existing.isEmpty());
-        }
-
-        private SimContactDao createDao() {
-            return SimContactDao.create(mContext);
-        }
-    }
-
-    @LargeTest
-    // suppressed because failed assumptions are reported as test failures by the build server
-    @Suppress
-    @RunWith(AndroidJUnit4.class)
-    public static class ReadIntegrationTest {
-        private SimContactsTestHelper mSimTestHelper;
-        private ArrayList<ContentProviderOperation> mSimSnapshot;
-
-        @Before
-        public void setUp() throws Exception {
-            mSimTestHelper = new SimContactsTestHelper();
-
-            mSimTestHelper.assumeSimWritable();
-            if (!mSimTestHelper.isSimWritable()) return;
-
-            mSimSnapshot = mSimTestHelper.captureRestoreSnapshot();
-            mSimTestHelper.deleteAllSimContacts();
-        }
-
-        @After
-        public void tearDown() throws Exception {
-            mSimTestHelper.restore(mSimSnapshot);
-        }
-
-        @Test
-        public void readFromSim() {
-            mSimTestHelper.addSimContact("Test Simone", "15095550101");
-            mSimTestHelper.addSimContact("Test Simtwo", "15095550102");
-            mSimTestHelper.addSimContact("Test Simthree", "15095550103");
-
-            final SimContactDao sut = SimContactDao.create(getContext());
-            final ArrayList<SimContact> contacts = sut.loadSimContacts();
-
-            assertThat(contacts.get(0), isSimContactWithNameAndPhone("Test Simone", "15095550101"));
-            assertThat(contacts.get(1), isSimContactWithNameAndPhone("Test Simtwo", "15095550102"));
-            assertThat(contacts.get(2),
-                    isSimContactWithNameAndPhone("Test Simthree", "15095550103"));
-        }
-    }
-
-    private static Matcher<SimContact> isSimContactWithNameAndPhone(final String name,
-            final String phone) {
-        return new BaseMatcher<SimContact>() {
-            @Override
-            public boolean matches(Object o) {
-                if (!(o instanceof SimContact))  return false;
-
-                SimContact other = (SimContact) o;
-
-                return name.equals(other.getName())
-                        && phone.equals(other.getPhone());
-            }
-
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("SimContact with name=" + name + " and phone=" +
-                        phone);
-            }
-        };
-    }
-
-    private static Matcher<Cursor> hasCount(final int count) {
-        return new BaseMatcher<Cursor>() {
-            @Override
-            public boolean matches(Object o) {
-                if (!(o instanceof Cursor)) return false;
-                return ((Cursor)o).getCount() == count;
-            }
-
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("Cursor with " + count + " rows");
-            }
-        };
-    }
-
-    private static Matcher<Cursor> hasMimeType(String type) {
-        return hasValueForColumn(ContactsContract.Data.MIMETYPE, type);
-    }
-
-    private static Matcher<Cursor> hasValueForColumn(final String column, final String value) {
-        return new BaseMatcher<Cursor>() {
-
-            @Override
-            public boolean matches(Object o) {
-                if (!(o instanceof Cursor)) return false;
-                final Cursor cursor = (Cursor)o;
-
-                final int index = cursor.getColumnIndexOrThrow(column);
-                return value.equals(cursor.getString(index));
-            }
-
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("Cursor with " + column + "=" + value);
-            }
-        };
-    }
-
-    private static Matcher<Cursor> hasRowMatching(final Matcher<Cursor> rowMatcher) {
-        return new BaseMatcher<Cursor>() {
-            @Override
-            public boolean matches(Object o) {
-                if (!(o instanceof Cursor)) return false;
-                final Cursor cursor = (Cursor)o;
-
-                cursor.moveToPosition(-1);
-                while (cursor.moveToNext()) {
-                    if (rowMatcher.matches(cursor)) return true;
-                }
-
-                return false;
-            }
-
-            @Override
-            public void describeTo(Description description) {
-                description.appendText("Cursor with row matching ");
-                rowMatcher.describeTo(description);
-            }
-        };
-    }
-
-    private static Matcher<Cursor> hasName(final String name) {
-        return hasRowMatching(allOf(
-                hasMimeType(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE),
-                hasValueForColumn(
-                        ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)));
-    }
-
-    private static Matcher<Cursor> hasPhone(final String phone) {
-        return hasRowMatching(allOf(
-                hasMimeType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE),
-                hasValueForColumn(
-                        ContactsContract.CommonDataKinds.Phone.NUMBER, phone)));
-    }
-
-    private static Matcher<Cursor> hasEmail(final String email) {
-        return hasRowMatching(allOf(
-                hasMimeType(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE),
-                hasValueForColumn(
-                        ContactsContract.CommonDataKinds.Email.ADDRESS, email)));
-    }
-
-    static class StringableCursor extends CursorWrapper {
-        public StringableCursor(Cursor cursor) {
-            super(cursor);
-        }
-
-        @Override
-        public String toString() {
-            final Cursor wrapped = getWrappedCursor();
-
-            if (wrapped.getCount() == 0) {
-                return "Empty Cursor";
-            }
-
-            return DatabaseUtils.dumpCursorToString(wrapped);
-        }
-    }
-
-    static Context getContext() {
-        return InstrumentationRegistry.getTargetContext();
-    }
-}
diff --git a/tests/src/com/android/contacts/common/format/FormatUtilsTests.java b/tests/src/com/android/contacts/common/format/FormatUtilsTests.java
deleted file mode 100644
index 8f4f772..0000000
--- a/tests/src/com/android/contacts/common/format/FormatUtilsTests.java
+++ /dev/null
@@ -1,114 +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.common.format;
-
-import android.database.CharArrayBuffer;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-/**
- * Test cases for format utility methods.
- */
-@SmallTest
-public class FormatUtilsTests extends AndroidTestCase {
-
-    public void testOverlapPoint() throws Exception {
-        assertEquals(2, FormatUtils.overlapPoint("abcde", "cdefg"));
-        assertEquals(-1, FormatUtils.overlapPoint("John Doe", "John Doe"));
-        assertEquals(5, FormatUtils.overlapPoint("John Doe", "Doe, John"));
-        assertEquals(-1, FormatUtils.overlapPoint("Mr. John Doe", "Mr. Doe, John"));
-        assertEquals(13, FormatUtils.overlapPoint("John Herbert Doe", "Doe, John Herbert"));
-    }
-
-    public void testCopyToCharArrayBuffer() {
-        CharArrayBuffer charArrayBuffer = new CharArrayBuffer(20);
-        checkCopyToCharArrayBuffer(charArrayBuffer, null, 0);
-        checkCopyToCharArrayBuffer(charArrayBuffer, "", 0);
-        checkCopyToCharArrayBuffer(charArrayBuffer, "test", 4);
-        // Check that it works after copying something into it.
-        checkCopyToCharArrayBuffer(charArrayBuffer, "", 0);
-        checkCopyToCharArrayBuffer(charArrayBuffer, "test", 4);
-        checkCopyToCharArrayBuffer(charArrayBuffer, null, 0);
-        // This requires a resize of the actual buffer.
-        checkCopyToCharArrayBuffer(charArrayBuffer, "test test test test test", 24);
-    }
-
-    public void testCharArrayBufferToString() {
-        checkCharArrayBufferToString("");
-        checkCharArrayBufferToString("test");
-        checkCharArrayBufferToString("test test test test test");
-    }
-
-    /** Checks that copying a string into a {@link CharArrayBuffer} and back works correctly. */
-    private void checkCharArrayBufferToString(String text) {
-        CharArrayBuffer buffer = new CharArrayBuffer(20);
-        FormatUtils.copyToCharArrayBuffer(text, buffer);
-        assertEquals(text, FormatUtils.charArrayBufferToString(buffer));
-    }
-
-    /**
-     * Checks that copying into the char array buffer copies the values correctly.
-     */
-    private void checkCopyToCharArrayBuffer(CharArrayBuffer buffer, String value, int length) {
-        FormatUtils.copyToCharArrayBuffer(value, buffer);
-        assertEquals(length, buffer.sizeCopied);
-        for (int index = 0; index < length; ++index) {
-            assertEquals(value.charAt(index), buffer.data[index]);
-        }
-    }
-
-    public void testIndexOfWordPrefix_NullPrefix() {
-        assertEquals(-1, FormatUtils.indexOfWordPrefix("test", null));
-    }
-
-    public void testIndexOfWordPrefix_NullText() {
-        assertEquals(-1, FormatUtils.indexOfWordPrefix(null, "TE"));
-    }
-
-    public void testIndexOfWordPrefix_MatchingPrefix() {
-        checkIndexOfWordPrefix("test", "TE", 0);
-        checkIndexOfWordPrefix("Test", "TE", 0);
-        checkIndexOfWordPrefix("TEst", "TE", 0);
-        checkIndexOfWordPrefix("TEST", "TE", 0);
-        checkIndexOfWordPrefix("a test", "TE", 2);
-        checkIndexOfWordPrefix("test test", "TE", 0);
-        checkIndexOfWordPrefix("a test test", "TE", 2);
-    }
-
-    public void testIndexOfWordPrefix_NotMatchingPrefix() {
-        checkIndexOfWordPrefix("test", "TA", -1);
-        checkIndexOfWordPrefix("test type theme", "TA", -1);
-        checkIndexOfWordPrefix("atest retest pretest", "TEST", -1);
-        checkIndexOfWordPrefix("tes", "TEST", -1);
-    }
-
-    public void testIndexOfWordPrefix_LowerCase() {
-        // The prefix match only works if the prefix is un upper case.
-        checkIndexOfWordPrefix("test", "te", -1);
-    }
-
-    /**
-     * Checks that getting the index of a word prefix in the given text returns the expected index.
-     *
-     * @param text the text in which to look for the word
-     * @param wordPrefix the word prefix to look for
-     * @param expectedIndex the expected value to be returned by the function
-     */
-    private void checkIndexOfWordPrefix(String text, String wordPrefix, int expectedIndex) {
-        assertEquals(expectedIndex, FormatUtils.indexOfWordPrefix(text, wordPrefix));
-    }
-}
diff --git a/tests/src/com/android/contacts/common/format/SpannedTestUtils.java b/tests/src/com/android/contacts/common/format/SpannedTestUtils.java
deleted file mode 100644
index bce7057..0000000
--- a/tests/src/com/android/contacts/common/format/SpannedTestUtils.java
+++ /dev/null
@@ -1,86 +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.common.format;
-
-import android.text.Html;
-import android.text.SpannableString;
-import android.text.Spanned;
-import android.text.TextUtils;
-import android.text.style.StyleSpan;
-import android.widget.TextView;
-
-import junit.framework.Assert;
-
-/**
- * Utility class to check the value of spanned text in text views.
- */
-public class SpannedTestUtils {
-    /**
-     * Checks that the text contained in the text view matches the given HTML text.
-     *
-     * @param expectedHtmlText the expected text to be in the text view
-     * @param textView the text view from which to get the text
-     */
-    public static void checkHtmlText(String expectedHtmlText, TextView textView) {
-        String actualHtmlText = Html.toHtml((Spanned) textView.getText());
-        if (TextUtils.isEmpty(expectedHtmlText)) {
-            // If the text is empty, it does not add the <p></p> bits to it.
-            Assert.assertEquals("", actualHtmlText);
-        } else {
-            Assert.assertEquals("<p dir=ltr>" + expectedHtmlText + "</p>\n", actualHtmlText);
-        }
-    }
-
-
-    /**
-     * Assert span exists in the correct location.
-     *
-     * @param seq The spannable string to check.
-     * @param start The starting index.
-     * @param end The ending index.
-     */
-    public static void assertPrefixSpan(CharSequence seq, int start, int end) {
-        Assert.assertTrue(seq instanceof Spanned);
-        Spanned spannable = (Spanned) seq;
-
-        if (start > 0) {
-            Assert.assertEquals(0, getNumForegroundColorSpansBetween(spannable, 0, start - 1));
-        }
-        Assert.assertEquals(1, getNumForegroundColorSpansBetween(spannable, start, end));
-        Assert.assertEquals(0, getNumForegroundColorSpansBetween(spannable, end + 1,
-                spannable.length() - 1));
-    }
-
-    private static int getNumForegroundColorSpansBetween(Spanned value, int start, int end) {
-        return value.getSpans(start, end, StyleSpan.class).length;
-    }
-
-    /**
-     * Asserts that the given character sequence is not a Spanned object and text is correct.
-     *
-     * @param seq The sequence to check.
-     * @param expected The expected text.
-     */
-    public static void assertNotSpanned(CharSequence seq, String expected) {
-        Assert.assertFalse(seq instanceof Spanned);
-        Assert.assertEquals(expected, seq);
-    }
-
-    public static int getNextTransition(SpannableString seq, int start) {
-        return seq.nextSpanTransition(start, seq.length(), StyleSpan.class);
-    }
-}
diff --git a/tests/src/com/android/contacts/common/format/TextHighlighterTest.java b/tests/src/com/android/contacts/common/format/TextHighlighterTest.java
deleted file mode 100644
index 7bf28c5..0000000
--- a/tests/src/com/android/contacts/common/format/TextHighlighterTest.java
+++ /dev/null
@@ -1,109 +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.common.format;
-
-import android.graphics.Typeface;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.text.SpannableString;
-
-import com.android.contacts.common.format.SpannedTestUtils;
-import com.android.contacts.common.format.TextHighlighter;
-
-import junit.framework.TestCase;
-
-/**
- * Unit tests for {@link TextHighlighter}.
- */
-@SmallTest
-public class TextHighlighterTest extends TestCase {
-    private static final int TEST_PREFIX_HIGHLIGHT_COLOR = 0xFF0000;
-
-    /** The object under test. */
-    private TextHighlighter mTextHighlighter;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mTextHighlighter = new TextHighlighter(Typeface.BOLD);
-    }
-
-    public void testApply_EmptyPrefix() {
-        CharSequence seq = mTextHighlighter.applyPrefixHighlight("", "");
-        SpannedTestUtils.assertNotSpanned(seq, "");
-
-        seq = mTextHighlighter.applyPrefixHighlight("test", "");
-        SpannedTestUtils.assertNotSpanned(seq, "test");
-    }
-
-    public void testSetText_MatchingPrefix() {
-        final String prefix = "TE";
-
-        CharSequence seq = mTextHighlighter.applyPrefixHighlight("test", prefix);
-        SpannedTestUtils.assertPrefixSpan(seq, 0, 1);
-
-        seq = mTextHighlighter.applyPrefixHighlight("Test", prefix);
-        SpannedTestUtils.assertPrefixSpan(seq, 0, 1);
-
-        seq = mTextHighlighter.applyPrefixHighlight("TEst", prefix);
-        SpannedTestUtils.assertPrefixSpan(seq, 0, 1);
-
-        seq = mTextHighlighter.applyPrefixHighlight("a test", prefix);
-        SpannedTestUtils.assertPrefixSpan(seq, 2, 3);
-    }
-
-    public void testSetText_NotMatchingPrefix() {
-        final CharSequence seq = mTextHighlighter.applyPrefixHighlight("test", "TA");
-        SpannedTestUtils.assertNotSpanned(seq, "test");
-    }
-
-    public void testSetText_FirstMatch() {
-        final CharSequence seq = mTextHighlighter.applyPrefixHighlight(
-                "a test's tests are not tests", "TE");
-        SpannedTestUtils.assertPrefixSpan(seq, 2, 3);
-    }
-
-    public void testSetText_NoMatchingMiddleOfWord() {
-        final String prefix = "TE";
-        CharSequence seq = mTextHighlighter.applyPrefixHighlight("atest", prefix);
-        SpannedTestUtils.assertNotSpanned(seq, "atest");
-
-        seq = mTextHighlighter.applyPrefixHighlight("atest otest", prefix);
-        SpannedTestUtils.assertNotSpanned(seq, "atest otest");
-
-        seq = mTextHighlighter.applyPrefixHighlight("atest test", prefix);
-        SpannedTestUtils.assertPrefixSpan(seq, 6, 7);
-    }
-
-    public void testSetMask_Highlight() {
-        final SpannableString testString1 = new SpannableString("alongtest");
-        mTextHighlighter.applyMaskingHighlight(testString1, 2, 4);
-        assertEquals(2, SpannedTestUtils.getNextTransition(testString1, 0));
-        assertEquals(4, SpannedTestUtils.getNextTransition(testString1, 2));
-
-        mTextHighlighter.applyMaskingHighlight(testString1, 3, 6);
-        assertEquals(2, SpannedTestUtils.getNextTransition(testString1, 0));
-        assertEquals(4, SpannedTestUtils.getNextTransition(testString1, 3));
-
-        mTextHighlighter.applyMaskingHighlight(testString1, 4, 5);
-        assertEquals(3, SpannedTestUtils.getNextTransition(testString1, 2));
-
-        mTextHighlighter.applyMaskingHighlight(testString1, 7, 8);
-        assertEquals(6, SpannedTestUtils.getNextTransition(testString1, 5));
-        assertEquals(7, SpannedTestUtils.getNextTransition(testString1, 6));
-        assertEquals(8, SpannedTestUtils.getNextTransition(testString1, 7));
-    }
-}
diff --git a/tests/src/com/android/contacts/common/list/ContactListItemViewTest.java b/tests/src/com/android/contacts/common/list/ContactListItemViewTest.java
deleted file mode 100644
index c9b2e6d..0000000
--- a/tests/src/com/android/contacts/common/list/ContactListItemViewTest.java
+++ /dev/null
@@ -1,134 +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.common.list;
-
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.provider.ContactsContract;
-import android.test.ActivityInstrumentationTestCase2;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.widget.TextView;
-
-import com.android.contacts.common.format.SpannedTestUtils;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.preference.ContactsPreferences;
-
-/**
- * Unit tests for {@link com.android.contacts.common.list.ContactListItemView}.
- *
- * It uses an {@link ActivityInstrumentationTestCase2} for {@link PeopleActivity} because we need
- * to have the style properly setup.
- */
-@LargeTest
-public class ContactListItemViewTest extends AndroidTestCase {
-
-    //private IntegrationTestUtils mUtils;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        // This test requires that the screen be turned on.
-        //mUtils = new IntegrationTestUtils(getInstrumentation());
-        //mUtils.acquireScreenWakeLock(getInstrumentation().getTargetContext());
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        //mUtils.releaseScreenWakeLock();
-        super.tearDown();
-    }
-
-    public void testShowDisplayName_Simple() {
-        Cursor cursor = createCursor("John Doe", "Doe John");
-        ContactListItemView view = createView();
-
-        view.showDisplayName(cursor, 0, ContactsPreferences.DISPLAY_ORDER_PRIMARY);
-
-        assertEquals(view.getNameTextView().getText().toString(), "John Doe");
-    }
-
-    public void testShowDisplayName_Unknown() {
-        Cursor cursor = createCursor("", "");
-        ContactListItemView view = createView();
-
-        view.setUnknownNameText("unknown");
-        view.showDisplayName(cursor, 0, ContactsPreferences.DISPLAY_ORDER_PRIMARY);
-
-        assertEquals(view.getNameTextView().getText().toString(), "unknown");
-    }
-
-    public void testShowDisplayName_WithPrefix() {
-        Cursor cursor = createCursor("John Doe", "Doe John");
-        ContactListItemView view = createView();
-
-        view.setHighlightedPrefix("DOE");
-        view.showDisplayName(cursor, 0, ContactsPreferences.DISPLAY_ORDER_PRIMARY);
-
-        CharSequence seq = view.getNameTextView().getText();
-        assertEquals("John Doe", seq.toString());
-        SpannedTestUtils.assertPrefixSpan(seq, 5, 7);
-        // Talback should be without span tags.
-        assertEquals("John Doe", view.getNameTextView().getContentDescription());
-        assertFalse("John Doe".equals(seq));
-    }
-
-    public void testShowDisplayName_WithPrefixReversed() {
-        Cursor cursor = createCursor("John Doe", "Doe John");
-        ContactListItemView view = createView();
-
-        view.setHighlightedPrefix("DOE");
-        view.showDisplayName(cursor, 0, ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
-
-        CharSequence seq = view.getNameTextView().getText();
-        assertEquals("John Doe", seq.toString());
-        SpannedTestUtils.assertPrefixSpan(seq, 5, 7);
-    }
-
-    public void testSetSnippet_Prefix() {
-        ContactListItemView view = createView();
-        view.setHighlightedPrefix("TEST");
-        view.setSnippet("This is a test");
-
-        CharSequence seq = view.getSnippetView().getText();
-
-        assertEquals("This is a test", seq.toString());
-        SpannedTestUtils.assertPrefixSpan(seq, 10, 13);
-    }
-
-    /** Creates the view to be tested. */
-    private ContactListItemView createView() {
-        ContactListItemView view = new ContactListItemView(getContext());
-        // Set the name view to use a Spannable to represent its content.
-        view.getNameTextView().setText("", TextView.BufferType.SPANNABLE);
-        return view;
-    }
-
-    /**
-     * Creates a cursor containing a pair of values.
-     *
-     * @param name the name to insert in the first column of the cursor
-     * @param alternateName the alternate name to insert in the second column of the cursor
-     * @return the newly created cursor
-     */
-    private Cursor createCursor(String name, String alternateName) {
-        MatrixCursor cursor = new MatrixCursor(new String[]{"Name", "AlternateName"});
-        cursor.moveToFirst();
-        cursor.addRow(new Object[]{name, alternateName});
-        return cursor;
-    }
-}
diff --git a/tests/src/com/android/contacts/common/model/AccountTypeManagerTest.java b/tests/src/com/android/contacts/common/model/AccountTypeManagerTest.java
deleted file mode 100644
index 82200ed..0000000
--- a/tests/src/com/android/contacts/common/model/AccountTypeManagerTest.java
+++ /dev/null
@@ -1,273 +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.common.model;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountTypeWithDataSet;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.account.GoogleAccountType;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-
-import static org.mockito.Mockito.when;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Test case for {@link com.android.contacts.common.model.AccountTypeManager}.
- *
- * adb shell am instrument -w -e class com.android.contacts.model.AccountTypeManagerTest \
-       com.android.contacts.tests/android.test.InstrumentationTestRunner
- */
-@SmallTest
-public class AccountTypeManagerTest extends AndroidTestCase {
-
-    private static final Account[] ACCOUNTS = new Account[2];
-    static {
-        ACCOUNTS[0] = new Account("name1", GoogleAccountType.ACCOUNT_TYPE);
-        ACCOUNTS[1] = new Account("name2", GoogleAccountType.ACCOUNT_TYPE);
-    }
-
-    @Mock private AccountManager mAccountManager;
-    @Mock private SharedPreferences mPrefs;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        System.setProperty("dexmaker.dexcache", getContext().getCacheDir().getPath());
-        MockitoAnnotations.initMocks(this);
-    }
-
-    public void testFindAllInvitableAccountTypes() {
-        final Context c = getContext();
-
-        // Define account types.
-        final AccountType typeA = new MockAccountType("type1", null, null);
-        final AccountType typeB = new MockAccountType("type1", "minus", null);
-        final AccountType typeC = new MockAccountType("type2", null, "c");
-        final AccountType typeD = new MockAccountType("type2", "minus", "d");
-
-        // Define users
-        final AccountWithDataSet accountA1 = createAccountWithDataSet("a1", typeA);
-        final AccountWithDataSet accountC1 = createAccountWithDataSet("c1", typeC);
-        final AccountWithDataSet accountC2 = createAccountWithDataSet("c2", typeC);
-        final AccountWithDataSet accountD1 = createAccountWithDataSet("d1", typeD);
-
-        // empty - empty
-        Map<AccountTypeWithDataSet, AccountType> types =
-                AccountTypeManagerImpl.findAllInvitableAccountTypes(c,
-                        buildAccounts(), buildAccountTypes());
-        assertEquals(0, types.size());
-        try {
-            types.clear();
-            fail("Returned Map should be unmodifiable.");
-        } catch (UnsupportedOperationException ok) {
-        }
-
-        // No invite support, no accounts
-        verifyAccountTypes(
-                buildAccounts(),
-                buildAccountTypes(typeA, typeB)
-                /* empty */
-                );
-
-        // No invite support, with accounts
-        verifyAccountTypes(
-                buildAccounts(accountA1),
-                buildAccountTypes(typeA)
-                /* empty */
-                );
-
-        // With invite support, no accounts
-        verifyAccountTypes(
-                buildAccounts(),
-                buildAccountTypes(typeC)
-                /* empty */
-                );
-
-        // With invite support, 1 account
-        verifyAccountTypes(
-                buildAccounts(accountC1),
-                buildAccountTypes(typeC),
-                typeC
-                );
-
-        // With invite support, 2 account
-        verifyAccountTypes(
-                buildAccounts(accountC1, accountC2),
-                buildAccountTypes(typeC),
-                typeC
-                );
-
-        // Combinations...
-        verifyAccountTypes(
-                buildAccounts(accountA1),
-                buildAccountTypes(typeA, typeC)
-                /* empty */
-                );
-
-        verifyAccountTypes(
-                buildAccounts(accountC1, accountA1),
-                buildAccountTypes(typeA, typeC),
-                typeC
-                );
-
-        verifyAccountTypes(
-                buildAccounts(accountC1, accountA1),
-                buildAccountTypes(typeD, typeA, typeC),
-                typeC
-                );
-
-        verifyAccountTypes(
-                buildAccounts(accountC1, accountA1, accountD1),
-                buildAccountTypes(typeD, typeA, typeC, typeB),
-                typeC, typeD
-                );
-    }
-
-    private static AccountWithDataSet createAccountWithDataSet(String name, AccountType type) {
-        return new AccountWithDataSet(name, type.accountType, type.dataSet);
-    }
-
-    /**
-     * Array of {@link AccountType} -> {@link Map}
-     */
-    private static Map<AccountTypeWithDataSet, AccountType> buildAccountTypes(AccountType... types) {
-        final HashMap<AccountTypeWithDataSet, AccountType> result = Maps.newHashMap();
-        for (AccountType type : types) {
-            result.put(type.getAccountTypeAndDataSet(), type);
-        }
-        return result;
-    }
-
-    /**
-     * Array of {@link AccountWithDataSet} -> {@link Collection}
-     */
-    private static Collection<AccountWithDataSet> buildAccounts(AccountWithDataSet... accounts) {
-        final List<AccountWithDataSet> result = Lists.newArrayList();
-        for (AccountWithDataSet account : accounts) {
-            result.add(account);
-        }
-        return result;
-    }
-
-    /**
-     * Executes {@link AccountTypeManagerImpl#findInvitableAccountTypes} and verifies the
-     * result.
-     */
-    private void verifyAccountTypes(
-            Collection<AccountWithDataSet> accounts,
-            Map<AccountTypeWithDataSet, AccountType> types,
-            AccountType... expectedInvitableTypes
-            ) {
-        Map<AccountTypeWithDataSet, AccountType> result =
-                AccountTypeManagerImpl.findAllInvitableAccountTypes(getContext(), accounts, types);
-        for (AccountType type : expectedInvitableTypes) {
-            assertTrue("Result doesn't contain type=" + type.getAccountTypeAndDataSet(),
-                    result.containsKey(type.getAccountTypeAndDataSet()));
-        }
-        final int numExcessTypes = result.size() - expectedInvitableTypes.length;
-        assertEquals("Result contains " + numExcessTypes + " excess type(s)", 0, numExcessTypes);
-    }
-
-    private static class MockAccountType extends AccountType {
-        private final String mInviteContactActivityClassName;
-
-        public MockAccountType(String type, String dataSet, String inviteContactActivityClassName) {
-            accountType = type;
-            this.dataSet = dataSet;
-            mInviteContactActivityClassName = inviteContactActivityClassName;
-        }
-
-        @Override
-        public String getInviteContactActivityClassName() {
-            return mInviteContactActivityClassName;
-        }
-
-        @Override
-        public boolean isGroupMembershipEditable() {
-            return false;
-        }
-
-        @Override
-        public boolean areContactsWritable() {
-            return false;
-        }
-    }
-
-
-    public void testGetDefaultAccount_NoAccounts() {
-        assertNull(getDefaultGoogleAccountName());
-    }
-
-    public void testGetDefaultAccount_NoAccounts_DefaultPreferenceSet() {
-        when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
-                getDefaultAccountPreference("name1", GoogleAccountType.ACCOUNT_TYPE));
-        assertNull(getDefaultGoogleAccountName());
-    }
-
-    public void testGetDefaultAccount_NoDefaultAccountPreferenceSet() {
-        when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
-        assertEquals("name1", getDefaultGoogleAccountName());
-    }
-
-    public void testGetDefaultAccount_DefaultAccountPreferenceSet() {
-        when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
-        when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
-                getDefaultAccountPreference("name2", GoogleAccountType.ACCOUNT_TYPE));
-        assertEquals("name2", getDefaultGoogleAccountName());
-    }
-
-    public void testGetDefaultAccount_DefaultAccountPreferenceSet_NonGoogleAccountType() {
-        when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
-        when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
-                getDefaultAccountPreference("name3", "type3"));
-        assertEquals("name1", getDefaultGoogleAccountName());
-    }
-
-    public void testGetDefaultAccount_DefaultAccountPreferenceSet_UnknownName() {
-        when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
-        when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
-                getDefaultAccountPreference("name4",GoogleAccountType.ACCOUNT_TYPE));
-        assertEquals("name1", getDefaultGoogleAccountName());
-    }
-
-    private final String getDefaultGoogleAccountName() {
-        // We don't need the real preference key value since it's mocked
-        final Account account = AccountTypeManager.getDefaultGoogleAccount(
-                mAccountManager, mPrefs, "contact_editor_default_account_key");
-        return account == null ? null : account.name;
-    }
-
-    private static final String getDefaultAccountPreference(String name, String type) {
-        return new AccountWithDataSet(name, type, /* dataSet */ null).stringify();
-    }
-}
diff --git a/tests/src/com/android/contacts/common/model/AccountWithDataSetTest.java b/tests/src/com/android/contacts/common/model/AccountWithDataSetTest.java
deleted file mode 100644
index 9339063..0000000
--- a/tests/src/com/android/contacts/common/model/AccountWithDataSetTest.java
+++ /dev/null
@@ -1,131 +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.common.model;
-
-import android.os.Bundle;
-import android.test.AndroidTestCase;
-import android.test.MoreAsserts;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.google.common.collect.Lists;
-
-import java.util.List;
-
-/**
- * Test case for {@link AccountWithDataSet}.
- *
- * adb shell am instrument -w -e class com.android.contacts.model.AccountWithDataSetTest \
-       com.android.contacts.tests/android.test.InstrumentationTestRunner
- */
-@SmallTest
-public class AccountWithDataSetTest extends AndroidTestCase {
-    public void testStringifyAndUnstringify() {
-        AccountWithDataSet a1 = new AccountWithDataSet("name1", "typeA", null);
-        AccountWithDataSet a2 = new AccountWithDataSet("name2", "typeB", null);
-        AccountWithDataSet a3 = new AccountWithDataSet("name3", "typeB", "dataset");
-
-        // stringify() & unstringify
-        AccountWithDataSet a1r = AccountWithDataSet.unstringify(a1.stringify());
-        AccountWithDataSet a2r = AccountWithDataSet.unstringify(a2.stringify());
-        AccountWithDataSet a3r = AccountWithDataSet.unstringify(a3.stringify());
-
-        assertEquals(a1, a1r);
-        assertEquals(a2, a2r);
-        assertEquals(a3, a3r);
-
-        MoreAsserts.assertNotEqual(a1, a2r);
-        MoreAsserts.assertNotEqual(a1, a3r);
-
-        MoreAsserts.assertNotEqual(a2, a1r);
-        MoreAsserts.assertNotEqual(a2, a3r);
-
-        MoreAsserts.assertNotEqual(a3, a1r);
-        MoreAsserts.assertNotEqual(a3, a2r);
-    }
-
-    public void testStringifyAndUnstringifyLocalAccount() {
-        final String stringified = AccountWithDataSet.getNullAccount().stringify();
-
-        final AccountWithDataSet restored = AccountWithDataSet.unstringify(stringified);
-
-        assertEquals(AccountWithDataSet.getNullAccount(), restored);
-    }
-
-    public void testStringifyListAndUnstringify() {
-        AccountWithDataSet a1 = new AccountWithDataSet("name1", "typeA", null);
-        AccountWithDataSet a2 = new AccountWithDataSet("name2", "typeB", null);
-        AccountWithDataSet a3 = new AccountWithDataSet("name3", "typeB", "dataset");
-
-        // Empty list
-        assertEquals(0, stringifyListAndUnstringify().size());
-
-        // 1 element
-        final List<AccountWithDataSet> listA = stringifyListAndUnstringify(a1);
-        assertEquals(1, listA.size());
-        assertEquals(a1, listA.get(0));
-
-        // 2 elements
-        final List<AccountWithDataSet> listB = stringifyListAndUnstringify(a2, a1);
-        assertEquals(2, listB.size());
-        assertEquals(a2, listB.get(0));
-        assertEquals(a1, listB.get(1));
-
-        // 3 elements
-        final List<AccountWithDataSet> listC = stringifyListAndUnstringify(a3, a2, a1);
-        assertEquals(3, listC.size());
-        assertEquals(a3, listC.get(0));
-        assertEquals(a2, listC.get(1));
-        assertEquals(a1, listC.get(2));
-    }
-
-    private static List<AccountWithDataSet> stringifyListAndUnstringify(
-            AccountWithDataSet... accounts) {
-
-        List<AccountWithDataSet> list = Lists.newArrayList(accounts);
-        return AccountWithDataSet.unstringifyList(AccountWithDataSet.stringifyList(list));
-    }
-
-    public void testParcelable() {
-        AccountWithDataSet a1 = new AccountWithDataSet("name1", "typeA", null);
-        AccountWithDataSet a2 = new AccountWithDataSet("name2", "typeB", null);
-        AccountWithDataSet a3 = new AccountWithDataSet("name3", "typeB", "dataset");
-
-        // Parcel them & unpercel.
-        final Bundle b = new Bundle();
-        b.putParcelable("a1", a1);
-        b.putParcelable("a2", a2);
-        b.putParcelable("a3", a3);
-
-        AccountWithDataSet a1r = b.getParcelable("a1");
-        AccountWithDataSet a2r = b.getParcelable("a2");
-        AccountWithDataSet a3r = b.getParcelable("a3");
-
-        assertEquals(a1, a1r);
-        assertEquals(a2, a2r);
-        assertEquals(a3, a3r);
-
-        MoreAsserts.assertNotEqual(a1, a2r);
-        MoreAsserts.assertNotEqual(a1, a3r);
-
-        MoreAsserts.assertNotEqual(a2, a1r);
-        MoreAsserts.assertNotEqual(a2, a3r);
-
-        MoreAsserts.assertNotEqual(a3, a1r);
-        MoreAsserts.assertNotEqual(a3, a2r);
-    }
-}
diff --git a/tests/src/com/android/contacts/common/model/ContactLoaderTest.java b/tests/src/com/android/contacts/common/model/ContactLoaderTest.java
deleted file mode 100644
index 9878a12..0000000
--- a/tests/src/com/android/contacts/common/model/ContactLoaderTest.java
+++ /dev/null
@@ -1,433 +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.common.model;
-
-import android.content.ContentUris;
-import android.net.Uri;
-import android.provider.ContactsContract;
-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.DisplayNameSources;
-import android.provider.ContactsContract.RawContacts;
-import android.provider.ContactsContract.StatusUpdates;
-import android.test.LoaderTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-
-import com.android.contacts.common.compat.CompatUtils;
-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.model.account.BaseAccountType;
-import com.android.contacts.common.testing.InjectedServices;
-import com.android.contacts.common.test.mocks.ContactsMockContext;
-import com.android.contacts.common.test.mocks.MockContentProvider;
-import com.android.contacts.common.test.mocks.MockContentProvider.Query;
-import com.android.contacts.common.test.mocks.MockAccountTypeManager;
-import com.android.contacts.common.util.Constants;
-
-import com.google.common.collect.Lists;
-
-import java.util.List;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
-/**
- * Runs ContactLoader tests for the the contact-detail and editor view.
- */
-@LargeTest
-public class ContactLoaderTest extends LoaderTestCase {
-    private static final long CONTACT_ID = 1;
-    private static final long RAW_CONTACT_ID = 11;
-    private static final long DATA_ID = 21;
-    private static final String LOOKUP_KEY = "aa%12%@!";
-
-    private ContactsMockContext mMockContext;
-    private MockContentProvider mContactsProvider;
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mMockContext = new ContactsMockContext(getContext());
-        mContactsProvider = mMockContext.getContactsProvider();
-
-        InjectedServices services = new InjectedServices();
-        AccountType accountType = new BaseAccountType() {
-            @Override
-            public boolean areContactsWritable() {
-                return false;
-            }
-        };
-        accountType.accountType = "mockAccountType";
-
-        AccountWithDataSet account =
-                new AccountWithDataSet("mockAccountName", "mockAccountType", null);
-
-        AccountTypeManager.setInstanceForTest(
-                new MockAccountTypeManager(
-                        new AccountType[]{accountType}, new AccountWithDataSet[]{account}));
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mMockContext = null;
-        mContactsProvider = null;
-        super.tearDown();
-    }
-
-    private Contact assertLoadContact(Uri uri) {
-        final ContactLoader loader = new ContactLoader(mMockContext, uri, true);
-        return getLoaderResultSynchronously(loader);
-    }
-
-    public void testNullUri() {
-        Contact result = assertLoadContact(null);
-        assertTrue(result.isError());
-    }
-
-    public void testEmptyUri() {
-        Contact result = assertLoadContact(Uri.EMPTY);
-        assertTrue(result.isError());
-    }
-
-    public void testInvalidUri() {
-        Contact result = assertLoadContact(Uri.parse("content://wtf"));
-        assertTrue(result.isError());
-    }
-
-    public void testLoadContactWithContactIdUri() {
-        // Use content Uris that only contain the ID
-        final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
-        final Uri entityUri = Uri.withAppendedPath(baseUri, Contacts.Entity.CONTENT_DIRECTORY);
-        final Uri lookupUri = ContentUris.withAppendedId(
-                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
-                CONTACT_ID);
-
-        ContactQueries queries = new ContactQueries();
-        mContactsProvider.expectTypeQuery(baseUri, Contacts.CONTENT_ITEM_TYPE);
-        queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
-
-        Contact contact = assertLoadContact(baseUri);
-
-        assertEquals(CONTACT_ID, contact.getId());
-        assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
-        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
-        assertEquals(LOOKUP_KEY, contact.getLookupKey());
-        assertEquals(lookupUri, contact.getLookupUri());
-        assertEquals(1, contact.getRawContacts().size());
-        assertEquals(1, contact.getStatuses().size());
-        mContactsProvider.verify();
-    }
-
-    public void testLoadContactWithOldStyleUri() {
-        // Use content Uris that only contain the ID but use the format used in Donut
-        final Uri legacyUri = ContentUris.withAppendedId(
-                Uri.parse("content://contacts"), RAW_CONTACT_ID);
-        final Uri rawContactUri = ContentUris.withAppendedId(
-                RawContacts.CONTENT_URI, RAW_CONTACT_ID);
-        final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
-        final Uri lookupUri = ContentUris.withAppendedId(
-                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
-                CONTACT_ID);
-        final Uri entityUri = Uri.withAppendedPath(lookupUri, Contacts.Entity.CONTENT_DIRECTORY);
-
-        ContactQueries queries = new ContactQueries();
-        queries.fetchContactIdAndLookupFromRawContactUri(rawContactUri, CONTACT_ID, LOOKUP_KEY);
-        queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
-
-        Contact contact = assertLoadContact(legacyUri);
-
-        assertEquals(CONTACT_ID, contact.getId());
-        assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
-        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
-        assertEquals(LOOKUP_KEY, contact.getLookupKey());
-        assertEquals(lookupUri, contact.getLookupUri());
-        assertEquals(1, contact.getRawContacts().size());
-        assertEquals(1, contact.getStatuses().size());
-        if (CompatUtils.isMarshmallowCompatible()) {
-            assertEquals(
-                    1, contact.getRawContacts().get(0).getDataItems().get(0).getCarrierPresence());
-        }
-        mContactsProvider.verify();
-    }
-
-    public void testLoadContactWithRawContactIdUri() {
-        // Use content Uris that only contain the ID but use the format used in Donut
-        final Uri rawContactUri = ContentUris.withAppendedId(
-                RawContacts.CONTENT_URI, RAW_CONTACT_ID);
-        final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
-        final Uri lookupUri = ContentUris.withAppendedId(
-                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
-                CONTACT_ID);
-        final Uri entityUri = Uri.withAppendedPath(lookupUri, Contacts.Entity.CONTENT_DIRECTORY);
-
-        ContactQueries queries = new ContactQueries();
-        mContactsProvider.expectTypeQuery(rawContactUri, RawContacts.CONTENT_ITEM_TYPE);
-        queries.fetchContactIdAndLookupFromRawContactUri(rawContactUri, CONTACT_ID, LOOKUP_KEY);
-        queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
-
-        Contact contact = assertLoadContact(rawContactUri);
-
-        assertEquals(CONTACT_ID, contact.getId());
-        assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
-        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
-        assertEquals(LOOKUP_KEY, contact.getLookupKey());
-        assertEquals(lookupUri, contact.getLookupUri());
-        assertEquals(1, contact.getRawContacts().size());
-        assertEquals(1, contact.getStatuses().size());
-        mContactsProvider.verify();
-    }
-
-    public void testLoadContactWithContactLookupUri() {
-        // Use lookup-style Uris that do not contain the Contact-ID
-        final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
-        final Uri lookupNoIdUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY);
-        final Uri lookupUri = ContentUris.withAppendedId(lookupNoIdUri, CONTACT_ID);
-        final Uri entityUri = Uri.withAppendedPath(
-                lookupNoIdUri, Contacts.Entity.CONTENT_DIRECTORY);
-
-        ContactQueries queries = new ContactQueries();
-        mContactsProvider.expectTypeQuery(lookupNoIdUri, Contacts.CONTENT_ITEM_TYPE);
-        queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
-
-        Contact contact = assertLoadContact(lookupNoIdUri);
-
-        assertEquals(CONTACT_ID, contact.getId());
-        assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
-        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
-        assertEquals(LOOKUP_KEY, contact.getLookupKey());
-        assertEquals(lookupUri, contact.getLookupUri());
-        assertEquals(1, contact.getRawContacts().size());
-        assertEquals(1, contact.getStatuses().size());
-        mContactsProvider.verify();
-    }
-
-    public void testLoadContactWithContactLookupAndIdUri() {
-        // Use lookup-style Uris that also contain the Contact-ID
-        final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
-        final Uri lookupUri = ContentUris.withAppendedId(
-                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
-                CONTACT_ID);
-        final Uri entityUri = Uri.withAppendedPath(lookupUri, Contacts.Entity.CONTENT_DIRECTORY);
-
-        ContactQueries queries = new ContactQueries();
-        mContactsProvider.expectTypeQuery(lookupUri, Contacts.CONTENT_ITEM_TYPE);
-        queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
-
-        Contact contact = assertLoadContact(lookupUri);
-
-        assertEquals(CONTACT_ID, contact.getId());
-        assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
-        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
-        assertEquals(LOOKUP_KEY, contact.getLookupKey());
-        assertEquals(lookupUri, contact.getLookupUri());
-        assertEquals(1, contact.getRawContacts().size());
-        assertEquals(1, contact.getStatuses().size());
-        mContactsProvider.verify();
-    }
-
-    public void testLoadContactWithContactLookupWithIncorrectIdUri() {
-        // Use lookup-style Uris that contain incorrect Contact-ID
-        // (we want to ensure that still the correct contact is chosen)
-        final long wrongContactId = 2;
-        final long wrongRawContactId = 12;
-
-        final String wrongLookupKey = "ab%12%@!";
-        final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
-        final Uri wrongBaseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, wrongContactId);
-        final Uri lookupUri = ContentUris.withAppendedId(
-                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
-                CONTACT_ID);
-        final Uri lookupWithWrongIdUri = ContentUris.withAppendedId(
-                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
-                wrongContactId);
-        final Uri entityUri = Uri.withAppendedPath(lookupWithWrongIdUri,
-                Contacts.Entity.CONTENT_DIRECTORY);
-
-        ContactQueries queries = new ContactQueries();
-        mContactsProvider.expectTypeQuery(lookupWithWrongIdUri, Contacts.CONTENT_ITEM_TYPE);
-        queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
-
-        Contact contact = assertLoadContact(lookupWithWrongIdUri);
-
-        assertEquals(CONTACT_ID, contact.getId());
-        assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
-        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
-        assertEquals(LOOKUP_KEY, contact.getLookupKey());
-        assertEquals(lookupUri, contact.getLookupUri());
-        assertEquals(1, contact.getRawContacts().size());
-        assertEquals(1, contact.getStatuses().size());
-
-        mContactsProvider.verify();
-    }
-
-    public void testLoadContactReturnDirectoryContactWithoutDisplayName() throws JSONException {
-        // Use lookup-style Uri that contains encoded json object which encapsulates the
-        // directory contact. The test json object is:
-        // {
-        //   display_name_source": 40,
-        //   "vnd.android.cursor.item\/contact":{"email":{"data1":"test@google.com" }}
-        // }
-        JSONObject itemJson = new JSONObject();
-        itemJson.put("email", new JSONObject().put("data1", "test@google.com"));
-        JSONObject json = new JSONObject();
-        json.put(Contacts.NAME_RAW_CONTACT_ID, CONTACT_ID);
-        json.put(Contacts.DISPLAY_NAME_SOURCE, DisplayNameSources.STRUCTURED_NAME);
-        json.put(Contacts.CONTENT_ITEM_TYPE, itemJson);
-
-        final Uri lookupUri = Contacts.CONTENT_LOOKUP_URI.buildUpon()
-                .encodedFragment(json.toString())
-                .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, "1")
-                .appendPath(Constants.LOOKUP_URI_ENCODED).build();
-
-        mContactsProvider.expectTypeQuery(lookupUri, Contacts.CONTENT_ITEM_TYPE);
-        Contact contact = assertLoadContact(lookupUri);
-
-        assertEquals(-1, contact.getId());
-        assertEquals(-1, contact.getNameRawContactId());
-        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
-        assertEquals("", contact.getDisplayName());
-        assertEquals(lookupUri, contact.getLookupUri());
-        assertEquals(1, contact.getRawContacts().size());
-        mContactsProvider.verify();
-    }
-
-    class ContactQueries {
-        public void fetchAllData(
-                Uri baseUri, long contactId, long rawContactId, long dataId, String encodedLookup) {
-            final String[] COLUMNS_INTERNAL = new String[] {
-                    Contacts.NAME_RAW_CONTACT_ID, Contacts.DISPLAY_NAME_SOURCE,
-                    Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME,
-                    Contacts.DISPLAY_NAME_ALTERNATIVE, Contacts.PHONETIC_NAME,
-                    Contacts.PHOTO_ID, Contacts.STARRED, Contacts.CONTACT_PRESENCE,
-                    Contacts.CONTACT_STATUS, Contacts.CONTACT_STATUS_TIMESTAMP,
-                    Contacts.CONTACT_STATUS_RES_PACKAGE, Contacts.CONTACT_STATUS_LABEL,
-
-                    Contacts.Entity.CONTACT_ID,
-                    Contacts.Entity.RAW_CONTACT_ID,
-
-                    RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE,
-                    RawContacts.DATA_SET,
-                    RawContacts.DIRTY, RawContacts.VERSION, RawContacts.SOURCE_ID,
-                    RawContacts.SYNC1, RawContacts.SYNC2, RawContacts.SYNC3, RawContacts.SYNC4,
-                    RawContacts.DELETED,
-
-                    Contacts.Entity.DATA_ID,
-
-                    Data.DATA1, Data.DATA2, Data.DATA3, Data.DATA4, Data.DATA5,
-                    Data.DATA6, Data.DATA7, Data.DATA8, Data.DATA9, Data.DATA10,
-                    Data.DATA11, Data.DATA12, Data.DATA13, Data.DATA14, Data.DATA15,
-                    Data.SYNC1, Data.SYNC2, Data.SYNC3, Data.SYNC4,
-                    Data.DATA_VERSION, Data.IS_PRIMARY,
-                    Data.IS_SUPER_PRIMARY, Data.MIMETYPE,
-
-                    GroupMembership.GROUP_SOURCE_ID,
-
-                    Data.PRESENCE, Data.CHAT_CAPABILITY,
-                    Data.STATUS, Data.STATUS_RES_PACKAGE, Data.STATUS_ICON,
-                    Data.STATUS_LABEL, Data.STATUS_TIMESTAMP,
-
-                    Contacts.PHOTO_URI,
-
-                    Contacts.SEND_TO_VOICEMAIL,
-                    Contacts.CUSTOM_RINGTONE,
-                    Contacts.IS_USER_PROFILE,
-
-                    Data.TIMES_USED,
-                    Data.LAST_TIME_USED
-            };
-
-            List<String> projectionList = Lists.newArrayList(COLUMNS_INTERNAL);
-            if (CompatUtils.isMarshmallowCompatible()) {
-                projectionList.add(Data.CARRIER_PRESENCE);
-            }
-            final String[] COLUMNS = projectionList.toArray(new String[projectionList.size()]);
-
-            final Object[] ROWS_INTERNAL = new Object[] {
-                    rawContactId, 40,
-                    "aa%12%@!", "John Doe", "Doe, John", "jdo",
-                    0, 0, StatusUpdates.AVAILABLE,
-                    "Having lunch", 0,
-                    "mockPkg1", 10,
-
-                    contactId,
-                    rawContactId,
-
-                    "mockAccountName", "mockAccountType", null,
-                    0, 1, 0,
-                    "sync1", "sync2", "sync3", "sync4",
-                    0,
-
-                    dataId,
-
-                    "dat1", "dat2", "dat3", "dat4", "dat5",
-                    "dat6", "dat7", "dat8", "dat9", "dat10",
-                    "dat11", "dat12", "dat13", "dat14", "dat15",
-                    "syn1", "syn2", "syn3", "syn4",
-
-                    0, 0,
-                    0, StructuredName.CONTENT_ITEM_TYPE,
-
-                    "groupId",
-
-                    StatusUpdates.INVISIBLE, null,
-                    "Having dinner", "mockPkg3", 0,
-                    20, 0,
-
-                    "content:some.photo.uri",
-
-                    0,
-                    null,
-                    0,
-
-                    0,
-                    0
-            };
-
-            List<Object> rowsList = Lists.newArrayList(ROWS_INTERNAL);
-            if (CompatUtils.isMarshmallowCompatible()) {
-                rowsList.add(Data.CARRIER_PRESENCE_VT_CAPABLE);
-            }
-            final Object[] ROWS = rowsList.toArray(new Object[rowsList.size()]);
-
-            mContactsProvider.expectQuery(baseUri)
-                    .withProjection(COLUMNS)
-                    .withSortOrder(Contacts.Entity.RAW_CONTACT_ID)
-                    .returnRow(ROWS);
-        }
-
-        void fetchLookupAndId(final Uri sourceUri, final long expectedContactId,
-                final String expectedEncodedLookup) {
-            mContactsProvider.expectQuery(sourceUri)
-                    .withProjection(Contacts.LOOKUP_KEY, Contacts._ID)
-                    .returnRow(expectedEncodedLookup, expectedContactId);
-        }
-
-        void fetchContactIdAndLookupFromRawContactUri(final Uri rawContactUri,
-                final long expectedContactId, final String expectedEncodedLookup) {
-            // TODO: use a lighter query by joining rawcontacts with contacts in provider
-            // (See ContactContracts.java)
-            final Uri dataUri = Uri.withAppendedPath(rawContactUri,
-                    RawContacts.Data.CONTENT_DIRECTORY);
-            mContactsProvider.expectQuery(dataUri)
-                    .withProjection(RawContacts.CONTACT_ID, Contacts.LOOKUP_KEY)
-                    .returnRow(expectedContactId, expectedEncodedLookup);
-        }
-    }
-}
diff --git a/tests/src/com/android/contacts/common/model/Cp2DeviceLocalAccountLocatorTests.java b/tests/src/com/android/contacts/common/model/Cp2DeviceLocalAccountLocatorTests.java
deleted file mode 100644
index 192eb44..0000000
--- a/tests/src/com/android/contacts/common/model/Cp2DeviceLocalAccountLocatorTests.java
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.model;
-
-import android.content.ContentProvider;
-import android.content.ContentResolver;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.net.Uri;
-import android.os.CancellationSignal;
-import android.provider.ContactsContract;
-import android.provider.ContactsContract.RawContacts;
-import android.support.annotation.Nullable;
-import android.test.AndroidTestCase;
-import android.test.mock.MockContentResolver;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.test.mocks.MockContentProvider;
-import com.android.contacts.common.util.DeviceLocalAccountTypeFactory;
-import com.android.contacts.tests.FakeDeviceAccountTypeFactory;
-
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-@SmallTest
-public class Cp2DeviceLocalAccountLocatorTests extends AndroidTestCase {
-
-    // Basic smoke test that just checks that it doesn't throw when loading from CP2. We don't
-    // care what CP2 actually contains for this.
-    public void testShouldNotCrash() {
-        final DeviceLocalAccountLocator sut = new Cp2DeviceLocalAccountLocator(
-                getContext().getContentResolver(),
-                new DeviceLocalAccountTypeFactory.Default(getContext()),
-                Collections.<AccountWithDataSet>emptyList());
-        sut.getDeviceLocalAccounts();
-        // We didn't throw so it passed
-    }
-
-    public void test_getDeviceLocalAccounts_returnsEmptyListWhenQueryReturnsNull() {
-        final DeviceLocalAccountLocator sut = createWithQueryResult(null);
-        assertTrue(sut.getDeviceLocalAccounts().isEmpty());
-    }
-
-    public void test_getDeviceLocalAccounts_returnsEmptyListWhenNoRawContactsHaveDeviceType() {
-        final DeviceLocalAccountLocator sut = createWithQueryResult(queryResult(
-                        "user", "com.example",
-                        "user", "com.example",
-                        "user", "com.example"));
-        assertTrue(sut.getDeviceLocalAccounts().isEmpty());
-    }
-
-    public void test_getDeviceLocalAccounts_returnsListWithItemForNullAccount() {
-        final DeviceLocalAccountLocator sut = createWithQueryResult(queryResult(
-                "user", "com.example",
-                null, null,
-                "user", "com.example",
-                null, null));
-
-        assertEquals(1, sut.getDeviceLocalAccounts().size());
-    }
-
-    public void test_getDeviceLocalAccounts_containsItemForEachDeviceAccount() {
-        final DeviceLocalAccountTypeFactory stubFactory = new FakeDeviceAccountTypeFactory()
-                .withDeviceTypes(null, "vnd.sec.contact.phone")
-                .withSimTypes("vnd.sec.contact.sim");
-        final DeviceLocalAccountLocator sut = new Cp2DeviceLocalAccountLocator(
-                createStubResolverWithContentQueryResult(queryResult(
-                        "user", "com.example",
-                        "user", "com.example",
-                        "phone_account", "vnd.sec.contact.phone",
-                        null, null,
-                        "phone_account", "vnd.sec.contact.phone",
-                        "user", "com.example",
-                        null, null,
-                        "sim_account", "vnd.sec.contact.sim",
-                        "sim_account_2", "vnd.sec.contact.sim"
-                )), stubFactory,
-                Collections.<AccountWithDataSet>emptyList());
-
-        assertEquals(4, sut.getDeviceLocalAccounts().size());
-    }
-
-    public void test_getDeviceLocalAccounts_doesNotContainItemsForKnownAccounts() {
-        final Cp2DeviceLocalAccountLocator sut = new Cp2DeviceLocalAccountLocator(
-                getContext().getContentResolver(), new FakeDeviceAccountTypeFactory(),
-                Arrays.asList(new AccountWithDataSet("user", "com.example", null),
-                        new AccountWithDataSet("user1", "com.example", null),
-                        new AccountWithDataSet("user", "com.example.1", null)));
-
-        assertTrue("Selection should filter known accounts", sut.getSelection().contains("NOT IN (?,?)"));
-
-        final List<String> args = Arrays.asList(sut.getSelectionArgs());
-        assertEquals(2, args.size());
-        assertTrue("Selection args is missing an expected value", args.contains("com.example"));
-        assertTrue("Selection args is missing an expected value", args.contains("com.example.1"));
-    }
-
-    public void test_getDeviceLocalAccounts_includesAccountsFromSettings() {
-        final DeviceLocalAccountTypeFactory stubFactory = new FakeDeviceAccountTypeFactory()
-                .withDeviceTypes(null, "vnd.sec.contact.phone")
-                .withSimTypes("vnd.sec.contact.sim");
-        final DeviceLocalAccountLocator sut = new Cp2DeviceLocalAccountLocator(
-                createContentResolverWithProvider(new FakeContactsProvider()
-                        .withQueryResult(ContactsContract.Settings.CONTENT_URI, queryResult(
-                                "phone_account", "vnd.sec.contact.phone",
-                                "sim_account", "vnd.sec.contact.sim"
-                ))), stubFactory, Collections.<AccountWithDataSet>emptyList());
-
-        assertEquals(2, sut.getDeviceLocalAccounts().size());
-    }
-
-    public void test_getDeviceLocalAccounts_includesAccountsFromGroups() {
-        final DeviceLocalAccountTypeFactory stubFactory = new FakeDeviceAccountTypeFactory()
-                .withDeviceTypes(null, "vnd.sec.contact.phone")
-                .withSimTypes("vnd.sec.contact.sim");
-        final DeviceLocalAccountLocator sut = new Cp2DeviceLocalAccountLocator(
-                createContentResolverWithProvider(new FakeContactsProvider()
-                        .withQueryResult(ContactsContract.Groups.CONTENT_URI, queryResult(
-                                "phone_account", "vnd.sec.contact.phone",
-                                "sim_account", "vnd.sec.contact.sim"
-                        ))), stubFactory, Collections.<AccountWithDataSet>emptyList());
-
-        assertEquals(2, sut.getDeviceLocalAccounts().size());
-    }
-
-    private DeviceLocalAccountLocator createWithQueryResult(
-            Cursor cursor) {
-        final DeviceLocalAccountLocator locator = new Cp2DeviceLocalAccountLocator(
-                createStubResolverWithContentQueryResult(cursor),
-                new DeviceLocalAccountTypeFactory.Default(getContext()),
-                Collections.<AccountWithDataSet>emptyList());
-        return locator;
-    }
-
-    private ContentResolver createContentResolverWithProvider(ContentProvider contactsProvider) {
-        final MockContentResolver resolver = new MockContentResolver();
-        resolver.addProvider(ContactsContract.AUTHORITY, contactsProvider);
-        return resolver;
-    }
-
-
-    private ContentResolver createStubResolverWithContentQueryResult(Cursor cursor) {
-        final MockContentResolver resolver = new MockContentResolver();
-        resolver.addProvider(ContactsContract.AUTHORITY, new FakeContactsProvider()
-                .withDefaultQueryResult(cursor));
-        return resolver;
-    }
-
-    private Cursor queryResult(String... nameTypePairs) {
-        final MatrixCursor cursor = new MatrixCursor(new String[]
-                { RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE, RawContacts.DATA_SET });
-        for (int i = 0; i < nameTypePairs.length; i+=2) {
-            cursor.newRow().add(nameTypePairs[i]).add(nameTypePairs[i+1])
-                    .add(null);
-        }
-        return cursor;
-    }
-
-    private static class FakeContactsProvider extends MockContentProvider {
-        public Cursor mNextQueryResult;
-        public Map<Uri, Cursor> mNextResultMapping = new HashMap<>();
-
-        public FakeContactsProvider() {}
-
-        public FakeContactsProvider withDefaultQueryResult(Cursor cursor) {
-            mNextQueryResult = cursor;
-            return this;
-        }
-
-        public FakeContactsProvider withQueryResult(Uri uri, Cursor cursor) {
-            mNextResultMapping.put(uri, cursor);
-            return this;
-        }
-
-        @Override
-        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
-                String sortOrder) {
-            return query(uri, projection, selection, selectionArgs, sortOrder, null);
-        }
-
-        @Nullable
-        @Override
-        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
-                String sortOrder, CancellationSignal cancellationSignal) {
-            final Cursor result = mNextResultMapping.get(uri);
-            if (result == null) {
-                return mNextQueryResult;
-            } else {
-                return result;
-            }
-        }
-    }
-}
diff --git a/tests/src/com/android/contacts/common/model/RawContactTest.java b/tests/src/com/android/contacts/common/model/RawContactTest.java
deleted file mode 100644
index 496a20c..0000000
--- a/tests/src/com/android/contacts/common/model/RawContactTest.java
+++ /dev/null
@@ -1,121 +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.common.model;
-
-import android.content.ContentValues;
-import android.net.Uri;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.contacts.common.model.RawContact;
-
-import junit.framework.TestCase;
-
-/**
- * Unit test for {@link RawContact}.
- */
-@SmallTest
-public class RawContactTest extends TestCase {
-
-    private RawContact buildRawContact() {
-        final ContentValues values = new ContentValues();
-        values.put("key1", "value1");
-        values.put("key2", "value2");
-
-        final ContentValues dataItem = new ContentValues();
-        dataItem.put("key3", "value3");
-        dataItem.put("key4", "value4");
-
-        final RawContact contact = new RawContact(values);
-        contact.addDataItemValues(dataItem);
-
-        return contact;
-    }
-
-    private RawContact buildRawContact2() {
-        final ContentValues values = new ContentValues();
-        values.put("key11", "value11");
-        values.put("key22", "value22");
-
-        final ContentValues dataItem = new ContentValues();
-        dataItem.put("key33", "value33");
-        dataItem.put("key44", "value44");
-
-        final RawContact contact = new RawContact(values);
-        contact.addDataItemValues(dataItem);
-
-        return contact;
-    }
-
-    public void testNotEquals() {
-        final RawContact one = buildRawContact();
-        final RawContact two = buildRawContact2();
-        assertFalse(one.equals(two));
-    }
-
-    public void testEquals() {
-        assertEquals(buildRawContact(), buildRawContact());
-    }
-
-    public void testParcelable() {
-        assertParcelableEquals(buildRawContact());
-    }
-
-    private RawContact.NamedDataItem buildNamedDataItem() {
-        final ContentValues values = new ContentValues();
-        values.put("key1", "value1");
-        values.put("key2", "value2");
-        final Uri uri = Uri.fromParts("content:", "ssp", "fragment");
-
-        return new RawContact.NamedDataItem(uri, values);
-    }
-
-    private RawContact.NamedDataItem buildNamedDataItem2() {
-        final ContentValues values = new ContentValues();
-        values.put("key11", "value11");
-        values.put("key22", "value22");
-        final Uri uri = Uri.fromParts("content:", "blah", "blah");
-
-        return new RawContact.NamedDataItem(uri, values);
-    }
-
-    public void testNamedDataItemEquals() {
-        assertEquals(buildNamedDataItem(), buildNamedDataItem());
-    }
-
-    public void testNamedDataItemNotEquals() {
-        assertFalse(buildNamedDataItem().equals(buildNamedDataItem2()));
-    }
-
-    public void testNamedDataItemParcelable() {
-        assertParcelableEquals(buildNamedDataItem());
-    }
-
-    private void assertParcelableEquals(Parcelable parcelable) {
-        final Parcel parcel = Parcel.obtain();
-        try {
-            parcel.writeParcelable(parcelable, 0);
-            parcel.setDataPosition(0);
-
-            Parcelable out = parcel.readParcelable(parcelable.getClass().getClassLoader());
-            assertEquals(parcelable, out);
-        } finally {
-            parcel.recycle();
-        }
-    }
-}
diff --git a/tests/src/com/android/contacts/common/model/SimContactTests.java b/tests/src/com/android/contacts/common/model/SimContactTests.java
deleted file mode 100644
index 359379e..0000000
--- a/tests/src/com/android/contacts/common/model/SimContactTests.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.contacts.common.model;
-
-import android.os.Parcel;
-import android.support.test.filters.SmallTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assert.assertThat;
-
-@SmallTest
-@RunWith(AndroidJUnit4.class)
-public class SimContactTests {
-    @Test
-    public void parcelRoundtrip() {
-        assertParcelsCorrectly(new SimContact(1, "name1", "phone1",
-                new String[] { "email1a", "email1b" }));
-        assertParcelsCorrectly(new SimContact(2, "name2", "phone2", null));
-        assertParcelsCorrectly(new SimContact(3, "name3", null,
-                new String[] { "email3" }));
-        assertParcelsCorrectly(new SimContact(4, null, "phone4",
-                new String[] { "email4" }));
-        assertParcelsCorrectly(new SimContact(5, null, null, null));
-        assertParcelsCorrectly(new SimContact(6, "name6", "phone6",
-                new String[0]));
-    }
-
-    private void assertParcelsCorrectly(SimContact contact) {
-        final Parcel parcel = Parcel.obtain();
-        parcel.writeParcelable(contact, 0);
-        parcel.setDataPosition(0);
-        final SimContact unparceled = parcel.readParcelable(
-                SimContact.class.getClassLoader());
-        assertThat(unparceled, equalTo(contact));
-        parcel.recycle();
-    }
-}
diff --git a/tests/src/com/android/contacts/common/model/ValuesDeltaTests.java b/tests/src/com/android/contacts/common/model/ValuesDeltaTests.java
deleted file mode 100644
index 77bf456..0000000
--- a/tests/src/com/android/contacts/common/model/ValuesDeltaTests.java
+++ /dev/null
@@ -1,90 +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.common.model;
-
-import android.content.ContentProviderOperation.Builder;
-import android.content.ContentValues;
-import android.os.Build;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.Data;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.contacts.common.compat.CompatUtils;
-import com.android.contacts.common.model.BuilderWrapper;
-
-import junit.framework.TestCase;
-
-/**
- * Tests for  {@link ValuesDelta}. These tests
- * focus on passing changes across {@link android.os.Parcel}, and verifying that they
- * correctly build expected "diff" operations.
- */
-@SmallTest
-public class ValuesDeltaTests extends TestCase {
-
-    public static final long TEST_PHONE_ID = 24;
-
-    public static final String TEST_PHONE_NUMBER_1 = "218-555-1111";
-    public static final String TEST_PHONE_NUMBER_2 = "218-555-2222";
-
-    public void testValuesDiffInsert() {
-        final ContentValues after = new ContentValues();
-        after.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
-
-        final ValuesDelta values = ValuesDelta.fromAfter(after);
-
-        // Should produce an insert action
-        final BuilderWrapper builderWrapper = values.buildDiffWrapper(Data.CONTENT_URI);
-        final boolean isInsert = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
-                ? builderWrapper.getBuilder().build().isInsert()
-                : builderWrapper.getType() == CompatUtils.TYPE_INSERT;
-        assertTrue("Didn't produce insert action", isInsert);
-    }
-
-    /**
-     * Test that {@link ValuesDelta#buildDiff(android.net.Uri)} is correctly
-     * built for insert, update, and delete cases. Note this only tests behavior
-     * for individual {@link Data} rows.
-     */
-    public void testValuesDiffNone() {
-        final ContentValues before = new ContentValues();
-        before.put(Data._ID, TEST_PHONE_ID);
-        before.put(Phone.NUMBER, TEST_PHONE_NUMBER_1);
-
-        final ValuesDelta values = ValuesDelta.fromBefore(before);
-
-        // None action shouldn't produce a builder
-        final Builder builder = values.buildDiff(Data.CONTENT_URI);
-        assertNull("None action produced a builder", builder);
-    }
-
-    public void testValuesDiffUpdate() {
-        final ContentValues before = new ContentValues();
-        before.put(Data._ID, TEST_PHONE_ID);
-        before.put(Phone.NUMBER, TEST_PHONE_NUMBER_1);
-
-        final ValuesDelta values = ValuesDelta.fromBefore(before);
-        values.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
-
-        // Should produce an update action
-        final BuilderWrapper builderWrapper = values.buildDiffWrapper(Data.CONTENT_URI);
-        final boolean isUpdate = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
-                ? builderWrapper.getBuilder().build().isUpdate()
-                : builderWrapper.getType() == CompatUtils.TYPE_UPDATE;
-        assertTrue("Didn't produce update action", isUpdate);
-    }
-}
diff --git a/tests/src/com/android/contacts/common/model/account/AccountTypeTest.java b/tests/src/com/android/contacts/common/model/account/AccountTypeTest.java
deleted file mode 100644
index e204722..0000000
--- a/tests/src/com/android/contacts/common/model/account/AccountTypeTest.java
+++ /dev/null
@@ -1,133 +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.common.model.account;
-
-import android.content.Context;
-import android.test.InstrumentationTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.contacts.common.tests.R;
-
-/**
- * Test case for {@link AccountType}.
- *
- * adb shell am instrument -w -e class com.android.contacts.model.AccountTypeTest \
-       com.android.contacts.tests/android.test.InstrumentationTestRunner
- */
-@SmallTest
-public class AccountTypeTest extends InstrumentationTestCase {
-    public void testGetResourceText() {
-        // In this test we use the test package itself as an external package.
-        final String packageName = getInstrumentation().getContext().getPackageName();
-
-        final Context c = getInstrumentation().getTargetContext();
-        final String DEFAULT = "ABC";
-
-        // Package name null, resId -1, use the default
-        assertEquals(DEFAULT, AccountType.getResourceText(c, null, -1, DEFAULT));
-
-        // Resource ID -1, use the default
-        assertEquals(DEFAULT, AccountType.getResourceText(c, packageName, -1, DEFAULT));
-
-        // Load from an external package.  (here, we use this test package itself)
-        final int externalResID = R.string.test_string;
-        assertEquals(getInstrumentation().getContext().getString(externalResID),
-                AccountType.getResourceText(c, packageName, externalResID, DEFAULT));
-
-        // Load from the contacts package itself.
-        final int internalResId = com.android.contacts.common.R.string.contactsList;
-        assertEquals(c.getString(internalResId),
-                AccountType.getResourceText(c, null, internalResId, DEFAULT));
-    }
-
-    /**
-     * Verify if {@link AccountType#getInviteContactActionLabel} correctly gets the resource ID
-     * from {@link AccountType#getInviteContactActionResId}
-     */
-    public void testGetInviteContactActionLabel() {
-        final String packageName = getInstrumentation().getContext().getPackageName();
-        final Context c = getInstrumentation().getTargetContext();
-
-        final int externalResID = R.string.test_string;
-
-        AccountType accountType = new AccountType() {
-            {
-                resourcePackageName = packageName;
-                syncAdapterPackageName = packageName;
-            }
-            @Override protected int getInviteContactActionResId() {
-                return externalResID;
-            }
-
-            @Override public boolean isGroupMembershipEditable() {
-                return false;
-            }
-
-            @Override public boolean areContactsWritable() {
-                return false;
-            }
-        };
-
-        assertEquals(getInstrumentation().getContext().getString(externalResID),
-                accountType.getInviteContactActionLabel(c));
-    }
-
-    public void testDisplayLabelComparator() {
-        final AccountTypeForDisplayLabelTest EMPTY = new AccountTypeForDisplayLabelTest("");
-        final AccountTypeForDisplayLabelTest NULL = new AccountTypeForDisplayLabelTest(null);
-        final AccountTypeForDisplayLabelTest AA = new AccountTypeForDisplayLabelTest("aa");
-        final AccountTypeForDisplayLabelTest BBB = new AccountTypeForDisplayLabelTest("bbb");
-        final AccountTypeForDisplayLabelTest C = new AccountTypeForDisplayLabelTest("c");
-
-        assertTrue(compareDisplayLabel(AA, BBB) < 0);
-        assertTrue(compareDisplayLabel(BBB, C) < 0);
-        assertTrue(compareDisplayLabel(AA, C) < 0);
-        assertTrue(compareDisplayLabel(AA, AA) == 0);
-        assertTrue(compareDisplayLabel(BBB, AA) > 0);
-
-        assertTrue(compareDisplayLabel(EMPTY, AA) < 0);
-        assertTrue(compareDisplayLabel(EMPTY, NULL) == 0);
-    }
-
-    private int compareDisplayLabel(AccountType lhs, AccountType rhs) {
-        return new AccountType.DisplayLabelComparator(
-                getInstrumentation().getTargetContext()).compare(lhs, rhs);
-    }
-
-    private class AccountTypeForDisplayLabelTest extends AccountType {
-        private final String mDisplayLabel;
-
-        public AccountTypeForDisplayLabelTest(String displayLabel) {
-            mDisplayLabel = displayLabel;
-        }
-
-        @Override
-        public CharSequence getDisplayLabel(Context context) {
-            return mDisplayLabel;
-        }
-
-        @Override
-        public boolean isGroupMembershipEditable() {
-            return false;
-        }
-
-        @Override
-        public boolean areContactsWritable() {
-            return false;
-        }
-    }
-}
diff --git a/tests/src/com/android/contacts/common/model/account/ExternalAccountTypeTest.java b/tests/src/com/android/contacts/common/model/account/ExternalAccountTypeTest.java
deleted file mode 100644
index 0ddeb67..0000000
--- a/tests/src/com/android/contacts/common/model/account/ExternalAccountTypeTest.java
+++ /dev/null
@@ -1,249 +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.common.model.account;
-
-import android.content.Context;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.provider.ContactsContract.CommonDataKinds.Note;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-import android.provider.ContactsContract.CommonDataKinds.Photo;
-import android.provider.ContactsContract.CommonDataKinds.Relation;
-import android.provider.ContactsContract.CommonDataKinds.SipAddress;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.CommonDataKinds.Website;
-import android.test.InstrumentationTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.test.suitebuilder.annotation.Suppress;
-
-import com.android.contacts.common.model.dataitem.DataKind;
-import com.android.contacts.common.tests.R;
-
-import com.google.common.base.Objects;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Test case for {@link com.android.contacts.common.model.account.ExternalAccountType}.
- *
- * adb shell am instrument -w -e class com.android.contacts.model.ExternalAccountTypeTest \
-       com.android.contacts.tests/android.test.InstrumentationTestRunner
- */
-@SmallTest
-public class ExternalAccountTypeTest extends InstrumentationTestCase {
-    private static ArrayList<String> mDefaultMimetypes = new ArrayList<>(Arrays.asList(
-            StructuredName.CONTENT_ITEM_TYPE,
-            DataKind.PSEUDO_MIME_TYPE_NAME,
-            DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
-            Photo.CONTENT_ITEM_TYPE
-    ));
-
-    @Suppress
-    public void testResolveExternalResId() {
-        final Context c = getInstrumentation().getTargetContext();
-        // In this test we use the test package itself as an external package.
-        final String packageName = getInstrumentation().getContext().getPackageName();
-
-        // Resource name empty.
-        assertEquals(-1, ExternalAccountType.resolveExternalResId(c, null, packageName, ""));
-        assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "", packageName, ""));
-
-        // Name doesn't begin with '@'
-        assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "x", packageName, ""));
-
-        // Invalid resource name
-        assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "@", packageName, ""));
-        assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "@a", packageName, ""));
-        assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "@a/b", packageName, ""));
-
-        // Valid resource name
-        assertEquals(R.string.test_string, ExternalAccountType.resolveExternalResId(c,
-                "@string/test_string", packageName, ""));
-    }
-
-    public void testIsFromTestApp() {
-        assertTrue(ExternalAccountType.isFromTestApp("com.google.android.contacts.tests"));
-        assertFalse(ExternalAccountType.isFromTestApp("com.google.android.contacts"));
-    }
-
-    /**
-     * Initialize with an invalid package name and see if type will be initialized, but empty.
-     */
-    public void testNoPackage() {
-        final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
-                "!!!no such package name!!!", false);
-        assertTrue(type.isInitialized());
-    }
-
-    /**
-     * Initialize with the test package itself and see if EditSchema is correctly parsed.
-     */
-    @Suppress
-    public void testEditSchema() {
-        final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
-                getInstrumentation().getContext().getPackageName(), false);
-
-        assertTrue(type.isInitialized());
-
-        // Let's just check if the DataKinds are registered.
-        assertNotNull(type.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE));
-        assertNotNull(type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_NAME));
-        assertNotNull(type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME));
-        assertNotNull(type.getKindForMimetype(Email.CONTENT_ITEM_TYPE));
-        assertNotNull(type.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE));
-        assertNotNull(type.getKindForMimetype(Im.CONTENT_ITEM_TYPE));
-        assertNotNull(type.getKindForMimetype(Organization.CONTENT_ITEM_TYPE));
-        assertNotNull(type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE));
-        assertNotNull(type.getKindForMimetype(Note.CONTENT_ITEM_TYPE));
-        assertNotNull(type.getKindForMimetype(Website.CONTENT_ITEM_TYPE));
-        assertNotNull(type.getKindForMimetype(SipAddress.CONTENT_ITEM_TYPE));
-        assertNotNull(type.getKindForMimetype(Event.CONTENT_ITEM_TYPE));
-        assertNotNull(type.getKindForMimetype(Relation.CONTENT_ITEM_TYPE));
-    }
-
-    /**
-     * Initialize with "contacts_fallback.xml" and compare the DataKinds to those of
-     * {@link com.android.contacts.common.model.account.FallbackAccountType}.
-     */
-    public void testEditSchema_fallback() {
-        final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
-                getInstrumentation().getContext().getPackageName(), false,
-                getInstrumentation().getContext().getResources().getXml(R.xml.contacts_fallback)
-                );
-
-        assertTrue(type.isInitialized());
-
-        // Create a fallback type with the same resource package name, and compare all the data
-        // kinds to its.
-        final AccountType reference = FallbackAccountType.createWithPackageNameForTest(
-                getInstrumentation().getTargetContext(), type.resourcePackageName);
-
-        assertsDataKindEquals(reference.getSortedDataKinds(), type.getSortedDataKinds());
-    }
-
-    public void testEditSchema_mustHaveChecks() {
-        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_base, true);
-        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_photo, false);
-        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name, false);
-        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr2, false);
-        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr3, false);
-        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr4, false);
-        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr5, false);
-        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr6, false);
-        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr7, false);
-    }
-
-    private void checkEditSchema_mustHaveChecks(int xmlResId, boolean expectInitialized) {
-        final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
-                getInstrumentation().getContext().getPackageName(), false,
-                getInstrumentation().getContext().getResources().getXml(xmlResId)
-                );
-
-        assertEquals(expectInitialized, type.isInitialized());
-    }
-
-    /**
-     * Initialize with "contacts_readonly.xml" and see if all data kinds are correctly registered.
-     */
-    public void testReadOnlyDefinition() {
-        final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
-                getInstrumentation().getContext().getPackageName(), false,
-                getInstrumentation().getContext().getResources().getXml(R.xml.contacts_readonly)
-                );
-        assertTrue(type.isInitialized());
-
-        // Shouldn't have a "null" mimetype.
-        assertTrue(type.getKindForMimetype(null) == null);
-
-        // 3 kinds are defined in XML and the rest are added by default.
-        assertEquals(3 + mDefaultMimetypes.size(), type.getSortedDataKinds().size());
-
-        // Check for the default kinds.
-        for (String mimetype : mDefaultMimetypes) {
-            assertNotNull(type.getKindForMimetype(mimetype));
-        }
-
-        // Check for type specific kinds.
-        DataKind kind = type.getKindForMimetype("vnd.android.cursor.item/a.b.c");
-        assertNotNull(kind);
-        // No check for icon -- we actually just ignore it.
-        assertEquals("data1", ((BaseAccountType.SimpleInflater) kind.actionHeader)
-                .getColumnNameForTest());
-        assertEquals("data2", ((BaseAccountType.SimpleInflater) kind.actionBody)
-                .getColumnNameForTest());
-
-        kind = type.getKindForMimetype("vnd.android.cursor.item/d.e.f");
-        assertNotNull(kind);
-        assertEquals("data3", ((BaseAccountType.SimpleInflater) kind.actionHeader)
-                .getColumnNameForTest());
-        assertEquals("data4", ((BaseAccountType.SimpleInflater) kind.actionBody)
-                .getColumnNameForTest());
-
-        kind = type.getKindForMimetype("vnd.android.cursor.item/xyz");
-        assertNotNull(kind);
-        assertEquals("data5", ((BaseAccountType.SimpleInflater) kind.actionHeader)
-                .getColumnNameForTest());
-        assertEquals("data6", ((BaseAccountType.SimpleInflater) kind.actionBody)
-                .getColumnNameForTest());
-    }
-
-    private static void assertsDataKindEquals(List<DataKind> expectedKinds,
-            List<DataKind> actualKinds) {
-        final int count = Math.max(actualKinds.size(), expectedKinds.size());
-        for (int i = 0; i < count; i++) {
-            String actual =  actualKinds.size() > i ? actualKinds.get(i).toString() : "(n/a)";
-            String expected =  expectedKinds.size() > i ? expectedKinds.get(i).toString() : "(n/a)";
-
-            // Because assertEquals()'s output is not very friendly when comparing two similar
-            // strings, we manually do the check.
-            if (!Objects.equal(actual, expected)) {
-                final int commonPrefixEnd = findCommonPrefixEnd(actual, expected);
-                fail("Kind #" + i
-                        + "\n[Actual]\n" + insertMarkerAt(actual, commonPrefixEnd)
-                        + "\n[Expected]\n" + insertMarkerAt(expected, commonPrefixEnd));
-            }
-        }
-    }
-
-    private static int findCommonPrefixEnd(String s1, String s2) {
-        int i = 0;
-        for (;;) {
-            final boolean s1End = (s1.length() <= i);
-            final boolean s2End = (s2.length() <= i);
-            if (s1End || s2End) {
-                return i;
-            }
-            if (s1.charAt(i) != s2.charAt(i)) {
-                return i;
-            }
-            i++;
-        }
-    }
-
-    private static String insertMarkerAt(String s, int position) {
-        final String MARKER = "***";
-        if (position > s.length()) {
-            return s + MARKER;
-        } else {
-            return new StringBuilder(s).insert(position, MARKER).toString();
-        }
-    }
-}
diff --git a/tests/src/com/android/contacts/common/model/dataitem/DataItemTests.java b/tests/src/com/android/contacts/common/model/dataitem/DataItemTests.java
deleted file mode 100644
index 3f83710..0000000
--- a/tests/src/com/android/contacts/common/model/dataitem/DataItemTests.java
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-package com.android.contacts.common.model.dataitem;
-
-import android.content.ContentValues;
-import android.provider.ContactsContract.CommonDataKinds.Email;
-import android.provider.ContactsContract.CommonDataKinds.Event;
-import android.provider.ContactsContract.CommonDataKinds.Im;
-import android.provider.ContactsContract.CommonDataKinds.Nickname;
-import android.provider.ContactsContract.CommonDataKinds.Note;
-import android.provider.ContactsContract.CommonDataKinds.Organization;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.Relation;
-import android.provider.ContactsContract.CommonDataKinds.SipAddress;
-import android.provider.ContactsContract.CommonDataKinds.StructuredName;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.CommonDataKinds.Website;
-import android.provider.ContactsContract.Contacts.Data;
-import android.provider.ContactsContract.Contacts.Entity;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.contacts.common.Collapser;
-import com.android.contacts.common.model.account.AccountType.EditType;
-import com.android.contacts.common.model.account.BaseAccountType;
-import com.android.contacts.common.model.account.GoogleAccountType;
-import com.android.contacts.common.model.dataitem.DataItem;
-import com.android.contacts.common.model.dataitem.DataKind;
-
-import java.lang.Math;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Test case for {@link DataItem}.
- */
-@SmallTest
-public class DataItemTests extends AndroidTestCase {
-
-    private ContentValues mValues1;
-    private ContentValues mValues2;
-    private ContentValues mValues3;
-    private ContentValues mValues4;
-    private GoogleAccountType mGoogleAccountType;
-
-    @Override
-    protected void setUp() {
-        mValues1 = new ContentValues();
-        mValues2 = new ContentValues();
-        mValues3 = new ContentValues();
-        mValues4 = new ContentValues();
-
-        mValues1.put(Data._ID, 1);
-        mValues2.put(Data._ID, 2);
-        mValues3.put(Data._ID, 3);
-        mValues4.put(Data._ID, 4);
-
-        mGoogleAccountType = new GoogleAccountType(getContext(), "packageName");
-    }
-
-    private List<DataItem> createDataItemsAndCollapse(DataKind kind, ContentValues... values) {
-        final List<DataItem> dataList = new ArrayList<>(values.length);
-        for (ContentValues value : values) {
-            final DataItem data = DataItem.createFrom(value);
-            data.setDataKind(kind);
-            dataList.add(data);
-        }
-        Collapser.collapseList(dataList, getContext());
-        return dataList;
-    }
-
-    public void testDataItemCollapsing_genericDataItemFields() {
-        mValues1.put(Data.IS_SUPER_PRIMARY, 1);
-        mValues2.put(Data.IS_PRIMARY, 0);
-
-        mValues1.put(Entity.TIMES_USED, 5);
-        mValues2.put(Entity.TIMES_USED, 4);
-
-        mValues1.put(Entity.LAST_TIME_USED, 555);
-        mValues2.put(Entity.LAST_TIME_USED, 999);
-
-        final DataKind kind = new DataKind("test.mimetype", 0, 0, false);
-        kind.actionBody = new BaseAccountType.SimpleInflater(0);
-        kind.typeList = new ArrayList<>();
-        kind.typeList.add(new EditType(1, -1));
-        kind.typeList.add(new EditType(2, -1));
-        kind.typeColumn = Data.DATA2;
-
-        mValues1.put(kind.typeColumn, 2);
-        mValues2.put(kind.typeColumn, 1);
-
-        final List<DataItem> dataList = createDataItemsAndCollapse(kind, mValues1, mValues2);
-
-        assertEquals(1, dataList.size());
-        assertEquals(true, dataList.get(0).isSuperPrimary());
-        assertEquals(true, dataList.get(0).isPrimary());
-        assertEquals(9, (int) dataList.get(0).getTimesUsed());
-        assertEquals(999L, (long) dataList.get(0).getLastTimeUsed());
-        assertEquals(1, dataList.get(0).getKindTypeColumn(kind));
-    }
-
-    public void testDataItemCollapsing_email() {
-        final String email1 = "email1@google.com";
-        final String email2 = "email2@google.com";
-
-        mValues1.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
-        mValues2.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
-        mValues3.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
-
-        mValues1.put(Email.ADDRESS, email1);
-        mValues2.put(Email.ADDRESS, email1);
-        mValues3.put(Email.ADDRESS, email2);
-
-        mValues1.put(Email.TYPE, Email.TYPE_MOBILE);
-        mValues2.put(Email.TYPE, Email.TYPE_HOME);
-        mValues3.put(Email.TYPE, Email.TYPE_WORK);
-
-        final DataKind kind = mGoogleAccountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE);
-
-        final List<DataItem> dataList =
-                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
-
-        assertEquals(2, dataList.size());
-        assertEquals(email1, ((EmailDataItem) dataList.get(0)).getAddress());
-        assertEquals(email2, ((EmailDataItem) dataList.get(1)).getAddress());
-        assertEquals(Math.min(Email.TYPE_MOBILE, Email.TYPE_HOME),
-                ((EmailDataItem) dataList.get(0)).getKindTypeColumn(kind));
-    }
-
-    public void testDataItemCollapsing_event() {
-        final String date1 = "2014-01-01";
-        final String date2 = "2014-02-02";
-        final String customLabel1 = "custom label1";
-        final String customLabel2 = "custom label2";
-
-        mValues1.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
-        mValues2.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
-        mValues3.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
-        mValues4.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
-
-        mValues1.put(Event.START_DATE, date1);
-        mValues2.put(Event.START_DATE, date1);
-        mValues3.put(Event.START_DATE, date1);
-        mValues4.put(Event.START_DATE, date2);
-
-        mValues1.put(Event.TYPE, Event.TYPE_CUSTOM);
-        mValues2.put(Event.TYPE, Event.TYPE_CUSTOM);
-        mValues3.put(Event.TYPE, Event.TYPE_CUSTOM);
-        mValues4.put(Event.TYPE, Event.TYPE_ANNIVERSARY);
-
-        mValues1.put(Event.LABEL, customLabel1);
-        mValues2.put(Event.LABEL, customLabel1);
-        mValues3.put(Event.LABEL, customLabel2);
-
-        final DataKind kind = mGoogleAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE);
-
-        final List<DataItem> dataList =
-                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
-
-        assertEquals(3, dataList.size());
-        assertEquals(customLabel1, ((EventDataItem) dataList.get(0)).getLabel());
-        assertEquals(customLabel2, ((EventDataItem) dataList.get(1)).getLabel());
-        assertEquals(date2, ((EventDataItem) dataList.get(2)).getStartDate());
-    }
-
-    public void testDataItemCollapsing_im() {
-        final String address1 = "address 1";
-        final String address2 = "address 2";
-        final String customProtocol1 = "custom 1";
-        final String customProtocol2 = "custom 2";
-
-        mValues1.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-        mValues2.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-        mValues3.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-        mValues4.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
-
-        mValues1.put(Im.DATA, address1);
-        mValues2.put(Im.DATA, address1);
-        mValues3.put(Im.DATA, address1);
-        mValues4.put(Im.DATA, address2);
-
-        mValues1.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
-        mValues2.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
-        mValues3.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
-        mValues4.put(Im.PROTOCOL, Im.PROTOCOL_AIM);
-
-        mValues1.put(Im.CUSTOM_PROTOCOL, customProtocol1);
-        mValues2.put(Im.CUSTOM_PROTOCOL, customProtocol1);
-        mValues3.put(Im.CUSTOM_PROTOCOL, customProtocol2);
-
-        final DataKind kind = mGoogleAccountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE);
-
-        final List<DataItem> dataList =
-                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
-
-        assertEquals(3, dataList.size());
-        assertEquals(address1, ((ImDataItem) dataList.get(0)).getData());
-        assertEquals(address1, ((ImDataItem) dataList.get(1)).getData());
-        assertEquals(address2, ((ImDataItem) dataList.get(2)).getData());
-
-        assertEquals(customProtocol1, ((ImDataItem) dataList.get(0)).getCustomProtocol());
-        assertEquals(customProtocol2, ((ImDataItem) dataList.get(1)).getCustomProtocol());
-        assertEquals(Im.PROTOCOL_AIM, (int) ((ImDataItem) dataList.get(2)).getProtocol());
-    }
-
-    public void testDataItemCollapsing_nickname() {
-        final String nickname1 = "nickname 1";
-        final String nickname2 = "nickname 2";
-
-        mValues1.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
-        mValues2.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
-        mValues3.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
-
-        mValues1.put(Nickname.NAME, nickname1);
-        mValues2.put(Nickname.NAME, nickname1);
-        mValues3.put(Nickname.NAME, nickname2);
-
-        final DataKind kind = mGoogleAccountType.getKindForMimetype(Nickname.CONTENT_ITEM_TYPE);
-
-        final List<DataItem> dataList =
-                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
-
-        assertEquals(2, dataList.size());
-        assertEquals(nickname1, ((NicknameDataItem) dataList.get(0)).getName());
-        assertEquals(nickname2, ((NicknameDataItem) dataList.get(1)).getName());
-    }
-
-    public void testDataItemCollapsing_note() {
-        final String note1 = "note 1";
-        final String note2 = "note 2";
-
-        mValues1.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
-        mValues2.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
-        mValues3.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
-
-        mValues1.put(Note.NOTE, note1);
-        mValues2.put(Note.NOTE, note1);
-        mValues3.put(Note.NOTE, note2);
-
-        DataKind kind = mGoogleAccountType.getKindForMimetype(Note.CONTENT_ITEM_TYPE);
-
-        final List<DataItem> dataList =
-                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
-
-        assertEquals(2, dataList.size());
-        assertEquals(note1, ((NoteDataItem) dataList.get(0)).getNote());
-        assertEquals(note2, ((NoteDataItem) dataList.get(1)).getNote());
-    }
-
-    public void testDataItemCollapsing_organization() {
-        final String company1 = "company1";
-        final String company2 = "company2";
-        final String title1 = "title1";
-        final String title2 = "title2";
-
-        mValues1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
-        mValues2.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
-        mValues3.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
-        mValues4.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
-
-        mValues1.put(Organization.COMPANY, company1);
-        mValues2.put(Organization.COMPANY, company1);
-        mValues3.put(Organization.COMPANY, company1);
-        mValues4.put(Organization.COMPANY, company2);
-
-        mValues1.put(Organization.TITLE, title1);
-        mValues2.put(Organization.TITLE, title1);
-        mValues3.put(Organization.TITLE, title2);
-        mValues4.put(Organization.TITLE, title1);
-
-        final DataKind kind =
-                mGoogleAccountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
-
-        final List<DataItem> dataList =
-                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
-
-        assertEquals(3, dataList.size());
-        assertEquals(company1, ((OrganizationDataItem) dataList.get(0)).getCompany());
-        assertEquals(company1, ((OrganizationDataItem) dataList.get(1)).getCompany());
-        assertEquals(company2, ((OrganizationDataItem) dataList.get(2)).getCompany());
-
-        assertEquals(title1, ((OrganizationDataItem) dataList.get(0)).getTitle());
-        assertEquals(title2, ((OrganizationDataItem) dataList.get(1)).getTitle());
-    }
-
-    public void testDataItemCollapsing_phone() {
-        final String phone1 = "111-111-1111";
-        final String phone1a = "1111111111";
-        final String phone2 = "222-222-2222";
-
-        mValues1.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        mValues2.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-        mValues3.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
-
-        mValues1.put(Phone.NUMBER, phone1);
-        mValues2.put(Phone.NUMBER, phone1a);
-        mValues3.put(Phone.NUMBER, phone2);
-
-        mValues1.put(Phone.TYPE, Phone.TYPE_MOBILE);
-        mValues2.put(Phone.TYPE, Phone.TYPE_HOME);
-        mValues3.put(Phone.TYPE, Phone.TYPE_WORK);
-
-        final DataKind kind = mGoogleAccountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
-
-        final List<DataItem> dataList =
-                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
-        assertEquals(2, dataList.size());
-        assertEquals(phone1, ((PhoneDataItem) dataList.get(0)).getNumber());
-        assertEquals(phone2, ((PhoneDataItem) dataList.get(1)).getNumber());
-        assertEquals(Phone.TYPE_MOBILE,
-                ((PhoneDataItem) dataList.get(0)).getKindTypeColumn(kind));
-    }
-
-    public void testDataItemCollapsing_relation() {
-        final String name1 = "name1";
-        final String name2 = "name2";
-        final String customRelation1 = "custom relation 1";
-        final String customRelation2 = "custom relation 2";
-
-        mValues1.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
-        mValues2.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
-        mValues3.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
-        mValues4.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
-
-        mValues1.put(Relation.NAME, name1);
-        mValues2.put(Relation.NAME, name1);
-        mValues3.put(Relation.NAME, name1);
-        mValues4.put(Relation.NAME, name2);
-
-        mValues1.put(Relation.TYPE, Relation.TYPE_CUSTOM);
-        mValues2.put(Relation.TYPE, Relation.TYPE_CUSTOM);
-        mValues3.put(Relation.TYPE, Relation.TYPE_CUSTOM);
-        mValues4.put(Relation.TYPE, Relation.TYPE_BROTHER);
-
-        mValues1.put(Relation.LABEL, customRelation1);
-        mValues2.put(Relation.LABEL, customRelation1);
-        mValues3.put(Relation.LABEL, customRelation2);
-
-        final DataKind kind = mGoogleAccountType.getKindForMimetype(Relation.CONTENT_ITEM_TYPE);
-
-        final List<DataItem> dataList =
-                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
-
-        assertEquals(3, dataList.size());
-        assertEquals(name1, ((RelationDataItem) dataList.get(0)).getName());
-        assertEquals(name2, ((RelationDataItem) dataList.get(2)).getName());
-
-        assertEquals(customRelation1, ((RelationDataItem) dataList.get(0)).getLabel());
-        assertEquals(customRelation2, ((RelationDataItem) dataList.get(1)).getLabel());
-    }
-
-    public void testDataItemCollapsing_sip() {
-        final String sip1 = "sip 1";
-        final String sip2 = "sip 2";
-
-        mValues1.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
-        mValues2.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
-        mValues3.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
-
-        mValues1.put(SipAddress.SIP_ADDRESS, sip1);
-        mValues2.put(SipAddress.SIP_ADDRESS, sip1);
-        mValues3.put(SipAddress.SIP_ADDRESS, sip2);
-
-        mValues1.put(SipAddress.TYPE, SipAddress.TYPE_WORK);
-        mValues2.put(SipAddress.TYPE, SipAddress.TYPE_HOME);
-        mValues3.put(SipAddress.TYPE, SipAddress.TYPE_WORK);
-
-        final DataKind kind = mGoogleAccountType.getKindForMimetype(SipAddress.CONTENT_ITEM_TYPE);
-
-        final List<DataItem> dataList =
-                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
-
-        assertEquals(2, dataList.size());
-        assertEquals(sip1, ((SipAddressDataItem) dataList.get(0)).getSipAddress());
-        assertEquals(sip2, ((SipAddressDataItem) dataList.get(1)).getSipAddress());
-    }
-
-    public void testDataItemCollapsing_structuredName() {
-        final String displayName1 = "Display Name 1";
-        final String displayName2 = "Display Name 2";
-
-        mValues1.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
-        mValues2.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
-        mValues3.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
-
-        mValues1.put(StructuredName.DISPLAY_NAME, displayName1);
-        mValues2.put(StructuredName.DISPLAY_NAME, displayName1);
-        mValues3.put(StructuredName.DISPLAY_NAME, displayName2);
-
-        final DataKind kind =
-                mGoogleAccountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
-
-        final List<DataItem> dataList =
-                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
-
-        assertEquals(2, dataList.size());
-        assertEquals(displayName1, ((StructuredNameDataItem) dataList.get(0)).getDisplayName());
-        assertEquals(displayName2, ((StructuredNameDataItem) dataList.get(1)).getDisplayName());
-    }
-
-    public void testDataItemCollapsing_structuredPostal() {
-        final String formattedAddress1 = "Formatted Address 1";
-        final String formattedAddress2 = "Formatted Address 2";
-
-        mValues1.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
-        mValues2.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
-        mValues3.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
-
-        mValues1.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1);
-        mValues2.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1);
-        mValues3.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress2);
-
-        final DataKind kind =
-                mGoogleAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
-
-        final List<DataItem> dataList =
-                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
-
-        assertEquals(2, dataList.size());
-        assertEquals(formattedAddress1,
-                ((StructuredPostalDataItem) dataList.get(0)).getFormattedAddress());
-        assertEquals(formattedAddress2,
-                ((StructuredPostalDataItem) dataList.get(1)).getFormattedAddress());
-    }
-
-    public void testDataItemCollapsing_website() {
-        final String url1 = "www.url1.com";
-        final String url2 = "www.url2.com";
-
-        mValues1.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
-        mValues2.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
-        mValues3.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
-
-        mValues1.put(Website.URL, url1);
-        mValues2.put(Website.URL, url1);
-        mValues3.put(Website.URL, url2);
-
-        final DataKind kind = mGoogleAccountType.getKindForMimetype(Website.CONTENT_ITEM_TYPE);
-
-        final List<DataItem> dataList =
-                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
-
-        assertEquals(2, dataList.size());
-        assertEquals(url1, ((WebsiteDataItem) dataList.get(0)).getUrl());
-        assertEquals(url2, ((WebsiteDataItem) dataList.get(1)).getUrl());
-    }
-}
diff --git a/tests/src/com/android/contacts/common/preference/ContactsPreferencesTest.java b/tests/src/com/android/contacts/common/preference/ContactsPreferencesTest.java
deleted file mode 100644
index 8400737..0000000
--- a/tests/src/com/android/contacts/common/preference/ContactsPreferencesTest.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.preference;
-
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.content.res.Resources;
-import android.support.test.InstrumentationRegistry;
-import android.test.InstrumentationTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.contacts.common.model.account.AccountWithDataSet;
-
-import junit.framework.Assert;
-
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-
-import java.util.Arrays;
-
-@SmallTest
-public class ContactsPreferencesTest extends InstrumentationTestCase {
-
-    private static final String ACCOUNT_KEY = "ACCOUNT_KEY";
-
-    @Mock private Context mContext;
-    @Mock private Resources mResources;
-    @Mock private SharedPreferences mSharedPreferences;
-
-    private ContactsPreferences mContactsPreferences;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        System.setProperty("dexmaker.dexcache",
-                getInstrumentation().getTargetContext().getCacheDir().getPath());
-        MockitoAnnotations.initMocks(this);
-
-        Mockito.when(mContext.getResources()).thenReturn(mResources);
-        Mockito.when(mResources.getString(Mockito.anyInt()))
-                .thenReturn(ACCOUNT_KEY); // contact_editor_default_account_key
-
-        Mockito.when(mContext.getSharedPreferences(Mockito.anyString(), Mockito.anyInt()))
-                .thenReturn(mSharedPreferences);
-        Mockito.when(mSharedPreferences.contains(ContactsPreferences.SORT_ORDER_KEY))
-                .thenReturn(true);
-        Mockito.when(mSharedPreferences.contains(ContactsPreferences.DISPLAY_ORDER_KEY))
-                .thenReturn(true);
-
-        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
-            @Override
-            public void run() {
-                mContactsPreferences = new ContactsPreferences(mContext);
-            }
-        });
-    }
-
-    public void testGetSortOrderDefault() {
-        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
-                false, // R.bool.config_sort_order_user_changeable
-                true // R.bool.config_default_sort_order_primary
-        );
-        Assert.assertEquals(ContactsPreferences.SORT_ORDER_PRIMARY,
-                mContactsPreferences.getSortOrder());
-    }
-
-    public void testGetSortOrder() {
-        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
-                true // R.bool.config_sort_order_user_changeable
-        );
-        Mockito.when(mSharedPreferences.getInt(Mockito.eq(ContactsPreferences.SORT_ORDER_KEY),
-                Mockito.anyInt())).thenReturn(ContactsPreferences.SORT_ORDER_PRIMARY);
-        Assert.assertEquals(ContactsPreferences.SORT_ORDER_PRIMARY,
-                mContactsPreferences.getSortOrder());
-    }
-
-    public void testGetDisplayOrderDefault() {
-        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
-                false, // R.bool.config_display_order_user_changeable
-                true // R.bool.config_default_display_order_primary
-        );
-        Assert.assertEquals(ContactsPreferences.DISPLAY_ORDER_PRIMARY,
-                mContactsPreferences.getDisplayOrder());
-    }
-
-    public void testGetDisplayOrder() {
-        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
-                true // R.bool.config_display_order_user_changeable
-        );
-        Mockito.when(mSharedPreferences.getInt(Mockito.eq(ContactsPreferences.DISPLAY_ORDER_KEY),
-                Mockito.anyInt())).thenReturn(ContactsPreferences.DISPLAY_ORDER_PRIMARY);
-        Assert.assertEquals(ContactsPreferences.DISPLAY_ORDER_PRIMARY,
-                mContactsPreferences.getDisplayOrder());
-    }
-
-    public void testRefreshSortOrder() throws InterruptedException {
-        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
-                true // R.bool.config_sort_order_user_changeable
-        );
-        Mockito.when(mSharedPreferences.getInt(Mockito.eq(ContactsPreferences.SORT_ORDER_KEY),
-                Mockito.anyInt())).thenReturn(ContactsPreferences.SORT_ORDER_PRIMARY,
-                ContactsPreferences.SORT_ORDER_ALTERNATIVE);
-
-        Assert.assertEquals(ContactsPreferences.SORT_ORDER_PRIMARY,
-                mContactsPreferences.getSortOrder());
-        mContactsPreferences.refreshValue(ContactsPreferences.SORT_ORDER_KEY);
-
-        Assert.assertEquals(ContactsPreferences.SORT_ORDER_ALTERNATIVE,
-                mContactsPreferences.getSortOrder());
-    }
-
-    public void testRefreshDisplayOrder() throws InterruptedException {
-        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
-                true // R.bool.config_display_order_user_changeable
-        );
-        Mockito.when(mSharedPreferences.getInt(Mockito.eq(ContactsPreferences.DISPLAY_ORDER_KEY),
-                Mockito.anyInt())).thenReturn(ContactsPreferences.DISPLAY_ORDER_PRIMARY,
-                ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
-
-        Assert.assertEquals(ContactsPreferences.DISPLAY_ORDER_PRIMARY,
-                mContactsPreferences.getDisplayOrder());
-        mContactsPreferences.refreshValue(ContactsPreferences.DISPLAY_ORDER_KEY);
-
-        Assert.assertEquals(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE,
-                mContactsPreferences.getDisplayOrder());
-    }
-
-    public void testRefreshDefaultAccount() throws InterruptedException {
-        mContactsPreferences = new ContactsPreferences(mContext,
-                /* isDefaultAccountUserChangeable */ true);
-
-        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
-                .thenReturn(new AccountWithDataSet("name1", "type1", "dataset1").stringify(),
-                        new AccountWithDataSet("name2", "type2", "dataset2").stringify());
-
-        Assert.assertEquals(new AccountWithDataSet("name1", "type1", "dataset1"),
-                mContactsPreferences.getDefaultAccount());
-        mContactsPreferences.refreshValue(ACCOUNT_KEY);
-
-        Assert.assertEquals(new AccountWithDataSet("name2", "type2", "dataset2"),
-                mContactsPreferences.getDefaultAccount());
-    }
-
-    public void testShouldShowAccountChangedNotificationIfAccountNotSaved() {
-        mContactsPreferences = new ContactsPreferences(mContext,
-                /* isDefaultAccountUserChangeable */ true);
-        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
-                .thenReturn(null);
-
-        assertTrue("Should prompt to change default if no default is saved",
-                mContactsPreferences.shouldShowAccountChangedNotification(Arrays.asList(
-                        new AccountWithDataSet("name1", "type1", "dataset1"),
-                        new AccountWithDataSet("name2", "type2", "dataset2"))));
-    }
-
-    public void testShouldShowAccountChangedNotification() {
-        mContactsPreferences = new ContactsPreferences(mContext,
-                /* isDefaultAccountUserChangeable */ true);
-        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
-                .thenReturn(new AccountWithDataSet("name", "type", "dataset").stringify());
-
-        assertFalse("Should not prompt to change default if current default exists",
-                mContactsPreferences.shouldShowAccountChangedNotification(Arrays.asList(
-                        new AccountWithDataSet("name", "type", "dataset"),
-                        new AccountWithDataSet("name1", "type1", "dataset1"))));
-
-        assertTrue("Should prompt to change default if current default does not exist",
-                mContactsPreferences.shouldShowAccountChangedNotification(Arrays.asList(
-                        new AccountWithDataSet("name1", "type1", "dataset1"),
-                        new AccountWithDataSet("name2", "type2", "dataset2"))));
-    }
-
-    public void testShouldShowAccountChangedNotificationWhenThereIsOneAccount() {
-        mContactsPreferences = new ContactsPreferences(mContext,
-                /* isDefaultAccountUserChangeable */ true);
-        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
-                .thenReturn(null);
-
-        // Normally we would prompt because there is no default set but if there is just one
-        // account we should just use it.
-        assertFalse("Should not prompt to change default if there is only one account available",
-                mContactsPreferences.shouldShowAccountChangedNotification(Arrays.asList(
-                        new AccountWithDataSet("name", "type", "dataset"))));
-    }
-}
diff --git a/tests/src/com/android/contacts/common/test/FragmentTestActivity.java b/tests/src/com/android/contacts/common/test/FragmentTestActivity.java
deleted file mode 100644
index 5ae2d95..0000000
--- a/tests/src/com/android/contacts/common/test/FragmentTestActivity.java
+++ /dev/null
@@ -1,47 +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.common.test;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.view.Window;
-import android.view.WindowManager;
-import android.widget.FrameLayout;
-
-/**
- * An activity that is used for testing fragments.  A unit test starts this
- * activity, adds a fragment and then tests the fragment.
- */
-public class FragmentTestActivity extends Activity {
-
-    public final static int LAYOUT_ID = 1;
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        // Normally fragment/activity onStart() methods will not be called when screen is locked.
-        // Use the following flags to ensure that activities can be show for testing.
-        final Window window = getWindow();
-        window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
-                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
-
-        final FrameLayout layout = new FrameLayout(this);
-        layout.setId(LAYOUT_ID);
-        setContentView(layout);
-    }
-}
diff --git a/tests/src/com/android/contacts/common/test/IntegrationTestUtils.java b/tests/src/com/android/contacts/common/test/IntegrationTestUtils.java
deleted file mode 100644
index 5457128..0000000
--- a/tests/src/com/android/contacts/common/test/IntegrationTestUtils.java
+++ /dev/null
@@ -1,196 +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.common.test;
-
-import static android.os.PowerManager.ACQUIRE_CAUSES_WAKEUP;
-import static android.os.PowerManager.FULL_WAKE_LOCK;
-import static android.os.PowerManager.ON_AFTER_RELEASE;
-
-import android.app.Activity;
-import android.app.Instrumentation;
-import android.content.Context;
-import android.os.PowerManager;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.google.common.base.Preconditions;
-
-import junit.framework.Assert;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.FutureTask;
-
-import javax.annotation.concurrent.GuardedBy;
-import javax.annotation.concurrent.ThreadSafe;
-
-/** Some utility methods for making integration testing smoother. */
-@ThreadSafe
-public class IntegrationTestUtils {
-    private static final String TAG = "IntegrationTestUtils";
-
-    private final Instrumentation mInstrumentation;
-    private final Object mLock = new Object();
-    @GuardedBy("mLock") private PowerManager.WakeLock mWakeLock;
-
-    public IntegrationTestUtils(Instrumentation instrumentation) {
-        mInstrumentation = instrumentation;
-    }
-
-    /**
-     * Find a view by a given resource id, from the given activity, and click it, iff it is
-     * enabled according to {@link View#isEnabled()}.
-     */
-    public void clickButton(final Activity activity, final int buttonResourceId) throws Throwable {
-        runOnUiThreadAndGetTheResult(new Callable<Void>() {
-            @Override
-            public Void call() throws Exception {
-                View view = activity.findViewById(buttonResourceId);
-                Assert.assertNotNull(view);
-                if (view.isEnabled()) {
-                    view.performClick();
-                }
-                return null;
-            }
-        });
-    }
-
-    /** Returns the result of running {@link TextView#getText()} on the ui thread. */
-    public CharSequence getText(final TextView view) throws Throwable {
-        return runOnUiThreadAndGetTheResult(new Callable<CharSequence>() {
-            @Override
-            public CharSequence call() {
-                return view.getText();
-            }
-        });
-    }
-
-    // TODO: Move this class and the appropriate documentation into a test library, having checked
-    // first to see if exactly this code already exists or not.
-    /**
-     * Execute a callable on the ui thread, returning its result synchronously.
-     * <p>
-     * Waits for an idle sync on the main thread (see {@link Instrumentation#waitForIdle(Runnable)})
-     * before executing this callable.
-     */
-    public <T> T runOnUiThreadAndGetTheResult(Callable<T> callable) throws Throwable {
-        FutureTask<T> future = new FutureTask<T>(callable);
-        mInstrumentation.waitForIdle(future);
-        try {
-            return future.get();
-        } catch (ExecutionException e) {
-            // Unwrap the cause of the exception and re-throw it.
-            throw e.getCause();
-        }
-    }
-
-    /**
-     * Wake up the screen, useful in tests that want or need the screen to be on.
-     * <p>
-     * This is usually called from setUp() for tests that require it.  After calling this method,
-     * {@link #releaseScreenWakeLock()} must be called, this is usually done from tearDown().
-     */
-    public void acquireScreenWakeLock(Context context) {
-        synchronized (mLock) {
-            Preconditions.checkState(mWakeLock == null, "mWakeLock was already held");
-            mWakeLock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE))
-                    .newWakeLock(
-                            PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE | PowerManager.FULL_WAKE_LOCK, TAG);
-            mWakeLock.acquire();
-        }
-    }
-
-    /** Release the wake lock previously acquired with {@link #acquireScreenWakeLock(Context)}. */
-    public void releaseScreenWakeLock() {
-        synchronized (mLock) {
-            // We don't use Preconditions to force you to have acquired before release.
-            // This is because we don't want unnecessary exceptions in tearDown() since they'll
-            // typically mask the actual exception that happened during the test.
-            // The other reason is that this method is most likely to be called from tearDown(),
-            // which is invoked within a finally block, so it's not infrequently the case that
-            // the setUp() method fails before getting the lock, at which point we don't want
-            // to fail in tearDown().
-            if (mWakeLock != null) {
-                mWakeLock.release();
-                mWakeLock = null;
-            }
-        }
-    }
-
-    /**
-     * Gets all {@link TextView} objects whose {@link TextView#getText()} contains the given text as
-     * a substring.
-     */
-    public List<TextView> getTextViewsWithString(final Activity activity, final String text)
-            throws Throwable {
-        return getTextViewsWithString(getRootView(activity), text);
-    }
-
-    /**
-     * Gets all {@link TextView} objects whose {@link TextView#getText()} contains the given text as
-     * a substring for the given root view.
-     */
-    public List<TextView> getTextViewsWithString(final View rootView, final String text)
-            throws Throwable {
-        return runOnUiThreadAndGetTheResult(new Callable<List<TextView>>() {
-            @Override
-            public List<TextView> call() throws Exception {
-                List<TextView> matchingViews = new ArrayList<TextView>();
-                for (TextView textView : getAllViews(TextView.class, rootView)) {
-                    if (textView.getText().toString().contains(text)) {
-                        matchingViews.add(textView);
-                    }
-                }
-                return matchingViews;
-            }
-        });
-    }
-
-    /** Find the root view for a given activity. */
-    public static View getRootView(Activity activity) {
-        return activity.findViewById(android.R.id.content).getRootView();
-    }
-
-    /**
-     * Gets a list of all views of a given type, rooted at the given parent.
-     * <p>
-     * This method will recurse down through all {@link ViewGroup} instances looking for
-     * {@link View} instances of the supplied class type. Specifically it will use the
-     * {@link Class#isAssignableFrom(Class)} method as the test for which views to add to the list,
-     * so if you provide {@code View.class} as your type, you will get every view. The parent itself
-     * will be included also, should it be of the right type.
-     * <p>
-     * This call manipulates the ui, and as such should only be called from the application's main
-     * thread.
-     */
-    private static <T extends View> List<T> getAllViews(final Class<T> clazz, final View parent) {
-        List<T> results = new ArrayList<T>();
-        if (parent.getClass().equals(clazz)) {
-            results.add(clazz.cast(parent));
-        }
-        if (parent instanceof ViewGroup) {
-            ViewGroup viewGroup = (ViewGroup) parent;
-            for (int i = 0; i < viewGroup.getChildCount(); ++i) {
-                results.addAll(getAllViews(clazz, viewGroup.getChildAt(i)));
-            }
-        }
-        return results;
-    }
-}
diff --git a/tests/src/com/android/contacts/common/test/LaunchPerformanceBase.java b/tests/src/com/android/contacts/common/test/LaunchPerformanceBase.java
deleted file mode 100644
index a2ebde3..0000000
--- a/tests/src/com/android/contacts/common/test/LaunchPerformanceBase.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.contacts.common.test;
-
-import android.app.Instrumentation;
-import android.content.Intent;
-import android.os.Bundle;
-
-
-/**
- * Base class for all launch performance Instrumentation classes.
- */
-public class LaunchPerformanceBase extends Instrumentation {
-
-    public static final String LOG_TAG = "Launch Performance";
-
-    protected Bundle mResults;
-    protected Intent mIntent;
-
-    public LaunchPerformanceBase() {
-        mResults = new Bundle();
-        mIntent = new Intent(Intent.ACTION_MAIN);
-        mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        setAutomaticPerformanceSnapshots();
-    }
-
-    /**
-     * Launches intent, and waits for idle before returning.
-     *
-     * @hide
-     */
-    protected void LaunchApp() {
-        startActivitySync(mIntent);
-        waitForIdleSync();
-    }
-}
diff --git a/tests/src/com/android/contacts/common/test/mocks/ContactsMockContext.java b/tests/src/com/android/contacts/common/test/mocks/ContactsMockContext.java
deleted file mode 100644
index c72fe3d..0000000
--- a/tests/src/com/android/contacts/common/test/mocks/ContactsMockContext.java
+++ /dev/null
@@ -1,96 +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.common.test.mocks;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.ContextWrapper;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ProviderInfo;
-import android.provider.ContactsContract;
-import android.provider.Settings;
-import android.test.mock.MockContentResolver;
-
-/**
- * A mock context for contacts unit tests. Forwards everything to
- * a supplied context, except content resolver operations, which are sent
- * to mock content providers.
- */
-public class ContactsMockContext extends ContextWrapper {
-    private ContactsMockPackageManager mPackageManager;
-    private MockContentResolver mContentResolver;
-    private MockContentProvider mContactsProvider;
-    private MockContentProvider mSettingsProvider;
-    private Intent mIntentForStartActivity;
-
-    public ContactsMockContext(Context base) {
-        this(base, ContactsContract.AUTHORITY);
-    }
-
-    public ContactsMockContext(Context base, String authority) {
-        super(base);
-        mPackageManager = new ContactsMockPackageManager();
-        mContentResolver = new MockContentResolver();
-        mContactsProvider = new MockContentProvider();
-        mContentResolver.addProvider(authority, mContactsProvider);
-        mSettingsProvider = new MockContentProvider();
-        mContentResolver.addProvider(Settings.AUTHORITY, mSettingsProvider);
-    }
-
-    @Override
-    public ContentResolver getContentResolver() {
-        return mContentResolver;
-    }
-
-    public MockContentProvider getContactsProvider() {
-        return mContactsProvider;
-    }
-
-    public MockContentProvider getSettingsProvider() {
-        return mSettingsProvider;
-    }
-
-    @Override
-    public PackageManager getPackageManager() {
-        return mPackageManager;
-    }
-
-    @Override
-    public Context getApplicationContext() {
-        return this;
-    }
-
-    /**
-     * Instead of actually sending Intent, this method just remembers what Intent was supplied last.
-     * You can check the content via {@link #getIntentForStartActivity()} for verification.
-     */
-    @Override
-    public void startActivity(Intent intent) {
-        mIntentForStartActivity = intent;
-    }
-
-    public Intent getIntentForStartActivity() {
-        return mIntentForStartActivity;
-    }
-
-    public void verify() {
-        mContactsProvider.verify();
-        mSettingsProvider.verify();
-    }
-
-}
diff --git a/tests/src/com/android/contacts/common/test/mocks/ContactsMockPackageManager.java b/tests/src/com/android/contacts/common/test/mocks/ContactsMockPackageManager.java
deleted file mode 100644
index a1557ff..0000000
--- a/tests/src/com/android/contacts/common/test/mocks/ContactsMockPackageManager.java
+++ /dev/null
@@ -1,45 +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.common.test.mocks;
-
-import android.content.ComponentName;
-import android.content.pm.ApplicationInfo;
-import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
-import android.test.mock.MockPackageManager;
-
-/**
- */
-public class ContactsMockPackageManager extends MockPackageManager {
-    public ContactsMockPackageManager() {
-    }
-
-    @Override
-    public Drawable getActivityLogo(ComponentName activityName) throws NameNotFoundException {
-        return new ColorDrawable();
-    }
-
-    @Override
-    public Drawable getActivityIcon(ComponentName activityName) {
-        return new ColorDrawable();
-    }
-
-    @Override
-    public Drawable getDrawable(String packageName, int resid, ApplicationInfo appInfo) {
-        // TODO: make programmable
-        return new ColorDrawable();
-    }
-}
diff --git a/tests/src/com/android/contacts/common/test/mocks/MockAccountTypeManager.java b/tests/src/com/android/contacts/common/test/mocks/MockAccountTypeManager.java
deleted file mode 100644
index b701b3a..0000000
--- a/tests/src/com/android/contacts/common/test/mocks/MockAccountTypeManager.java
+++ /dev/null
@@ -1,110 +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.common.test.mocks;
-
-import android.accounts.Account;
-
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountTypeWithDataSet;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.model.account.BaseAccountType;
-import com.google.common.base.Objects;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A mock {@link AccountTypeManager} class.
- */
-public class MockAccountTypeManager extends AccountTypeManager {
-
-    public AccountType[] mTypes;
-    public AccountWithDataSet[] mAccounts;
-
-    public MockAccountTypeManager(AccountType[] types, AccountWithDataSet[] accounts) {
-        this.mTypes = types;
-        this.mAccounts = accounts;
-    }
-
-    @Override
-    public AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet) {
-        // Add fallback accountType to mimic the behavior of AccountTypeManagerImpl
-        AccountType mFallbackAccountType = new BaseAccountType() {
-            @Override
-            public boolean areContactsWritable() {
-                return false;
-            }
-        };
-        mFallbackAccountType.accountType = "fallback";
-        for (AccountType type : mTypes) {
-            if (Objects.equal(accountTypeWithDataSet.accountType, type.accountType)
-                    && Objects.equal(accountTypeWithDataSet.dataSet, type.dataSet)) {
-                return type;
-            }
-        }
-        return mFallbackAccountType;
-    }
-
-    @Override
-    public List<AccountWithDataSet> getAccounts(boolean writableOnly) {
-        return Arrays.asList(mAccounts);
-    }
-
-    @Override
-    public List<AccountWithDataSet> getAccounts(Predicate<AccountWithDataSet> filter) {
-        return Lists.newArrayList(Collections2.filter(Arrays.asList(mAccounts), filter));
-    }
-
-    @Override
-    public List<AccountWithDataSet> getSortedAccounts(AccountWithDataSet account,
-            boolean writableOnly) {
-        return Arrays.asList(mAccounts);
-    }
-
-    @Override
-    public List<AccountWithDataSet> getGroupWritableAccounts() {
-        return Arrays.asList(mAccounts);
-    }
-
-    @Override
-    public Account getDefaultGoogleAccount() {
-        return null;
-    }
-
-    @Override
-    public Map<AccountTypeWithDataSet, AccountType> getUsableInvitableAccountTypes() {
-        return Maps.newHashMap(); // Always returns empty
-    }
-
-    @Override
-    public List<AccountType> getAccountTypes(boolean writableOnly) {
-        final List<AccountType> ret = Lists.newArrayList();
-        synchronized (this) {
-            for (AccountType type : mTypes) {
-                if (!writableOnly || type.areContactsWritable()) {
-                    ret.add(type);
-                }
-            }
-        }
-        return ret;
-    }
-}
diff --git a/tests/src/com/android/contacts/common/test/mocks/MockContactPhotoManager.java b/tests/src/com/android/contacts/common/test/mocks/MockContactPhotoManager.java
deleted file mode 100644
index db8f06f..0000000
--- a/tests/src/com/android/contacts/common/test/mocks/MockContactPhotoManager.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.common.test.mocks;
-
-import android.graphics.Bitmap;
-import android.net.Uri;
-import android.view.View;
-import android.widget.ImageView;
-
-import com.android.contacts.common.ContactPhotoManager;
-
-/**
- * A photo preloader that always uses the "no contact" picture and never executes any real
- * db queries
- */
-public class MockContactPhotoManager extends ContactPhotoManager {
-    @Override
-    public void loadThumbnail(ImageView view, long photoId, boolean darkTheme, boolean isCircular,
-            DefaultImageRequest defaultImageRequest, DefaultImageProvider defaultProvider) {
-        defaultProvider.applyDefaultImage(view, -1, darkTheme, null);
-    }
-
-    @Override
-    public void loadPhoto(ImageView view, Uri photoUri, int requestedExtent, boolean darkTheme,
-            boolean isCircular, DefaultImageRequest defaultImageRequest,
-            DefaultImageProvider defaultProvider) {
-        defaultProvider.applyDefaultImage(view, requestedExtent, darkTheme, null);
-    }
-
-    @Override
-    public void removePhoto(ImageView view) {
-        view.setImageDrawable(null);
-    }
-
-    @Override
-    public void cancelPendingRequests(View fragmentRootView) {
-    }
-
-    @Override
-    public void pause() {
-    }
-
-    @Override
-    public void resume() {
-    }
-
-    @Override
-    public void refreshCache() {
-    }
-
-    @Override
-    public void cacheBitmap(Uri photoUri, Bitmap bitmap, byte[] photoBytes) {
-    }
-
-    @Override
-    public void preloadPhotosInBackground() {
-    }
-}
diff --git a/tests/src/com/android/contacts/common/test/mocks/MockContentProvider.java b/tests/src/com/android/contacts/common/test/mocks/MockContentProvider.java
deleted file mode 100644
index d3950fc..0000000
--- a/tests/src/com/android/contacts/common/test/mocks/MockContentProvider.java
+++ /dev/null
@@ -1,699 +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.common.test.mocks;
-
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Maps;
-
-import android.content.ContentValues;
-import android.content.UriMatcher;
-import android.database.Cursor;
-import android.database.MatrixCursor;
-import android.net.Uri;
-import android.support.annotation.Nullable;
-
-import junit.framework.Assert;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * A programmable mock content provider.
- */
-public class MockContentProvider extends android.test.mock.MockContentProvider {
-    private static final String TAG = "MockContentProvider";
-
-    public static class Query {
-
-        private final Uri mUri;
-        private UriMatcher mMatcher;
-
-        private String[] mProjection;
-        private String[] mDefaultProjection;
-        private String mSelection;
-        private String[] mSelectionArgs;
-        private String mSortOrder;
-        private List<Object> mRows = new ArrayList<>();
-        private boolean mAnyProjection;
-        private boolean mAnySelection;
-        private boolean mAnySortOrder;
-        private boolean mAnyNumberOfTimes;
-
-        private boolean mExecuted;
-
-        private Query() {
-            mUri = null;
-        }
-
-        private Query(UriMatcher matcher) {
-            mUri = null;
-            mMatcher = matcher;
-        }
-
-        public Query(Uri uri) {
-            mUri = uri;
-        }
-
-        @Override
-        public String toString() {
-            return queryToString(mUri, mProjection, mSelection, mSelectionArgs, mSortOrder);
-        }
-
-        public Query withProjection(String... projection) {
-            mProjection = projection;
-            return this;
-        }
-
-        public Query withDefaultProjection(String... projection) {
-            mDefaultProjection = projection;
-            return this;
-        }
-
-        public Query withAnyProjection() {
-            mAnyProjection = true;
-            return this;
-        }
-
-        public Query withSelection(String selection, String... selectionArgs) {
-            mSelection = selection;
-            mSelectionArgs = selectionArgs;
-            return this;
-        }
-
-        public Query withAnySelection() {
-            mAnySelection = true;
-            return this;
-        }
-
-        public Query withSortOrder(String sortOrder) {
-            mSortOrder = sortOrder;
-            return this;
-        }
-
-        public Query withAnySortOrder() {
-            mAnySortOrder = true;
-            return this;
-        }
-
-        public Query returnRow(ContentValues values) {
-            mRows.add(values);
-            return this;
-        }
-
-        public Query returnRow(Object... row) {
-            mRows.add(row);
-            return this;
-        }
-
-        public Query returnEmptyCursor() {
-            mRows.clear();
-            return this;
-        }
-
-        public Query anyNumberOfTimes() {
-            mAnyNumberOfTimes = true;
-            return this;
-        }
-
-        public boolean equals(Uri uri, String[] projection, String selection,
-                String[] selectionArgs, String sortOrder) {
-            if (mUri == null) {
-                if (mMatcher != null && mMatcher.match(uri) == UriMatcher.NO_MATCH) {
-                    return false;
-                }
-            } else if (!uri.equals(mUri)) {
-                return false;
-            }
-
-            if (!mAnyProjection && !Arrays.equals(projection, mProjection)) {
-                return false;
-            }
-
-            if (!mAnySelection && !Objects.equals(selection, mSelection)) {
-                return false;
-            }
-
-            if (!mAnySelection && !Arrays.equals(selectionArgs, mSelectionArgs)) {
-                return false;
-            }
-
-            if (!mAnySortOrder && !Objects.equals(sortOrder, mSortOrder)) {
-                return false;
-            }
-
-            return true;
-        }
-
-        public Cursor getResult(String[] projection) {
-            String[] columnNames;
-            if (mAnyProjection) {
-                columnNames = projection != null ? projection : mDefaultProjection;
-            } else {
-                columnNames = mProjection != null ? mProjection : mDefaultProjection;
-            }
-
-            MatrixCursor cursor = new MatrixCursor(columnNames);
-            for (Object row : mRows) {
-                if (row instanceof Object[]) {
-                    cursor.addRow((Object[]) row);
-                } else {
-                    ContentValues values = (ContentValues) row;
-                    Object[] columns = new Object[columnNames.length];
-                    for (int i = 0; i < columnNames.length; i++) {
-                        columns[i] = values.get(columnNames[i]);
-                    }
-                    cursor.addRow(columns);
-                }
-            }
-            return cursor;
-        }
-
-        public static Query forAnyUri() {
-            return new Query();
-        }
-
-        public static Query forUrisMatching(UriMatcher matcher) {
-            return new Query(matcher);
-        }
-
-        public static Query forUrisMatching(String authority, String... paths) {
-            final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
-            for (int i = 0; i < paths.length; i++) {
-                matcher.addURI(authority, paths[i], i);
-            }
-            return new Query(matcher);
-        }
-
-    }
-
-    public static class TypeQuery {
-        private final Uri mUri;
-        private final String mType;
-
-        public TypeQuery(Uri uri, String type) {
-            mUri = uri;
-            mType = type;
-        }
-
-        public Uri getUri() {
-            return mUri;
-        }
-
-        public String getType() {
-            return mType;
-        }
-
-        @Override
-        public String toString() {
-            return mUri + " --> " + mType;
-        }
-
-        public boolean equals(Uri uri) {
-            return getUri().equals(uri);
-        }
-    }
-
-    public static class Insert {
-        private final Uri mUri;
-        private final ContentValues mContentValues;
-        private final Uri mResultUri;
-        private boolean mAnyNumberOfTimes;
-        private boolean mIsExecuted;
-
-        /**
-         * Creates a new Insert to expect.
-         *
-         * @param uri the uri of the insertion request.
-         * @param contentValues the ContentValues to insert.
-         * @param resultUri the {@link Uri} for the newly inserted item.
-         * @throws NullPointerException if any parameter is {@code null}.
-         */
-        public Insert(Uri uri, ContentValues contentValues, Uri resultUri) {
-            mUri = Preconditions.checkNotNull(uri);
-            mContentValues = Preconditions.checkNotNull(contentValues);
-            mResultUri = Preconditions.checkNotNull(resultUri);
-        }
-
-        /**
-         * Causes this insert expectation to be useable for mutliple calls to insert, rather than
-         * just one.
-         *
-         * @return this
-         */
-        public Insert anyNumberOfTimes() {
-            mAnyNumberOfTimes = true;
-            return this;
-        }
-
-        private boolean equals(Uri uri, ContentValues contentValues) {
-            return mUri.equals(uri) && mContentValues.equals(contentValues);
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) {
-                return true;
-            }
-            if (o == null || getClass() != o.getClass()) {
-                return false;
-            }
-            Insert insert = (Insert) o;
-            return mAnyNumberOfTimes == insert.mAnyNumberOfTimes &&
-                    mIsExecuted == insert.mIsExecuted &&
-                    Objects.equals(mUri, insert.mUri) &&
-                    Objects.equals(mContentValues, insert.mContentValues) &&
-                    Objects.equals(mResultUri, insert.mResultUri);
-        }
-
-        @Override
-        public int hashCode() {
-            return Objects.hash(mUri, mContentValues, mResultUri, mAnyNumberOfTimes, mIsExecuted);
-        }
-
-        @Override
-        public String toString() {
-            return "Insert{" +
-                    "mUri=" + mUri +
-                    ", mContentValues=" + mContentValues +
-                    ", mResultUri=" + mResultUri +
-                    ", mAnyNumberOfTimes=" + mAnyNumberOfTimes +
-                    ", mIsExecuted=" + mIsExecuted +
-                    '}';
-        }
-    }
-
-    public static class Delete {
-        private final Uri mUri;
-
-        private boolean mAnyNumberOfTimes;
-        private boolean mAnySelection;
-        @Nullable private String mSelection;
-        @Nullable private String[] mSelectionArgs;
-        private boolean mIsExecuted;
-        private int mRowsAffected;
-
-        /**
-         * Creates a new Delete to expect.
-         * @param uri the uri of the delete request.
-         * @throws NullPointerException if uri is {@code null}.
-         */
-        public Delete(Uri uri) {
-            mUri = Preconditions.checkNotNull(uri);
-        }
-
-        /**
-         * Sets the given information as expected selection arguments.
-         *
-         * @param selection The selection to expect.
-         * @param selectionArgs The selection args to expect.
-         * @return this.
-         */
-        public Delete withSelection(String selection, @Nullable String[] selectionArgs) {
-            mSelection = Preconditions.checkNotNull(selection);
-            mSelectionArgs = selectionArgs;
-            mAnySelection = false;
-            return this;
-        }
-
-        /**
-         * Sets this delete to expect any selection arguments.
-         *
-         * @return this.
-         */
-        public Delete withAnySelection() {
-            mAnySelection = true;
-            return this;
-        }
-
-        /**
-         * Sets this delete to return the given number of rows affected.
-         *
-         * @param rowsAffected The value to return when this expected delete is executed.
-         * @return this.
-         */
-        public Delete returnRowsAffected(int rowsAffected) {
-            mRowsAffected = rowsAffected;
-            return this;
-        }
-
-        /**
-         * Causes this delete expectation to be useable for multiple calls to delete, rather than
-         * just one.
-         *
-         * @return this.
-         */
-        public Delete anyNumberOfTimes() {
-            mAnyNumberOfTimes = true;
-            return this;
-        }
-
-        private boolean equals(Uri uri, String selection, String[] selectionArgs) {
-            return mUri.equals(uri) && Objects.equals(mSelection, selection)
-                    && Arrays.equals(mSelectionArgs, selectionArgs);
-        }
-    }
-
-    public static class Update {
-        private final Uri mUri;
-        private final ContentValues mContentValues;
-        @Nullable private String mSelection;
-        @Nullable private String[] mSelectionArgs;
-        private boolean mAnyNumberOfTimes;
-        private boolean mIsExecuted;
-        private int mRowsAffected;
-
-        /**
-         * Creates a new Update to expect.
-         *
-         * @param uri the uri of the update request.
-         * @param contentValues the ContentValues to update.
-         *
-         * @throws NullPointerException if any parameter is {@code null}.
-         */
-        public Update(Uri uri,
-                      ContentValues contentValues,
-                      @Nullable String selection,
-                      @Nullable String[] selectionArgs) {
-            mUri = Preconditions.checkNotNull(uri);
-            mContentValues = Preconditions.checkNotNull(contentValues);
-            mSelection = selection;
-            mSelectionArgs = selectionArgs;
-        }
-
-        /**
-         * Causes this update expectation to be useable for mutliple calls to update, rather than
-         * just one.
-         *
-         * @return this
-         */
-        public Update anyNumberOfTimes() {
-            mAnyNumberOfTimes = true;
-            return this;
-        }
-
-        /**
-         * Sets this update to return the given number of rows affected.
-         *
-         * @param rowsAffected The value to return when this expected update is executed.
-         * @return this.
-         */
-        public Update returnRowsAffected(int rowsAffected) {
-            mRowsAffected = rowsAffected;
-            return this;
-        }
-
-        private boolean equals(Uri uri,
-                               ContentValues contentValues,
-                               @Nullable String selection,
-                               @Nullable String[] selectionArgs) {
-            return mUri.equals(uri) && mContentValues.equals(contentValues) &&
-                    Objects.equals(mSelection, selection) &&
-                    Objects.equals(mSelectionArgs, selectionArgs);
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) {
-                return true;
-            }
-            if (o == null || getClass() != o.getClass()) {
-                return false;
-            }
-            Update update = (Update) o;
-            return mAnyNumberOfTimes == update.mAnyNumberOfTimes &&
-                    mIsExecuted == update.mIsExecuted &&
-                    Objects.equals(mUri, update.mUri) &&
-                    Objects.equals(mContentValues, update.mContentValues) &&
-                    Objects.equals(mSelection, update.mSelection) &&
-                    Objects.equals(mSelectionArgs, update.mSelectionArgs);
-        }
-
-        @Override
-        public int hashCode() {
-            return Objects.hash(mUri, mContentValues, mAnyNumberOfTimes, mIsExecuted, mSelection,
-                    mSelectionArgs);
-        }
-
-        @Override
-        public String toString() {
-            return "Update{" +
-                    "mUri=" + mUri +
-                    ", mContentValues=" + mContentValues +
-                    ", mAnyNumberOfTimes=" + mAnyNumberOfTimes +
-                    ", mIsExecuted=" + mIsExecuted +
-                    ", mSelection=" + mSelection +
-                    ", mSelectionArgs=" + mSelectionArgs +
-                    '}';
-        }
-    }
-
-    private List<Query> mExpectedQueries = new ArrayList<>();
-    private Map<Uri, String> mExpectedTypeQueries = Maps.newHashMap();
-    private List<Insert> mExpectedInserts = new ArrayList<>();
-    private List<Delete> mExpectedDeletes = new ArrayList<>();
-    private List<Update> mExpectedUpdates = new ArrayList<>();
-
-    @Override
-    public boolean onCreate() {
-        return true;
-    }
-
-    public Query expect(Query query) {
-        mExpectedQueries.add(query);
-        return query;
-    }
-
-    public Query expectQuery(Uri contentUri) {
-        return expect(new Query(contentUri));
-    }
-
-    public Query expectQuery(String contentUri) {
-        return expectQuery(Uri.parse(contentUri));
-    }
-
-    public void expectTypeQuery(Uri uri, String type) {
-        mExpectedTypeQueries.put(uri, type);
-    }
-
-    public void expectInsert(Uri contentUri, ContentValues contentValues, Uri resultUri) {
-        mExpectedInserts.add(new Insert(contentUri, contentValues, resultUri));
-    }
-
-    public Update expectUpdate(Uri contentUri,
-                               ContentValues contentValues,
-                               @Nullable String selection,
-                               @Nullable String[] selectionArgs) {
-        Update update = new Update(contentUri, contentValues, selection, selectionArgs);
-        mExpectedUpdates.add(update);
-        return update;
-    }
-
-    public Delete expectDelete(Uri contentUri) {
-        Delete delete = new Delete(contentUri);
-        mExpectedDeletes.add(delete);
-        return delete;
-    }
-
-    @Override
-    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
-            String sortOrder) {
-        if (mExpectedQueries.isEmpty()) {
-            Assert.fail("Unexpected query: Actual:"
-                    + queryToString(uri, projection, selection, selectionArgs, sortOrder));
-        }
-
-        for (Iterator<Query> iterator = mExpectedQueries.iterator(); iterator.hasNext();) {
-            Query query = iterator.next();
-            if (query.equals(uri, projection, selection, selectionArgs, sortOrder)) {
-                query.mExecuted = true;
-                if (!query.mAnyNumberOfTimes) {
-                    iterator.remove();
-                }
-                return query.getResult(projection);
-            }
-        }
-
-        Assert.fail("Incorrect query. Expected one of: " + mExpectedQueries + ". Actual: " +
-                queryToString(uri, projection, selection, selectionArgs, sortOrder));
-        return null;
-    }
-
-    @Override
-    public String getType(Uri uri) {
-        if (mExpectedTypeQueries.isEmpty()) {
-            Assert.fail("Unexpected getType query: " + uri);
-        }
-
-        String mimeType = mExpectedTypeQueries.get(uri);
-        if (mimeType != null) {
-            return mimeType;
-        }
-
-        Assert.fail("Unknown mime type for: " + uri);
-        return null;
-    }
-
-    @Override
-    public Uri insert(Uri uri, ContentValues values) {
-        if (mExpectedInserts.isEmpty()) {
-            Assert.fail("Unexpected insert. Actual: " + insertToString(uri, values));
-        }
-        for (Iterator<Insert> iterator = mExpectedInserts.iterator(); iterator.hasNext(); ) {
-            Insert insert = iterator.next();
-            if (insert.equals(uri, values)) {
-                insert.mIsExecuted = true;
-                if (!insert.mAnyNumberOfTimes) {
-                    iterator.remove();
-                }
-                return insert.mResultUri;
-            }
-        }
-
-        Assert.fail("Incorrect insert. Expected one of: " + mExpectedInserts + ". Actual: "
-                + insertToString(uri, values));
-        return null;
-    }
-
-    private String insertToString(Uri uri, ContentValues contentValues) {
-        return "Insert { uri=" + uri + ", contentValues=" + contentValues + '}';
-    }
-
-    @Override
-    public int update(Uri uri,
-                      ContentValues values,
-                      @Nullable String selection,
-                      @Nullable String[] selectionArgs) {
-        if (mExpectedUpdates.isEmpty()) {
-            Assert.fail("Unexpected update. Actual: "
-                    + updateToString(uri, values, selection, selectionArgs));
-        }
-        for (Iterator<Update> iterator = mExpectedUpdates.iterator(); iterator.hasNext(); ) {
-            Update update = iterator.next();
-            if (update.equals(uri, values, selection, selectionArgs)) {
-                update.mIsExecuted = true;
-                if (!update.mAnyNumberOfTimes) {
-                    iterator.remove();
-                }
-                return update.mRowsAffected;
-            }
-        }
-
-        Assert.fail("Incorrect update. Expected one of: " + mExpectedUpdates + ". Actual: "
-                + updateToString(uri, values, selection, selectionArgs));
-        return - 1;
-    }
-
-    private String updateToString(Uri uri,
-                                  ContentValues contentValues,
-                                  @Nullable String selection,
-                                  @Nullable String[] selectionArgs) {
-        return "Update { uri=" + uri + ", contentValues=" + contentValues + ", selection=" +
-                selection + ", selectionArgs" + Arrays.toString(selectionArgs) + '}';
-    }
-
-    @Override
-    public int delete(Uri uri, String selection, String[] selectionArgs) {
-        if (mExpectedDeletes.isEmpty()) {
-            Assert.fail("Unexpected delete. Actual: " + deleteToString(uri, selection,
-                    selectionArgs));
-        }
-        for (Iterator<Delete> iterator = mExpectedDeletes.iterator(); iterator.hasNext(); ) {
-            Delete delete = iterator.next();
-            if (delete.equals(uri, selection, selectionArgs)) {
-                delete.mIsExecuted = true;
-                if (!delete.mAnyNumberOfTimes) {
-                    iterator.remove();
-                }
-                return delete.mRowsAffected;
-            }
-        }
-        Assert.fail("Incorrect delete. Expected one of: " + mExpectedDeletes + ". Actual: "
-                + deleteToString(uri, selection, selectionArgs));
-        return -1;
-    }
-
-    private String deleteToString(Uri uri, String selection, String[] selectionArgs) {
-        return "Delete { uri=" + uri + ", selection=" + selection + ", selectionArgs"
-                + Arrays.toString(selectionArgs) + '}';
-    }
-
-    private static String queryToString(Uri uri, String[] projection, String selection,
-            String[] selectionArgs, String sortOrder) {
-        StringBuilder sb = new StringBuilder();
-        sb.append(uri == null ? "<Any Uri>" : uri).append(" ");
-        if (projection != null) {
-            sb.append(Arrays.toString(projection));
-        } else {
-            sb.append("[]");
-        }
-        if (selection != null) {
-            sb.append(" selection: '").append(selection).append("'");
-            if (selectionArgs != null) {
-                sb.append(Arrays.toString(selectionArgs));
-            } else {
-                sb.append("[]");
-            }
-        }
-        if (sortOrder != null) {
-            sb.append(" sort: '").append(sortOrder).append("'");
-        }
-        return sb.toString();
-    }
-
-    public void verify() {
-        verifyQueries();
-        verifyInserts();
-        verifyDeletes();
-    }
-
-    private void verifyQueries() {
-        List<Query> missedQueries = new ArrayList<>();
-        for (Query query : mExpectedQueries) {
-            if (!query.mExecuted) {
-                missedQueries.add(query);
-            }
-        }
-        Assert.assertTrue("Not all expected queries have been called: " + missedQueries,
-                missedQueries.isEmpty());
-    }
-
-    private void verifyInserts() {
-        List<Insert> missedInserts = new ArrayList<>();
-        for (Insert insert : mExpectedInserts) {
-            if (!insert.mIsExecuted) {
-                missedInserts.add(insert);
-            }
-        }
-        Assert.assertTrue("Not all expected inserts have been called: " + missedInserts,
-                missedInserts.isEmpty());
-    }
-
-    private void verifyDeletes() {
-        List<Delete> missedDeletes = new ArrayList<>();
-        for (Delete delete : mExpectedDeletes) {
-            if (!delete.mIsExecuted) {
-                missedDeletes.add(delete);
-            }
-        }
-        Assert.assertTrue("Not all expected deletes have been called: " + missedDeletes,
-                missedDeletes.isEmpty());
-    }
-}
diff --git a/tests/src/com/android/contacts/common/test/mocks/MockSharedPreferences.java b/tests/src/com/android/contacts/common/test/mocks/MockSharedPreferences.java
deleted file mode 100644
index 13d035e..0000000
--- a/tests/src/com/android/contacts/common/test/mocks/MockSharedPreferences.java
+++ /dev/null
@@ -1,149 +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.common.test.mocks;
-
-import android.content.SharedPreferences;
-
-import com.google.common.collect.Maps;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-
-/**
- * A programmable mock content provider.
- */
-public class MockSharedPreferences implements SharedPreferences, SharedPreferences.Editor {
-
-    private HashMap<String, Object> mValues = Maps.newHashMap();
-    private HashMap<String, Object> mTempValues = Maps.newHashMap();
-
-    public Editor edit() {
-        return this;
-    }
-
-    public boolean contains(String key) {
-        return mValues.containsKey(key);
-    }
-
-    public Map<String, ?> getAll() {
-        return new HashMap<String, Object>(mValues);
-    }
-
-    public boolean getBoolean(String key, boolean defValue) {
-        if (mValues.containsKey(key)) {
-            return ((Boolean)mValues.get(key)).booleanValue();
-        }
-        return defValue;
-    }
-
-    public float getFloat(String key, float defValue) {
-        if (mValues.containsKey(key)) {
-            return ((Float)mValues.get(key)).floatValue();
-        }
-        return defValue;
-    }
-
-    public int getInt(String key, int defValue) {
-        if (mValues.containsKey(key)) {
-            return ((Integer)mValues.get(key)).intValue();
-        }
-        return defValue;
-    }
-
-    public long getLong(String key, long defValue) {
-        if (mValues.containsKey(key)) {
-            return ((Long)mValues.get(key)).longValue();
-        }
-        return defValue;
-    }
-
-    public String getString(String key, String defValue) {
-        if (mValues.containsKey(key))
-            return (String)mValues.get(key);
-        return defValue;
-    }
-
-    @SuppressWarnings("unchecked")
-    public Set<String> getStringSet(String key, Set<String> defValues) {
-        if (mValues.containsKey(key)) {
-            return (Set<String>) mValues.get(key);
-        }
-        return defValues;
-    }
-
-    public void registerOnSharedPreferenceChangeListener(
-            OnSharedPreferenceChangeListener listener) {
-        throw new UnsupportedOperationException();
-    }
-
-    public void unregisterOnSharedPreferenceChangeListener(
-            OnSharedPreferenceChangeListener listener) {
-        throw new UnsupportedOperationException();
-    }
-
-    public Editor putBoolean(String key, boolean value) {
-        mTempValues.put(key, Boolean.valueOf(value));
-        return this;
-    }
-
-    public Editor putFloat(String key, float value) {
-        mTempValues.put(key, value);
-        return this;
-    }
-
-    public Editor putInt(String key, int value) {
-        mTempValues.put(key, value);
-        return this;
-    }
-
-    public Editor putLong(String key, long value) {
-        mTempValues.put(key, value);
-        return this;
-    }
-
-    public Editor putString(String key, String value) {
-        mTempValues.put(key, value);
-        return this;
-    }
-
-    public Editor putStringSet(String key, Set<String> values) {
-        mTempValues.put(key, values);
-        return this;
-    }
-
-    public Editor remove(String key) {
-        mTempValues.remove(key);
-        return this;
-    }
-
-    public Editor clear() {
-        mTempValues.clear();
-        return this;
-    }
-
-    @SuppressWarnings("unchecked")
-    public boolean commit() {
-        mValues = (HashMap<String, Object>)mTempValues.clone();
-        return true;
-    }
-
-    public void apply() {
-        commit();
-    }
-}
diff --git a/tests/src/com/android/contacts/common/util/BitmapUtilTests.java b/tests/src/com/android/contacts/common/util/BitmapUtilTests.java
deleted file mode 100644
index 94394b1..0000000
--- a/tests/src/com/android/contacts/common/util/BitmapUtilTests.java
+++ /dev/null
@@ -1,123 +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.common.util;
-
-import android.graphics.Bitmap;
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.contacts.common.util.BitmapUtil;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-/**
- * Tests for {@link com.android.contacts.common.util.BitmapUtil}.
- */
-@SmallTest
-public class BitmapUtilTests extends AndroidTestCase {
-    public void testGetSmallerExtentFromBytes1() throws Exception {
-        assertEquals(100, BitmapUtil.getSmallerExtentFromBytes(createJpegRawData(100, 100)));
-        assertEquals(100, BitmapUtil.getSmallerExtentFromBytes(createPngRawData(100, 100)));
-    }
-
-    public void testGetSmallerExtentFromBytes2() throws Exception {
-        assertEquals(50, BitmapUtil.getSmallerExtentFromBytes(createJpegRawData(200, 50)));
-        assertEquals(50, BitmapUtil.getSmallerExtentFromBytes(createPngRawData(200, 50)));
-    }
-
-    public void testGetSmallerExtentFromBytes3() throws Exception {
-        assertEquals(40, BitmapUtil.getSmallerExtentFromBytes(createJpegRawData(40, 150)));
-        assertEquals(40, BitmapUtil.getSmallerExtentFromBytes(createPngRawData(40, 150)));
-    }
-
-    public void testFindOptimalSampleSizeExact() throws Exception {
-        assertEquals(1, BitmapUtil.findOptimalSampleSize(512, 512));
-    }
-
-    public void testFindOptimalSampleSizeBigger() throws Exception {
-        assertEquals(1, BitmapUtil.findOptimalSampleSize(512, 1024));
-    }
-
-    public void testFindOptimalSampleSizeSmaller1() throws Exception {
-        assertEquals(2, BitmapUtil.findOptimalSampleSize(512, 256));
-    }
-
-    public void testFindOptimalSampleSizeSmaller2() throws Exception {
-        assertEquals(2, BitmapUtil.findOptimalSampleSize(512, 230));
-    }
-
-    public void testFindOptimalSampleSizeSmaller3() throws Exception {
-        assertEquals(4, BitmapUtil.findOptimalSampleSize(512, 129));
-    }
-
-    public void testFindOptimalSampleSizeSmaller4() throws Exception {
-        assertEquals(4, BitmapUtil.findOptimalSampleSize(512, 128));
-    }
-
-    public void testFindOptimalSampleSizeUnknownOriginal() throws Exception {
-        assertEquals(1, BitmapUtil.findOptimalSampleSize(-1, 128));
-    }
-
-    public void testFindOptimalSampleSizeUnknownTarget() throws Exception {
-        assertEquals(1, BitmapUtil.findOptimalSampleSize(128, -1));
-    }
-
-    public void testDecodeWithSampleSize1() throws IOException {
-        assertBitmapSize(128, 64, BitmapUtil.decodeBitmapFromBytes(createJpegRawData(128, 64), 1));
-        assertBitmapSize(128, 64, BitmapUtil.decodeBitmapFromBytes(createPngRawData(128, 64), 1));
-    }
-
-    public void testDecodeWithSampleSize2() throws IOException {
-        assertBitmapSize(64, 32, BitmapUtil.decodeBitmapFromBytes(createJpegRawData(128, 64), 2));
-        assertBitmapSize(64, 32, BitmapUtil.decodeBitmapFromBytes(createPngRawData(128, 64), 2));
-    }
-
-    public void testDecodeWithSampleSize2a() throws IOException {
-        assertBitmapSize(25, 20, BitmapUtil.decodeBitmapFromBytes(createJpegRawData(50, 40), 2));
-        assertBitmapSize(25, 20, BitmapUtil.decodeBitmapFromBytes(createPngRawData(50, 40), 2));
-    }
-
-    public void testDecodeWithSampleSize4() throws IOException {
-        assertBitmapSize(32, 16, BitmapUtil.decodeBitmapFromBytes(createJpegRawData(128, 64), 4));
-        assertBitmapSize(32, 16, BitmapUtil.decodeBitmapFromBytes(createPngRawData(128, 64), 4));
-    }
-
-    private void assertBitmapSize(int expectedWidth, int expectedHeight, Bitmap bitmap) {
-        assertEquals(expectedWidth, bitmap.getWidth());
-        assertEquals(expectedHeight, bitmap.getHeight());
-    }
-
-    private byte[] createJpegRawData(int sourceWidth, int sourceHeight) throws IOException {
-        return createRawData(Bitmap.CompressFormat.JPEG, sourceWidth, sourceHeight);
-    }
-
-    private byte[] createPngRawData(int sourceWidth, int sourceHeight) throws IOException {
-        return createRawData(Bitmap.CompressFormat.PNG, sourceWidth, sourceHeight);
-    }
-
-    private byte[] createRawData(Bitmap.CompressFormat format, int sourceWidth,
-            int sourceHeight) throws IOException {
-        // Create a temp bitmap as our source
-        Bitmap b = Bitmap.createBitmap(sourceWidth, sourceHeight, Bitmap.Config.ARGB_8888);
-        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
-        b.compress(format, 50, outputStream);
-        final byte[] data = outputStream.toByteArray();
-        outputStream.close();
-        return data;
-    }
-}
diff --git a/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java b/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
deleted file mode 100644
index b4cd1ca..0000000
--- a/tests/src/com/android/contacts/common/util/ContactDisplayUtilTests.java
+++ /dev/null
@@ -1,202 +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.common.util;
-
-import static android.provider.ContactsContract.CommonDataKinds.Phone;
-
-import android.test.AndroidTestCase;
-import android.test.suitebuilder.annotation.SmallTest;
-
-import com.android.contacts.common.R;
-import com.android.contacts.common.preference.ContactsPreferences;
-
-import org.mockito.Mock;
-import org.mockito.Mockito;
-import org.mockito.MockitoAnnotations;
-
-/**
- * Unit tests for (@link ContactDisplayUtils}
- */
-@SmallTest
-public class ContactDisplayUtilTests extends AndroidTestCase {
-
-    private static final String NAME_PRIMARY = "Name Primary";
-    private static final String NAME_ALTERNATIVE = "Name Alternative";
-
-    @Mock private ContactsPreferences mContactsPreferences;
-
-    @Override
-    public void setUp() throws Exception {
-        super.setUp();
-        MockitoAnnotations.initMocks(this);
-    }
-
-    public void testIsCustomPhoneTypeReturnsTrue() {
-        assertTrue(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_CUSTOM));
-        assertTrue(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_ASSISTANT));
-    }
-
-    public void testIsCustomPhoneTypeReturnsFalse() {
-        assertFalse(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_HOME));
-        assertFalse(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_FAX_WORK));
-        assertFalse(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_MOBILE));
-        assertFalse(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_OTHER));
-    }
-
-    public void testGetLabelForCallOrSmsReturnsCustomLabel() {
-        final CharSequence smsResult = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_CUSTOM,
-                "expected sms label", ContactDisplayUtils.INTERACTION_SMS, getContext());
-        assertEquals("expected sms label", smsResult);
-
-        final CharSequence callResult = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_CUSTOM,
-                "expected call label", ContactDisplayUtils.INTERACTION_CALL, getContext());
-        assertEquals("expected call label", callResult);
-    }
-
-    public void testGetLabelForCallOrSmsReturnsCallLabels() {
-        CharSequence result = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_HOME, "",
-                ContactDisplayUtils.INTERACTION_CALL, getContext());
-        CharSequence expected = getContext().getResources().getText(R.string.call_home);
-        assertEquals(expected, result);
-
-        result = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_MOBILE, "",
-                ContactDisplayUtils.INTERACTION_CALL, getContext());
-        expected = getContext().getResources().getText(R.string.call_mobile);
-        assertEquals(expected, result);
-    }
-
-    public void testGetLabelForCallOrSmsReturnsSmsLabels() {
-        CharSequence result = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_HOME, "",
-                ContactDisplayUtils.INTERACTION_SMS, getContext());
-        CharSequence expected = getContext().getResources().getText(R.string.sms_home);
-        assertEquals(expected, result);
-
-        result = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_MOBILE, "",
-                ContactDisplayUtils.INTERACTION_SMS, getContext());
-        expected = getContext().getResources().getText(R.string.sms_mobile);
-        assertEquals(expected, result);
-    }
-
-    public void testGetPhoneLabelResourceIdReturnsOther() {
-        assertEquals(R.string.call_other, ContactDisplayUtils.getPhoneLabelResourceId(null));
-    }
-
-    public void testGetPhoneLabelResourceIdReturnsMatchHome() {
-        assertEquals(R.string.call_home, ContactDisplayUtils.getPhoneLabelResourceId(
-                Phone.TYPE_HOME));
-    }
-
-    public void testGetSmsLabelResourceIdReturnsOther() {
-        assertEquals(R.string.sms_other, ContactDisplayUtils.getSmsLabelResourceId(null));
-    }
-
-    public void testGetSmsLabelResourceIdReturnsMatchHome() {
-        assertEquals(R.string.sms_home, ContactDisplayUtils.getSmsLabelResourceId(Phone.TYPE_HOME));
-    }
-
-    public void testGetPreferredDisplayName_NullContactsPreferences() {
-        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, null));
-    }
-
-    public void testGetPreferredDisplayName_NullContactsPreferences_NullAlternative() {
-        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY, null,
-                null));
-    }
-
-    public void testGetPreferredDisplayName_NullContactsPreferences_NullPrimary() {
-        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredDisplayName(null,
-                NAME_ALTERNATIVE, null));
-    }
-
-    public void testGetPreferredDisplayName_NullContactsPreferences_BothNull() {
-        assertNull(ContactDisplayUtils.getPreferredDisplayName(null, null, null));
-    }
-
-    public void testGetPreferredDisplayName_EmptyAlternative() {
-        Mockito.when(mContactsPreferences.getDisplayOrder())
-                .thenReturn(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
-        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY, "",
-                mContactsPreferences));
-    }
-
-    public void testGetPreferredDisplayName_InvalidPreference() {
-        Mockito.when(mContactsPreferences.getDisplayOrder()).thenReturn(-1);
-        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, mContactsPreferences));
-    }
-
-    public void testGetPreferredDisplayName_Primary() {
-        Mockito.when(mContactsPreferences.getDisplayOrder())
-                .thenReturn(ContactsPreferences.DISPLAY_ORDER_PRIMARY);
-        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, mContactsPreferences));
-    }
-
-    public void testGetPreferredDisplayName_Alternative() {
-        Mockito.when(mContactsPreferences.getDisplayOrder())
-                .thenReturn(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
-        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, mContactsPreferences));
-    }
-
-    public void testGetPreferredSortName_NullContactsPreferences() {
-        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, null));
-    }
-
-    public void testGetPreferredSortName_NullContactsPreferences_NullAlternative() {
-        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY, null,
-                null));
-    }
-
-    public void testGetPreferredSortName_NullContactsPreferences_NullPrimary() {
-        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredSortName(null,
-                NAME_ALTERNATIVE, null));
-    }
-
-    public void testGetPreferredSortName_NullContactsPreferences_BothNull() {
-        assertNull(ContactDisplayUtils.getPreferredSortName(null, null, null));
-    }
-
-    public void testGetPreferredSortName_EmptyAlternative() {
-        Mockito.when(mContactsPreferences.getSortOrder())
-                .thenReturn(ContactsPreferences.SORT_ORDER_ALTERNATIVE);
-        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY, "",
-                mContactsPreferences));
-    }
-
-    public void testGetPreferredSortName_InvalidPreference() {
-        Mockito.when(mContactsPreferences.getSortOrder()).thenReturn(-1);
-        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, mContactsPreferences));
-    }
-
-    public void testGetPreferredSortName_Primary() {
-        Mockito.when(mContactsPreferences.getSortOrder())
-                .thenReturn(ContactsPreferences.SORT_ORDER_PRIMARY);
-        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, mContactsPreferences));
-    }
-
-    public void testGetPreferredSortName_Alternative() {
-        Mockito.when(mContactsPreferences.getSortOrder())
-                .thenReturn(ContactsPreferences.SORT_ORDER_ALTERNATIVE);
-        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
-                NAME_ALTERNATIVE, mContactsPreferences));
-    }
-}
diff --git a/tests/src/com/android/contacts/common/util/SearchUtilTest.java b/tests/src/com/android/contacts/common/util/SearchUtilTest.java
deleted file mode 100644
index 3176a3c..0000000
--- a/tests/src/com/android/contacts/common/util/SearchUtilTest.java
+++ /dev/null
@@ -1,114 +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.common.util;
-
-import android.test.suitebuilder.annotation.SmallTest;
-
-import junit.framework.TestCase;
-
-/**
- * Unit tests for {@link SearchUtil}.
- */
-@SmallTest
-public class SearchUtilTest extends TestCase {
-
-    public void testFindMatchingLine() {
-        final String actual = "this is a long test string.\nWith potentially many lines.\n" +
-                "test@google.com\nhello\nblah\n'leading punc";
-
-        SearchUtil.MatchedLine matched = SearchUtil.findMatchingLine(actual, "poten");
-        assertEquals("With potentially many lines.", matched.line);
-        assertEquals(5, matched.startIndex);
-
-        // Full line match.
-        matched = SearchUtil.findMatchingLine(actual, "hello");
-        assertEquals("hello", matched.line);
-        assertEquals(0, matched.startIndex);
-
-        // First line match
-        matched = SearchUtil.findMatchingLine(actual, "this");
-        assertEquals("this is a long test string.", matched.line);
-        assertEquals(0, matched.startIndex);
-
-        // Last line match
-        matched = SearchUtil.findMatchingLine(actual, "punc");
-        assertEquals("'leading punc", matched.line);
-        assertEquals(9, matched.startIndex);
-    }
-
-    public void testContains() {
-        final String actual = "this is a long test string.\nWith potentially many lines.\n" +
-                "test@google.com\nhello\nblah\n'leading punc";
-        assertEquals(0, SearchUtil.contains(actual, "this"));
-        assertEquals(10, SearchUtil.contains(actual, "lon"));
-
-        assertEquals(1, SearchUtil.contains("'leading punc", "lead"));
-        assertEquals(9, SearchUtil.contains("'leading punc", "punc"));
-
-    }
-
-    public void testContainsNotFound() {
-        final String actual = "this is a long test string.\nWith potentially many lines.\n" +
-                "test@google.com\nhello\nblah\n'leading punc";
-
-        // Non-prefix
-        assertEquals(-1, SearchUtil.contains(actual, "ith"));
-        assertEquals(-1, SearchUtil.contains(actual, "ing"));
-
-        // Complete misses
-        assertEquals(-1, SearchUtil.contains(actual, "thisx"));
-        assertEquals(-1, SearchUtil.contains(actual, "manyx"));
-        assertEquals(-1, SearchUtil.contains(actual, "hellox"));
-
-        // Test for partial match of start of query to end of line
-        assertEquals(-1, SearchUtil.contains(actual, "punctual"));
-    }
-
-    public void testFindNextTokenStart() {
-        final String actual = "....hello.kitty";
-        //                     012345678901234
-
-        // Find first token.
-        assertEquals(4, SearchUtil.findNextTokenStart(actual, 0));
-        assertEquals(4, SearchUtil.findNextTokenStart(actual, 1));
-        assertEquals(4, SearchUtil.findNextTokenStart(actual, 2));
-        assertEquals(4, SearchUtil.findNextTokenStart(actual, 3));
-
-        // Find second token.
-        assertEquals(10, SearchUtil.findNextTokenStart(actual, 4));
-        assertEquals(10, SearchUtil.findNextTokenStart(actual, 5));
-        assertEquals(10, SearchUtil.findNextTokenStart(actual, 6));
-        assertEquals(10, SearchUtil.findNextTokenStart(actual, 7));
-        assertEquals(10, SearchUtil.findNextTokenStart(actual, 8));
-        assertEquals(10, SearchUtil.findNextTokenStart(actual, 9));
-
-        // No token.
-        assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 10));
-        assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 11));
-        assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 12));
-        assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 13));
-        assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 14));
-    }
-
-    public void testCleanStartAndEndOfSearchQuery() {
-        assertEquals("test", SearchUtil.cleanStartAndEndOfSearchQuery("...test..."));
-        assertEquals("test", SearchUtil.cleanStartAndEndOfSearchQuery(" test "));
-        assertEquals("test", SearchUtil.cleanStartAndEndOfSearchQuery(" ||test"));
-        assertEquals("test", SearchUtil.cleanStartAndEndOfSearchQuery("test.."));
-    }
-
-}
diff --git a/tests/src/com/android/contacts/compat/CompatUtilsTest.java b/tests/src/com/android/contacts/compat/CompatUtilsTest.java
new file mode 100644
index 0000000..22694cb
--- /dev/null
+++ b/tests/src/com/android/contacts/compat/CompatUtilsTest.java
@@ -0,0 +1,139 @@
+/*
+ * 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.compat;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+@SmallTest
+public class CompatUtilsTest extends AndroidTestCase {
+
+    public void testIsClassAvailable_NullClassName() {
+        assertFalse(CompatUtils.isClassAvailable(null));
+    }
+
+    public void testIsClassAvailable_EmptyClassName() {
+        assertFalse(CompatUtils.isClassAvailable(""));
+    }
+
+    public void testIsClassAvailable_NonexistentClass() {
+        assertFalse(CompatUtils.isClassAvailable("com.android.contacts.common.NonexistentClass"));
+    }
+
+    public void testIsClassAvailable() {
+        assertTrue(CompatUtils.isClassAvailable(BaseClass.class.getName()));
+    }
+
+    public void testIsMethodAvailable_NullClassName() {
+        assertFalse(CompatUtils.isMethodAvailable(null, "methodName"));
+    }
+
+    public void testIsMethodAvailable_EmptyClassName() {
+        assertFalse(CompatUtils.isMethodAvailable("", "methodName"));
+    }
+
+    public void testIsMethodAvailable_NullMethodName() {
+        assertFalse(CompatUtils.isMethodAvailable("className", null));
+    }
+
+    public void testIsMethodAvailable_EmptyMethodName() {
+        assertFalse(CompatUtils.isMethodAvailable("className", ""));
+    }
+
+    public void testIsMethodAvailable_NonexistentClass() {
+        assertFalse(CompatUtils.isMethodAvailable("com.android.contacts.common.NonexistentClass",
+                ""));
+    }
+
+    public void testIsMethodAvailable_NonexistentMethod() {
+        assertFalse(CompatUtils.isMethodAvailable(BaseClass.class.getName(), "derivedMethod"));
+    }
+
+    public void testIsMethodAvailable() {
+        assertTrue(CompatUtils.isMethodAvailable(BaseClass.class.getName(), "baseMethod"));
+    }
+
+    public void testIsMethodAvailable_InheritedMethod() {
+        assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "baseMethod"));
+    }
+
+    public void testIsMethodAvailable_OverloadedMethod() {
+        assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod"));
+        assertTrue(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod",
+                Integer.TYPE));
+    }
+
+    public void testIsMethodAvailable_NonexistentOverload() {
+        assertFalse(CompatUtils.isMethodAvailable(DerivedClass.class.getName(), "overloadedMethod",
+                Boolean.TYPE));
+    }
+
+    public void testInvokeMethod_NullMethodName() {
+        assertNull(CompatUtils.invokeMethod(new BaseClass(), null, null, null));
+    }
+
+    public void testInvokeMethod_EmptyMethodName() {
+        assertNull(CompatUtils.invokeMethod(new BaseClass(), "", null, null));
+    }
+
+    public void testInvokeMethod_NullClassInstance() {
+        assertNull(CompatUtils.invokeMethod(null, "", null, null));
+    }
+
+    public void testInvokeMethod_NonexistentMethod() {
+        assertNull(CompatUtils.invokeMethod(new BaseClass(), "derivedMethod", null, null));
+    }
+
+    public void testInvokeMethod_MethodWithNoParameters() {
+        assertEquals(1, CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod", null, null));
+    }
+
+    public void testInvokeMethod_MethodWithNoParameters_WithParameters() {
+        assertNull(CompatUtils.invokeMethod(new DerivedClass(), "derivedMethod",
+                new Class<?>[] {Integer.TYPE}, new Object[] {1}));
+    }
+
+    public void testInvokeMethod_MethodWithParameters_WithEmptyParameterList() {
+        assertNull(CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod",
+                new Class<?>[] {Integer.TYPE}, new Object[] {}));
+    }
+
+    public void testInvokeMethod_InvokeSimpleMethod() {
+        assertEquals(2, CompatUtils.invokeMethod(new DerivedClass(), "overloadedMethod",
+                new Class<?>[] {Integer.TYPE}, new Object[] {2}));
+    }
+
+    private class BaseClass {
+        public void baseMethod() {}
+    }
+
+    private class DerivedClass extends BaseClass {
+        public int derivedMethod() {
+            // This method needs to return something to differentiate a successful invocation from
+            // an unsuccessful one.
+            return 0;
+        }
+
+        public int overloadedMethod() {
+            return 1;
+        }
+
+        public int overloadedMethod(int i) {
+            return i;
+        }
+    }
+}
diff --git a/tests/src/com/android/contacts/database/NoNullCursorAsyncQueryHandlerTest.java b/tests/src/com/android/contacts/database/NoNullCursorAsyncQueryHandlerTest.java
new file mode 100644
index 0000000..987882b
--- /dev/null
+++ b/tests/src/com/android/contacts/database/NoNullCursorAsyncQueryHandlerTest.java
@@ -0,0 +1,154 @@
+/*
+ * 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.database;
+
+import android.database.Cursor;
+import android.net.Uri;
+import android.test.InstrumentationTestCase;
+import android.test.mock.MockContentProvider;
+import android.test.mock.MockContentResolver;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Unit test for {@link NoNullCursorAsyncQueryHandler}
+ */
+@SmallTest
+public class NoNullCursorAsyncQueryHandlerTest extends InstrumentationTestCase {
+
+    private MockContentResolver mMockContentResolver;
+
+    private static final String AUTHORITY = "com.android.contacts.common.unittest";
+    private static final Uri URI = Uri.parse("content://" + AUTHORITY);
+    private static final String[] PROJECTION = new String[]{"column1", "column2"};
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        mMockContentResolver = new MockContentResolver();
+        final MockContentProvider mMockContentProvider = new MockContentProvider() {
+            @Override
+            public Cursor query(Uri uri, String[] projection, String selection,
+                    String[] selectionArgs,
+                    String sortOrder) {
+                return null;
+            }
+        };
+
+        mMockContentResolver.addProvider(AUTHORITY, mMockContentProvider);
+    }
+
+    public void testCursorIsNotNull() throws Throwable {
+
+        final CountDownLatch latch = new CountDownLatch(1);
+        final ObjectHolder<Cursor> cursorHolder = ObjectHolder.newInstance();
+        final ObjectHolder<Boolean> ranHolder = ObjectHolder.newInstance(false);
+
+        runTestOnUiThread(new Runnable() {
+
+            @Override
+            public void run() {
+
+                NoNullCursorAsyncQueryHandler handler = new NoNullCursorAsyncQueryHandler(
+                        mMockContentResolver) {
+                    @Override
+                    protected void onNotNullableQueryComplete(int token, Object cookie,
+                            Cursor cursor) {
+                        cursorHolder.obj = cursor;
+                        ranHolder.obj = true;
+                        latch.countDown();
+                    }
+                };
+                handler.startQuery(1, null, URI, PROJECTION, null, null, null);
+            }
+        });
+
+        latch.await(5, TimeUnit.SECONDS);
+        assertFalse(cursorHolder.obj == null);
+        assertTrue(ranHolder.obj);
+    }
+
+    public void testCursorContainsCorrectCookies() throws Throwable {
+        final ObjectHolder<Boolean> ranHolder = ObjectHolder.newInstance(false);
+        final CountDownLatch latch = new CountDownLatch(1);
+        final ObjectHolder<Object> cookieHolder = ObjectHolder.newInstance();
+        final String cookie = "TEST COOKIE";
+        runTestOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                final NoNullCursorAsyncQueryHandler handler = new NoNullCursorAsyncQueryHandler(
+                        mMockContentResolver) {
+                    @Override
+                    protected void onNotNullableQueryComplete(int token, Object cookie,
+                            Cursor cursor) {
+                        ranHolder.obj = true;
+                        cookieHolder.obj = cookie;
+                        latch.countDown();
+                    }
+                };
+                handler.startQuery(1, cookie, URI, PROJECTION, null, null, null);
+            }
+        });
+
+        latch.await(5, TimeUnit.SECONDS);
+        assertSame(cookie, cookieHolder.obj);
+        assertTrue(ranHolder.obj);
+    }
+
+    public void testCursorContainsCorrectColumns() throws Throwable {
+        final ObjectHolder<Boolean> ranHolder = ObjectHolder.newInstance(false);
+        final CountDownLatch latch = new CountDownLatch(1);
+        final ObjectHolder<Cursor> cursorHolder = ObjectHolder.newInstance();
+        final String cookie = "TEST COOKIE";
+        runTestOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                final NoNullCursorAsyncQueryHandler handler = new NoNullCursorAsyncQueryHandler(
+                        mMockContentResolver) {
+                    @Override
+                    protected void onNotNullableQueryComplete(int token, Object cookie,
+                            Cursor cursor) {
+                        ranHolder.obj = true;
+                        cursorHolder.obj = cursor;
+                        latch.countDown();
+                    }
+                };
+                handler.startQuery(1, cookie, URI, PROJECTION, null, null, null);
+            }
+        });
+
+        latch.await(5, TimeUnit.SECONDS);
+        assertSame(PROJECTION, cursorHolder.obj.getColumnNames());
+        assertTrue(ranHolder.obj);
+    }
+
+    private static class ObjectHolder<T> {
+        public T obj;
+
+        public static <E> ObjectHolder<E> newInstance() {
+            return new ObjectHolder<E>();
+        }
+
+        public static <E> ObjectHolder<E> newInstance(E value) {
+            ObjectHolder<E> holder = new ObjectHolder<E>();
+            holder.obj = value;
+            return holder;
+        }
+    }
+}
diff --git a/tests/src/com/android/contacts/database/SimContactDaoTests.java b/tests/src/com/android/contacts/database/SimContactDaoTests.java
new file mode 100644
index 0000000..8e6edef
--- /dev/null
+++ b/tests/src/com/android/contacts/database/SimContactDaoTests.java
@@ -0,0 +1,762 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.database;
+
+import static android.os.Build.VERSION_CODES;
+
+import static com.android.contacts.tests.ContactsMatchers.DataCursor.hasEmail;
+import static com.android.contacts.tests.ContactsMatchers.DataCursor.hasName;
+import static com.android.contacts.tests.ContactsMatchers.DataCursor.hasPhone;
+import static com.android.contacts.tests.ContactsMatchers.isSimContactWithNameAndPhone;
+
+import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.OperationApplicationException;
+import android.database.Cursor;
+import android.os.RemoteException;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.Data;
+import android.support.annotation.RequiresApi;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.LargeTest;
+import android.support.test.filters.SdkSuppress;
+import android.support.test.filters.SmallTest;
+import android.support.test.filters.Suppress;
+import android.support.test.runner.AndroidJUnit4;
+import android.test.mock.MockContentResolver;
+import android.test.mock.MockContext;
+
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.test.mocks.MockContentProvider;
+import com.android.contacts.tests.AccountsTestHelper;
+import com.android.contacts.tests.ContactsMatchers;
+import com.android.contacts.tests.SimContactsTestHelper;
+import com.android.contacts.tests.StringableCursor;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+import org.hamcrest.Matchers;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.runners.Enclosed;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+
+@RunWith(Enclosed.class)
+public class SimContactDaoTests {
+
+    // Some random area codes for generating realistic US phones when
+    // generating fake data for the SIM contacts or CP2
+    private static final String[] AREA_CODES = 
+            {"360", "509", "416", "831", "212", "208"};
+    private static final Random sRandom = new Random();
+
+    // Approximate maximum number of contacts that can be stored on a SIM card for testing
+    // boundary cases
+    public static final int MAX_SIM_CONTACTS = 600;
+
+    // On pre-M addAccountExplicitly (which we call via AccountsTestHelper) causes a
+    // SecurityException to be thrown unless we add AUTHENTICATE_ACCOUNTS permission to the app
+    // manifest. Instead of adding the extra permission just for tests we'll just only run them
+    // on M or newer
+    @SdkSuppress(minSdkVersion = VERSION_CODES.M)
+    // Lollipop MR1 is required for removeAccountExplicitly
+    @RequiresApi(api = VERSION_CODES.LOLLIPOP_MR1)
+    @LargeTest
+    @RunWith(AndroidJUnit4.class)
+    public static class ImportIntegrationTest {
+        private AccountWithDataSet mAccount;
+        private AccountsTestHelper mAccountsHelper;
+        private ContentResolver mResolver;
+
+        @Before
+        public void setUp() throws Exception {
+            mAccountsHelper = new AccountsTestHelper();
+            mAccount = mAccountsHelper.addTestAccount();
+            mResolver = getContext().getContentResolver();
+        }
+
+        @After
+        public void tearDown() throws Exception {
+            mAccountsHelper.cleanup();
+        }
+
+        @Test
+        public void importFromSim() throws Exception {
+            final SimContactDao sut = SimContactDao.create(getContext());
+
+            sut.importContacts(Arrays.asList(
+                    new SimContact(1, "Test One", "15095550101"),
+                    new SimContact(2, "Test Two", "15095550102"),
+                    new SimContact(3, "Test Three", "15095550103", new String[] {
+                            "user@example.com", "user2@example.com"
+                    })
+            ), mAccount);
+
+            Cursor cursor = queryContactWithName("Test One");
+            assertThat(cursor, ContactsMatchers.hasCount(2));
+            assertThat(cursor, hasName("Test One"));
+            assertThat(cursor, hasPhone("15095550101"));
+            cursor.close();
+
+            cursor = queryContactWithName("Test Two");
+            assertThat(cursor, ContactsMatchers.hasCount(2));
+            assertThat(cursor, hasName("Test Two"));
+            assertThat(cursor, hasPhone("15095550102"));
+            cursor.close();
+
+            cursor = queryContactWithName("Test Three");
+            assertThat(cursor, ContactsMatchers.hasCount(4));
+            assertThat(cursor, hasName("Test Three"));
+            assertThat(cursor, hasPhone("15095550103"));
+            assertThat(cursor, allOf(hasEmail("user@example.com"), hasEmail("user2@example.com")));
+            cursor.close();
+        }
+
+        @Test
+        public void importContactWhichOnlyHasName() throws Exception {
+            final SimContactDao sut = SimContactDao.create(getContext());
+
+            sut.importContacts(Arrays.asList(
+                    new SimContact(1, "Test importJustName", null, null)
+            ), mAccount);
+
+            Cursor cursor = queryAllDataInAccount();
+
+            assertThat(cursor, ContactsMatchers.hasCount(1));
+            assertThat(cursor, hasName("Test importJustName"));
+            cursor.close();
+        }
+
+        @Test
+        public void importContactWhichOnlyHasPhone() throws Exception {
+            final SimContactDao sut = SimContactDao.create(getContext());
+
+            sut.importContacts(Arrays.asList(
+                    new SimContact(1, null, "15095550111", null)
+            ), mAccount);
+
+            Cursor cursor = queryAllDataInAccount();
+
+            assertThat(cursor, ContactsMatchers.hasCount(1));
+            assertThat(cursor, hasPhone("15095550111"));
+            cursor.close();
+        }
+
+        @Test
+        public void ignoresEmptyContacts() throws Exception {
+            final SimContactDao sut = SimContactDao.create(getContext());
+
+            // This probably isn't possible but we'll test it to demonstrate expected behavior and
+            // just in case it does occur
+            sut.importContacts(Arrays.asList(
+                    new SimContact(1, null, null, null),
+                    new SimContact(2, null, null, null),
+                    new SimContact(3, null, null, null),
+                    new SimContact(4, "Not null", null, null)
+            ), mAccount);
+
+            final Cursor contactsCursor = queryAllRawContactsInAccount();
+            assertThat(contactsCursor, ContactsMatchers.hasCount(1));
+            contactsCursor.close();
+
+            final Cursor dataCursor = queryAllDataInAccount();
+            assertThat(dataCursor, ContactsMatchers.hasCount(1));
+
+            dataCursor.close();
+        }
+
+        /**
+         * Tests importing a large number of contacts
+         *
+         * Make sure that {@link android.os.TransactionTooLargeException} is not thrown
+         */
+        @Test
+        public void largeImport() throws Exception {
+            final SimContactDao sut = SimContactDao.create(getContext());
+
+            final List<SimContact> contacts = new ArrayList<>();
+
+            for (int i = 0; i < MAX_SIM_CONTACTS; i++) {
+                contacts.add(new SimContact(i + 1, "Contact " + (i + 1), randomPhone(),
+                        new String[] { randomEmail("contact" + (i + 1) + "_")}));
+            }
+
+            sut.importContacts(contacts, mAccount);
+
+            final Cursor contactsCursor = queryAllRawContactsInAccount();
+            assertThat(contactsCursor, ContactsMatchers.hasCount(MAX_SIM_CONTACTS));
+            contactsCursor.close();
+
+            final Cursor dataCursor = queryAllDataInAccount();
+            // Each contact has one data row for each of name, phone and email
+            assertThat(dataCursor, ContactsMatchers.hasCount(MAX_SIM_CONTACTS * 3));
+
+            dataCursor.close();
+        }
+
+        private Cursor queryAllRawContactsInAccount() {
+            return new StringableCursor(mResolver.query(ContactsContract.RawContacts.CONTENT_URI,
+                    null, ContactsContract.RawContacts.ACCOUNT_NAME + "=? AND " +
+                            ContactsContract.RawContacts.ACCOUNT_TYPE+ "=?",
+                    new String[] {
+                            mAccount.name,
+                            mAccount.type
+                    }, null));
+        }
+
+        private Cursor queryAllDataInAccount() {
+            return new StringableCursor(mResolver.query(Data.CONTENT_URI, null,
+                    ContactsContract.RawContacts.ACCOUNT_NAME + "=? AND " +
+                            ContactsContract.RawContacts.ACCOUNT_TYPE+ "=?",
+                    new String[] {
+                            mAccount.name,
+                            mAccount.type
+                    }, null));
+        }
+
+        private Cursor queryContactWithName(String name) {
+            return new StringableCursor(mResolver.query(Data.CONTENT_URI, null,
+                    ContactsContract.RawContacts.ACCOUNT_NAME + "=? AND " +
+                            ContactsContract.RawContacts.ACCOUNT_TYPE+ "=? AND " +
+                            Data.DISPLAY_NAME + "=?",
+                    new String[] {
+                            mAccount.name,
+                            mAccount.type,
+                            name
+                    }, null));
+        }
+    }
+
+    /**
+     * Tests for {@link SimContactDao#findAccountsOfExistingSimContacts(List)}
+     *
+     * These are integration tests that query CP2 so that the SQL will be validated in addition
+     * to the detection algorithm
+     */
+    @SdkSuppress(minSdkVersion = VERSION_CODES.M)
+    // Lollipop MR1 is required for removeAccountExplicitly
+    @RequiresApi(api = VERSION_CODES.LOLLIPOP_MR1)
+    @LargeTest
+    @RunWith(AndroidJUnit4.class)
+    public static class FindAccountsIntegrationTests {
+
+        private Context mContext;
+        private AccountsTestHelper mAccountHelper;
+        private List<AccountWithDataSet> mAccounts;
+        // We need to generate something distinct to prevent flakiness on devices that may not
+        // start with an empty CP2 DB
+        private String mNameSuffix;
+
+        private static AccountWithDataSet sSeedAccount;
+
+        @BeforeClass
+        public static void setUpClass() throws Exception {
+            final AccountsTestHelper helper = new AccountsTestHelper(
+                    InstrumentationRegistry.getContext());
+            sSeedAccount = helper.addTestAccount(helper.generateAccountName("seedAccount"));
+
+            seedCp2();
+        }
+
+        @AfterClass
+        public static void tearDownClass() {
+            final AccountsTestHelper helper = new AccountsTestHelper(
+                    InstrumentationRegistry.getContext());
+            helper.removeTestAccount(sSeedAccount);
+            sSeedAccount = null;
+        }
+
+        @Before
+        public void setUp() throws Exception {
+            mContext = InstrumentationRegistry.getTargetContext();
+            mAccountHelper = new AccountsTestHelper(InstrumentationRegistry.getContext());
+            mAccounts = new ArrayList<>();
+            mNameSuffix = getClass().getSimpleName() + "At" + System.nanoTime();
+
+            seedCp2();
+        }
+
+        @After
+        public void tearDown() {
+            for (AccountWithDataSet account : mAccounts) {
+                mAccountHelper.removeTestAccount(account);
+            }
+        }
+
+        @Test
+        public void returnsEmptyMapWhenNoMatchingContactsExist() {
+            mAccounts.add(mAccountHelper.addTestAccount());
+
+            final SimContactDao sut = createDao();
+
+            final List<SimContact> contacts = Arrays.asList(
+                    new SimContact(1, "Name 1 " + mNameSuffix, "5550101"),
+                    new SimContact(2, "Name 2 " + mNameSuffix, "5550102"),
+                    new SimContact(3, "Name 3 " + mNameSuffix, "5550103"),
+                    new SimContact(4, "Name 4 " + mNameSuffix, "5550104"));
+
+            final Map<AccountWithDataSet, Set<SimContact>> existing = sut
+                    .findAccountsOfExistingSimContacts(contacts);
+
+            assertTrue(existing.isEmpty());
+        }
+
+        @Test
+        public void hasAccountWithMatchingContactsWhenSingleMatchingContactExists()
+                throws Exception {
+            final SimContactDao sut = createDao();
+
+            final AccountWithDataSet account = mAccountHelper.addTestAccount(
+                    mAccountHelper.generateAccountName("primary_"));
+            mAccounts.add(account);
+
+            final SimContact existing1 =
+                    new SimContact(2, "Exists 2 " + mNameSuffix, "5550102");
+            final SimContact existing2 =
+                    new SimContact(4, "Exists 4 " + mNameSuffix, "5550104");
+
+            final List<SimContact> contacts = Arrays.asList(
+                    new SimContact(1, "Missing 1 " + mNameSuffix, "5550101"),
+                    new SimContact(existing1),
+                    new SimContact(3, "Missing 3 " + mNameSuffix, "5550103"),
+                    new SimContact(existing2));
+
+            sut.importContacts(Arrays.asList(
+                    new SimContact(existing1),
+                    new SimContact(existing2)
+            ), account);
+
+
+            final Map<AccountWithDataSet, Set<SimContact>> existing = sut
+                    .findAccountsOfExistingSimContacts(contacts);
+
+            assertThat(existing.size(), equalTo(1));
+            assertThat(existing.get(account),
+                    Matchers.<Set<SimContact>>equalTo(ImmutableSet.of(existing1, existing2)));
+        }
+
+        @Test
+        public void hasMultipleAccountsWhenMultipleMatchingContactsExist() throws Exception {
+            final SimContactDao sut = createDao();
+
+            final AccountWithDataSet account1 = mAccountHelper.addTestAccount(
+                    mAccountHelper.generateAccountName("account1_"));
+            mAccounts.add(account1);
+            final AccountWithDataSet account2 = mAccountHelper.addTestAccount(
+                    mAccountHelper.generateAccountName("account2_"));
+            mAccounts.add(account2);
+
+            final SimContact existsInBoth =
+                    new SimContact(2, "Exists Both " + mNameSuffix, "5550102");
+            final SimContact existsInAccount1 =
+                    new SimContact(4, "Exists 1 " + mNameSuffix, "5550104");
+            final SimContact existsInAccount2 =
+                    new SimContact(5, "Exists 2 " + mNameSuffix, "5550105");
+
+            final List<SimContact> contacts = Arrays.asList(
+                    new SimContact(1, "Missing 1 " + mNameSuffix, "5550101"),
+                    new SimContact(existsInBoth),
+                    new SimContact(3, "Missing 3 " + mNameSuffix, "5550103"),
+                    new SimContact(existsInAccount1),
+                    new SimContact(existsInAccount2));
+
+            sut.importContacts(Arrays.asList(
+                    new SimContact(existsInBoth),
+                    new SimContact(existsInAccount1)
+            ), account1);
+
+            sut.importContacts(Arrays.asList(
+                    new SimContact(existsInBoth),
+                    new SimContact(existsInAccount2)
+            ), account2);
+
+
+            final Map<AccountWithDataSet, Set<SimContact>> existing = sut
+                    .findAccountsOfExistingSimContacts(contacts);
+
+            assertThat(existing.size(), equalTo(2));
+            assertThat(existing, Matchers.<Map<AccountWithDataSet, Set<SimContact>>>equalTo(
+                    ImmutableMap.<AccountWithDataSet, Set<SimContact>>of(
+                            account1, ImmutableSet.of(existsInBoth, existsInAccount1),
+                            account2, ImmutableSet.of(existsInBoth, existsInAccount2))));
+        }
+
+        @Test
+        public void matchesByNameIfSimContactHasNoPhone() throws Exception {
+            final SimContactDao sut = createDao();
+
+            final AccountWithDataSet account = mAccountHelper.addTestAccount(
+                    mAccountHelper.generateAccountName("account_"));
+            mAccounts.add(account);
+
+            final SimContact noPhone = new SimContact(1, "Nophone " + mNameSuffix, null);
+            final SimContact otherExisting = new SimContact(
+                    5, "Exists 1 " + mNameSuffix, "5550105");
+
+            final List<SimContact> contacts = Arrays.asList(
+                    new SimContact(noPhone),
+                    new SimContact(2, "Name 2 " + mNameSuffix, "5550102"),
+                    new SimContact(3, "Name 3 " + mNameSuffix, "5550103"),
+                    new SimContact(4, "Name 4 " + mNameSuffix, "5550104"),
+                    new SimContact(otherExisting));
+
+            sut.importContacts(Arrays.asList(
+                    new SimContact(noPhone),
+                    new SimContact(otherExisting)
+            ), account);
+
+            final Map<AccountWithDataSet, Set<SimContact>> existing = sut
+                    .findAccountsOfExistingSimContacts(contacts);
+
+            assertThat(existing.size(), equalTo(1));
+            assertThat(existing.get(account), Matchers.<Set<SimContact>>equalTo(
+                    ImmutableSet.of(noPhone, otherExisting)));
+        }
+
+        @Test
+        public void largeNumberOfSimContacts() throws Exception {
+            final SimContactDao sut = createDao();
+
+            final List<SimContact> contacts = new ArrayList<>();
+            for (int i = 0; i < MAX_SIM_CONTACTS; i++) {
+                contacts.add(new SimContact(
+                        i + 1, "Contact " + (i + 1) + " " + mNameSuffix, randomPhone()));
+            }
+            // The work has to be split into batches to avoid hitting SQL query parameter limits
+            // so test contacts that will be at boundary points
+            final SimContact imported1 = contacts.get(0);
+            final SimContact imported2 = contacts.get(99);
+            final SimContact imported3 = contacts.get(100);
+            final SimContact imported4 = contacts.get(101);
+            final SimContact imported5 = contacts.get(MAX_SIM_CONTACTS - 1);
+
+            final AccountWithDataSet account = mAccountHelper.addTestAccount(
+                    mAccountHelper.generateAccountName("account_"));
+            mAccounts.add(account);
+
+            sut.importContacts(Arrays.asList(imported1, imported2, imported3, imported4, imported5),
+                    account);
+
+            mAccounts.add(account);
+
+            final Map<AccountWithDataSet, Set<SimContact>> existing = sut
+                    .findAccountsOfExistingSimContacts(contacts);
+
+            assertThat(existing.size(), equalTo(1));
+            assertThat(existing.get(account), Matchers.<Set<SimContact>>equalTo(
+                    ImmutableSet.of(imported1, imported2, imported3, imported4, imported5)));
+
+        }
+
+        private SimContactDao createDao() {
+            return SimContactDao.create(mContext);
+        }
+
+        /**
+         * Adds a bunch of random contact data to CP2 to make the test environment more realistic
+         */
+        private static void seedCp2() throws RemoteException, OperationApplicationException {
+
+            final ArrayList<ContentProviderOperation> ops = new ArrayList<>();
+
+            appendCreateContact("John Smith", sSeedAccount, ops);
+            appendCreateContact("Marcus Seed", sSeedAccount, ops);
+            appendCreateContact("Gary Seed", sSeedAccount, ops);
+            appendCreateContact("Michael Seed", sSeedAccount, ops);
+            appendCreateContact("Isaac Seed", sSeedAccount, ops);
+            appendCreateContact("Sean Seed", sSeedAccount, ops);
+            appendCreateContact("Nate Seed", sSeedAccount, ops);
+            appendCreateContact("Andrey Seed", sSeedAccount, ops);
+            appendCreateContact("Cody Seed", sSeedAccount, ops);
+            appendCreateContact("John Seed", sSeedAccount, ops);
+            appendCreateContact("Alex Seed", sSeedAccount, ops);
+
+            InstrumentationRegistry.getTargetContext()
+                    .getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
+        }
+
+        private static void appendCreateContact(String name, AccountWithDataSet account,
+                ArrayList<ContentProviderOperation> ops) {
+            final int emailCount = sRandom.nextInt(10);
+            final int phoneCount = sRandom.nextInt(5);
+
+            final List<String> phones = new ArrayList<>();
+            for (int i = 0; i < phoneCount; i++) {
+                phones.add(randomPhone());
+            }
+            final List<String> emails = new ArrayList<>();
+            for (int i = 0; i < emailCount; i++) {
+                emails.add(randomEmail(name));
+            }
+            appendCreateContact(name, phones, emails, account, ops);
+        }
+
+
+        private static void appendCreateContact(String name, List<String> phoneNumbers,
+                List<String> emails, AccountWithDataSet account, List<ContentProviderOperation> ops) {
+            int index = ops.size();
+
+            ops.add(account.newRawContactOperation());
+            ops.add(insertIntoData(name, StructuredName.CONTENT_ITEM_TYPE, index));
+            for (String phone : phoneNumbers) {
+                ops.add(insertIntoData(phone, Phone.CONTENT_ITEM_TYPE, Phone.TYPE_MOBILE, index));
+            }
+            for (String email : emails) {
+                ops.add(insertIntoData(email, Email.CONTENT_ITEM_TYPE, Email.TYPE_HOME, index));
+            }
+        }
+
+        private static ContentProviderOperation insertIntoData(String value, String mimeType,
+                int idBackReference) {
+            return ContentProviderOperation.newInsert(Data.CONTENT_URI)
+                    .withValue(Data.DATA1, value)
+                    .withValue(Data.MIMETYPE, mimeType)
+                    .withValueBackReference(Data.RAW_CONTACT_ID, idBackReference).build();
+        }
+
+        private static ContentProviderOperation insertIntoData(String value, String mimeType,
+                int type, int idBackReference) {
+            return ContentProviderOperation.newInsert(Data.CONTENT_URI)
+                    .withValue(Data.DATA1, value)
+                    .withValue(ContactsContract.Data.DATA2, type)
+                    .withValue(Data.MIMETYPE, mimeType)
+                    .withValueBackReference(Data.RAW_CONTACT_ID, idBackReference).build();
+        }
+    }
+
+    /**
+     * Tests for {@link SimContactDao#loadContactsForSim(SimCard)}
+     *
+     * These are unit tests that verify that {@link SimContact}s are created correctly from
+     * the cursors that are returned by queries to the IccProvider
+     */
+    @SmallTest
+    @RunWith(AndroidJUnit4.class)
+    public static class LoadContactsUnitTests {
+
+        private MockContentProvider mMockIccProvider;
+        private Context mContext;
+
+        @Before
+        public void setUp() {
+            mContext = mock(MockContext.class);
+            final MockContentResolver mockResolver = new MockContentResolver();
+            mMockIccProvider = new MockContentProvider();
+            mockResolver.addProvider("icc", mMockIccProvider);
+            when(mContext.getContentResolver()).thenReturn(mockResolver);
+        }
+
+
+        @Test
+        public void createsContactsFromCursor() {
+            mMockIccProvider.expect(MockContentProvider.Query.forAnyUri())
+                    .withDefaultProjection(
+                            SimContactDaoImpl._ID, SimContactDaoImpl.NAME,
+                            SimContactDaoImpl.NUMBER, SimContactDaoImpl.EMAILS)
+                    .withAnyProjection()
+                    .withAnySelection()
+                    .withAnySortOrder()
+                    .returnRow(1, "Name One", "5550101", null)
+                    .returnRow(2, "Name Two", "5550102", null)
+                    .returnRow(3, "Name Three", null, null)
+                    .returnRow(4, null, "5550104", null)
+                    .returnRow(5, "Name Five", "5550105",
+                            "five@example.com,nf@example.com,name.five@example.com")
+                    .returnRow(6, "Name Six", "5550106", "thesix@example.com");
+
+            final SimContactDao sut = SimContactDao.create(mContext);
+            final List<SimContact> contacts = sut
+                    .loadContactsForSim(new SimCard("123", "carrier", "sim", null, "us"));
+
+            assertThat(contacts, equalTo(
+                    Arrays.asList(
+                            new SimContact(1, "Name One", "5550101", null),
+                            new SimContact(2, "Name Two", "5550102", null),
+                            new SimContact(3, "Name Three", null, null),
+                            new SimContact(4, null, "5550104", null),
+                            new SimContact(5, "Name Five", "5550105", new String[] {
+                                    "five@example.com", "nf@example.com", "name.five@example.com"
+                            }),
+                            new SimContact(6, "Name Six", "5550106", new String[] {
+                                    "thesix@example.com"
+                            })
+                    )));
+        }
+
+        @Test
+        public void excludesEmptyContactsFromResult() {
+            mMockIccProvider.expect(MockContentProvider.Query.forAnyUri())
+                    .withDefaultProjection(
+                            SimContactDaoImpl._ID, SimContactDaoImpl.NAME,
+                            SimContactDaoImpl.NUMBER, SimContactDaoImpl.EMAILS)
+                    .withAnyProjection()
+                    .withAnySelection()
+                    .withAnySortOrder()
+                    .returnRow(1, "Non Empty1", "5550101", null)
+                    .returnRow(2, "", "", "")
+                    .returnRow(3, "Non Empty2", null, null)
+                    .returnRow(4, null, null, null)
+                    .returnRow(5, "", null, null)
+                    .returnRow(6, null, "5550102", null)
+                    .returnRow(7, null, null, "user@example.com");
+
+            final SimContactDao sut = SimContactDao.create(mContext);
+            final List<SimContact> contacts = sut
+                    .loadContactsForSim(new SimCard("123", "carrier", "sim", null, "us"));
+
+            assertThat(contacts, equalTo(
+                    Arrays.asList(
+                            new SimContact(1, "Non Empty1", "5550101", null),
+                            new SimContact(3, "Non Empty2", null, null),
+                            new SimContact(6, null, "5550102", null),
+                            new SimContact(7, null, null, new String[] { "user@example.com" })
+                    )));
+        }
+
+        @Test
+        public void usesSimCardSubscriptionIdIfAvailable() {
+            mMockIccProvider.expectQuery(SimContactDaoImpl.ICC_CONTENT_URI.buildUpon()
+                    .appendPath("subId").appendPath("2").build())
+                    .withDefaultProjection(
+                            SimContactDaoImpl._ID, SimContactDaoImpl.NAME,
+                            SimContactDaoImpl.NUMBER, SimContactDaoImpl.EMAILS)
+                    .withAnyProjection()
+                    .withAnySelection()
+                    .withAnySortOrder()
+                    .returnEmptyCursor();
+
+            final SimContactDao sut = SimContactDao.create(mContext);
+            sut.loadContactsForSim(new SimCard("123", 2, "carrier", "sim", null, "us"));
+            mMockIccProvider.verify();
+        }
+
+        @Test
+        public void omitsSimCardSubscriptionIdIfUnavailable() {
+            mMockIccProvider.expectQuery(SimContactDaoImpl.ICC_CONTENT_URI)
+                    .withDefaultProjection(
+                            SimContactDaoImpl._ID, SimContactDaoImpl.NAME,
+                            SimContactDaoImpl.NUMBER, SimContactDaoImpl.EMAILS)
+                    .withAnyProjection()
+                    .withAnySelection()
+                    .withAnySortOrder()
+                    .returnEmptyCursor();
+
+            final SimContactDao sut = SimContactDao.create(mContext);
+            sut.loadContactsForSim(new SimCard("123", SimCard.NO_SUBSCRIPTION_ID,
+                    "carrier", "sim", null, "us"));
+            mMockIccProvider.verify();
+        }
+
+        @Test
+        public void returnsEmptyListForEmptyCursor() {
+            mMockIccProvider.expect(MockContentProvider.Query.forAnyUri())
+                    .withDefaultProjection(
+                            SimContactDaoImpl._ID, SimContactDaoImpl.NAME,
+                            SimContactDaoImpl.NUMBER, SimContactDaoImpl.EMAILS)
+                    .withAnyProjection()
+                    .withAnySelection()
+                    .withAnySortOrder()
+                    .returnEmptyCursor();
+
+            final SimContactDao sut = SimContactDao.create(mContext);
+            List<SimContact> result = sut
+                    .loadContactsForSim(new SimCard("123", "carrier", "sim", null, "us"));
+            assertTrue(result.isEmpty());
+        }
+    }
+
+    @LargeTest
+    // suppressed because failed assumptions are reported as test failures by the build server
+    @Suppress
+    @RunWith(AndroidJUnit4.class)
+    public static class LoadContactsIntegrationTest {
+        private SimContactsTestHelper mSimTestHelper;
+        private ArrayList<ContentProviderOperation> mSimSnapshot;
+
+        @Before
+        public void setUp() throws Exception {
+            mSimTestHelper = new SimContactsTestHelper();
+
+            mSimTestHelper.assumeSimWritable();
+            if (!mSimTestHelper.isSimWritable()) return;
+
+            mSimSnapshot = mSimTestHelper.captureRestoreSnapshot();
+            mSimTestHelper.deleteAllSimContacts();
+        }
+
+        @After
+        public void tearDown() throws Exception {
+            mSimTestHelper.restore(mSimSnapshot);
+        }
+
+        @Test
+        public void readFromSim() {
+            mSimTestHelper.addSimContact("Test Simone", "15095550101");
+            mSimTestHelper.addSimContact("Test Simtwo", "15095550102");
+            mSimTestHelper.addSimContact("Test Simthree", "15095550103");
+
+            final SimContactDao sut = SimContactDao.create(getContext());
+            final SimCard sim = sut.getSimCards().get(0);
+            final ArrayList<SimContact> contacts = sut.loadContactsForSim(sim);
+
+            assertThat(contacts.get(0), isSimContactWithNameAndPhone("Test Simone", "15095550101"));
+            assertThat(contacts.get(1), isSimContactWithNameAndPhone("Test Simtwo", "15095550102"));
+            assertThat(contacts.get(2),
+                    isSimContactWithNameAndPhone("Test Simthree", "15095550103"));
+        }
+    }
+
+    private static String randomPhone() {
+        return String.format(Locale.US, "1%s55501%02d",
+                AREA_CODES[sRandom.nextInt(AREA_CODES.length)],
+                sRandom.nextInt(100));
+    }
+
+    private static String randomEmail(String name) {
+        return String.format("%s%d@example.com", name.replace(" ", ".").toLowerCase(Locale.US),
+                1000 + sRandom.nextInt(1000));
+    }
+
+
+    static Context getContext() {
+        return InstrumentationRegistry.getTargetContext();
+   }
+}
diff --git a/tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java b/tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java
index 525a85c..a7d5c20 100644
--- a/tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java
+++ b/tests/src/com/android/contacts/editor/ContactEditorUtilsTest.java
@@ -16,127 +16,89 @@
 
 package com.android.contacts.editor;
 
-import android.test.AndroidTestCase;
-import android.test.MoreAsserts;
-import android.test.suitebuilder.annotation.SmallTest;
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.test.mocks.MockAccountTypeManager;
-import com.google.common.collect.Sets;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
 
-import java.util.Collection;
-import java.util.Set;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
 
 /**
  * Test case for {@link ContactEditorUtils}.
  *
  * adb shell am instrument -w -e class com.android.contacts.editor.ContactEditorUtilsTest \
        com.android.contacts.tests/android.test.InstrumentationTestRunner
+
+ * <p>It may make sense to just delete or move these tests since the code under test just forwards
+ * calls to {@link com.android.contacts.preference.ContactsPreferences} and that logic is already
+ * covered by {@link com.android.contacts.preference.ContactsPreferencesTest}
+ * </p>
  */
 @SmallTest
-public class ContactEditorUtilsTest extends AndroidTestCase {
-    private MockAccountTypeManager mAccountTypes;
+@RunWith(AndroidJUnit4.class)
+public class ContactEditorUtilsTest {
     private ContactEditorUtils mTarget;
 
-    private static final MockAccountType TYPE1 = new MockAccountType("type1", null, true);
-    private static final MockAccountType TYPE2 = new MockAccountType("type2", null, true);
-    private static final MockAccountType TYPE2EX = new MockAccountType("type2", "ext", true);
+    private static final String TYPE1 = "type1";
+    private static final String TYPE2 = "type2";
+    private static final String TYPE2_EXT = "ext";
 
-    // Only type 3 is "readonly".
-    private static final MockAccountType TYPE3 = new MockAccountType("type3", null, false);
+    private static final AccountWithDataSet ACCOUNT_1_A = new AccountWithDataSet("a", TYPE1, null);
+    private static final AccountWithDataSet ACCOUNT_1_B = new AccountWithDataSet("b", TYPE1, null);
 
-    private static final AccountWithDataSet ACCOUNT_1_A = new AccountWithDataSet(
-            "a", TYPE1.accountType, TYPE1.dataSet);
-    private static final AccountWithDataSet ACCOUNT_1_B = new AccountWithDataSet(
-            "b", TYPE1.accountType, TYPE1.dataSet);
-
-    private static final AccountWithDataSet ACCOUNT_2_A = new AccountWithDataSet(
-            "a", TYPE2.accountType, TYPE2.dataSet);
+    private static final AccountWithDataSet ACCOUNT_2_A = new AccountWithDataSet("a", TYPE2, null);
     private static final AccountWithDataSet ACCOUNT_2EX_A = new AccountWithDataSet(
-            "a", TYPE2EX.accountType, TYPE2EX.dataSet);
+            "a", TYPE2, TYPE2_EXT);
 
-    private static final AccountWithDataSet ACCOUNT_3_C = new AccountWithDataSet(
-            "c", TYPE3.accountType, TYPE3.dataSet);
-
-    @Override
-    protected void setUp() throws Exception {
-        // Initialize with 0 types, 0 accounts.
-        mAccountTypes = new MockAccountTypeManager(new AccountType[] {},
-                new AccountWithDataSet[] {});
-        mTarget = new ContactEditorUtils(getContext(), mAccountTypes);
+    @Before
+    public void setUp() throws Exception {
+        mTarget = ContactEditorUtils.create(InstrumentationRegistry.getTargetContext());
 
         // Clear the preferences.
         mTarget.cleanupForTest();
     }
 
-    private void setAccountTypes(AccountType... types) {
-        mAccountTypes.mTypes = types;
-    }
-
-    private void setAccounts(AccountWithDataSet... accounts) {
-        mAccountTypes.mAccounts = accounts;
-    }
-
-    public void testGetWritableAccountTypeStrings() {
-        String[] types;
-
-        // 0 writable types
-        setAccountTypes();
-
-        types = mTarget.getWritableAccountTypeStrings();
-        MoreAsserts.assertEquals(types, new String[0]);
-
-        // 1 writable type
-        setAccountTypes(TYPE1);
-
-        types = mTarget.getWritableAccountTypeStrings();
-        MoreAsserts.assertEquals(Sets.newHashSet(TYPE1.accountType), Sets.newHashSet(types));
-
-        // 2 writable types
-        setAccountTypes(TYPE1, TYPE2EX);
-
-        types = mTarget.getWritableAccountTypeStrings();
-        MoreAsserts.assertEquals(Sets.newHashSet(TYPE1.accountType, TYPE2EX.accountType),
-                Sets.newHashSet(types));
-
-        // 3 writable types + 1 readonly type
-        setAccountTypes(TYPE1, TYPE2, TYPE2EX, TYPE3);
-
-        types = mTarget.getWritableAccountTypeStrings();
-        MoreAsserts.assertEquals(
-                Sets.newHashSet(TYPE1.accountType, TYPE2.accountType, TYPE2EX.accountType),
-                Sets.newHashSet(types));
-    }
-
     /**
      * Test for
      * - {@link ContactEditorUtils#saveDefaultAccount}
      * - {@link ContactEditorUtils#getOnlyOrDefaultAccount}
      */
+    @Test
     public void testSaveDefaultAccount() {
-        // Use these account types here.
-        setAccountTypes(TYPE1, TYPE2);
-
         mTarget.saveDefaultAccount(null);
-        assertNull(mTarget.getOnlyOrDefaultAccount());
+        assertNull(mTarget.getOnlyOrDefaultAccount(Collections.<AccountWithDataSet>emptyList()));
 
         mTarget.saveDefaultAccount(ACCOUNT_1_A);
-        assertEquals(ACCOUNT_1_A, mTarget.getOnlyOrDefaultAccount());
+        assertEquals(ACCOUNT_1_A, mTarget.getOnlyOrDefaultAccount(Collections.
+                <AccountWithDataSet>emptyList()));
     }
 
     /**
-     * Tests for {@link ContactEditorUtils#shouldShowAccountChangedNotification()}, starting with
-     * 0 accounts.
+     * Tests for
+     * {@link ContactEditorUtils#shouldShowAccountChangedNotification(List<AccountWithDataSet>)},
+     * starting with 0 accounts.
      */
+    @Test
     public void testShouldShowAccountChangedNotification_0Accounts() {
-        setAccountTypes(TYPE1);
-
-        // First launch -- always true.
-        assertTrue(mTarget.shouldShowAccountChangedNotification());
+        List<AccountWithDataSet> currentAccounts = new ArrayList<>();
+        assertTrue(mTarget.shouldShowAccountChangedNotification(currentAccounts));
 
         // We show the notification here, and user clicked "add account"
-        setAccounts(ACCOUNT_1_A);
+        currentAccounts.add(ACCOUNT_1_A);
 
         // Now we open the contact editor with the new account.
 
@@ -144,87 +106,85 @@
         mTarget.saveDefaultAccount(ACCOUNT_1_A);
 
         // Next time the user creates a contact, we don't show the notification.
-        assertFalse(mTarget.shouldShowAccountChangedNotification());
+        assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
 
         // User added a new writable account, ACCOUNT_1_B.
-        setAccounts(ACCOUNT_1_A, ACCOUNT_1_B);
+        currentAccounts.add(ACCOUNT_1_B);
 
         // Since default account is still ACCOUNT_1_A, we don't show the notification.
-        assertFalse(mTarget.shouldShowAccountChangedNotification());
+        assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
 
         // User saved a new contact.  We update the account list and the default account.
         mTarget.saveDefaultAccount(ACCOUNT_1_B);
 
         // User created another contact.  Now we don't show the notification.
-        assertFalse(mTarget.shouldShowAccountChangedNotification());
+        assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
 
         // User installed a new contact sync adapter...
 
-        // Added a new account type: TYPE2, and the TYPE2EX extension.
-        setAccountTypes(TYPE1, TYPE2, TYPE2EX);
         // Add new accounts: ACCOUNT_2_A, ACCOUNT_2EX_A.
-        setAccounts(ACCOUNT_1_A, ACCOUNT_1_B, ACCOUNT_2_A, ACCOUNT_2EX_A);
+        currentAccounts.add(ACCOUNT_2_A);
+        currentAccounts.add(ACCOUNT_2EX_A);
 
         // New added account but default account is still not changed, so no notification.
-        assertFalse(mTarget.shouldShowAccountChangedNotification());
+        assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
 
         // User saves a new contact, with a different default account.
         mTarget.saveDefaultAccount(ACCOUNT_2_A);
 
         // Next time user creates a contact, no notification.
-        assertFalse(mTarget.shouldShowAccountChangedNotification());
+        assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
 
         // Remove ACCOUNT_2EX_A.
-        setAccountTypes(TYPE1, TYPE2, TYPE2EX);
-        setAccounts(ACCOUNT_1_A, ACCOUNT_1_B, ACCOUNT_2_A);
+        currentAccounts.remove(ACCOUNT_2EX_A);
 
         // ACCOUNT_2EX_A was not default, so no notification either.
-        assertFalse(mTarget.shouldShowAccountChangedNotification());
+        assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
 
-        // Remove ACCOUNT_1_B, which is default.
-        setAccountTypes(TYPE1, TYPE2, TYPE2EX);
-        setAccounts(ACCOUNT_1_A, ACCOUNT_1_B);
+        // Remove ACCOUNT_2_A, which is default.
+        currentAccounts.remove(ACCOUNT_2_A);
 
         // Now we show the notification.
-        assertTrue(mTarget.shouldShowAccountChangedNotification());
+        assertTrue(mTarget.shouldShowAccountChangedNotification(currentAccounts));
 
         // Do not save the default account, and add a new account now.
-        setAccountTypes(TYPE1, TYPE2, TYPE2EX);
-        setAccounts(ACCOUNT_1_A, ACCOUNT_1_B, ACCOUNT_2EX_A);
+        currentAccounts.add(ACCOUNT_2EX_A);
 
         // No default account, so show notification.
-        assertTrue(mTarget.shouldShowAccountChangedNotification());
+        assertTrue(mTarget.shouldShowAccountChangedNotification(currentAccounts));
     }
 
     /**
-     * Tests for {@link ContactEditorUtils#shouldShowAccountChangedNotification()}, starting with
-     * 1 accounts.
+     * Tests for
+     * {@link ContactEditorUtils#shouldShowAccountChangedNotification(List<AccountWithDataSet>)},
+     * starting with 1 accounts.
      */
+    @Test
     public void testShouldShowAccountChangedNotification_1Account() {
-        setAccountTypes(TYPE1, TYPE2);
-        setAccounts(ACCOUNT_1_A);
-
         // Always returns false when 1 writable account.
-        assertFalse(mTarget.shouldShowAccountChangedNotification());
+        assertFalse(mTarget.shouldShowAccountChangedNotification(
+                Collections.singletonList(ACCOUNT_1_A)));
 
         // User saves a new contact.
         mTarget.saveDefaultAccount(ACCOUNT_1_A);
 
         // Next time, no notification.
-        assertFalse(mTarget.shouldShowAccountChangedNotification());
+        assertFalse(mTarget.shouldShowAccountChangedNotification(
+                Collections.singletonList(ACCOUNT_1_A)));
 
         // The rest is the same...
     }
 
     /**
-     * Tests for {@link ContactEditorUtils#shouldShowAccountChangedNotification()}, starting with
-     * 0 accounts, and the user selected "local only".
+     * Tests for
+     * {@link ContactEditorUtils#shouldShowAccountChangedNotification(List<AccountWithDataSet>)},
+     * starting with 0 accounts, and the user selected "local only".
      */
+    @Test
     public void testShouldShowAccountChangedNotification_0Account_localOnly() {
-        setAccountTypes(TYPE1);
-
         // First launch -- always true.
-        assertTrue(mTarget.shouldShowAccountChangedNotification());
+        assertTrue(mTarget.shouldShowAccountChangedNotification(Collections.
+                <AccountWithDataSet>emptyList()));
 
         // We show the notification here, and user clicked "keep local" and saved an contact.
         mTarget.saveDefaultAccount(AccountWithDataSet.getNullAccount());
@@ -232,31 +192,41 @@
         // Now there are no accounts, and default account is null.
 
         // The user created another contact, but this we shouldn't show the notification.
-        assertFalse(mTarget.shouldShowAccountChangedNotification());
+        assertFalse(mTarget.shouldShowAccountChangedNotification(Collections.
+                <AccountWithDataSet>emptyList()));
     }
 
+    @Test
     public void testShouldShowAccountChangedNotification_sanity_check() {
         // Prepare 1 account and save it as the default.
-        setAccountTypes(TYPE1);
-        setAccounts(ACCOUNT_1_A);
-
         mTarget.saveDefaultAccount(ACCOUNT_1_A);
 
         // Right after a save, the dialog shouldn't show up.
-        assertFalse(mTarget.shouldShowAccountChangedNotification());
+        assertFalse(mTarget.shouldShowAccountChangedNotification(
+                Collections.singletonList(ACCOUNT_1_A)));
 
         // Remove the default account to emulate broken preferences.
         mTarget.removeDefaultAccountForTest();
 
         // The dialog shouldn't show up.
         // The logic is, if there's a writable account, we'll pick it as default
-        assertFalse(mTarget.shouldShowAccountChangedNotification());
+        assertFalse(mTarget.shouldShowAccountChangedNotification(
+                Collections.singletonList(ACCOUNT_1_A)));
     }
 
-    private static <T> Set<T> toSet(Collection<T> collection) {
-        Set<T> ret = Sets.newHashSet();
-        ret.addAll(collection);
-        return ret;
+    @Test
+    public void testShouldShowAccountChangedNotification_nullAccount() {
+        final List<AccountWithDataSet> currentAccounts = new ArrayList<>();
+        final AccountWithDataSet nullAccount = AccountWithDataSet.getNullAccount();
+        currentAccounts.add(nullAccount);
+
+        assertTrue(mTarget.shouldShowAccountChangedNotification(currentAccounts));
+
+        // User chooses to keep the "device" account as the default
+        mTarget.saveDefaultAccount(nullAccount);
+
+        // Right after a save, the dialog shouldn't show up.
+        assertFalse(mTarget.shouldShowAccountChangedNotification(currentAccounts));
     }
 
     private static class MockAccountType extends AccountType {
diff --git a/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java b/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java
index aa3f725..9eea4d1 100644
--- a/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java
+++ b/tests/src/com/android/contacts/editor/EditorUiUtilsTest.java
@@ -24,10 +24,13 @@
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.contacts.common.model.account.AccountDisplayInfo;
 import com.android.contacts.R;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.DeviceLocalAccountType;
+import com.android.contacts.tests.FakeAccountType;
 
 /**
  * Tests {@link EditorUiUtils}.
@@ -73,8 +76,9 @@
     }
 
     public void testGetProfileAccountInfo_NonLocalAccount() {
-        final AccountDisplayInfo account = new AccountDisplayInfo(ACCOUNT, ACCOUNT_NAME,
-                DISPLAY_LABEL, /*icon*/ null, /*isDeviceAccount*/ false);
+        final AccountInfo account = new AccountInfo(new AccountDisplayInfo(ACCOUNT, ACCOUNT_NAME,
+                DISPLAY_LABEL, null, /* isDeviceAccount */ false),
+                new FakeAccountType("com.example.account"));
 
         final String label = EditorUiUtils.getAccountHeaderLabelForMyProfile(getContext(),
                 account);
@@ -87,8 +91,8 @@
 
 
     public void testGetProfileAccountInfo_DeviceLocalAccount() {
-        final AccountDisplayInfo account = new AccountDisplayInfo(ACCOUNT, "Device",
-                "Device", null, true);
+        final AccountInfo account = new AccountInfo(new AccountDisplayInfo(ACCOUNT, "Device",
+                "Device", null, true), new DeviceLocalAccountType(mContext));
 
         final String label = EditorUiUtils.getAccountHeaderLabelForMyProfile(getContext(),
                 account);
diff --git a/tests/src/com/android/contacts/format/FormatUtilsTests.java b/tests/src/com/android/contacts/format/FormatUtilsTests.java
new file mode 100644
index 0000000..febed74
--- /dev/null
+++ b/tests/src/com/android/contacts/format/FormatUtilsTests.java
@@ -0,0 +1,114 @@
+/*
+ * 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.format;
+
+import android.database.CharArrayBuffer;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+/**
+ * Test cases for format utility methods.
+ */
+@SmallTest
+public class FormatUtilsTests extends AndroidTestCase {
+
+    public void testOverlapPoint() throws Exception {
+        assertEquals(2, FormatUtils.overlapPoint("abcde", "cdefg"));
+        assertEquals(-1, FormatUtils.overlapPoint("John Doe", "John Doe"));
+        assertEquals(5, FormatUtils.overlapPoint("John Doe", "Doe, John"));
+        assertEquals(-1, FormatUtils.overlapPoint("Mr. John Doe", "Mr. Doe, John"));
+        assertEquals(13, FormatUtils.overlapPoint("John Herbert Doe", "Doe, John Herbert"));
+    }
+
+    public void testCopyToCharArrayBuffer() {
+        CharArrayBuffer charArrayBuffer = new CharArrayBuffer(20);
+        checkCopyToCharArrayBuffer(charArrayBuffer, null, 0);
+        checkCopyToCharArrayBuffer(charArrayBuffer, "", 0);
+        checkCopyToCharArrayBuffer(charArrayBuffer, "test", 4);
+        // Check that it works after copying something into it.
+        checkCopyToCharArrayBuffer(charArrayBuffer, "", 0);
+        checkCopyToCharArrayBuffer(charArrayBuffer, "test", 4);
+        checkCopyToCharArrayBuffer(charArrayBuffer, null, 0);
+        // This requires a resize of the actual buffer.
+        checkCopyToCharArrayBuffer(charArrayBuffer, "test test test test test", 24);
+    }
+
+    public void testCharArrayBufferToString() {
+        checkCharArrayBufferToString("");
+        checkCharArrayBufferToString("test");
+        checkCharArrayBufferToString("test test test test test");
+    }
+
+    /** Checks that copying a string into a {@link CharArrayBuffer} and back works correctly. */
+    private void checkCharArrayBufferToString(String text) {
+        CharArrayBuffer buffer = new CharArrayBuffer(20);
+        FormatUtils.copyToCharArrayBuffer(text, buffer);
+        assertEquals(text, FormatUtils.charArrayBufferToString(buffer));
+    }
+
+    /**
+     * Checks that copying into the char array buffer copies the values correctly.
+     */
+    private void checkCopyToCharArrayBuffer(CharArrayBuffer buffer, String value, int length) {
+        FormatUtils.copyToCharArrayBuffer(value, buffer);
+        assertEquals(length, buffer.sizeCopied);
+        for (int index = 0; index < length; ++index) {
+            assertEquals(value.charAt(index), buffer.data[index]);
+        }
+    }
+
+    public void testIndexOfWordPrefix_NullPrefix() {
+        assertEquals(-1, FormatUtils.indexOfWordPrefix("test", null));
+    }
+
+    public void testIndexOfWordPrefix_NullText() {
+        assertEquals(-1, FormatUtils.indexOfWordPrefix(null, "TE"));
+    }
+
+    public void testIndexOfWordPrefix_MatchingPrefix() {
+        checkIndexOfWordPrefix("test", "TE", 0);
+        checkIndexOfWordPrefix("Test", "TE", 0);
+        checkIndexOfWordPrefix("TEst", "TE", 0);
+        checkIndexOfWordPrefix("TEST", "TE", 0);
+        checkIndexOfWordPrefix("a test", "TE", 2);
+        checkIndexOfWordPrefix("test test", "TE", 0);
+        checkIndexOfWordPrefix("a test test", "TE", 2);
+    }
+
+    public void testIndexOfWordPrefix_NotMatchingPrefix() {
+        checkIndexOfWordPrefix("test", "TA", -1);
+        checkIndexOfWordPrefix("test type theme", "TA", -1);
+        checkIndexOfWordPrefix("atest retest pretest", "TEST", -1);
+        checkIndexOfWordPrefix("tes", "TEST", -1);
+    }
+
+    public void testIndexOfWordPrefix_LowerCase() {
+        // The prefix match only works if the prefix is un upper case.
+        checkIndexOfWordPrefix("test", "te", -1);
+    }
+
+    /**
+     * Checks that getting the index of a word prefix in the given text returns the expected index.
+     *
+     * @param text the text in which to look for the word
+     * @param wordPrefix the word prefix to look for
+     * @param expectedIndex the expected value to be returned by the function
+     */
+    private void checkIndexOfWordPrefix(String text, String wordPrefix, int expectedIndex) {
+        assertEquals(expectedIndex, FormatUtils.indexOfWordPrefix(text, wordPrefix));
+    }
+}
diff --git a/tests/src/com/android/contacts/format/SpannedTestUtils.java b/tests/src/com/android/contacts/format/SpannedTestUtils.java
new file mode 100644
index 0000000..0edafbe
--- /dev/null
+++ b/tests/src/com/android/contacts/format/SpannedTestUtils.java
@@ -0,0 +1,86 @@
+/*
+ * 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.format;
+
+import android.text.Html;
+import android.text.SpannableString;
+import android.text.Spanned;
+import android.text.TextUtils;
+import android.text.style.StyleSpan;
+import android.widget.TextView;
+
+import junit.framework.Assert;
+
+/**
+ * Utility class to check the value of spanned text in text views.
+ */
+public class SpannedTestUtils {
+    /**
+     * Checks that the text contained in the text view matches the given HTML text.
+     *
+     * @param expectedHtmlText the expected text to be in the text view
+     * @param textView the text view from which to get the text
+     */
+    public static void checkHtmlText(String expectedHtmlText, TextView textView) {
+        String actualHtmlText = Html.toHtml((Spanned) textView.getText());
+        if (TextUtils.isEmpty(expectedHtmlText)) {
+            // If the text is empty, it does not add the <p></p> bits to it.
+            Assert.assertEquals("", actualHtmlText);
+        } else {
+            Assert.assertEquals("<p dir=ltr>" + expectedHtmlText + "</p>\n", actualHtmlText);
+        }
+    }
+
+
+    /**
+     * Assert span exists in the correct location.
+     *
+     * @param seq The spannable string to check.
+     * @param start The starting index.
+     * @param end The ending index.
+     */
+    public static void assertPrefixSpan(CharSequence seq, int start, int end) {
+        Assert.assertTrue(seq instanceof Spanned);
+        Spanned spannable = (Spanned) seq;
+
+        if (start > 0) {
+            Assert.assertEquals(0, getNumForegroundColorSpansBetween(spannable, 0, start - 1));
+        }
+        Assert.assertEquals(1, getNumForegroundColorSpansBetween(spannable, start, end));
+        Assert.assertEquals(0, getNumForegroundColorSpansBetween(spannable, end + 1,
+                spannable.length() - 1));
+    }
+
+    private static int getNumForegroundColorSpansBetween(Spanned value, int start, int end) {
+        return value.getSpans(start, end, StyleSpan.class).length;
+    }
+
+    /**
+     * Asserts that the given character sequence is not a Spanned object and text is correct.
+     *
+     * @param seq The sequence to check.
+     * @param expected The expected text.
+     */
+    public static void assertNotSpanned(CharSequence seq, String expected) {
+        Assert.assertFalse(seq instanceof Spanned);
+        Assert.assertEquals(expected, seq);
+    }
+
+    public static int getNextTransition(SpannableString seq, int start) {
+        return seq.nextSpanTransition(start, seq.length(), StyleSpan.class);
+    }
+}
diff --git a/tests/src/com/android/contacts/format/TextHighlighterTest.java b/tests/src/com/android/contacts/format/TextHighlighterTest.java
new file mode 100644
index 0000000..211d944
--- /dev/null
+++ b/tests/src/com/android/contacts/format/TextHighlighterTest.java
@@ -0,0 +1,106 @@
+/*
+ * 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.format;
+
+import android.graphics.Typeface;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.text.SpannableString;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit tests for {@link TextHighlighter}.
+ */
+@SmallTest
+public class TextHighlighterTest extends TestCase {
+    private static final int TEST_PREFIX_HIGHLIGHT_COLOR = 0xFF0000;
+
+    /** The object under test. */
+    private TextHighlighter mTextHighlighter;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        mTextHighlighter = new TextHighlighter(Typeface.BOLD);
+    }
+
+    public void testApply_EmptyPrefix() {
+        CharSequence seq = mTextHighlighter.applyPrefixHighlight("", "");
+        SpannedTestUtils.assertNotSpanned(seq, "");
+
+        seq = mTextHighlighter.applyPrefixHighlight("test", "");
+        SpannedTestUtils.assertNotSpanned(seq, "test");
+    }
+
+    public void testSetText_MatchingPrefix() {
+        final String prefix = "TE";
+
+        CharSequence seq = mTextHighlighter.applyPrefixHighlight("test", prefix);
+        SpannedTestUtils.assertPrefixSpan(seq, 0, 1);
+
+        seq = mTextHighlighter.applyPrefixHighlight("Test", prefix);
+        SpannedTestUtils.assertPrefixSpan(seq, 0, 1);
+
+        seq = mTextHighlighter.applyPrefixHighlight("TEst", prefix);
+        SpannedTestUtils.assertPrefixSpan(seq, 0, 1);
+
+        seq = mTextHighlighter.applyPrefixHighlight("a test", prefix);
+        SpannedTestUtils.assertPrefixSpan(seq, 2, 3);
+    }
+
+    public void testSetText_NotMatchingPrefix() {
+        final CharSequence seq = mTextHighlighter.applyPrefixHighlight("test", "TA");
+        SpannedTestUtils.assertNotSpanned(seq, "test");
+    }
+
+    public void testSetText_FirstMatch() {
+        final CharSequence seq = mTextHighlighter.applyPrefixHighlight(
+                "a test's tests are not tests", "TE");
+        SpannedTestUtils.assertPrefixSpan(seq, 2, 3);
+    }
+
+    public void testSetText_NoMatchingMiddleOfWord() {
+        final String prefix = "TE";
+        CharSequence seq = mTextHighlighter.applyPrefixHighlight("atest", prefix);
+        SpannedTestUtils.assertNotSpanned(seq, "atest");
+
+        seq = mTextHighlighter.applyPrefixHighlight("atest otest", prefix);
+        SpannedTestUtils.assertNotSpanned(seq, "atest otest");
+
+        seq = mTextHighlighter.applyPrefixHighlight("atest test", prefix);
+        SpannedTestUtils.assertPrefixSpan(seq, 6, 7);
+    }
+
+    public void testSetMask_Highlight() {
+        final SpannableString testString1 = new SpannableString("alongtest");
+        mTextHighlighter.applyMaskingHighlight(testString1, 2, 4);
+        assertEquals(2, SpannedTestUtils.getNextTransition(testString1, 0));
+        assertEquals(4, SpannedTestUtils.getNextTransition(testString1, 2));
+
+        mTextHighlighter.applyMaskingHighlight(testString1, 3, 6);
+        assertEquals(2, SpannedTestUtils.getNextTransition(testString1, 0));
+        assertEquals(4, SpannedTestUtils.getNextTransition(testString1, 3));
+
+        mTextHighlighter.applyMaskingHighlight(testString1, 4, 5);
+        assertEquals(3, SpannedTestUtils.getNextTransition(testString1, 2));
+
+        mTextHighlighter.applyMaskingHighlight(testString1, 7, 8);
+        assertEquals(6, SpannedTestUtils.getNextTransition(testString1, 5));
+        assertEquals(7, SpannedTestUtils.getNextTransition(testString1, 6));
+        assertEquals(8, SpannedTestUtils.getNextTransition(testString1, 7));
+    }
+}
diff --git a/tests/src/com/android/contacts/group/GroupUtilTest.java b/tests/src/com/android/contacts/group/GroupUtilTest.java
index bd6554e..5f72e9d 100644
--- a/tests/src/com/android/contacts/group/GroupUtilTest.java
+++ b/tests/src/com/android/contacts/group/GroupUtilTest.java
@@ -16,14 +16,14 @@
 
 package com.android.contacts.group;
 
-import com.android.contacts.common.list.ContactsSectionIndexer;
-
 import android.os.Bundle;
 import android.provider.ContactsContract.Contacts;
 import android.test.AndroidTestCase;
 import android.test.MoreAsserts;
 import android.test.suitebuilder.annotation.SmallTest;
 
+import com.android.contacts.list.ContactsSectionIndexer;
+
 import java.util.Arrays;
 import java.util.List;
 
diff --git a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
index ec08a76..258b818 100644
--- a/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
+++ b/tests/src/com/android/contacts/interactions/ContactDeletionInteractionTest.java
@@ -25,16 +25,16 @@
 
 import com.android.contacts.ContactsApplication;
 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.BaseAccountType;
-import com.android.contacts.common.test.FragmentTestActivity;
-import com.android.contacts.common.test.IntegrationTestUtils;
-import com.android.contacts.common.test.mocks.ContactsMockContext;
-import com.android.contacts.common.test.mocks.MockAccountTypeManager;
-import com.android.contacts.common.test.mocks.MockContentProvider;
-import com.android.contacts.common.test.mocks.MockContentProvider.Query;
-import com.android.contacts.common.testing.InjectedServices;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.BaseAccountType;
+import com.android.contacts.test.FragmentTestActivity;
+import com.android.contacts.test.IntegrationTestUtils;
+import com.android.contacts.test.mocks.ContactsMockContext;
+import com.android.contacts.test.mocks.MockAccountTypeManager;
+import com.android.contacts.test.mocks.MockContentProvider;
+import com.android.contacts.test.mocks.MockContentProvider.Query;
+import com.android.contacts.testing.InjectedServices;
 
 /**
  * Tests for {@link ContactDeletionInteraction}.
diff --git a/tests/src/com/android/contacts/list/ContactListItemViewTest.java b/tests/src/com/android/contacts/list/ContactListItemViewTest.java
new file mode 100644
index 0000000..09c2f36
--- /dev/null
+++ b/tests/src/com/android/contacts/list/ContactListItemViewTest.java
@@ -0,0 +1,132 @@
+/*
+ * 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.list;
+
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.test.ActivityInstrumentationTestCase2;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.widget.TextView;
+
+import com.android.contacts.format.SpannedTestUtils;
+import com.android.contacts.preference.ContactsPreferences;
+
+/**
+ * Unit tests for {@link com.android.contacts.list.ContactListItemView}.
+ *
+ * It uses an {@link ActivityInstrumentationTestCase2} for {@link PeopleActivity} because we need
+ * to have the style properly setup.
+ */
+@LargeTest
+public class ContactListItemViewTest extends AndroidTestCase {
+
+    //private IntegrationTestUtils mUtils;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        // This test requires that the screen be turned on.
+        //mUtils = new IntegrationTestUtils(getInstrumentation());
+        //mUtils.acquireScreenWakeLock(getInstrumentation().getTargetContext());
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        //mUtils.releaseScreenWakeLock();
+        super.tearDown();
+    }
+
+    public void testShowDisplayName_Simple() {
+        Cursor cursor = createCursor("John Doe", "Doe John");
+        ContactListItemView view = createView();
+
+        view.showDisplayName(cursor, 0, ContactsPreferences.DISPLAY_ORDER_PRIMARY);
+
+        assertEquals(view.getNameTextView().getText().toString(), "John Doe");
+    }
+
+    public void testShowDisplayName_Unknown() {
+        Cursor cursor = createCursor("", "");
+        ContactListItemView view = createView();
+
+        view.setUnknownNameText("unknown");
+        view.showDisplayName(cursor, 0, ContactsPreferences.DISPLAY_ORDER_PRIMARY);
+
+        assertEquals(view.getNameTextView().getText().toString(), "unknown");
+    }
+
+    public void testShowDisplayName_WithPrefix() {
+        Cursor cursor = createCursor("John Doe", "Doe John");
+        ContactListItemView view = createView();
+
+        view.setHighlightedPrefix("DOE");
+        view.showDisplayName(cursor, 0, ContactsPreferences.DISPLAY_ORDER_PRIMARY);
+
+        CharSequence seq = view.getNameTextView().getText();
+        assertEquals("John Doe", seq.toString());
+        SpannedTestUtils.assertPrefixSpan(seq, 5, 7);
+        // Talback should be without span tags.
+        assertEquals("John Doe", view.getNameTextView().getContentDescription());
+        assertFalse("John Doe".equals(seq));
+    }
+
+    public void testShowDisplayName_WithPrefixReversed() {
+        Cursor cursor = createCursor("John Doe", "Doe John");
+        ContactListItemView view = createView();
+
+        view.setHighlightedPrefix("DOE");
+        view.showDisplayName(cursor, 0, ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
+
+        CharSequence seq = view.getNameTextView().getText();
+        assertEquals("John Doe", seq.toString());
+        SpannedTestUtils.assertPrefixSpan(seq, 5, 7);
+    }
+
+    public void testSetSnippet_Prefix() {
+        ContactListItemView view = createView();
+        view.setHighlightedPrefix("TEST");
+        view.setSnippet("This is a test");
+
+        CharSequence seq = view.getSnippetView().getText();
+
+        assertEquals("This is a test", seq.toString());
+        SpannedTestUtils.assertPrefixSpan(seq, 10, 13);
+    }
+
+    /** Creates the view to be tested. */
+    private ContactListItemView createView() {
+        ContactListItemView view = new ContactListItemView(getContext());
+        // Set the name view to use a Spannable to represent its content.
+        view.getNameTextView().setText("", TextView.BufferType.SPANNABLE);
+        return view;
+    }
+
+    /**
+     * Creates a cursor containing a pair of values.
+     *
+     * @param name the name to insert in the first column of the cursor
+     * @param alternateName the alternate name to insert in the second column of the cursor
+     * @return the newly created cursor
+     */
+    private Cursor createCursor(String name, String alternateName) {
+        MatrixCursor cursor = new MatrixCursor(new String[]{"Name", "AlternateName"});
+        cursor.moveToFirst();
+        cursor.addRow(new Object[]{name, alternateName});
+        return cursor;
+    }
+}
diff --git a/tests/src/com/android/contacts/model/AccountTypeManagerTest.java b/tests/src/com/android/contacts/model/AccountTypeManagerTest.java
new file mode 100644
index 0000000..982517b
--- /dev/null
+++ b/tests/src/com/android/contacts/model/AccountTypeManagerTest.java
@@ -0,0 +1,140 @@
+/*
+ * 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.model;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.content.SharedPreferences;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountTypeWithDataSet;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.mockito.Mockito.when;
+
+/**
+ * Test case for {@link com.android.contacts.model.AccountTypeManager}.
+ *
+ * adb shell am instrument -w -e class com.android.contacts.model.AccountTypeManagerTest \
+       com.android.contacts.tests/android.test.InstrumentationTestRunner
+ */
+@SmallTest
+public class AccountTypeManagerTest extends AndroidTestCase {
+
+    private static final Account[] ACCOUNTS = new Account[2];
+    static {
+        ACCOUNTS[0] = new Account("name1", GoogleAccountType.ACCOUNT_TYPE);
+        ACCOUNTS[1] = new Account("name2", GoogleAccountType.ACCOUNT_TYPE);
+    }
+
+    @Mock private AccountManager mAccountManager;
+    @Mock private SharedPreferences mPrefs;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        System.setProperty("dexmaker.dexcache", getContext().getCacheDir().getPath());
+        MockitoAnnotations.initMocks(this);
+    }
+
+    private static AccountWithDataSet createAccountWithDataSet(String name, AccountType type) {
+        return new AccountWithDataSet(name, type.accountType, type.dataSet);
+    }
+
+    /**
+     * Array of {@link AccountType} -> {@link Map}
+     */
+    private static Map<AccountTypeWithDataSet, AccountType> buildAccountTypes(AccountType... types) {
+        final HashMap<AccountTypeWithDataSet, AccountType> result = Maps.newHashMap();
+        for (AccountType type : types) {
+            result.put(type.getAccountTypeAndDataSet(), type);
+        }
+        return result;
+    }
+
+    /**
+     * Array of {@link AccountWithDataSet} -> {@link Collection}
+     */
+    private static Collection<AccountWithDataSet> buildAccounts(AccountWithDataSet... accounts) {
+        final List<AccountWithDataSet> result = Lists.newArrayList();
+        for (AccountWithDataSet account : accounts) {
+            result.add(account);
+        }
+        return result;
+    }
+
+    public void testGetDefaultAccount_NoAccounts() {
+        assertNull(getDefaultGoogleAccountName());
+    }
+
+    public void testGetDefaultAccount_NoAccounts_DefaultPreferenceSet() {
+        when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
+                getDefaultAccountPreference("name1", GoogleAccountType.ACCOUNT_TYPE));
+        assertNull(getDefaultGoogleAccountName());
+    }
+
+    public void testGetDefaultAccount_NoDefaultAccountPreferenceSet() {
+        when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
+        assertEquals("name1", getDefaultGoogleAccountName());
+    }
+
+    public void testGetDefaultAccount_DefaultAccountPreferenceSet() {
+        when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
+        when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
+                getDefaultAccountPreference("name2", GoogleAccountType.ACCOUNT_TYPE));
+        assertEquals("name2", getDefaultGoogleAccountName());
+    }
+
+    public void testGetDefaultAccount_DefaultAccountPreferenceSet_NonGoogleAccountType() {
+        when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
+        when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
+                getDefaultAccountPreference("name3", "type3"));
+        assertEquals("name1", getDefaultGoogleAccountName());
+    }
+
+    public void testGetDefaultAccount_DefaultAccountPreferenceSet_UnknownName() {
+        when(mAccountManager.getAccountsByType(Mockito.anyString())).thenReturn(ACCOUNTS);
+        when(mPrefs.getString(Mockito.anyString(), Mockito.anyString())).thenReturn(
+                getDefaultAccountPreference("name4",GoogleAccountType.ACCOUNT_TYPE));
+        assertEquals("name1", getDefaultGoogleAccountName());
+    }
+
+    private final String getDefaultGoogleAccountName() {
+        // We don't need the real preference key value since it's mocked
+        final Account account = AccountTypeManager.getDefaultGoogleAccount(
+                mAccountManager, mPrefs, "contact_editor_default_account_key");
+        return account == null ? null : account.name;
+    }
+
+    private static final String getDefaultAccountPreference(String name, String type) {
+        return new AccountWithDataSet(name, type, /* dataSet */ null).stringify();
+    }
+}
diff --git a/tests/src/com/android/contacts/model/AccountWithDataSetTest.java b/tests/src/com/android/contacts/model/AccountWithDataSetTest.java
new file mode 100644
index 0000000..7d6dfa3
--- /dev/null
+++ b/tests/src/com/android/contacts/model/AccountWithDataSetTest.java
@@ -0,0 +1,132 @@
+/*
+ * 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.model;
+
+import android.os.Bundle;
+import android.test.AndroidTestCase;
+import android.test.MoreAsserts;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import com.google.common.collect.Lists;
+
+import java.util.List;
+
+/**
+ * Test case for {@link AccountWithDataSet}.
+ *
+ * adb shell am instrument -w -e class com.android.contacts.model.AccountWithDataSetTest \
+       com.android.contacts.tests/android.test.InstrumentationTestRunner
+ */
+@SmallTest
+public class AccountWithDataSetTest extends AndroidTestCase {
+    public void testStringifyAndUnstringify() {
+        AccountWithDataSet a1 = new AccountWithDataSet("name1", "typeA", null);
+        AccountWithDataSet a2 = new AccountWithDataSet("name2", "typeB", null);
+        AccountWithDataSet a3 = new AccountWithDataSet("name3", "typeB", "dataset");
+
+        // stringify() & unstringify
+        AccountWithDataSet a1r = AccountWithDataSet.unstringify(a1.stringify());
+        AccountWithDataSet a2r = AccountWithDataSet.unstringify(a2.stringify());
+        AccountWithDataSet a3r = AccountWithDataSet.unstringify(a3.stringify());
+
+        assertEquals(a1, a1r);
+        assertEquals(a2, a2r);
+        assertEquals(a3, a3r);
+
+        MoreAsserts.assertNotEqual(a1, a2r);
+        MoreAsserts.assertNotEqual(a1, a3r);
+
+        MoreAsserts.assertNotEqual(a2, a1r);
+        MoreAsserts.assertNotEqual(a2, a3r);
+
+        MoreAsserts.assertNotEqual(a3, a1r);
+        MoreAsserts.assertNotEqual(a3, a2r);
+    }
+
+    public void testStringifyAndUnstringifyLocalAccount() {
+        final String stringified = AccountWithDataSet.getNullAccount().stringify();
+
+        final AccountWithDataSet restored = AccountWithDataSet.unstringify(stringified);
+
+        assertEquals(AccountWithDataSet.getNullAccount(), restored);
+    }
+
+    public void testStringifyListAndUnstringify() {
+        AccountWithDataSet a1 = new AccountWithDataSet("name1", "typeA", null);
+        AccountWithDataSet a2 = new AccountWithDataSet("name2", "typeB", null);
+        AccountWithDataSet a3 = new AccountWithDataSet("name3", "typeB", "dataset");
+
+        // Empty list
+        assertEquals(0, stringifyListAndUnstringify().size());
+
+        // 1 element
+        final List<AccountWithDataSet> listA = stringifyListAndUnstringify(a1);
+        assertEquals(1, listA.size());
+        assertEquals(a1, listA.get(0));
+
+        // 2 elements
+        final List<AccountWithDataSet> listB = stringifyListAndUnstringify(a2, a1);
+        assertEquals(2, listB.size());
+        assertEquals(a2, listB.get(0));
+        assertEquals(a1, listB.get(1));
+
+        // 3 elements
+        final List<AccountWithDataSet> listC = stringifyListAndUnstringify(a3, a2, a1);
+        assertEquals(3, listC.size());
+        assertEquals(a3, listC.get(0));
+        assertEquals(a2, listC.get(1));
+        assertEquals(a1, listC.get(2));
+    }
+
+    private static List<AccountWithDataSet> stringifyListAndUnstringify(
+            AccountWithDataSet... accounts) {
+
+        List<AccountWithDataSet> list = Lists.newArrayList(accounts);
+        return AccountWithDataSet.unstringifyList(AccountWithDataSet.stringifyList(list));
+    }
+
+    public void testParcelable() {
+        AccountWithDataSet a1 = new AccountWithDataSet("name1", "typeA", null);
+        AccountWithDataSet a2 = new AccountWithDataSet("name2", "typeB", null);
+        AccountWithDataSet a3 = new AccountWithDataSet("name3", "typeB", "dataset");
+
+        // Parcel them & unpercel.
+        final Bundle b = new Bundle();
+        b.putParcelable("a1", a1);
+        b.putParcelable("a2", a2);
+        b.putParcelable("a3", a3);
+
+        AccountWithDataSet a1r = b.getParcelable("a1");
+        AccountWithDataSet a2r = b.getParcelable("a2");
+        AccountWithDataSet a3r = b.getParcelable("a3");
+
+        assertEquals(a1, a1r);
+        assertEquals(a2, a2r);
+        assertEquals(a3, a3r);
+
+        MoreAsserts.assertNotEqual(a1, a2r);
+        MoreAsserts.assertNotEqual(a1, a3r);
+
+        MoreAsserts.assertNotEqual(a2, a1r);
+        MoreAsserts.assertNotEqual(a2, a3r);
+
+        MoreAsserts.assertNotEqual(a3, a1r);
+        MoreAsserts.assertNotEqual(a3, a2r);
+    }
+}
diff --git a/tests/src/com/android/contacts/model/ContactLoaderTest.java b/tests/src/com/android/contacts/model/ContactLoaderTest.java
new file mode 100644
index 0000000..91873e9
--- /dev/null
+++ b/tests/src/com/android/contacts/model/ContactLoaderTest.java
@@ -0,0 +1,431 @@
+/*
+ * 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.model;
+
+import android.content.ContentUris;
+import android.net.Uri;
+import android.provider.ContactsContract;
+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.DisplayNameSources;
+import android.provider.ContactsContract.RawContacts;
+import android.provider.ContactsContract.StatusUpdates;
+import android.test.LoaderTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.BaseAccountType;
+import com.android.contacts.test.mocks.ContactsMockContext;
+import com.android.contacts.test.mocks.MockAccountTypeManager;
+import com.android.contacts.test.mocks.MockContentProvider;
+import com.android.contacts.testing.InjectedServices;
+import com.android.contacts.util.Constants;
+
+import com.google.common.collect.Lists;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.List;
+
+/**
+ * Runs ContactLoader tests for the the contact-detail and editor view.
+ */
+@LargeTest
+public class ContactLoaderTest extends LoaderTestCase {
+    private static final long CONTACT_ID = 1;
+    private static final long RAW_CONTACT_ID = 11;
+    private static final long DATA_ID = 21;
+    private static final String LOOKUP_KEY = "aa%12%@!";
+
+    private ContactsMockContext mMockContext;
+    private MockContentProvider mContactsProvider;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        mMockContext = new ContactsMockContext(getContext());
+        mContactsProvider = mMockContext.getContactsProvider();
+
+        InjectedServices services = new InjectedServices();
+        AccountType accountType = new BaseAccountType() {
+            @Override
+            public boolean areContactsWritable() {
+                return false;
+            }
+        };
+        accountType.accountType = "mockAccountType";
+
+        AccountWithDataSet account =
+                new AccountWithDataSet("mockAccountName", "mockAccountType", null);
+
+        AccountTypeManager.setInstanceForTest(
+                new MockAccountTypeManager(
+                        new AccountType[]{accountType}, new AccountWithDataSet[]{account}));
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        mMockContext = null;
+        mContactsProvider = null;
+        super.tearDown();
+    }
+
+    private Contact assertLoadContact(Uri uri) {
+        final ContactLoader loader = new ContactLoader(mMockContext, uri, true);
+        return getLoaderResultSynchronously(loader);
+    }
+
+    public void testNullUri() {
+        Contact result = assertLoadContact(null);
+        assertTrue(result.isError());
+    }
+
+    public void testEmptyUri() {
+        Contact result = assertLoadContact(Uri.EMPTY);
+        assertTrue(result.isError());
+    }
+
+    public void testInvalidUri() {
+        Contact result = assertLoadContact(Uri.parse("content://wtf"));
+        assertTrue(result.isError());
+    }
+
+    public void testLoadContactWithContactIdUri() {
+        // Use content Uris that only contain the ID
+        final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
+        final Uri entityUri = Uri.withAppendedPath(baseUri, Contacts.Entity.CONTENT_DIRECTORY);
+        final Uri lookupUri = ContentUris.withAppendedId(
+                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
+                CONTACT_ID);
+
+        ContactQueries queries = new ContactQueries();
+        mContactsProvider.expectTypeQuery(baseUri, Contacts.CONTENT_ITEM_TYPE);
+        queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
+
+        Contact contact = assertLoadContact(baseUri);
+
+        assertEquals(CONTACT_ID, contact.getId());
+        assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
+        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+        assertEquals(LOOKUP_KEY, contact.getLookupKey());
+        assertEquals(lookupUri, contact.getLookupUri());
+        assertEquals(1, contact.getRawContacts().size());
+        assertEquals(1, contact.getStatuses().size());
+        mContactsProvider.verify();
+    }
+
+    public void testLoadContactWithOldStyleUri() {
+        // Use content Uris that only contain the ID but use the format used in Donut
+        final Uri legacyUri = ContentUris.withAppendedId(
+                Uri.parse("content://contacts"), RAW_CONTACT_ID);
+        final Uri rawContactUri = ContentUris.withAppendedId(
+                RawContacts.CONTENT_URI, RAW_CONTACT_ID);
+        final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
+        final Uri lookupUri = ContentUris.withAppendedId(
+                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
+                CONTACT_ID);
+        final Uri entityUri = Uri.withAppendedPath(lookupUri, Contacts.Entity.CONTENT_DIRECTORY);
+
+        ContactQueries queries = new ContactQueries();
+        queries.fetchContactIdAndLookupFromRawContactUri(rawContactUri, CONTACT_ID, LOOKUP_KEY);
+        queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
+
+        Contact contact = assertLoadContact(legacyUri);
+
+        assertEquals(CONTACT_ID, contact.getId());
+        assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
+        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+        assertEquals(LOOKUP_KEY, contact.getLookupKey());
+        assertEquals(lookupUri, contact.getLookupUri());
+        assertEquals(1, contact.getRawContacts().size());
+        assertEquals(1, contact.getStatuses().size());
+        if (CompatUtils.isMarshmallowCompatible()) {
+            assertEquals(
+                    1, contact.getRawContacts().get(0).getDataItems().get(0).getCarrierPresence());
+        }
+        mContactsProvider.verify();
+    }
+
+    public void testLoadContactWithRawContactIdUri() {
+        // Use content Uris that only contain the ID but use the format used in Donut
+        final Uri rawContactUri = ContentUris.withAppendedId(
+                RawContacts.CONTENT_URI, RAW_CONTACT_ID);
+        final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
+        final Uri lookupUri = ContentUris.withAppendedId(
+                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
+                CONTACT_ID);
+        final Uri entityUri = Uri.withAppendedPath(lookupUri, Contacts.Entity.CONTENT_DIRECTORY);
+
+        ContactQueries queries = new ContactQueries();
+        mContactsProvider.expectTypeQuery(rawContactUri, RawContacts.CONTENT_ITEM_TYPE);
+        queries.fetchContactIdAndLookupFromRawContactUri(rawContactUri, CONTACT_ID, LOOKUP_KEY);
+        queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
+
+        Contact contact = assertLoadContact(rawContactUri);
+
+        assertEquals(CONTACT_ID, contact.getId());
+        assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
+        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+        assertEquals(LOOKUP_KEY, contact.getLookupKey());
+        assertEquals(lookupUri, contact.getLookupUri());
+        assertEquals(1, contact.getRawContacts().size());
+        assertEquals(1, contact.getStatuses().size());
+        mContactsProvider.verify();
+    }
+
+    public void testLoadContactWithContactLookupUri() {
+        // Use lookup-style Uris that do not contain the Contact-ID
+        final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
+        final Uri lookupNoIdUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY);
+        final Uri lookupUri = ContentUris.withAppendedId(lookupNoIdUri, CONTACT_ID);
+        final Uri entityUri = Uri.withAppendedPath(
+                lookupNoIdUri, Contacts.Entity.CONTENT_DIRECTORY);
+
+        ContactQueries queries = new ContactQueries();
+        mContactsProvider.expectTypeQuery(lookupNoIdUri, Contacts.CONTENT_ITEM_TYPE);
+        queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
+
+        Contact contact = assertLoadContact(lookupNoIdUri);
+
+        assertEquals(CONTACT_ID, contact.getId());
+        assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
+        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+        assertEquals(LOOKUP_KEY, contact.getLookupKey());
+        assertEquals(lookupUri, contact.getLookupUri());
+        assertEquals(1, contact.getRawContacts().size());
+        assertEquals(1, contact.getStatuses().size());
+        mContactsProvider.verify();
+    }
+
+    public void testLoadContactWithContactLookupAndIdUri() {
+        // Use lookup-style Uris that also contain the Contact-ID
+        final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
+        final Uri lookupUri = ContentUris.withAppendedId(
+                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
+                CONTACT_ID);
+        final Uri entityUri = Uri.withAppendedPath(lookupUri, Contacts.Entity.CONTENT_DIRECTORY);
+
+        ContactQueries queries = new ContactQueries();
+        mContactsProvider.expectTypeQuery(lookupUri, Contacts.CONTENT_ITEM_TYPE);
+        queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
+
+        Contact contact = assertLoadContact(lookupUri);
+
+        assertEquals(CONTACT_ID, contact.getId());
+        assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
+        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+        assertEquals(LOOKUP_KEY, contact.getLookupKey());
+        assertEquals(lookupUri, contact.getLookupUri());
+        assertEquals(1, contact.getRawContacts().size());
+        assertEquals(1, contact.getStatuses().size());
+        mContactsProvider.verify();
+    }
+
+    public void testLoadContactWithContactLookupWithIncorrectIdUri() {
+        // Use lookup-style Uris that contain incorrect Contact-ID
+        // (we want to ensure that still the correct contact is chosen)
+        final long wrongContactId = 2;
+        final long wrongRawContactId = 12;
+
+        final String wrongLookupKey = "ab%12%@!";
+        final Uri baseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, CONTACT_ID);
+        final Uri wrongBaseUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, wrongContactId);
+        final Uri lookupUri = ContentUris.withAppendedId(
+                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
+                CONTACT_ID);
+        final Uri lookupWithWrongIdUri = ContentUris.withAppendedId(
+                Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, LOOKUP_KEY),
+                wrongContactId);
+        final Uri entityUri = Uri.withAppendedPath(lookupWithWrongIdUri,
+                Contacts.Entity.CONTENT_DIRECTORY);
+
+        ContactQueries queries = new ContactQueries();
+        mContactsProvider.expectTypeQuery(lookupWithWrongIdUri, Contacts.CONTENT_ITEM_TYPE);
+        queries.fetchAllData(entityUri, CONTACT_ID, RAW_CONTACT_ID, DATA_ID, LOOKUP_KEY);
+
+        Contact contact = assertLoadContact(lookupWithWrongIdUri);
+
+        assertEquals(CONTACT_ID, contact.getId());
+        assertEquals(RAW_CONTACT_ID, contact.getNameRawContactId());
+        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+        assertEquals(LOOKUP_KEY, contact.getLookupKey());
+        assertEquals(lookupUri, contact.getLookupUri());
+        assertEquals(1, contact.getRawContacts().size());
+        assertEquals(1, contact.getStatuses().size());
+
+        mContactsProvider.verify();
+    }
+
+    public void testLoadContactReturnDirectoryContactWithoutDisplayName() throws JSONException {
+        // Use lookup-style Uri that contains encoded json object which encapsulates the
+        // directory contact. The test json object is:
+        // {
+        //   display_name_source": 40,
+        //   "vnd.android.cursor.item\/contact":{"email":{"data1":"test@google.com" }}
+        // }
+        JSONObject itemJson = new JSONObject();
+        itemJson.put("email", new JSONObject().put("data1", "test@google.com"));
+        JSONObject json = new JSONObject();
+        json.put(Contacts.NAME_RAW_CONTACT_ID, CONTACT_ID);
+        json.put(Contacts.DISPLAY_NAME_SOURCE, DisplayNameSources.STRUCTURED_NAME);
+        json.put(Contacts.CONTENT_ITEM_TYPE, itemJson);
+
+        final Uri lookupUri = Contacts.CONTENT_LOOKUP_URI.buildUpon()
+                .encodedFragment(json.toString())
+                .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, "1")
+                .appendPath(Constants.LOOKUP_URI_ENCODED).build();
+
+        mContactsProvider.expectTypeQuery(lookupUri, Contacts.CONTENT_ITEM_TYPE);
+        Contact contact = assertLoadContact(lookupUri);
+
+        assertEquals(-1, contact.getId());
+        assertEquals(-1, contact.getNameRawContactId());
+        assertEquals(DisplayNameSources.STRUCTURED_NAME, contact.getDisplayNameSource());
+        assertEquals("", contact.getDisplayName());
+        assertEquals(lookupUri, contact.getLookupUri());
+        assertEquals(1, contact.getRawContacts().size());
+        mContactsProvider.verify();
+    }
+
+    class ContactQueries {
+        public void fetchAllData(
+                Uri baseUri, long contactId, long rawContactId, long dataId, String encodedLookup) {
+            final String[] COLUMNS_INTERNAL = new String[] {
+                    Contacts.NAME_RAW_CONTACT_ID, Contacts.DISPLAY_NAME_SOURCE,
+                    Contacts.LOOKUP_KEY, Contacts.DISPLAY_NAME,
+                    Contacts.DISPLAY_NAME_ALTERNATIVE, Contacts.PHONETIC_NAME,
+                    Contacts.PHOTO_ID, Contacts.STARRED, Contacts.CONTACT_PRESENCE,
+                    Contacts.CONTACT_STATUS, Contacts.CONTACT_STATUS_TIMESTAMP,
+                    Contacts.CONTACT_STATUS_RES_PACKAGE, Contacts.CONTACT_STATUS_LABEL,
+
+                    Contacts.Entity.CONTACT_ID,
+                    Contacts.Entity.RAW_CONTACT_ID,
+
+                    RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE,
+                    RawContacts.DATA_SET,
+                    RawContacts.DIRTY, RawContacts.VERSION, RawContacts.SOURCE_ID,
+                    RawContacts.SYNC1, RawContacts.SYNC2, RawContacts.SYNC3, RawContacts.SYNC4,
+                    RawContacts.DELETED,
+
+                    Contacts.Entity.DATA_ID,
+
+                    Data.DATA1, Data.DATA2, Data.DATA3, Data.DATA4, Data.DATA5,
+                    Data.DATA6, Data.DATA7, Data.DATA8, Data.DATA9, Data.DATA10,
+                    Data.DATA11, Data.DATA12, Data.DATA13, Data.DATA14, Data.DATA15,
+                    Data.SYNC1, Data.SYNC2, Data.SYNC3, Data.SYNC4,
+                    Data.DATA_VERSION, Data.IS_PRIMARY,
+                    Data.IS_SUPER_PRIMARY, Data.MIMETYPE,
+
+                    GroupMembership.GROUP_SOURCE_ID,
+
+                    Data.PRESENCE, Data.CHAT_CAPABILITY,
+                    Data.STATUS, Data.STATUS_RES_PACKAGE, Data.STATUS_ICON,
+                    Data.STATUS_LABEL, Data.STATUS_TIMESTAMP,
+
+                    Contacts.PHOTO_URI,
+
+                    Contacts.SEND_TO_VOICEMAIL,
+                    Contacts.CUSTOM_RINGTONE,
+                    Contacts.IS_USER_PROFILE,
+
+                    Data.TIMES_USED,
+                    Data.LAST_TIME_USED
+            };
+
+            List<String> projectionList = Lists.newArrayList(COLUMNS_INTERNAL);
+            if (CompatUtils.isMarshmallowCompatible()) {
+                projectionList.add(Data.CARRIER_PRESENCE);
+            }
+            final String[] COLUMNS = projectionList.toArray(new String[projectionList.size()]);
+
+            final Object[] ROWS_INTERNAL = new Object[] {
+                    rawContactId, 40,
+                    "aa%12%@!", "John Doe", "Doe, John", "jdo",
+                    0, 0, StatusUpdates.AVAILABLE,
+                    "Having lunch", 0,
+                    "mockPkg1", 10,
+
+                    contactId,
+                    rawContactId,
+
+                    "mockAccountName", "mockAccountType", null,
+                    0, 1, 0,
+                    "sync1", "sync2", "sync3", "sync4",
+                    0,
+
+                    dataId,
+
+                    "dat1", "dat2", "dat3", "dat4", "dat5",
+                    "dat6", "dat7", "dat8", "dat9", "dat10",
+                    "dat11", "dat12", "dat13", "dat14", "dat15",
+                    "syn1", "syn2", "syn3", "syn4",
+
+                    0, 0,
+                    0, StructuredName.CONTENT_ITEM_TYPE,
+
+                    "groupId",
+
+                    StatusUpdates.INVISIBLE, null,
+                    "Having dinner", "mockPkg3", 0,
+                    20, 0,
+
+                    "content:some.photo.uri",
+
+                    0,
+                    null,
+                    0,
+
+                    0,
+                    0
+            };
+
+            List<Object> rowsList = Lists.newArrayList(ROWS_INTERNAL);
+            if (CompatUtils.isMarshmallowCompatible()) {
+                rowsList.add(Data.CARRIER_PRESENCE_VT_CAPABLE);
+            }
+            final Object[] ROWS = rowsList.toArray(new Object[rowsList.size()]);
+
+            mContactsProvider.expectQuery(baseUri)
+                    .withProjection(COLUMNS)
+                    .withSortOrder(Contacts.Entity.RAW_CONTACT_ID)
+                    .returnRow(ROWS);
+        }
+
+        void fetchLookupAndId(final Uri sourceUri, final long expectedContactId,
+                final String expectedEncodedLookup) {
+            mContactsProvider.expectQuery(sourceUri)
+                    .withProjection(Contacts.LOOKUP_KEY, Contacts._ID)
+                    .returnRow(expectedEncodedLookup, expectedContactId);
+        }
+
+        void fetchContactIdAndLookupFromRawContactUri(final Uri rawContactUri,
+                final long expectedContactId, final String expectedEncodedLookup) {
+            // TODO: use a lighter query by joining rawcontacts with contacts in provider
+            // (See ContactContracts.java)
+            final Uri dataUri = Uri.withAppendedPath(rawContactUri,
+                    RawContacts.Data.CONTENT_DIRECTORY);
+            mContactsProvider.expectQuery(dataUri)
+                    .withProjection(RawContacts.CONTACT_ID, Contacts.LOOKUP_KEY)
+                    .returnRow(expectedContactId, expectedEncodedLookup);
+        }
+    }
+}
diff --git a/tests/src/com/android/contacts/model/Cp2DeviceLocalAccountLocatorTests.java b/tests/src/com/android/contacts/model/Cp2DeviceLocalAccountLocatorTests.java
new file mode 100644
index 0000000..4e62126
--- /dev/null
+++ b/tests/src/com/android/contacts/model/Cp2DeviceLocalAccountLocatorTests.java
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model;
+
+import android.content.ContentProvider;
+import android.content.ContentResolver;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.os.CancellationSignal;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.RawContacts;
+import android.support.annotation.Nullable;
+import android.support.v4.util.ArraySet;
+import android.test.AndroidTestCase;
+import android.test.mock.MockContentResolver;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.test.mocks.MockContentProvider;
+import com.android.contacts.tests.FakeDeviceAccountTypeFactory;
+import com.android.contacts.util.DeviceLocalAccountTypeFactory;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@SmallTest
+public class Cp2DeviceLocalAccountLocatorTests extends AndroidTestCase {
+
+    // Basic smoke test that just checks that it doesn't throw when loading from CP2. We don't
+    // care what CP2 actually contains for this.
+    public void testShouldNotCrash() {
+        final DeviceLocalAccountLocator sut = new Cp2DeviceLocalAccountLocator(
+                getContext().getContentResolver(),
+                new DeviceLocalAccountTypeFactory.Default(getContext()),
+                Collections.<String>emptySet());
+        sut.getDeviceLocalAccounts();
+        // We didn't throw so it passed
+    }
+
+    public void test_getDeviceLocalAccounts_returnsEmptyListWhenQueryReturnsNull() {
+        final DeviceLocalAccountLocator sut = createWithQueryResult(null);
+        assertTrue(sut.getDeviceLocalAccounts().isEmpty());
+    }
+
+    public void test_getDeviceLocalAccounts_returnsEmptyListWhenNoRawContactsHaveDeviceType() {
+        final DeviceLocalAccountLocator sut = createWithQueryResult(queryResult(
+                        "user", "com.example",
+                        "user", "com.example",
+                        "user", "com.example"));
+        assertTrue(sut.getDeviceLocalAccounts().isEmpty());
+    }
+
+    public void test_getDeviceLocalAccounts_returnsListWithItemForNullAccount() {
+        final DeviceLocalAccountLocator sut = createWithQueryResult(queryResult(
+                "user", "com.example",
+                null, null,
+                "user", "com.example",
+                null, null));
+
+        assertEquals(1, sut.getDeviceLocalAccounts().size());
+    }
+
+    public void test_getDeviceLocalAccounts_containsItemForEachDeviceAccount() {
+        final DeviceLocalAccountTypeFactory stubFactory = new FakeDeviceAccountTypeFactory()
+                .withDeviceTypes(null, "vnd.sec.contact.phone")
+                .withSimTypes("vnd.sec.contact.sim");
+        final DeviceLocalAccountLocator sut = createLocator(queryResult(
+                "user", "com.example",
+                "user", "com.example",
+                "phone_account", "vnd.sec.contact.phone",
+                null, null,
+                "phone_account", "vnd.sec.contact.phone",
+                "user", "com.example",
+                null, null,
+                "sim_account", "vnd.sec.contact.sim",
+                "sim_account_2", "vnd.sec.contact.sim"
+        ), stubFactory);
+
+
+        assertEquals(4, sut.getDeviceLocalAccounts().size());
+    }
+
+    public void test_getDeviceLocalAccounts_doesNotContainItemsForKnownAccountTypes() {
+        final Cp2DeviceLocalAccountLocator sut = new Cp2DeviceLocalAccountLocator(
+                getContext().getContentResolver(), new FakeDeviceAccountTypeFactory(),
+                new ArraySet<>(Arrays.asList("com.example", "com.example.1")));
+
+        assertTrue("Selection should filter known accounts",
+                sut.getSelection().contains("NOT IN (?,?)"));
+
+        final List<String> args = Arrays.asList(sut.getSelectionArgs());
+        assertEquals(2, args.size());
+        assertTrue("Selection args is missing an expected value", args.contains("com.example"));
+        assertTrue("Selection args is missing an expected value", args.contains("com.example.1"));
+    }
+
+    public void test_getDeviceLocalAccounts_includesAccountsFromSettings() {
+        final DeviceLocalAccountTypeFactory stubFactory = new FakeDeviceAccountTypeFactory()
+                .withDeviceTypes(null, "vnd.sec.contact.phone")
+                .withSimTypes("vnd.sec.contact.sim");
+        final DeviceLocalAccountLocator sut = createLocator(new FakeContactsProvider()
+                .withQueryResult(ContactsContract.Settings.CONTENT_URI, queryResult(
+                        "phone_account", "vnd.sec.contact.phone",
+                        "sim_account", "vnd.sec.contact.sim"
+                )), stubFactory);
+
+        assertEquals(2, sut.getDeviceLocalAccounts().size());
+    }
+
+    public void test_getDeviceLocalAccounts_includesAccountsFromGroups() {
+        final DeviceLocalAccountTypeFactory stubFactory = new FakeDeviceAccountTypeFactory()
+                .withDeviceTypes(null, "vnd.sec.contact.phone")
+                .withSimTypes("vnd.sec.contact.sim");
+        final DeviceLocalAccountLocator sut = createLocator(new FakeContactsProvider()
+                .withQueryResult(ContactsContract.Groups.CONTENT_URI, queryResult(
+                        "phone_account", "vnd.sec.contact.phone",
+                        "sim_account", "vnd.sec.contact.sim"
+                )), stubFactory);
+
+        assertEquals(2, sut.getDeviceLocalAccounts().size());
+    }
+
+    private DeviceLocalAccountLocator createWithQueryResult(
+            Cursor cursor) {
+        return createLocator(cursor, new DeviceLocalAccountTypeFactory.Default(mContext));
+    }
+
+    private DeviceLocalAccountLocator createLocator(ContentProvider contactsProvider,
+            DeviceLocalAccountTypeFactory localAccountTypeFactory) {
+        final DeviceLocalAccountLocator locator = new Cp2DeviceLocalAccountLocator(
+                createContentResolverWithProvider(contactsProvider),
+                localAccountTypeFactory, Collections.<String>emptySet());
+        return locator;
+    }
+
+    private DeviceLocalAccountLocator createLocator(Cursor cursor,
+            DeviceLocalAccountTypeFactory localAccountTypeFactory) {
+        final DeviceLocalAccountLocator locator = new Cp2DeviceLocalAccountLocator(
+                createStubResolverWithContentQueryResult(cursor),
+                localAccountTypeFactory,
+                Collections.<String>emptySet());
+        return locator;
+    }
+
+    private ContentResolver createContentResolverWithProvider(ContentProvider contactsProvider) {
+        final MockContentResolver resolver = new MockContentResolver();
+        resolver.addProvider(ContactsContract.AUTHORITY, contactsProvider);
+        return resolver;
+    }
+
+    private ContentResolver createStubResolverWithContentQueryResult(Cursor cursor) {
+        final MockContentResolver resolver = new MockContentResolver();
+        resolver.addProvider(ContactsContract.AUTHORITY, new FakeContactsProvider()
+                .withDefaultQueryResult(cursor));
+        return resolver;
+    }
+
+    private Cursor queryResult(String... nameTypePairs) {
+        final MatrixCursor cursor = new MatrixCursor(new String[]
+                { RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE, RawContacts.DATA_SET });
+        for (int i = 0; i < nameTypePairs.length; i+=2) {
+            cursor.newRow().add(nameTypePairs[i]).add(nameTypePairs[i+1])
+                    .add(null);
+        }
+        return cursor;
+    }
+
+    private static class FakeContactsProvider extends MockContentProvider {
+        public Cursor mNextQueryResult;
+        public Map<Uri, Cursor> mNextResultMapping = new HashMap<>();
+
+        public FakeContactsProvider() {}
+
+        public FakeContactsProvider withDefaultQueryResult(Cursor cursor) {
+            mNextQueryResult = cursor;
+            return this;
+        }
+
+        public FakeContactsProvider withQueryResult(Uri uri, Cursor cursor) {
+            mNextResultMapping.put(uri, cursor);
+            return this;
+        }
+
+        @Override
+        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+                String sortOrder) {
+            return query(uri, projection, selection, selectionArgs, sortOrder, null);
+        }
+
+        @Nullable
+        @Override
+        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+                String sortOrder, CancellationSignal cancellationSignal) {
+            final Cursor result = mNextResultMapping.get(uri);
+            if (result == null) {
+                return mNextQueryResult;
+            } else {
+                return result;
+            }
+        }
+    }
+}
diff --git a/tests/src/com/android/contacts/model/RawContactDeltaListTests.java b/tests/src/com/android/contacts/model/RawContactDeltaListTests.java
new file mode 100644
index 0000000..4565495
--- /dev/null
+++ b/tests/src/com/android/contacts/model/RawContactDeltaListTests.java
@@ -0,0 +1,601 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentValues;
+import android.content.Context;
+import android.net.Uri;
+import android.provider.BaseColumns;
+import android.provider.ContactsContract.AggregationExceptions;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.model.account.AccountType;
+
+import com.google.common.collect.Lists;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Collections;
+
+/**
+ * Tests for {@link RawContactDeltaList} which focus on "diff" operations that should
+ * create {@link AggregationExceptions} in certain cases.
+ */
+@LargeTest
+public class RawContactDeltaListTests extends AndroidTestCase {
+    public static final String TAG = RawContactDeltaListTests.class.getSimpleName();
+
+    // From android.content.ContentProviderOperation
+    public static final int TYPE_INSERT = 1;
+    public static final int TYPE_UPDATE = 2;
+    public static final int TYPE_DELETE = 3;
+    public static final int TYPE_ASSERT = 4;
+
+    private static final long CONTACT_FIRST = 1;
+    private static final long CONTACT_SECOND = 2;
+
+    public static final long CONTACT_BOB = 10;
+    public static final long CONTACT_MARY = 11;
+
+    public static final long PHONE_RED = 20;
+    public static final long PHONE_GREEN = 21;
+    public static final long PHONE_BLUE = 22;
+
+    public static final long EMAIL_YELLOW = 25;
+
+    public static final long VER_FIRST = 100;
+    public static final long VER_SECOND = 200;
+
+    public static final String TEST_PHONE = "555-1212";
+    public static final String TEST_ACCOUNT = "org.example.test";
+
+    public RawContactDeltaListTests() {
+        super();
+    }
+
+    @Override
+    public void setUp() {
+        mContext = getContext();
+    }
+
+    /**
+     * Build a {@link AccountType} that has various odd constraints for
+     * testing purposes.
+     */
+    protected AccountType getAccountType() {
+        return new RawContactModifierTests.MockContactsSource();
+    }
+
+    static ContentValues getValues(ContentProviderOperation operation)
+            throws NoSuchFieldException, IllegalAccessException {
+        final Field field = ContentProviderOperation.class.getDeclaredField("mValues");
+        field.setAccessible(true);
+        return (ContentValues) field.get(operation);
+    }
+
+    static RawContactDelta getUpdate(Context context, long rawContactId) {
+        final RawContact before = RawContactDeltaTests.getRawContact(context, rawContactId,
+                RawContactDeltaTests.TEST_PHONE_ID);
+        return RawContactDelta.fromBefore(before);
+    }
+
+    static RawContactDelta getInsert() {
+        final ContentValues after = new ContentValues();
+        after.put(RawContacts.ACCOUNT_NAME, RawContactDeltaTests.TEST_ACCOUNT_NAME);
+        after.put(RawContacts.SEND_TO_VOICEMAIL, 1);
+
+        final ValuesDelta values = ValuesDelta.fromAfter(after);
+        return new RawContactDelta(values);
+    }
+
+    static RawContactDeltaList buildSet(RawContactDelta... deltas) {
+        final RawContactDeltaList set = new RawContactDeltaList();
+        Collections.addAll(set, deltas);
+        return set;
+    }
+
+    static RawContactDelta buildBeforeEntity(Context context, long rawContactId, long version,
+            ContentValues... entries) {
+        // Build an existing contact read from database
+        final ContentValues contact = new ContentValues();
+        contact.put(RawContacts.VERSION, version);
+        contact.put(RawContacts._ID, rawContactId);
+        final RawContact before = new RawContact(contact);
+        for (ContentValues entry : entries) {
+            before.addDataItemValues(entry);
+        }
+        return RawContactDelta.fromBefore(before);
+    }
+
+    static RawContactDelta buildAfterEntity(ContentValues... entries) {
+        // Build an existing contact read from database
+        final ContentValues contact = new ContentValues();
+        contact.put(RawContacts.ACCOUNT_TYPE, TEST_ACCOUNT);
+        final RawContactDelta after = new RawContactDelta(ValuesDelta.fromAfter(contact));
+        for (ContentValues entry : entries) {
+            after.addEntry(ValuesDelta.fromAfter(entry));
+        }
+        return after;
+    }
+
+    static ContentValues buildPhone(long phoneId) {
+        return buildPhone(phoneId, Long.toString(phoneId));
+    }
+
+    static ContentValues buildPhone(long phoneId, String value) {
+        final ContentValues values = new ContentValues();
+        values.put(Data._ID, phoneId);
+        values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        values.put(Phone.NUMBER, value);
+        values.put(Phone.TYPE, Phone.TYPE_HOME);
+        return values;
+    }
+
+    static ContentValues buildEmail(long emailId) {
+        final ContentValues values = new ContentValues();
+        values.put(Data._ID, emailId);
+        values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+        values.put(Email.DATA, Long.toString(emailId));
+        values.put(Email.TYPE, Email.TYPE_HOME);
+        return values;
+    }
+
+    static void insertPhone(RawContactDeltaList set, long rawContactId, ContentValues values) {
+        final RawContactDelta match = set.getByRawContactId(rawContactId);
+        match.addEntry(ValuesDelta.fromAfter(values));
+    }
+
+    static ValuesDelta getPhone(RawContactDeltaList set, long rawContactId, long dataId) {
+        final RawContactDelta match = set.getByRawContactId(rawContactId);
+        return match.getEntry(dataId);
+    }
+
+    static void assertDiffPattern(RawContactDelta delta, CPOWrapper... pattern) {
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        delta.buildAssertWrapper(diff);
+        delta.buildDiffWrapper(diff);
+        assertDiffPattern(diff, pattern);
+    }
+
+    static void assertDiffPattern(RawContactDeltaList set, CPOWrapper... pattern) {
+        assertDiffPattern(set.buildDiffWrapper(), pattern);
+    }
+
+    static void assertDiffPattern(ArrayList<CPOWrapper> diff, CPOWrapper... pattern) {
+        assertEquals("Unexpected operations", pattern.length, diff.size());
+        for (int i = 0; i < pattern.length; i++) {
+            final CPOWrapper expected = pattern[i];
+            final CPOWrapper found = diff.get(i);
+
+            assertEquals("Unexpected uri",
+                    expected.getOperation().getUri(), found.getOperation().getUri());
+
+            final String expectedType = getTypeString(expected);
+            final String foundType = getTypeString(found);
+            assertEquals("Unexpected type", expectedType, foundType);
+
+            if (CompatUtils.isDeleteCompat(expected)) continue;
+
+            try {
+                final ContentValues expectedValues = getValues(expected.getOperation());
+                final ContentValues foundValues = getValues(found.getOperation());
+
+                expectedValues.remove(BaseColumns._ID);
+                foundValues.remove(BaseColumns._ID);
+
+                assertEquals("Unexpected values", expectedValues, foundValues);
+            } catch (NoSuchFieldException e) {
+                fail(e.toString());
+            } catch (IllegalAccessException e) {
+                fail(e.toString());
+            }
+        }
+    }
+
+    static String getTypeString(CPOWrapper cpoWrapper) {
+        if (CompatUtils.isAssertQueryCompat(cpoWrapper)) {
+            return "TYPE_ASSERT";
+        } else if (CompatUtils.isInsertCompat(cpoWrapper)) {
+            return "TYPE_INSERT";
+        } else if (CompatUtils.isUpdateCompat(cpoWrapper)) {
+            return "TYPE_UPDATE";
+        } else if (CompatUtils.isDeleteCompat(cpoWrapper)) {
+            return "TYPE_DELETE";
+        }
+        return "TYPE_UNKNOWN";
+    }
+
+    static CPOWrapper buildAssertVersion(long version) {
+        final ContentValues values = new ContentValues();
+        values.put(RawContacts.VERSION, version);
+        return buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_ASSERT, values);
+    }
+
+    static CPOWrapper buildAggregationModeUpdate(int mode) {
+        final ContentValues values = new ContentValues();
+        values.put(RawContacts.AGGREGATION_MODE, mode);
+        return buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_UPDATE, values);
+    }
+
+    static CPOWrapper buildUpdateAggregationSuspended() {
+        return buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_SUSPENDED);
+    }
+
+    static CPOWrapper buildUpdateAggregationDefault() {
+        return buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT);
+    }
+
+    static CPOWrapper buildUpdateAggregationKeepTogether(long rawContactId) {
+        final ContentValues values = new ContentValues();
+        values.put(AggregationExceptions.RAW_CONTACT_ID1, rawContactId);
+        values.put(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_TOGETHER);
+        return buildCPOWrapper(AggregationExceptions.CONTENT_URI, TYPE_UPDATE, values);
+    }
+
+    static ContentValues buildDataInsert(ValuesDelta values, long rawContactId) {
+        final ContentValues insertValues = values.getCompleteValues();
+        insertValues.put(Data.RAW_CONTACT_ID, rawContactId);
+        return insertValues;
+    }
+
+    static CPOWrapper buildDelete(Uri uri) {
+        return buildCPOWrapper(uri, TYPE_DELETE, (ContentValues) null);
+    }
+
+    static ContentProviderOperation buildOper(Uri uri, int type, ValuesDelta values) {
+        return buildOper(uri, type, values.getCompleteValues());
+    }
+
+    static ContentProviderOperation buildOper(Uri uri, int type, ContentValues values) {
+        switch (type) {
+            case TYPE_ASSERT:
+                return ContentProviderOperation.newAssertQuery(uri).withValues(values).build();
+            case TYPE_INSERT:
+                return ContentProviderOperation.newInsert(uri).withValues(values).build();
+            case TYPE_UPDATE:
+                return ContentProviderOperation.newUpdate(uri).withValues(values).build();
+            case TYPE_DELETE:
+                return ContentProviderOperation.newDelete(uri).build();
+        }
+        return null;
+    }
+
+    static CPOWrapper buildCPOWrapper(Uri uri, int type, ContentValues values) {
+        if (type == TYPE_ASSERT || type == TYPE_INSERT || type == TYPE_UPDATE
+                || type == TYPE_DELETE) {
+            return new CPOWrapper(buildOper(uri, type, values), type);
+        }
+        return null;
+    }
+
+    static Long getVersion(RawContactDeltaList set, Long rawContactId) {
+        return set.getByRawContactId(rawContactId).getValues().getAsLong(RawContacts.VERSION);
+    }
+
+    /**
+     * Count number of {@link AggregationExceptions} updates contained in the
+     * given list of {@link CPOWrapper}.
+     */
+    static int countExceptionUpdates(ArrayList<CPOWrapper> diff) {
+        int updateCount = 0;
+        for (CPOWrapper cpoWrapper : diff) {
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            if (AggregationExceptions.CONTENT_URI.equals(oper.getUri())
+                    && CompatUtils.isUpdateCompat(cpoWrapper)) {
+                updateCount++;
+            }
+        }
+        return updateCount;
+    }
+
+    public void testInsert() {
+        final RawContactDelta insert = getInsert();
+        final RawContactDeltaList set = buildSet(insert);
+
+        // Inserting single shouldn't create rules
+        final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
+        final int exceptionCount = countExceptionUpdates(diff);
+        assertEquals("Unexpected exception updates", 0, exceptionCount);
+    }
+
+    public void testUpdateUpdate() {
+        final RawContactDelta updateFirst = getUpdate(mContext, CONTACT_FIRST);
+        final RawContactDelta updateSecond = getUpdate(mContext, CONTACT_SECOND);
+        final RawContactDeltaList set = buildSet(updateFirst, updateSecond);
+
+        // Updating two existing shouldn't create rules
+        final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
+        final int exceptionCount = countExceptionUpdates(diff);
+        assertEquals("Unexpected exception updates", 0, exceptionCount);
+    }
+
+    public void testUpdateInsert() {
+        final RawContactDelta update = getUpdate(mContext, CONTACT_FIRST);
+        final RawContactDelta insert = getInsert();
+        final RawContactDeltaList set = buildSet(update, insert);
+
+        // New insert should only create one rule
+        final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
+        final int exceptionCount = countExceptionUpdates(diff);
+        assertEquals("Unexpected exception updates", 1, exceptionCount);
+    }
+
+    public void testInsertUpdateInsert() {
+        final RawContactDelta insertFirst = getInsert();
+        final RawContactDelta update = getUpdate(mContext, CONTACT_FIRST);
+        final RawContactDelta insertSecond = getInsert();
+        final RawContactDeltaList set = buildSet(insertFirst, update, insertSecond);
+
+        // Two inserts should create two rules to bind against single existing
+        final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
+        final int exceptionCount = countExceptionUpdates(diff);
+        assertEquals("Unexpected exception updates", 2, exceptionCount);
+    }
+
+    public void testInsertInsertInsert() {
+        final RawContactDelta insertFirst = getInsert();
+        final RawContactDelta insertSecond = getInsert();
+        final RawContactDelta insertThird = getInsert();
+        final RawContactDeltaList set = buildSet(insertFirst, insertSecond, insertThird);
+
+        // Three new inserts should create only two binding rules
+        final ArrayList<CPOWrapper> diff = set.buildDiffWrapper();
+        final int exceptionCount = countExceptionUpdates(diff);
+        assertEquals("Unexpected exception updates", 2, exceptionCount);
+    }
+
+    public void testMergeDataRemoteInsert() {
+        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_FIRST, buildPhone(PHONE_RED)));
+        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_SECOND, buildPhone(PHONE_RED), buildPhone(PHONE_GREEN)));
+
+        // Merge in second version, verify they match
+        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+        assertEquals("Unexpected change when merging", second, merged);
+    }
+
+    public void testMergeDataLocalUpdateRemoteInsert() {
+        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_FIRST, buildPhone(PHONE_RED)));
+        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_SECOND, buildPhone(PHONE_RED), buildPhone(PHONE_GREEN)));
+
+        // Change the local number to trigger update
+        final ValuesDelta phone = getPhone(first, CONTACT_BOB, PHONE_RED);
+        phone.put(Phone.NUMBER, TEST_PHONE);
+
+        assertDiffPattern(first,
+                buildAssertVersion(VER_FIRST),
+                buildUpdateAggregationSuspended(),
+                buildCPOWrapper(Data.CONTENT_URI, TYPE_UPDATE, phone.getAfter()),
+                buildUpdateAggregationDefault());
+
+        // Merge in the second version, verify diff matches
+        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+        assertDiffPattern(merged,
+                buildAssertVersion(VER_SECOND),
+                buildUpdateAggregationSuspended(),
+                buildCPOWrapper(Data.CONTENT_URI, TYPE_UPDATE, phone.getAfter()),
+                buildUpdateAggregationDefault());
+    }
+
+    public void testMergeDataLocalUpdateRemoteDelete() {
+        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_FIRST, buildPhone(PHONE_RED)));
+        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_SECOND, buildPhone(PHONE_GREEN)));
+
+        // Change the local number to trigger update
+        final ValuesDelta phone = getPhone(first, CONTACT_BOB, PHONE_RED);
+        phone.put(Phone.NUMBER, TEST_PHONE);
+
+        assertDiffPattern(first,
+                buildAssertVersion(VER_FIRST),
+                buildUpdateAggregationSuspended(),
+                buildCPOWrapper(Data.CONTENT_URI, TYPE_UPDATE, phone.getAfter()),
+                buildUpdateAggregationDefault());
+
+        // Merge in the second version, verify that our update changed to
+        // insert, since RED was deleted on remote side
+        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+        assertDiffPattern(merged,
+                buildAssertVersion(VER_SECOND),
+                buildUpdateAggregationSuspended(),
+                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, buildDataInsert(phone, CONTACT_BOB)),
+                buildUpdateAggregationDefault());
+    }
+
+    public void testMergeDataLocalDeleteRemoteUpdate() {
+        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_FIRST, buildPhone(PHONE_RED)));
+        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_SECOND, buildPhone(PHONE_RED, TEST_PHONE)));
+
+        // Delete phone locally
+        final ValuesDelta phone = getPhone(first, CONTACT_BOB, PHONE_RED);
+        phone.markDeleted();
+
+        assertDiffPattern(first,
+                buildAssertVersion(VER_FIRST),
+                buildUpdateAggregationSuspended(),
+                buildDelete(Data.CONTENT_URI),
+                buildUpdateAggregationDefault());
+
+        // Merge in the second version, verify that our delete remains
+        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+        assertDiffPattern(merged,
+                buildAssertVersion(VER_SECOND),
+                buildUpdateAggregationSuspended(),
+                buildDelete(Data.CONTENT_URI),
+                buildUpdateAggregationDefault());
+    }
+
+    public void testMergeDataLocalInsertRemoteInsert() {
+        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_FIRST, buildPhone(PHONE_RED)));
+        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_SECOND, buildPhone(PHONE_RED), buildPhone(PHONE_GREEN)));
+
+        // Insert new phone locally
+        final ValuesDelta bluePhone = ValuesDelta.fromAfter(buildPhone(PHONE_BLUE));
+        first.getByRawContactId(CONTACT_BOB).addEntry(bluePhone);
+        assertDiffPattern(first,
+                buildAssertVersion(VER_FIRST),
+                buildUpdateAggregationSuspended(),
+                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, buildDataInsert(bluePhone, CONTACT_BOB)),
+                buildUpdateAggregationDefault());
+
+        // Merge in the second version, verify that our insert remains
+        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+        assertDiffPattern(merged,
+                buildAssertVersion(VER_SECOND),
+                buildUpdateAggregationSuspended(),
+                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, buildDataInsert(bluePhone, CONTACT_BOB)),
+                buildUpdateAggregationDefault());
+    }
+
+    public void testMergeRawContactLocalInsertRemoteInsert() {
+        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_FIRST, buildPhone(PHONE_RED)));
+        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_SECOND, buildPhone(PHONE_RED)), buildBeforeEntity(mContext, CONTACT_MARY,
+                        VER_SECOND, buildPhone(PHONE_RED)));
+
+        // Add new contact locally, should remain insert
+        final ContentValues joePhoneInsert = buildPhone(PHONE_BLUE);
+        final RawContactDelta joeContact = buildAfterEntity(joePhoneInsert);
+        final ContentValues joeContactInsert = joeContact.getValues().getCompleteValues();
+        joeContactInsert.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED);
+        first.add(joeContact);
+        assertDiffPattern(first,
+                buildAssertVersion(VER_FIRST),
+                buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_INSERT, joeContactInsert),
+                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, joePhoneInsert),
+                buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT),
+                buildUpdateAggregationKeepTogether(CONTACT_BOB));
+
+        // Merge in the second version, verify that our insert remains
+        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+        assertDiffPattern(merged,
+                buildAssertVersion(VER_SECOND),
+                buildAssertVersion(VER_SECOND),
+                buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_INSERT, joeContactInsert),
+                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, joePhoneInsert),
+                buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT),
+                buildUpdateAggregationKeepTogether(CONTACT_BOB));
+    }
+
+    public void testMergeRawContactLocalDeleteRemoteDelete() {
+        final RawContactDeltaList first = buildSet(
+                buildBeforeEntity(mContext, CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED)),
+                buildBeforeEntity(mContext, CONTACT_MARY, VER_FIRST, buildPhone(PHONE_RED)));
+        final RawContactDeltaList second = buildSet(
+                buildBeforeEntity(mContext, CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED)));
+
+        // Remove contact locally
+        first.getByRawContactId(CONTACT_MARY).markDeleted();
+        assertDiffPattern(first,
+                buildAssertVersion(VER_FIRST),
+                buildAssertVersion(VER_FIRST),
+                buildDelete(RawContacts.CONTENT_URI));
+
+        // Merge in the second version, verify that our delete isn't needed
+        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+        assertDiffPattern(merged);
+    }
+
+    public void testMergeRawContactLocalUpdateRemoteDelete() {
+        final RawContactDeltaList first = buildSet(
+                buildBeforeEntity(mContext, CONTACT_BOB, VER_FIRST, buildPhone(PHONE_RED)),
+                buildBeforeEntity(mContext, CONTACT_MARY, VER_FIRST, buildPhone(PHONE_RED)));
+        final RawContactDeltaList second = buildSet(
+                buildBeforeEntity(mContext, CONTACT_BOB, VER_SECOND, buildPhone(PHONE_RED)));
+
+        // Perform local update
+        final ValuesDelta phone = getPhone(first, CONTACT_MARY, PHONE_RED);
+        phone.put(Phone.NUMBER, TEST_PHONE);
+        assertDiffPattern(first,
+                buildAssertVersion(VER_FIRST),
+                buildAssertVersion(VER_FIRST),
+                buildUpdateAggregationSuspended(),
+                buildCPOWrapper(Data.CONTENT_URI, TYPE_UPDATE, phone.getAfter()),
+                buildUpdateAggregationDefault());
+
+        final ContentValues phoneInsert = phone.getCompleteValues();
+        final ContentValues contactInsert = first.getByRawContactId(CONTACT_MARY).getValues()
+                .getCompleteValues();
+        contactInsert.put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_SUSPENDED);
+
+        // Merge and verify that update turned into insert
+        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+        assertDiffPattern(merged,
+                buildAssertVersion(VER_SECOND),
+                buildCPOWrapper(RawContacts.CONTENT_URI, TYPE_INSERT, contactInsert),
+                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, phoneInsert),
+                buildAggregationModeUpdate(RawContacts.AGGREGATION_MODE_DEFAULT),
+                buildUpdateAggregationKeepTogether(CONTACT_BOB));
+    }
+
+    public void testMergeUsesNewVersion() {
+        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_FIRST, buildPhone(PHONE_RED)));
+        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_SECOND, buildPhone(PHONE_RED)));
+
+        assertEquals((Long)VER_FIRST, getVersion(first, CONTACT_BOB));
+        assertEquals((Long)VER_SECOND, getVersion(second, CONTACT_BOB));
+
+        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+        assertEquals((Long)VER_SECOND, getVersion(merged, CONTACT_BOB));
+    }
+
+    public void testMergeAfterEnsureAndTrim() {
+        final RawContactDeltaList first = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_FIRST, buildEmail(EMAIL_YELLOW)));
+        final RawContactDeltaList second = buildSet(buildBeforeEntity(mContext, CONTACT_BOB,
+                VER_SECOND, buildEmail(EMAIL_YELLOW)));
+
+        // Ensure we have at least one phone
+        final AccountType source = getAccountType();
+        final RawContactDelta bobContact = first.getByRawContactId(CONTACT_BOB);
+        RawContactModifier.ensureKindExists(bobContact, source, Phone.CONTENT_ITEM_TYPE);
+        final ValuesDelta bobPhone = bobContact.getSuperPrimaryEntry(Phone.CONTENT_ITEM_TYPE, true);
+
+        // Make sure the update would insert a row
+        assertDiffPattern(first,
+                buildAssertVersion(VER_FIRST),
+                buildUpdateAggregationSuspended(),
+                buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT, buildDataInsert(bobPhone, CONTACT_BOB)),
+                buildUpdateAggregationDefault());
+
+        // Trim values and ensure that we don't insert things
+        RawContactModifier.trimEmpty(bobContact, source);
+        assertDiffPattern(first);
+
+        // Now re-parent the change, which should remain no-op
+        final RawContactDeltaList merged = RawContactDeltaList.mergeAfter(second, first);
+        assertDiffPattern(merged);
+    }
+}
diff --git a/tests/src/com/android/contacts/model/RawContactDeltaTests.java b/tests/src/com/android/contacts/model/RawContactDeltaTests.java
new file mode 100644
index 0000000..f5d4181
--- /dev/null
+++ b/tests/src/com/android/contacts/model/RawContactDeltaTests.java
@@ -0,0 +1,379 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentValues;
+import android.content.Context;
+import android.os.Build;
+import android.os.Parcel;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.contacts.compat.CompatUtils;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+
+/**
+ * Tests for {@link RawContactDelta} and {@link ValuesDelta}. These tests
+ * focus on passing changes across {@link Parcel}, and verifying that they
+ * correctly build expected "diff" operations.
+ */
+@LargeTest
+public class RawContactDeltaTests extends AndroidTestCase {
+    public static final String TAG = "EntityDeltaTests";
+
+    public static final long TEST_CONTACT_ID = 12;
+    public static final long TEST_PHONE_ID = 24;
+
+    public static final String TEST_PHONE_NUMBER_1 = "218-555-1111";
+    public static final String TEST_PHONE_NUMBER_2 = "218-555-2222";
+
+    public static final String TEST_ACCOUNT_NAME = "TEST";
+
+    public RawContactDeltaTests() {
+        super();
+    }
+
+    @Override
+    public void setUp() {
+        mContext = getContext();
+    }
+
+    public static RawContact getRawContact(Context context, long contactId, long phoneId) {
+        // Build an existing contact read from database
+        final ContentValues contact = new ContentValues();
+        contact.put(RawContacts.VERSION, 43);
+        contact.put(RawContacts._ID, contactId);
+
+        final ContentValues phone = new ContentValues();
+        phone.put(Data._ID, phoneId);
+        phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_1);
+        phone.put(Phone.TYPE, Phone.TYPE_HOME);
+
+        final RawContact before = new RawContact(contact);
+        before.addDataItemValues(phone);
+        return before;
+    }
+
+    /**
+     * Test that {@link RawContactDelta#mergeAfter(RawContactDelta)} correctly passes
+     * any changes through the {@link Parcel} object. This enforces that
+     * {@link RawContactDelta} should be identical when serialized against the same
+     * "before" {@link RawContact}.
+     */
+    public void testParcelChangesNone() {
+        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+        final RawContactDelta source = RawContactDelta.fromBefore(before);
+        final RawContactDelta dest = RawContactDelta.fromBefore(before);
+
+        // Merge modified values and assert they match
+        final RawContactDelta merged = RawContactDelta.mergeAfter(dest, source);
+        assertEquals("Unexpected change when merging", source, merged);
+    }
+
+    public void testParcelChangesInsert() {
+        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+        final RawContactDelta source = RawContactDelta.fromBefore(before);
+        final RawContactDelta dest = RawContactDelta.fromBefore(before);
+
+        // Add a new row and pass across parcel, should be same
+        final ContentValues phone = new ContentValues();
+        phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+        phone.put(Phone.TYPE, Phone.TYPE_WORK);
+        source.addEntry(ValuesDelta.fromAfter(phone));
+
+        // Merge modified values and assert they match
+        final RawContactDelta merged = RawContactDelta.mergeAfter(dest, source);
+        assertEquals("Unexpected change when merging", source, merged);
+    }
+
+    public void testParcelChangesUpdate() {
+        // Update existing row and pass across parcel, should be same
+        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+        final RawContactDelta source = RawContactDelta.fromBefore(before);
+        final RawContactDelta dest = RawContactDelta.fromBefore(before);
+
+        final ValuesDelta child = source.getEntry(TEST_PHONE_ID);
+        child.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+
+        // Merge modified values and assert they match
+        final RawContactDelta merged = RawContactDelta.mergeAfter(dest, source);
+        assertEquals("Unexpected change when merging", source, merged);
+    }
+
+    public void testParcelChangesDelete() {
+        // Delete a row and pass across parcel, should be same
+        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+        final RawContactDelta source = RawContactDelta.fromBefore(before);
+        final RawContactDelta dest = RawContactDelta.fromBefore(before);
+
+        final ValuesDelta child = source.getEntry(TEST_PHONE_ID);
+        child.markDeleted();
+
+        // Merge modified values and assert they match
+        final RawContactDelta merged = RawContactDelta.mergeAfter(dest, source);
+        assertEquals("Unexpected change when merging", source, merged);
+    }
+
+    public void testValuesDiffDelete() {
+        final ContentValues before = new ContentValues();
+        before.put(Data._ID, TEST_PHONE_ID);
+        before.put(Phone.NUMBER, TEST_PHONE_NUMBER_1);
+
+        final ValuesDelta values = ValuesDelta.fromBefore(before);
+        values.markDeleted();
+
+        // Should produce a delete action
+        final BuilderWrapper builderWrapper = values.buildDiffWrapper(Data.CONTENT_URI);
+        final boolean isDelete = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
+                ? builderWrapper.getBuilder().build().isDelete()
+                : builderWrapper.getType() == CompatUtils.TYPE_DELETE;
+        assertTrue("Didn't produce delete action", isDelete);
+    }
+
+    /**
+     * Test that {@link RawContactDelta#buildDiffWrapper(ArrayList)} is correctly built for
+     * insert, update, and delete cases. This only tests a subset of possible
+     * {@link Data} row changes.
+     */
+    public void testEntityDiffNone() {
+        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+        final RawContactDelta source = RawContactDelta.fromBefore(before);
+
+        // Assert that writing unchanged produces few operations
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        source.buildDiffWrapper(diff);
+
+        assertTrue("Created changes when none needed", (diff.size() == 0));
+    }
+
+    public void testEntityDiffNoneInsert() {
+        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+        final RawContactDelta source = RawContactDelta.fromBefore(before);
+
+        // Insert a new phone number
+        final ContentValues phone = new ContentValues();
+        phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+        phone.put(Phone.TYPE, Phone.TYPE_WORK);
+        source.addEntry(ValuesDelta.fromAfter(phone));
+
+        // Assert two operations: insert Data row and enforce version
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        source.buildAssertWrapper(diff);
+        source.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 4, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            assertTrue("Expected version enforcement", CompatUtils.isAssertQueryCompat(cpoWrapper));
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(1);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(2);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(3);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+    }
+
+    public void testEntityDiffUpdateInsert() {
+        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+        final RawContactDelta source = RawContactDelta.fromBefore(before);
+
+        // Update parent contact values
+        source.getValues().put(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED);
+
+        // Insert a new phone number
+        final ContentValues phone = new ContentValues();
+        phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+        phone.put(Phone.TYPE, Phone.TYPE_WORK);
+        source.addEntry(ValuesDelta.fromAfter(phone));
+
+        // Assert three operations: update Contact, insert Data row, enforce version
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        source.buildAssertWrapper(diff);
+        source.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 5, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            assertTrue("Expected version enforcement", CompatUtils.isAssertQueryCompat(cpoWrapper));
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(1);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(2);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(3);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(4);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+    }
+
+    public void testEntityDiffNoneUpdate() {
+        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+        final RawContactDelta source = RawContactDelta.fromBefore(before);
+
+        // Update existing phone number
+        final ValuesDelta child = source.getEntry(TEST_PHONE_ID);
+        child.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+
+        // Assert that version is enforced
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        source.buildAssertWrapper(diff);
+        source.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 4, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            assertTrue("Expected version enforcement", CompatUtils.isAssertQueryCompat(cpoWrapper));
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(1);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(2);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(3);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+    }
+
+    public void testEntityDiffDelete() {
+        final RawContact before = getRawContact(mContext, TEST_CONTACT_ID, TEST_PHONE_ID);
+        final RawContactDelta source = RawContactDelta.fromBefore(before);
+
+        // Delete entire entity
+        source.getValues().markDeleted();
+
+        // Assert two operations: delete Contact and enforce version
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        source.buildAssertWrapper(diff);
+        source.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 2, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            assertTrue("Expected version enforcement", CompatUtils.isAssertQueryCompat(cpoWrapper));
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(1);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+    }
+
+    public void testEntityDiffInsert() {
+        // Insert a RawContact
+        final ContentValues after = new ContentValues();
+        after.put(RawContacts.ACCOUNT_NAME, TEST_ACCOUNT_NAME);
+        after.put(RawContacts.SEND_TO_VOICEMAIL, 1);
+
+        final ValuesDelta values = ValuesDelta.fromAfter(after);
+        final RawContactDelta source = new RawContactDelta(values);
+
+        // Assert two operations: insert Contact and enforce version
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        source.buildAssertWrapper(diff);
+        source.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 2, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+    }
+
+    public void testEntityDiffInsertInsert() {
+        // Insert a RawContact
+        final ContentValues after = new ContentValues();
+        after.put(RawContacts.ACCOUNT_NAME, TEST_ACCOUNT_NAME);
+        after.put(RawContacts.SEND_TO_VOICEMAIL, 1);
+
+        final ValuesDelta values = ValuesDelta.fromAfter(after);
+        final RawContactDelta source = new RawContactDelta(values);
+
+        // Insert a new phone number
+        final ContentValues phone = new ContentValues();
+        phone.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        phone.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+        phone.put(Phone.TYPE, Phone.TYPE_WORK);
+        source.addEntry(ValuesDelta.fromAfter(phone));
+
+        // Assert two operations: delete Contact and enforce version
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        source.buildAssertWrapper(diff);
+        source.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 3, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(1);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+
+        }
+    }
+}
diff --git a/tests/src/com/android/contacts/model/RawContactModifierTests.java b/tests/src/com/android/contacts/model/RawContactModifierTests.java
new file mode 100644
index 0000000..594bb44
--- /dev/null
+++ b/tests/src/com/android/contacts/model/RawContactModifierTests.java
@@ -0,0 +1,1200 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation;
+import android.content.ContentValues;
+import android.os.Bundle;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Intents.Insert;
+import android.provider.ContactsContract.RawContacts;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+
+import com.android.contacts.R;
+import com.android.contacts.compat.CompatUtils;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountType.EditType;
+import com.android.contacts.model.account.ExchangeAccountType;
+import com.android.contacts.model.account.GoogleAccountType;
+import com.android.contacts.model.dataitem.DataKind;
+import com.android.contacts.test.mocks.ContactsMockContext;
+import com.android.contacts.test.mocks.MockAccountTypeManager;
+
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Tests for {@link RawContactModifier} to verify that {@link AccountType}
+ * constraints are being enforced correctly.
+ */
+@LargeTest
+public class RawContactModifierTests extends AndroidTestCase {
+    public static final String TAG = "EntityModifierTests";
+
+    // From android.content.ContentProviderOperation
+    public static final int TYPE_INSERT = 1;
+
+    public static final long VER_FIRST = 100;
+
+    private static final long TEST_ID = 4;
+    private static final String TEST_PHONE = "218-555-1212";
+    private static final String TEST_NAME = "Adam Young";
+    private static final String TEST_NAME2 = "Breanne Duren";
+    private static final String TEST_IM = "example@example.com";
+    private static final String TEST_POSTAL = "1600 Amphitheatre Parkway";
+
+    private static final String TEST_ACCOUNT_NAME = "unittest@example.com";
+    private static final String TEST_ACCOUNT_TYPE = "com.example.unittest";
+
+    private static final String EXCHANGE_ACCT_TYPE = "com.android.exchange";
+
+    @Override
+    public void setUp() {
+        mContext = getContext();
+    }
+
+    public static class MockContactsSource extends AccountType {
+
+        MockContactsSource() {
+            try {
+                this.accountType = TEST_ACCOUNT_TYPE;
+
+                final DataKind nameKind = new DataKind(StructuredName.CONTENT_ITEM_TYPE,
+                        R.string.nameLabelsGroup, -1, true);
+                nameKind.typeOverallMax = 1;
+                addKind(nameKind);
+
+                // Phone allows maximum 2 home, 1 work, and unlimited other, with
+                // constraint of 5 numbers maximum.
+                final DataKind phoneKind = new DataKind(
+                        Phone.CONTENT_ITEM_TYPE, -1, 10, true);
+
+                phoneKind.typeOverallMax = 5;
+                phoneKind.typeColumn = Phone.TYPE;
+                phoneKind.typeList = Lists.newArrayList();
+                phoneKind.typeList.add(new EditType(Phone.TYPE_HOME, -1).setSpecificMax(2));
+                phoneKind.typeList.add(new EditType(Phone.TYPE_WORK, -1).setSpecificMax(1));
+                phoneKind.typeList.add(new EditType(Phone.TYPE_FAX_WORK, -1).setSecondary(true));
+                phoneKind.typeList.add(new EditType(Phone.TYPE_OTHER, -1));
+
+                phoneKind.fieldList = Lists.newArrayList();
+                phoneKind.fieldList.add(new EditField(Phone.NUMBER, -1, -1));
+                phoneKind.fieldList.add(new EditField(Phone.LABEL, -1, -1));
+
+                addKind(phoneKind);
+
+                // Email is unlimited
+                final DataKind emailKind = new DataKind(Email.CONTENT_ITEM_TYPE, -1, 10, true);
+                emailKind.typeOverallMax = -1;
+                emailKind.fieldList = Lists.newArrayList();
+                emailKind.fieldList.add(new EditField(Email.DATA, -1, -1));
+                addKind(emailKind);
+
+                // IM is only one
+                final DataKind imKind = new DataKind(Im.CONTENT_ITEM_TYPE, -1, 10, true);
+                imKind.typeOverallMax = 1;
+                imKind.fieldList = Lists.newArrayList();
+                imKind.fieldList.add(new EditField(Im.DATA, -1, -1));
+                addKind(imKind);
+
+                // Organization is only one
+                final DataKind orgKind = new DataKind(Organization.CONTENT_ITEM_TYPE, -1, 10, true);
+                orgKind.typeOverallMax = 1;
+                orgKind.fieldList = Lists.newArrayList();
+                orgKind.fieldList.add(new EditField(Organization.COMPANY, -1, -1));
+                orgKind.fieldList.add(new EditField(Organization.TITLE, -1, -1));
+                addKind(orgKind);
+            } catch (DefinitionException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        @Override
+        public boolean isGroupMembershipEditable() {
+            return false;
+        }
+
+        @Override
+        public boolean areContactsWritable() {
+            return true;
+        }
+    }
+
+    /**
+     * Build a {@link AccountType} that has various odd constraints for
+     * testing purposes.
+     */
+    protected AccountType getAccountType() {
+        return new MockContactsSource();
+    }
+
+    /**
+     * Build {@link AccountTypeManager} instance.
+     */
+    protected AccountTypeManager getAccountTypes(AccountType... types) {
+        return new MockAccountTypeManager(types, null);
+    }
+
+    /**
+     * Build an {@link RawContact} with the requested set of phone numbers.
+     */
+    protected RawContactDelta getRawContact(Long existingId, ContentValues... entries) {
+        final ContentValues contact = new ContentValues();
+        if (existingId != null) {
+            contact.put(RawContacts._ID, existingId);
+        }
+        contact.put(RawContacts.ACCOUNT_NAME, TEST_ACCOUNT_NAME);
+        contact.put(RawContacts.ACCOUNT_TYPE, TEST_ACCOUNT_TYPE);
+
+        final RawContact before = new RawContact(contact);
+        for (ContentValues values : entries) {
+            before.addDataItemValues(values);
+        }
+        return RawContactDelta.fromBefore(before);
+    }
+
+    /**
+     * Assert this {@link List} contains the given {@link Object}.
+     */
+    protected void assertContains(List<?> list, Object object) {
+        assertTrue("Missing expected value", list.contains(object));
+    }
+
+    /**
+     * Assert this {@link List} does not contain the given {@link Object}.
+     */
+    protected void assertNotContains(List<?> list, Object object) {
+        assertFalse("Contained unexpected value", list.contains(object));
+    }
+
+    /**
+     * Insert various rows to test
+     * {@link RawContactModifier#getValidTypes(RawContactDelta, DataKind, EditType)}
+     */
+    public void testValidTypes() {
+        // Build a source and pull specific types
+        final AccountType source = getAccountType();
+        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+        final EditType typeWork = RawContactModifier.getType(kindPhone, Phone.TYPE_WORK);
+        final EditType typeOther = RawContactModifier.getType(kindPhone, Phone.TYPE_OTHER);
+
+        List<EditType> validTypes;
+
+        // Add first home, first work
+        final RawContactDelta state = getRawContact(TEST_ID);
+        RawContactModifier.insertChild(state, kindPhone, typeHome);
+        RawContactModifier.insertChild(state, kindPhone, typeWork);
+
+        // Expecting home, other
+        validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, true);
+        assertContains(validTypes, typeHome);
+        assertNotContains(validTypes, typeWork);
+        assertContains(validTypes, typeOther);
+
+        // Add second home
+        RawContactModifier.insertChild(state, kindPhone, typeHome);
+
+        // Expecting other
+        validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, true);
+        assertNotContains(validTypes, typeHome);
+        assertNotContains(validTypes, typeWork);
+        assertContains(validTypes, typeOther);
+
+        // Add third and fourth home (invalid, but possible)
+        RawContactModifier.insertChild(state, kindPhone, typeHome);
+        RawContactModifier.insertChild(state, kindPhone, typeHome);
+
+        // Expecting none
+        validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, true);
+        assertNotContains(validTypes, typeHome);
+        assertNotContains(validTypes, typeWork);
+        assertNotContains(validTypes, typeOther);
+    }
+
+    /**
+     * Test which valid types there are when trying to update the editor type.
+     * {@link RawContactModifier#getValidTypes(RawContactDelta, DataKind, EditType, Boolean)}
+     */
+    public void testValidTypesWhenUpdating() {
+        // Build a source and pull specific types
+        final AccountType source = getAccountType();
+        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+        final EditType typeWork = RawContactModifier.getType(kindPhone, Phone.TYPE_WORK);
+        final EditType typeOther = RawContactModifier.getType(kindPhone, Phone.TYPE_OTHER);
+
+        List<EditType> validTypes;
+
+        // Add first home, first work
+        final RawContactDelta state = getRawContact(TEST_ID);
+        RawContactModifier.insertChild(state, kindPhone, typeHome);
+        RawContactModifier.insertChild(state, kindPhone, typeWork);
+
+        // Update editor type for home.
+        validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, false);
+        assertContains(validTypes, typeHome);
+        assertNotContains(validTypes, typeWork);
+        assertContains(validTypes, typeOther);
+
+        // Add another 3 types. Overall limit is 5.
+        RawContactModifier.insertChild(state, kindPhone, typeHome);
+        RawContactModifier.insertChild(state, kindPhone, typeOther);
+        RawContactModifier.insertChild(state, kindPhone, typeOther);
+
+        // "Other" is valid when updating the editor type.
+        validTypes = RawContactModifier.getValidTypes(state, kindPhone, null, true, null, false);
+        assertNotContains(validTypes, typeHome);
+        assertNotContains(validTypes, typeWork);
+        assertContains(validTypes, typeOther);
+    }
+
+    /**
+     * Test {@link RawContactModifier#canInsert(RawContactDelta, DataKind)} by
+     * inserting various rows.
+     */
+    public void testCanInsert() {
+        // Build a source and pull specific types
+        final AccountType source = getAccountType();
+        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+        final EditType typeWork = RawContactModifier.getType(kindPhone, Phone.TYPE_WORK);
+        final EditType typeOther = RawContactModifier.getType(kindPhone, Phone.TYPE_OTHER);
+
+        // Add first home, first work
+        final RawContactDelta state = getRawContact(TEST_ID);
+        RawContactModifier.insertChild(state, kindPhone, typeHome);
+        RawContactModifier.insertChild(state, kindPhone, typeWork);
+        assertTrue("Unable to insert", RawContactModifier.canInsert(state, kindPhone));
+
+        // Add two other, which puts us just under "5" overall limit
+        RawContactModifier.insertChild(state, kindPhone, typeOther);
+        RawContactModifier.insertChild(state, kindPhone, typeOther);
+        assertTrue("Unable to insert", RawContactModifier.canInsert(state, kindPhone));
+
+        // Add second home, which should push to snug limit
+        RawContactModifier.insertChild(state, kindPhone, typeHome);
+        assertFalse("Able to insert", RawContactModifier.canInsert(state, kindPhone));
+    }
+
+    /**
+     * Test
+     * {@link RawContactModifier#getBestValidType(RawContactDelta, DataKind, boolean, int)}
+     * by asserting expected best options in various states.
+     */
+    public void testBestValidType() {
+        // Build a source and pull specific types
+        final AccountType source = getAccountType();
+        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+        final EditType typeWork = RawContactModifier.getType(kindPhone, Phone.TYPE_WORK);
+        final EditType typeFaxWork = RawContactModifier.getType(kindPhone, Phone.TYPE_FAX_WORK);
+        final EditType typeOther = RawContactModifier.getType(kindPhone, Phone.TYPE_OTHER);
+
+        EditType suggested;
+
+        // Default suggestion should be home
+        final RawContactDelta state = getRawContact(TEST_ID);
+        suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
+        assertEquals("Unexpected suggestion", typeHome, suggested);
+
+        // Add first home, should now suggest work
+        RawContactModifier.insertChild(state, kindPhone, typeHome);
+        suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
+        assertEquals("Unexpected suggestion", typeWork, suggested);
+
+        // Add work fax, should still suggest work
+        RawContactModifier.insertChild(state, kindPhone, typeFaxWork);
+        suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
+        assertEquals("Unexpected suggestion", typeWork, suggested);
+
+        // Add other, should still suggest work
+        RawContactModifier.insertChild(state, kindPhone, typeOther);
+        suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
+        assertEquals("Unexpected suggestion", typeWork, suggested);
+
+        // Add work, now should suggest other
+        RawContactModifier.insertChild(state, kindPhone, typeWork);
+        suggested = RawContactModifier.getBestValidType(state, kindPhone, false, Integer.MIN_VALUE);
+        assertEquals("Unexpected suggestion", typeOther, suggested);
+    }
+
+    public void testIsEmptyEmpty() {
+        final AccountType source = getAccountType();
+        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+
+        // Test entirely empty row
+        final ContentValues after = new ContentValues();
+        final ValuesDelta values = ValuesDelta.fromAfter(after);
+
+        assertTrue("Expected empty", RawContactModifier.isEmpty(values, kindPhone));
+    }
+
+    public void testIsEmptyDirectFields() {
+        final AccountType source = getAccountType();
+        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+        // Test row that has type values, but core fields are empty
+        final RawContactDelta state = getRawContact(TEST_ID);
+        final ValuesDelta values = RawContactModifier.insertChild(state, kindPhone, typeHome);
+
+        assertTrue("Expected empty", RawContactModifier.isEmpty(values, kindPhone));
+
+        // Insert some data to trigger non-empty state
+        values.put(Phone.NUMBER, TEST_PHONE);
+
+        assertFalse("Expected non-empty", RawContactModifier.isEmpty(values, kindPhone));
+    }
+
+    public void testTrimEmptySingle() {
+        final AccountType source = getAccountType();
+        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+        // Test row that has type values, but core fields are empty
+        final RawContactDelta state = getRawContact(TEST_ID);
+        RawContactModifier.insertChild(state, kindPhone, typeHome);
+
+        // Build diff, expecting insert for data row and update enforcement
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 3, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(1);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(2);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+
+        // Trim empty rows and try again, expecting delete of overall contact
+        RawContactModifier.trimEmpty(state, source);
+        diff.clear();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 1, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+    }
+
+    public void testTrimEmptySpaces() {
+        final AccountType source = getAccountType();
+        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+        // Test row that has type values, but values are spaces
+        final RawContactDelta state = RawContactDeltaListTests.buildBeforeEntity(mContext, TEST_ID,
+                VER_FIRST);
+        final ValuesDelta values = RawContactModifier.insertChild(state, kindPhone, typeHome);
+        values.put(Phone.NUMBER, "   ");
+
+        // Build diff, expecting insert for data row and update enforcement
+        RawContactDeltaListTests.assertDiffPattern(state,
+                RawContactDeltaListTests.buildAssertVersion(VER_FIRST),
+                RawContactDeltaListTests.buildUpdateAggregationSuspended(),
+                RawContactDeltaListTests.buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT,
+                        RawContactDeltaListTests.buildDataInsert(values, TEST_ID)),
+                RawContactDeltaListTests.buildUpdateAggregationDefault());
+
+        // Trim empty rows and try again, expecting delete of overall contact
+        RawContactModifier.trimEmpty(state, source);
+        RawContactDeltaListTests.assertDiffPattern(state,
+                RawContactDeltaListTests.buildAssertVersion(VER_FIRST),
+                RawContactDeltaListTests.buildDelete(RawContacts.CONTENT_URI));
+    }
+
+    public void testTrimLeaveValid() {
+        final AccountType source = getAccountType();
+        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+        // Test row that has type values with valid number
+        final RawContactDelta state = RawContactDeltaListTests.buildBeforeEntity(mContext, TEST_ID,
+                VER_FIRST);
+        final ValuesDelta values = RawContactModifier.insertChild(state, kindPhone, typeHome);
+        values.put(Phone.NUMBER, TEST_PHONE);
+
+        // Build diff, expecting insert for data row and update enforcement
+        RawContactDeltaListTests.assertDiffPattern(state,
+                RawContactDeltaListTests.buildAssertVersion(VER_FIRST),
+                RawContactDeltaListTests.buildUpdateAggregationSuspended(),
+                RawContactDeltaListTests.buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT,
+                        RawContactDeltaListTests.buildDataInsert(values, TEST_ID)),
+                RawContactDeltaListTests.buildUpdateAggregationDefault());
+
+        // Trim empty rows and try again, expecting no differences
+        RawContactModifier.trimEmpty(state, source);
+        RawContactDeltaListTests.assertDiffPattern(state,
+                RawContactDeltaListTests.buildAssertVersion(VER_FIRST),
+                RawContactDeltaListTests.buildUpdateAggregationSuspended(),
+                RawContactDeltaListTests.buildCPOWrapper(Data.CONTENT_URI, TYPE_INSERT,
+                        RawContactDeltaListTests.buildDataInsert(values, TEST_ID)),
+                RawContactDeltaListTests.buildUpdateAggregationDefault());
+    }
+
+    public void testTrimEmptyUntouched() {
+        final AccountType source = getAccountType();
+        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+        // Build "before" that has empty row
+        final RawContactDelta state = getRawContact(TEST_ID);
+        final ContentValues before = new ContentValues();
+        before.put(Data._ID, TEST_ID);
+        before.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        state.addEntry(ValuesDelta.fromBefore(before));
+
+        // Build diff, expecting no changes
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 0, diff.size());
+
+        // Try trimming existing empty, which we shouldn't touch
+        RawContactModifier.trimEmpty(state, source);
+        diff.clear();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 0, diff.size());
+    }
+
+    public void testTrimEmptyAfterUpdate() {
+        final AccountType source = getAccountType();
+        final DataKind kindPhone = source.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+        // Build "before" that has row with some phone number
+        final ContentValues before = new ContentValues();
+        before.put(Data._ID, TEST_ID);
+        before.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        before.put(kindPhone.typeColumn, typeHome.rawValue);
+        before.put(Phone.NUMBER, TEST_PHONE);
+        final RawContactDelta state = getRawContact(TEST_ID, before);
+
+        // Build diff, expecting no changes
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 0, diff.size());
+
+        // Now update row by changing number to empty string, expecting single update
+        final ValuesDelta child = state.getEntry(TEST_ID);
+        child.put(Phone.NUMBER, "");
+        diff.clear();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 3, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(1);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(2);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+
+        // Now run trim, which should turn that update into delete
+        RawContactModifier.trimEmpty(state, source);
+        diff.clear();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 1, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+    }
+
+    public void testTrimInsertEmpty() {
+        final AccountType accountType = getAccountType();
+        final AccountTypeManager accountTypes = getAccountTypes(accountType);
+        final DataKind kindPhone = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+        // Try creating a contact without any child entries
+        final RawContactDelta state = getRawContact(null);
+        final RawContactDeltaList set = new RawContactDeltaList();
+        set.add(state);
+
+        // Build diff, expecting single insert
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 2, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+
+        // Trim empty rows and try again, expecting no insert
+        RawContactModifier.trimEmpty(set, accountTypes);
+        diff.clear();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 0, diff.size());
+    }
+
+    public void testTrimInsertInsert() {
+        final AccountType accountType = getAccountType();
+        final AccountTypeManager accountTypes = getAccountTypes(accountType);
+        final DataKind kindPhone = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+        // Try creating a contact with single empty entry
+        final RawContactDelta state = getRawContact(null);
+        RawContactModifier.insertChild(state, kindPhone, typeHome);
+        final RawContactDeltaList set = new RawContactDeltaList();
+        set.add(state);
+
+        // Build diff, expecting two insert operations
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 3, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(1);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isInsertCompat(cpoWrapper));
+            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+        }
+
+        // Trim empty rows and try again, expecting silence
+        RawContactModifier.trimEmpty(set, accountTypes);
+        diff.clear();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 0, diff.size());
+    }
+
+    public void testTrimUpdateRemain() {
+        final AccountType accountType = getAccountType();
+        final AccountTypeManager accountTypes = getAccountTypes(accountType);
+        final DataKind kindPhone = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+        // Build "before" with two phone numbers
+        final ContentValues first = new ContentValues();
+        first.put(Data._ID, TEST_ID);
+        first.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        first.put(kindPhone.typeColumn, typeHome.rawValue);
+        first.put(Phone.NUMBER, TEST_PHONE);
+
+        final ContentValues second = new ContentValues();
+        second.put(Data._ID, TEST_ID);
+        second.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        second.put(kindPhone.typeColumn, typeHome.rawValue);
+        second.put(Phone.NUMBER, TEST_PHONE);
+
+        final RawContactDelta state = getRawContact(TEST_ID, first, second);
+        final RawContactDeltaList set = new RawContactDeltaList();
+        set.add(state);
+
+        // Build diff, expecting no changes
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 0, diff.size());
+
+        // Now update row by changing number to empty string, expecting single update
+        final ValuesDelta child = state.getEntry(TEST_ID);
+        child.put(Phone.NUMBER, "");
+        diff.clear();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 3, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(1);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(2);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+
+        // Now run trim, which should turn that update into delete
+        RawContactModifier.trimEmpty(set, accountTypes);
+        diff.clear();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 3, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(1);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
+            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(2);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+    }
+
+    public void testTrimUpdateUpdate() {
+        final AccountType accountType = getAccountType();
+        final AccountTypeManager accountTypes = getAccountTypes(accountType);
+        final DataKind kindPhone = accountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+        final EditType typeHome = RawContactModifier.getType(kindPhone, Phone.TYPE_HOME);
+
+        // Build "before" with two phone numbers
+        final ContentValues first = new ContentValues();
+        first.put(Data._ID, TEST_ID);
+        first.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        first.put(kindPhone.typeColumn, typeHome.rawValue);
+        first.put(Phone.NUMBER, TEST_PHONE);
+
+        final RawContactDelta state = getRawContact(TEST_ID, first);
+        final RawContactDeltaList set = new RawContactDeltaList();
+        set.add(state);
+
+        // Build diff, expecting no changes
+        final ArrayList<CPOWrapper> diff = Lists.newArrayList();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 0, diff.size());
+
+        // Now update row by changing number to empty string, expecting single update
+        final ValuesDelta child = state.getEntry(TEST_ID);
+        child.put(Phone.NUMBER, "");
+        diff.clear();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 3, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(1);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", Data.CONTENT_URI, oper.getUri());
+        }
+        {
+            final CPOWrapper cpoWrapper = diff.get(2);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Expected aggregation mode change", CompatUtils.isUpdateCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+
+        // Now run trim, which should turn into deleting the whole contact
+        RawContactModifier.trimEmpty(set, accountTypes);
+        diff.clear();
+        state.buildDiffWrapper(diff);
+        assertEquals("Unexpected operations", 1, diff.size());
+        {
+            final CPOWrapper cpoWrapper = diff.get(0);
+            final ContentProviderOperation oper = cpoWrapper.getOperation();
+            assertTrue("Incorrect type", CompatUtils.isDeleteCompat(cpoWrapper));
+            assertEquals("Incorrect target", RawContacts.CONTENT_URI, oper.getUri());
+        }
+    }
+
+    public void testParseExtrasExistingName() {
+        final AccountType accountType = getAccountType();
+
+        // Build "before" name
+        final ContentValues first = new ContentValues();
+        first.put(Data._ID, TEST_ID);
+        first.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+        first.put(StructuredName.GIVEN_NAME, TEST_NAME);
+
+        // Parse extras, making sure we keep single name
+        final RawContactDelta state = getRawContact(TEST_ID, first);
+        final Bundle extras = new Bundle();
+        extras.putString(Insert.NAME, TEST_NAME2);
+        RawContactModifier.parseExtras(mContext, accountType, state, extras);
+
+        final int nameCount = state.getMimeEntriesCount(StructuredName.CONTENT_ITEM_TYPE, true);
+        assertEquals("Unexpected names", 1, nameCount);
+    }
+
+    public void testParseExtrasIgnoreLimit() {
+        final AccountType accountType = getAccountType();
+
+        // Build "before" IM
+        final ContentValues first = new ContentValues();
+        first.put(Data._ID, TEST_ID);
+        first.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+        first.put(Im.DATA, TEST_IM);
+
+        final RawContactDelta state = getRawContact(TEST_ID, first);
+        final int beforeCount = state.getMimeEntries(Im.CONTENT_ITEM_TYPE).size();
+
+        // We should ignore data that doesn't fit account type rules, since account type
+        // only allows single Im
+        final Bundle extras = new Bundle();
+        extras.putInt(Insert.IM_PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
+        extras.putString(Insert.IM_HANDLE, TEST_IM);
+        RawContactModifier.parseExtras(mContext, accountType, state, extras);
+
+        final int afterCount = state.getMimeEntries(Im.CONTENT_ITEM_TYPE).size();
+        assertEquals("Broke account type rules", beforeCount, afterCount);
+    }
+
+    public void testParseExtrasIgnoreUnhandled() {
+        final AccountType accountType = getAccountType();
+        final RawContactDelta state = getRawContact(TEST_ID);
+
+        // We should silently ignore types unsupported by account type
+        final Bundle extras = new Bundle();
+        extras.putString(Insert.POSTAL, TEST_POSTAL);
+        RawContactModifier.parseExtras(mContext, accountType, state, extras);
+
+        assertNull("Broke accoun type rules",
+                state.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE));
+    }
+
+    public void testParseExtrasJobTitle() {
+        final AccountType accountType = getAccountType();
+        final RawContactDelta state = getRawContact(TEST_ID);
+
+        // Make sure that we create partial Organizations
+        final Bundle extras = new Bundle();
+        extras.putString(Insert.JOB_TITLE, TEST_NAME);
+        RawContactModifier.parseExtras(mContext, accountType, state, extras);
+
+        final int count = state.getMimeEntries(Organization.CONTENT_ITEM_TYPE).size();
+        assertEquals("Expected to create organization", 1, count);
+    }
+
+    public void testMigrateNameFromGoogleToExchange() {
+        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+        DataKind kind = newAccountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
+
+        ContactsMockContext context = new ContactsMockContext(getContext());
+
+        RawContactDelta oldState = new RawContactDelta();
+        ContentValues mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+        mockNameValues.put(StructuredName.PREFIX, "prefix");
+        mockNameValues.put(StructuredName.GIVEN_NAME, "given");
+        mockNameValues.put(StructuredName.MIDDLE_NAME, "middle");
+        mockNameValues.put(StructuredName.FAMILY_NAME, "family");
+        mockNameValues.put(StructuredName.SUFFIX, "suffix");
+        mockNameValues.put(StructuredName.PHONETIC_FAMILY_NAME, "PHONETIC_FAMILY");
+        mockNameValues.put(StructuredName.PHONETIC_MIDDLE_NAME, "PHONETIC_MIDDLE");
+        mockNameValues.put(StructuredName.PHONETIC_GIVEN_NAME, "PHONETIC_GIVEN");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+        RawContactDelta newState = new RawContactDelta();
+        RawContactModifier.migrateStructuredName(context, oldState, newState, kind);
+        List<ValuesDelta> list = newState.getMimeEntries(StructuredName.CONTENT_ITEM_TYPE);
+        assertEquals(1, list.size());
+
+        ContentValues output = list.get(0).getAfter();
+        assertEquals("prefix", output.getAsString(StructuredName.PREFIX));
+        assertEquals("given", output.getAsString(StructuredName.GIVEN_NAME));
+        assertEquals("middle", output.getAsString(StructuredName.MIDDLE_NAME));
+        assertEquals("family", output.getAsString(StructuredName.FAMILY_NAME));
+        assertEquals("suffix", output.getAsString(StructuredName.SUFFIX));
+        // Phonetic middle name isn't supported by Exchange.
+        assertEquals("PHONETIC_FAMILY", output.getAsString(StructuredName.PHONETIC_FAMILY_NAME));
+        assertEquals("PHONETIC_GIVEN", output.getAsString(StructuredName.PHONETIC_GIVEN_NAME));
+    }
+
+    public void testMigratePostalFromGoogleToExchange() {
+        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+        DataKind kind = newAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
+
+        RawContactDelta oldState = new RawContactDelta();
+        ContentValues mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
+        mockNameValues.put(StructuredPostal.FORMATTED_ADDRESS, "formatted_address");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+        RawContactDelta newState = new RawContactDelta();
+        RawContactModifier.migratePostal(oldState, newState, kind);
+
+        List<ValuesDelta> list = newState.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE);
+        assertNotNull(list);
+        assertEquals(1, list.size());
+        ContentValues outputValues = list.get(0).getAfter();
+        // FORMATTED_ADDRESS isn't supported by Exchange.
+        assertNull(outputValues.getAsString(StructuredPostal.FORMATTED_ADDRESS));
+        assertEquals("formatted_address", outputValues.getAsString(StructuredPostal.STREET));
+    }
+
+    public void testMigratePostalFromExchangeToGoogle() {
+        AccountType oldAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+        AccountType newAccountType = new GoogleAccountType(getContext(), "");
+        DataKind kind = newAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
+
+        RawContactDelta oldState = new RawContactDelta();
+        ContentValues mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
+        mockNameValues.put(StructuredPostal.COUNTRY, "country");
+        mockNameValues.put(StructuredPostal.POSTCODE, "postcode");
+        mockNameValues.put(StructuredPostal.REGION, "region");
+        mockNameValues.put(StructuredPostal.CITY, "city");
+        mockNameValues.put(StructuredPostal.STREET, "street");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+        RawContactDelta newState = new RawContactDelta();
+        RawContactModifier.migratePostal(oldState, newState, kind);
+
+        List<ValuesDelta> list = newState.getMimeEntries(StructuredPostal.CONTENT_ITEM_TYPE);
+        assertNotNull(list);
+        assertEquals(1, list.size());
+        ContentValues outputValues = list.get(0).getAfter();
+
+        // Check FORMATTED_ADDRESS contains all info.
+        String formattedAddress = outputValues.getAsString(StructuredPostal.FORMATTED_ADDRESS);
+        assertNotNull(formattedAddress);
+        assertTrue(formattedAddress.contains("country"));
+        assertTrue(formattedAddress.contains("postcode"));
+        assertTrue(formattedAddress.contains("region"));
+        assertTrue(formattedAddress.contains("postcode"));
+        assertTrue(formattedAddress.contains("city"));
+        assertTrue(formattedAddress.contains("street"));
+    }
+
+    public void testMigrateEventFromGoogleToExchange1() {
+        testMigrateEventCommon(new GoogleAccountType(getContext(), ""),
+                new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE));
+    }
+
+    public void testMigrateEventFromExchangeToGoogle() {
+        testMigrateEventCommon(new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE),
+                new GoogleAccountType(getContext(), ""));
+    }
+
+    private void testMigrateEventCommon(AccountType oldAccountType, AccountType newAccountType) {
+        DataKind kind = newAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE);
+
+        RawContactDelta oldState = new RawContactDelta();
+        ContentValues mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Event.START_DATE, "1972-02-08");
+        mockNameValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+        RawContactDelta newState = new RawContactDelta();
+        RawContactModifier.migrateEvent(oldState, newState, kind, 1990);
+
+        List<ValuesDelta> list = newState.getMimeEntries(Event.CONTENT_ITEM_TYPE);
+        assertNotNull(list);
+        assertEquals(1, list.size());  // Anniversary should be dropped.
+        ContentValues outputValues = list.get(0).getAfter();
+
+        assertEquals("1972-02-08", outputValues.getAsString(Event.START_DATE));
+        assertEquals(Event.TYPE_BIRTHDAY, outputValues.getAsInteger(Event.TYPE).intValue());
+    }
+
+    public void testMigrateEventFromGoogleToExchange2() {
+        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+        DataKind kind = newAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE);
+
+        RawContactDelta oldState = new RawContactDelta();
+        ContentValues mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+        // No year format is not supported by Exchange.
+        mockNameValues.put(Event.START_DATE, "--06-01");
+        mockNameValues.put(Event.TYPE, Event.TYPE_BIRTHDAY);
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+        mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Event.START_DATE, "1980-08-02");
+        // Anniversary is not supported by Exchange
+        mockNameValues.put(Event.TYPE, Event.TYPE_ANNIVERSARY);
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+        RawContactDelta newState = new RawContactDelta();
+        RawContactModifier.migrateEvent(oldState, newState, kind, 1990);
+
+        List<ValuesDelta> list = newState.getMimeEntries(Event.CONTENT_ITEM_TYPE);
+        assertNotNull(list);
+        assertEquals(1, list.size());  // Anniversary should be dropped.
+        ContentValues outputValues = list.get(0).getAfter();
+
+        // Default year should be used.
+        assertEquals("1990-06-01", outputValues.getAsString(Event.START_DATE));
+        assertEquals(Event.TYPE_BIRTHDAY, outputValues.getAsInteger(Event.TYPE).intValue());
+    }
+
+    public void testMigrateEmailFromGoogleToExchange() {
+        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+        DataKind kind = newAccountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE);
+
+        RawContactDelta oldState = new RawContactDelta();
+        ContentValues mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Email.TYPE, Email.TYPE_CUSTOM);
+        mockNameValues.put(Email.LABEL, "custom_type");
+        mockNameValues.put(Email.ADDRESS, "address1");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+        mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Email.TYPE, Email.TYPE_HOME);
+        mockNameValues.put(Email.ADDRESS, "address2");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+        mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Email.TYPE, Email.TYPE_WORK);
+        mockNameValues.put(Email.ADDRESS, "address3");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+        // Exchange can have up to 3 email entries. This 4th entry should be dropped.
+        mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Email.TYPE, Email.TYPE_OTHER);
+        mockNameValues.put(Email.ADDRESS, "address4");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+        RawContactDelta newState = new RawContactDelta();
+        RawContactModifier.migrateGenericWithTypeColumn(oldState, newState, kind);
+
+        List<ValuesDelta> list = newState.getMimeEntries(Email.CONTENT_ITEM_TYPE);
+        assertNotNull(list);
+        assertEquals(3, list.size());
+
+        ContentValues outputValues = list.get(0).getAfter();
+        assertEquals(Email.TYPE_CUSTOM, outputValues.getAsInteger(Email.TYPE).intValue());
+        assertEquals("custom_type", outputValues.getAsString(Email.LABEL));
+        assertEquals("address1", outputValues.getAsString(Email.ADDRESS));
+
+        outputValues = list.get(1).getAfter();
+        assertEquals(Email.TYPE_HOME, outputValues.getAsInteger(Email.TYPE).intValue());
+        assertEquals("address2", outputValues.getAsString(Email.ADDRESS));
+
+        outputValues = list.get(2).getAfter();
+        assertEquals(Email.TYPE_WORK, outputValues.getAsInteger(Email.TYPE).intValue());
+        assertEquals("address3", outputValues.getAsString(Email.ADDRESS));
+    }
+
+    public void testMigrateImFromGoogleToExchange() {
+        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+        DataKind kind = newAccountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE);
+
+        RawContactDelta oldState = new RawContactDelta();
+        ContentValues mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+        // Exchange doesn't support TYPE_HOME
+        mockNameValues.put(Im.TYPE, Im.TYPE_HOME);
+        mockNameValues.put(Im.PROTOCOL, Im.PROTOCOL_JABBER);
+        mockNameValues.put(Im.DATA, "im1");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+        mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+        // Exchange doesn't support TYPE_WORK
+        mockNameValues.put(Im.TYPE, Im.TYPE_WORK);
+        mockNameValues.put(Im.PROTOCOL, Im.PROTOCOL_YAHOO);
+        mockNameValues.put(Im.DATA, "im2");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+        mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Im.TYPE, Im.TYPE_OTHER);
+        mockNameValues.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
+        mockNameValues.put(Im.CUSTOM_PROTOCOL, "custom_protocol");
+        mockNameValues.put(Im.DATA, "im3");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+        // Exchange can have up to 3 IM entries. This 4th entry should be dropped.
+        mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Im.TYPE, Im.TYPE_OTHER);
+        mockNameValues.put(Im.PROTOCOL, Im.PROTOCOL_GOOGLE_TALK);
+        mockNameValues.put(Im.DATA, "im4");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+        RawContactDelta newState = new RawContactDelta();
+        RawContactModifier.migrateGenericWithTypeColumn(oldState, newState, kind);
+
+        List<ValuesDelta> list = newState.getMimeEntries(Im.CONTENT_ITEM_TYPE);
+        assertNotNull(list);
+        assertEquals(3, list.size());
+
+        assertNotNull(kind.defaultValues.getAsInteger(Im.TYPE));
+
+        int defaultType = kind.defaultValues.getAsInteger(Im.TYPE);
+
+        ContentValues outputValues = list.get(0).getAfter();
+        // HOME should become default type.
+        assertEquals(defaultType, outputValues.getAsInteger(Im.TYPE).intValue());
+        assertEquals(Im.PROTOCOL_JABBER, outputValues.getAsInteger(Im.PROTOCOL).intValue());
+        assertEquals("im1", outputValues.getAsString(Im.DATA));
+
+        outputValues = list.get(1).getAfter();
+        assertEquals(defaultType, outputValues.getAsInteger(Im.TYPE).intValue());
+        assertEquals(Im.PROTOCOL_YAHOO, outputValues.getAsInteger(Im.PROTOCOL).intValue());
+        assertEquals("im2", outputValues.getAsString(Im.DATA));
+
+        outputValues = list.get(2).getAfter();
+        assertEquals(defaultType, outputValues.getAsInteger(Im.TYPE).intValue());
+        assertEquals(Im.PROTOCOL_CUSTOM, outputValues.getAsInteger(Im.PROTOCOL).intValue());
+        assertEquals("custom_protocol", outputValues.getAsString(Im.CUSTOM_PROTOCOL));
+        assertEquals("im3", outputValues.getAsString(Im.DATA));
+    }
+
+    public void testMigratePhoneFromGoogleToExchange() {
+        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+        DataKind kind = newAccountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+
+        // Create 5 numbers.
+        // - "1" -- HOME
+        // - "2" -- WORK
+        // - "3" -- CUSTOM
+        // - "4" -- WORK
+        // - "5" -- WORK_MOBILE
+        // Then we convert it to Exchange account type.
+        // - "1" -- HOME
+        // - "2" -- WORK
+        // - "3" -- Because CUSTOM is not supported, it'll be changed to the default, MOBILE
+        // - "4" -- WORK
+        // - "5" -- WORK_MOBILE not suppoted again, so will be MOBILE.
+        // But then, Exchange doesn't support multiple MOBILE numbers, so "5" will be removed.
+        // i.e. the result will be:
+        // - "1" -- HOME
+        // - "2" -- WORK
+        // - "3" -- MOBILE
+        // - "4" -- WORK
+
+        RawContactDelta oldState = new RawContactDelta();
+        ContentValues mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Phone.TYPE, Phone.TYPE_HOME);
+        mockNameValues.put(Phone.NUMBER, "1");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+        mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Phone.TYPE, Phone.TYPE_WORK);
+        mockNameValues.put(Phone.NUMBER, "2");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+        mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        // Exchange doesn't support this type. Default to MOBILE
+        mockNameValues.put(Phone.TYPE, Phone.TYPE_CUSTOM);
+        mockNameValues.put(Phone.LABEL, "custom_type");
+        mockNameValues.put(Phone.NUMBER, "3");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+        mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Phone.TYPE, Phone.TYPE_WORK);
+        mockNameValues.put(Phone.NUMBER, "4");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+        mockNameValues = new ContentValues();
+
+        mockNameValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Phone.TYPE, Phone.TYPE_WORK_MOBILE);
+        mockNameValues.put(Phone.NUMBER, "5");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+        RawContactDelta newState = new RawContactDelta();
+        RawContactModifier.migrateGenericWithTypeColumn(oldState, newState, kind);
+
+        List<ValuesDelta> list = newState.getMimeEntries(Phone.CONTENT_ITEM_TYPE);
+        assertNotNull(list);
+        assertEquals(4, list.size());
+
+        int defaultType = Phone.TYPE_MOBILE;
+
+        ContentValues outputValues = list.get(0).getAfter();
+        assertEquals(Phone.TYPE_HOME, outputValues.getAsInteger(Phone.TYPE).intValue());
+        assertEquals("1", outputValues.getAsString(Phone.NUMBER));
+        outputValues = list.get(1).getAfter();
+        assertEquals(Phone.TYPE_WORK, outputValues.getAsInteger(Phone.TYPE).intValue());
+        assertEquals("2", outputValues.getAsString(Phone.NUMBER));
+        outputValues = list.get(2).getAfter();
+        assertEquals(defaultType, outputValues.getAsInteger(Phone.TYPE).intValue());
+        assertNull(outputValues.getAsInteger(Phone.LABEL));
+        assertEquals("3", outputValues.getAsString(Phone.NUMBER));
+        outputValues = list.get(3).getAfter();
+        assertEquals(Phone.TYPE_WORK, outputValues.getAsInteger(Phone.TYPE).intValue());
+        assertEquals("4", outputValues.getAsString(Phone.NUMBER));
+    }
+
+    public void testMigrateOrganizationFromGoogleToExchange() {
+        AccountType oldAccountType = new GoogleAccountType(getContext(), "");
+        AccountType newAccountType = new ExchangeAccountType(getContext(), "", EXCHANGE_ACCT_TYPE);
+        DataKind kind = newAccountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
+
+        RawContactDelta oldState = new RawContactDelta();
+        ContentValues mockNameValues = new ContentValues();
+        mockNameValues.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+        mockNameValues.put(Organization.COMPANY, "company1");
+        mockNameValues.put(Organization.DEPARTMENT, "department1");
+        oldState.addEntry(ValuesDelta.fromAfter(mockNameValues));
+
+        RawContactDelta newState = new RawContactDelta();
+        RawContactModifier.migrateGenericWithoutTypeColumn(oldState, newState, kind);
+
+        List<ValuesDelta> list = newState.getMimeEntries(Organization.CONTENT_ITEM_TYPE);
+        assertNotNull(list);
+        assertEquals(1, list.size());
+
+        ContentValues outputValues = list.get(0).getAfter();
+        assertEquals("company1", outputValues.getAsString(Organization.COMPANY));
+        assertEquals("department1", outputValues.getAsString(Organization.DEPARTMENT));
+    }
+}
diff --git a/tests/src/com/android/contacts/model/RawContactTest.java b/tests/src/com/android/contacts/model/RawContactTest.java
new file mode 100644
index 0000000..d9f05c9
--- /dev/null
+++ b/tests/src/com/android/contacts/model/RawContactTest.java
@@ -0,0 +1,119 @@
+/*
+ * 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.model;
+
+import android.content.ContentValues;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit test for {@link RawContact}.
+ */
+@SmallTest
+public class RawContactTest extends TestCase {
+
+    private RawContact buildRawContact() {
+        final ContentValues values = new ContentValues();
+        values.put("key1", "value1");
+        values.put("key2", "value2");
+
+        final ContentValues dataItem = new ContentValues();
+        dataItem.put("key3", "value3");
+        dataItem.put("key4", "value4");
+
+        final RawContact contact = new RawContact(values);
+        contact.addDataItemValues(dataItem);
+
+        return contact;
+    }
+
+    private RawContact buildRawContact2() {
+        final ContentValues values = new ContentValues();
+        values.put("key11", "value11");
+        values.put("key22", "value22");
+
+        final ContentValues dataItem = new ContentValues();
+        dataItem.put("key33", "value33");
+        dataItem.put("key44", "value44");
+
+        final RawContact contact = new RawContact(values);
+        contact.addDataItemValues(dataItem);
+
+        return contact;
+    }
+
+    public void testNotEquals() {
+        final RawContact one = buildRawContact();
+        final RawContact two = buildRawContact2();
+        assertFalse(one.equals(two));
+    }
+
+    public void testEquals() {
+        assertEquals(buildRawContact(), buildRawContact());
+    }
+
+    public void testParcelable() {
+        assertParcelableEquals(buildRawContact());
+    }
+
+    private RawContact.NamedDataItem buildNamedDataItem() {
+        final ContentValues values = new ContentValues();
+        values.put("key1", "value1");
+        values.put("key2", "value2");
+        final Uri uri = Uri.fromParts("content:", "ssp", "fragment");
+
+        return new RawContact.NamedDataItem(uri, values);
+    }
+
+    private RawContact.NamedDataItem buildNamedDataItem2() {
+        final ContentValues values = new ContentValues();
+        values.put("key11", "value11");
+        values.put("key22", "value22");
+        final Uri uri = Uri.fromParts("content:", "blah", "blah");
+
+        return new RawContact.NamedDataItem(uri, values);
+    }
+
+    public void testNamedDataItemEquals() {
+        assertEquals(buildNamedDataItem(), buildNamedDataItem());
+    }
+
+    public void testNamedDataItemNotEquals() {
+        assertFalse(buildNamedDataItem().equals(buildNamedDataItem2()));
+    }
+
+    public void testNamedDataItemParcelable() {
+        assertParcelableEquals(buildNamedDataItem());
+    }
+
+    private void assertParcelableEquals(Parcelable parcelable) {
+        final Parcel parcel = Parcel.obtain();
+        try {
+            parcel.writeParcelable(parcelable, 0);
+            parcel.setDataPosition(0);
+
+            Parcelable out = parcel.readParcelable(parcelable.getClass().getClassLoader());
+            assertEquals(parcelable, out);
+        } finally {
+            parcel.recycle();
+        }
+    }
+}
diff --git a/tests/src/com/android/contacts/model/SimContactTests.java b/tests/src/com/android/contacts/model/SimContactTests.java
new file mode 100644
index 0000000..d234e42
--- /dev/null
+++ b/tests/src/com/android/contacts/model/SimContactTests.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.model;
+
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assert.assertThat;
+
+import android.os.Parcel;
+import android.support.test.filters.SmallTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+@SmallTest
+@RunWith(AndroidJUnit4.class)
+public class SimContactTests {
+    @Test
+    public void parcelRoundtrip() {
+        assertParcelsCorrectly(new SimContact(1, "name1", "phone1",
+                new String[] { "email1a", "email1b" }));
+        assertParcelsCorrectly(new SimContact(2, "name2", "phone2", null));
+        assertParcelsCorrectly(new SimContact(3, "name3", null,
+                new String[] { "email3" }));
+        assertParcelsCorrectly(new SimContact(4, null, "phone4",
+                new String[] { "email4" }));
+        assertParcelsCorrectly(new SimContact(5, null, null, null));
+        assertParcelsCorrectly(new SimContact(6, "name6", "phone6",
+                new String[0]));
+    }
+
+    private void assertParcelsCorrectly(SimContact contact) {
+        final Parcel parcel = Parcel.obtain();
+        parcel.writeParcelable(contact, 0);
+        parcel.setDataPosition(0);
+        final SimContact unparceled = parcel.readParcelable(
+                SimContact.class.getClassLoader());
+        assertThat(unparceled, equalTo(contact));
+        parcel.recycle();
+    }
+}
diff --git a/tests/src/com/android/contacts/model/ValuesDeltaTests.java b/tests/src/com/android/contacts/model/ValuesDeltaTests.java
new file mode 100644
index 0000000..b7161d7
--- /dev/null
+++ b/tests/src/com/android/contacts/model/ValuesDeltaTests.java
@@ -0,0 +1,89 @@
+/*
+ * 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.model;
+
+import android.content.ContentProviderOperation.Builder;
+import android.content.ContentValues;
+import android.os.Build;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.Data;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.compat.CompatUtils;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for  {@link ValuesDelta}. These tests
+ * focus on passing changes across {@link android.os.Parcel}, and verifying that they
+ * correctly build expected "diff" operations.
+ */
+@SmallTest
+public class ValuesDeltaTests extends TestCase {
+
+    public static final long TEST_PHONE_ID = 24;
+
+    public static final String TEST_PHONE_NUMBER_1 = "218-555-1111";
+    public static final String TEST_PHONE_NUMBER_2 = "218-555-2222";
+
+    public void testValuesDiffInsert() {
+        final ContentValues after = new ContentValues();
+        after.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+
+        final ValuesDelta values = ValuesDelta.fromAfter(after);
+
+        // Should produce an insert action
+        final BuilderWrapper builderWrapper = values.buildDiffWrapper(Data.CONTENT_URI);
+        final boolean isInsert = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
+                ? builderWrapper.getBuilder().build().isInsert()
+                : builderWrapper.getType() == CompatUtils.TYPE_INSERT;
+        assertTrue("Didn't produce insert action", isInsert);
+    }
+
+    /**
+     * Test that {@link ValuesDelta#buildDiff(android.net.Uri)} is correctly
+     * built for insert, update, and delete cases. Note this only tests behavior
+     * for individual {@link Data} rows.
+     */
+    public void testValuesDiffNone() {
+        final ContentValues before = new ContentValues();
+        before.put(Data._ID, TEST_PHONE_ID);
+        before.put(Phone.NUMBER, TEST_PHONE_NUMBER_1);
+
+        final ValuesDelta values = ValuesDelta.fromBefore(before);
+
+        // None action shouldn't produce a builder
+        final Builder builder = values.buildDiff(Data.CONTENT_URI);
+        assertNull("None action produced a builder", builder);
+    }
+
+    public void testValuesDiffUpdate() {
+        final ContentValues before = new ContentValues();
+        before.put(Data._ID, TEST_PHONE_ID);
+        before.put(Phone.NUMBER, TEST_PHONE_NUMBER_1);
+
+        final ValuesDelta values = ValuesDelta.fromBefore(before);
+        values.put(Phone.NUMBER, TEST_PHONE_NUMBER_2);
+
+        // Should produce an update action
+        final BuilderWrapper builderWrapper = values.buildDiffWrapper(Data.CONTENT_URI);
+        final boolean isUpdate = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
+                ? builderWrapper.getBuilder().build().isUpdate()
+                : builderWrapper.getType() == CompatUtils.TYPE_UPDATE;
+        assertTrue("Didn't produce update action", isUpdate);
+    }
+}
diff --git a/tests/src/com/android/contacts/model/account/AccountTypeTest.java b/tests/src/com/android/contacts/model/account/AccountTypeTest.java
new file mode 100644
index 0000000..15aaa18
--- /dev/null
+++ b/tests/src/com/android/contacts/model/account/AccountTypeTest.java
@@ -0,0 +1,133 @@
+/*
+ * 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.model.account;
+
+import android.content.Context;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.common.tests.R;
+
+/**
+ * Test case for {@link AccountType}.
+ *
+ * adb shell am instrument -w -e class com.android.contacts.model.AccountTypeTest \
+       com.android.contacts.tests/android.test.InstrumentationTestRunner
+ */
+@SmallTest
+public class AccountTypeTest extends InstrumentationTestCase {
+    public void testGetResourceText() {
+        // In this test we use the test package itself as an external package.
+        final String packageName = getInstrumentation().getContext().getPackageName();
+
+        final Context c = getInstrumentation().getTargetContext();
+        final String DEFAULT = "ABC";
+
+        // Package name null, resId -1, use the default
+        assertEquals(DEFAULT, AccountType.getResourceText(c, null, -1, DEFAULT));
+
+        // Resource ID -1, use the default
+        assertEquals(DEFAULT, AccountType.getResourceText(c, packageName, -1, DEFAULT));
+
+        // Load from an external package.  (here, we use this test package itself)
+        final int externalResID = R.string.test_string;
+        assertEquals(getInstrumentation().getContext().getString(externalResID),
+                AccountType.getResourceText(c, packageName, externalResID, DEFAULT));
+
+        // Load from the contacts package itself.
+        final int internalResId = com.android.contacts.R.string.contactsList;
+        assertEquals(c.getString(internalResId),
+                AccountType.getResourceText(c, null, internalResId, DEFAULT));
+    }
+
+    /**
+     * Verify if {@link AccountType#getInviteContactActionLabel} correctly gets the resource ID
+     * from {@link AccountType#getInviteContactActionResId}
+     */
+    public void testGetInviteContactActionLabel() {
+        final String packageName = getInstrumentation().getContext().getPackageName();
+        final Context c = getInstrumentation().getTargetContext();
+
+        final int externalResID = R.string.test_string;
+
+        AccountType accountType = new AccountType() {
+            {
+                resourcePackageName = packageName;
+                syncAdapterPackageName = packageName;
+            }
+            @Override protected int getInviteContactActionResId() {
+                return externalResID;
+            }
+
+            @Override public boolean isGroupMembershipEditable() {
+                return false;
+            }
+
+            @Override public boolean areContactsWritable() {
+                return false;
+            }
+        };
+
+        assertEquals(getInstrumentation().getContext().getString(externalResID),
+                accountType.getInviteContactActionLabel(c));
+    }
+
+    public void testDisplayLabelComparator() {
+        final AccountTypeForDisplayLabelTest EMPTY = new AccountTypeForDisplayLabelTest("");
+        final AccountTypeForDisplayLabelTest NULL = new AccountTypeForDisplayLabelTest(null);
+        final AccountTypeForDisplayLabelTest AA = new AccountTypeForDisplayLabelTest("aa");
+        final AccountTypeForDisplayLabelTest BBB = new AccountTypeForDisplayLabelTest("bbb");
+        final AccountTypeForDisplayLabelTest C = new AccountTypeForDisplayLabelTest("c");
+
+        assertTrue(compareDisplayLabel(AA, BBB) < 0);
+        assertTrue(compareDisplayLabel(BBB, C) < 0);
+        assertTrue(compareDisplayLabel(AA, C) < 0);
+        assertTrue(compareDisplayLabel(AA, AA) == 0);
+        assertTrue(compareDisplayLabel(BBB, AA) > 0);
+
+        assertTrue(compareDisplayLabel(EMPTY, AA) < 0);
+        assertTrue(compareDisplayLabel(EMPTY, NULL) == 0);
+    }
+
+    private int compareDisplayLabel(AccountType lhs, AccountType rhs) {
+        return new AccountType.DisplayLabelComparator(
+                getInstrumentation().getTargetContext()).compare(lhs, rhs);
+    }
+
+    private class AccountTypeForDisplayLabelTest extends AccountType {
+        private final String mDisplayLabel;
+
+        public AccountTypeForDisplayLabelTest(String displayLabel) {
+            mDisplayLabel = displayLabel;
+        }
+
+        @Override
+        public CharSequence getDisplayLabel(Context context) {
+            return mDisplayLabel;
+        }
+
+        @Override
+        public boolean isGroupMembershipEditable() {
+            return false;
+        }
+
+        @Override
+        public boolean areContactsWritable() {
+            return false;
+        }
+    }
+}
diff --git a/tests/src/com/android/contacts/model/account/ExternalAccountTypeTest.java b/tests/src/com/android/contacts/model/account/ExternalAccountTypeTest.java
new file mode 100644
index 0000000..24b01d5
--- /dev/null
+++ b/tests/src/com/android/contacts/model/account/ExternalAccountTypeTest.java
@@ -0,0 +1,249 @@
+/*
+ * 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.model.account;
+
+import android.content.Context;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.test.suitebuilder.annotation.Suppress;
+
+import com.android.contacts.common.tests.R;
+import com.android.contacts.model.dataitem.DataKind;
+
+import com.google.common.base.Objects;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Test case for {@link com.android.contacts.model.account.ExternalAccountType}.
+ *
+ * adb shell am instrument -w -e class com.android.contacts.model.ExternalAccountTypeTest \
+       com.android.contacts.tests/android.test.InstrumentationTestRunner
+ */
+@SmallTest
+public class ExternalAccountTypeTest extends InstrumentationTestCase {
+    private static ArrayList<String> mDefaultMimetypes = new ArrayList<>(Arrays.asList(
+            StructuredName.CONTENT_ITEM_TYPE,
+            DataKind.PSEUDO_MIME_TYPE_NAME,
+            DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME,
+            Photo.CONTENT_ITEM_TYPE
+    ));
+
+    @Suppress
+    public void testResolveExternalResId() {
+        final Context c = getInstrumentation().getTargetContext();
+        // In this test we use the test package itself as an external package.
+        final String packageName = getInstrumentation().getContext().getPackageName();
+
+        // Resource name empty.
+        assertEquals(-1, ExternalAccountType.resolveExternalResId(c, null, packageName, ""));
+        assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "", packageName, ""));
+
+        // Name doesn't begin with '@'
+        assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "x", packageName, ""));
+
+        // Invalid resource name
+        assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "@", packageName, ""));
+        assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "@a", packageName, ""));
+        assertEquals(-1, ExternalAccountType.resolveExternalResId(c, "@a/b", packageName, ""));
+
+        // Valid resource name
+        assertEquals(R.string.test_string, ExternalAccountType.resolveExternalResId(c,
+                "@string/test_string", packageName, ""));
+    }
+
+    public void testIsFromTestApp() {
+        assertTrue(ExternalAccountType.isFromTestApp("com.google.android.contacts.tests"));
+        assertFalse(ExternalAccountType.isFromTestApp("com.google.android.contacts"));
+    }
+
+    /**
+     * Initialize with an invalid package name and see if type will be initialized, but empty.
+     */
+    public void testNoPackage() {
+        final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
+                "!!!no such package name!!!", false);
+        assertTrue(type.isInitialized());
+    }
+
+    /**
+     * Initialize with the test package itself and see if EditSchema is correctly parsed.
+     */
+    @Suppress
+    public void testEditSchema() {
+        final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
+                getInstrumentation().getContext().getPackageName(), false);
+
+        assertTrue(type.isInitialized());
+
+        // Let's just check if the DataKinds are registered.
+        assertNotNull(type.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE));
+        assertNotNull(type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_NAME));
+        assertNotNull(type.getKindForMimetype(DataKind.PSEUDO_MIME_TYPE_PHONETIC_NAME));
+        assertNotNull(type.getKindForMimetype(Email.CONTENT_ITEM_TYPE));
+        assertNotNull(type.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE));
+        assertNotNull(type.getKindForMimetype(Im.CONTENT_ITEM_TYPE));
+        assertNotNull(type.getKindForMimetype(Organization.CONTENT_ITEM_TYPE));
+        assertNotNull(type.getKindForMimetype(Photo.CONTENT_ITEM_TYPE));
+        assertNotNull(type.getKindForMimetype(Note.CONTENT_ITEM_TYPE));
+        assertNotNull(type.getKindForMimetype(Website.CONTENT_ITEM_TYPE));
+        assertNotNull(type.getKindForMimetype(SipAddress.CONTENT_ITEM_TYPE));
+        assertNotNull(type.getKindForMimetype(Event.CONTENT_ITEM_TYPE));
+        assertNotNull(type.getKindForMimetype(Relation.CONTENT_ITEM_TYPE));
+    }
+
+    /**
+     * Initialize with "contacts_fallback.xml" and compare the DataKinds to those of
+     * {@link com.android.contacts.model.account.FallbackAccountType}.
+     */
+    public void testEditSchema_fallback() {
+        final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
+                getInstrumentation().getContext().getPackageName(), false,
+                getInstrumentation().getContext().getResources().getXml(R.xml.contacts_fallback)
+                );
+
+        assertTrue(type.isInitialized());
+
+        // Create a fallback type with the same resource package name, and compare all the data
+        // kinds to its.
+        final AccountType reference = FallbackAccountType.createWithPackageNameForTest(
+                getInstrumentation().getTargetContext(), type.resourcePackageName);
+
+        assertsDataKindEquals(reference.getSortedDataKinds(), type.getSortedDataKinds());
+    }
+
+    public void testEditSchema_mustHaveChecks() {
+        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_base, true);
+        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_photo, false);
+        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name, false);
+        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr2, false);
+        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr3, false);
+        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr4, false);
+        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr5, false);
+        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr6, false);
+        checkEditSchema_mustHaveChecks(R.xml.missing_contacts_name_attr7, false);
+    }
+
+    private void checkEditSchema_mustHaveChecks(int xmlResId, boolean expectInitialized) {
+        final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
+                getInstrumentation().getContext().getPackageName(), false,
+                getInstrumentation().getContext().getResources().getXml(xmlResId)
+                );
+
+        assertEquals(expectInitialized, type.isInitialized());
+    }
+
+    /**
+     * Initialize with "contacts_readonly.xml" and see if all data kinds are correctly registered.
+     */
+    public void testReadOnlyDefinition() {
+        final ExternalAccountType type = new ExternalAccountType(getInstrumentation().getTargetContext(),
+                getInstrumentation().getContext().getPackageName(), false,
+                getInstrumentation().getContext().getResources().getXml(R.xml.contacts_readonly)
+                );
+        assertTrue(type.isInitialized());
+
+        // Shouldn't have a "null" mimetype.
+        assertTrue(type.getKindForMimetype(null) == null);
+
+        // 3 kinds are defined in XML and the rest are added by default.
+        assertEquals(3 + mDefaultMimetypes.size(), type.getSortedDataKinds().size());
+
+        // Check for the default kinds.
+        for (String mimetype : mDefaultMimetypes) {
+            assertNotNull(type.getKindForMimetype(mimetype));
+        }
+
+        // Check for type specific kinds.
+        DataKind kind = type.getKindForMimetype("vnd.android.cursor.item/a.b.c");
+        assertNotNull(kind);
+        // No check for icon -- we actually just ignore it.
+        assertEquals("data1", ((BaseAccountType.SimpleInflater) kind.actionHeader)
+                .getColumnNameForTest());
+        assertEquals("data2", ((BaseAccountType.SimpleInflater) kind.actionBody)
+                .getColumnNameForTest());
+
+        kind = type.getKindForMimetype("vnd.android.cursor.item/d.e.f");
+        assertNotNull(kind);
+        assertEquals("data3", ((BaseAccountType.SimpleInflater) kind.actionHeader)
+                .getColumnNameForTest());
+        assertEquals("data4", ((BaseAccountType.SimpleInflater) kind.actionBody)
+                .getColumnNameForTest());
+
+        kind = type.getKindForMimetype("vnd.android.cursor.item/xyz");
+        assertNotNull(kind);
+        assertEquals("data5", ((BaseAccountType.SimpleInflater) kind.actionHeader)
+                .getColumnNameForTest());
+        assertEquals("data6", ((BaseAccountType.SimpleInflater) kind.actionBody)
+                .getColumnNameForTest());
+    }
+
+    private static void assertsDataKindEquals(List<DataKind> expectedKinds,
+            List<DataKind> actualKinds) {
+        final int count = Math.max(actualKinds.size(), expectedKinds.size());
+        for (int i = 0; i < count; i++) {
+            String actual =  actualKinds.size() > i ? actualKinds.get(i).toString() : "(n/a)";
+            String expected =  expectedKinds.size() > i ? expectedKinds.get(i).toString() : "(n/a)";
+
+            // Because assertEquals()'s output is not very friendly when comparing two similar
+            // strings, we manually do the check.
+            if (!Objects.equal(actual, expected)) {
+                final int commonPrefixEnd = findCommonPrefixEnd(actual, expected);
+                fail("Kind #" + i
+                        + "\n[Actual]\n" + insertMarkerAt(actual, commonPrefixEnd)
+                        + "\n[Expected]\n" + insertMarkerAt(expected, commonPrefixEnd));
+            }
+        }
+    }
+
+    private static int findCommonPrefixEnd(String s1, String s2) {
+        int i = 0;
+        for (;;) {
+            final boolean s1End = (s1.length() <= i);
+            final boolean s2End = (s2.length() <= i);
+            if (s1End || s2End) {
+                return i;
+            }
+            if (s1.charAt(i) != s2.charAt(i)) {
+                return i;
+            }
+            i++;
+        }
+    }
+
+    private static String insertMarkerAt(String s, int position) {
+        final String MARKER = "***";
+        if (position > s.length()) {
+            return s + MARKER;
+        } else {
+            return new StringBuilder(s).insert(position, MARKER).toString();
+        }
+    }
+}
diff --git a/tests/src/com/android/contacts/model/dataitem/DataItemTests.java b/tests/src/com/android/contacts/model/dataitem/DataItemTests.java
new file mode 100644
index 0000000..7b60beb
--- /dev/null
+++ b/tests/src/com/android/contacts/model/dataitem/DataItemTests.java
@@ -0,0 +1,457 @@
+/*
+ * 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.model.dataitem;
+
+import android.content.ContentValues;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.Event;
+import android.provider.ContactsContract.CommonDataKinds.Im;
+import android.provider.ContactsContract.CommonDataKinds.Nickname;
+import android.provider.ContactsContract.CommonDataKinds.Note;
+import android.provider.ContactsContract.CommonDataKinds.Organization;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Relation;
+import android.provider.ContactsContract.CommonDataKinds.SipAddress;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
+import android.provider.ContactsContract.CommonDataKinds.Website;
+import android.provider.ContactsContract.Contacts.Data;
+import android.provider.ContactsContract.Contacts.Entity;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.Collapser;
+import com.android.contacts.model.account.AccountType.EditType;
+import com.android.contacts.model.account.BaseAccountType;
+import com.android.contacts.model.account.GoogleAccountType;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Test case for {@link DataItem}.
+ */
+@SmallTest
+public class DataItemTests extends AndroidTestCase {
+
+    private ContentValues mValues1;
+    private ContentValues mValues2;
+    private ContentValues mValues3;
+    private ContentValues mValues4;
+    private GoogleAccountType mGoogleAccountType;
+
+    @Override
+    protected void setUp() {
+        mValues1 = new ContentValues();
+        mValues2 = new ContentValues();
+        mValues3 = new ContentValues();
+        mValues4 = new ContentValues();
+
+        mValues1.put(Data._ID, 1);
+        mValues2.put(Data._ID, 2);
+        mValues3.put(Data._ID, 3);
+        mValues4.put(Data._ID, 4);
+
+        mGoogleAccountType = new GoogleAccountType(getContext(), "packageName");
+    }
+
+    private List<DataItem> createDataItemsAndCollapse(DataKind kind, ContentValues... values) {
+        final List<DataItem> dataList = new ArrayList<>(values.length);
+        for (ContentValues value : values) {
+            final DataItem data = DataItem.createFrom(value);
+            data.setDataKind(kind);
+            dataList.add(data);
+        }
+        Collapser.collapseList(dataList, getContext());
+        return dataList;
+    }
+
+    public void testDataItemCollapsing_genericDataItemFields() {
+        mValues1.put(Data.IS_SUPER_PRIMARY, 1);
+        mValues2.put(Data.IS_PRIMARY, 0);
+
+        mValues1.put(Entity.TIMES_USED, 5);
+        mValues2.put(Entity.TIMES_USED, 4);
+
+        mValues1.put(Entity.LAST_TIME_USED, 555);
+        mValues2.put(Entity.LAST_TIME_USED, 999);
+
+        final DataKind kind = new DataKind("test.mimetype", 0, 0, false);
+        kind.actionBody = new BaseAccountType.SimpleInflater(0);
+        kind.typeList = new ArrayList<>();
+        kind.typeList.add(new EditType(1, -1));
+        kind.typeList.add(new EditType(2, -1));
+        kind.typeColumn = Data.DATA2;
+
+        mValues1.put(kind.typeColumn, 2);
+        mValues2.put(kind.typeColumn, 1);
+
+        final List<DataItem> dataList = createDataItemsAndCollapse(kind, mValues1, mValues2);
+
+        assertEquals(1, dataList.size());
+        assertEquals(true, dataList.get(0).isSuperPrimary());
+        assertEquals(true, dataList.get(0).isPrimary());
+        assertEquals(9, (int) dataList.get(0).getTimesUsed());
+        assertEquals(999L, (long) dataList.get(0).getLastTimeUsed());
+        assertEquals(1, dataList.get(0).getKindTypeColumn(kind));
+    }
+
+    public void testDataItemCollapsing_email() {
+        final String email1 = "email1@google.com";
+        final String email2 = "email2@google.com";
+
+        mValues1.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+        mValues2.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+        mValues3.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
+
+        mValues1.put(Email.ADDRESS, email1);
+        mValues2.put(Email.ADDRESS, email1);
+        mValues3.put(Email.ADDRESS, email2);
+
+        mValues1.put(Email.TYPE, Email.TYPE_MOBILE);
+        mValues2.put(Email.TYPE, Email.TYPE_HOME);
+        mValues3.put(Email.TYPE, Email.TYPE_WORK);
+
+        final DataKind kind = mGoogleAccountType.getKindForMimetype(Email.CONTENT_ITEM_TYPE);
+
+        final List<DataItem> dataList =
+                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+        assertEquals(2, dataList.size());
+        assertEquals(email1, ((EmailDataItem) dataList.get(0)).getAddress());
+        assertEquals(email2, ((EmailDataItem) dataList.get(1)).getAddress());
+        assertEquals(Math.min(Email.TYPE_MOBILE, Email.TYPE_HOME),
+                ((EmailDataItem) dataList.get(0)).getKindTypeColumn(kind));
+    }
+
+    public void testDataItemCollapsing_event() {
+        final String date1 = "2014-01-01";
+        final String date2 = "2014-02-02";
+        final String customLabel1 = "custom label1";
+        final String customLabel2 = "custom label2";
+
+        mValues1.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+        mValues2.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+        mValues3.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+        mValues4.put(Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
+
+        mValues1.put(Event.START_DATE, date1);
+        mValues2.put(Event.START_DATE, date1);
+        mValues3.put(Event.START_DATE, date1);
+        mValues4.put(Event.START_DATE, date2);
+
+        mValues1.put(Event.TYPE, Event.TYPE_CUSTOM);
+        mValues2.put(Event.TYPE, Event.TYPE_CUSTOM);
+        mValues3.put(Event.TYPE, Event.TYPE_CUSTOM);
+        mValues4.put(Event.TYPE, Event.TYPE_ANNIVERSARY);
+
+        mValues1.put(Event.LABEL, customLabel1);
+        mValues2.put(Event.LABEL, customLabel1);
+        mValues3.put(Event.LABEL, customLabel2);
+
+        final DataKind kind = mGoogleAccountType.getKindForMimetype(Event.CONTENT_ITEM_TYPE);
+
+        final List<DataItem> dataList =
+                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
+
+        assertEquals(3, dataList.size());
+        assertEquals(customLabel1, ((EventDataItem) dataList.get(0)).getLabel());
+        assertEquals(customLabel2, ((EventDataItem) dataList.get(1)).getLabel());
+        assertEquals(date2, ((EventDataItem) dataList.get(2)).getStartDate());
+    }
+
+    public void testDataItemCollapsing_im() {
+        final String address1 = "address 1";
+        final String address2 = "address 2";
+        final String customProtocol1 = "custom 1";
+        final String customProtocol2 = "custom 2";
+
+        mValues1.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+        mValues2.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+        mValues3.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+        mValues4.put(Data.MIMETYPE, Im.CONTENT_ITEM_TYPE);
+
+        mValues1.put(Im.DATA, address1);
+        mValues2.put(Im.DATA, address1);
+        mValues3.put(Im.DATA, address1);
+        mValues4.put(Im.DATA, address2);
+
+        mValues1.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
+        mValues2.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
+        mValues3.put(Im.PROTOCOL, Im.PROTOCOL_CUSTOM);
+        mValues4.put(Im.PROTOCOL, Im.PROTOCOL_AIM);
+
+        mValues1.put(Im.CUSTOM_PROTOCOL, customProtocol1);
+        mValues2.put(Im.CUSTOM_PROTOCOL, customProtocol1);
+        mValues3.put(Im.CUSTOM_PROTOCOL, customProtocol2);
+
+        final DataKind kind = mGoogleAccountType.getKindForMimetype(Im.CONTENT_ITEM_TYPE);
+
+        final List<DataItem> dataList =
+                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
+
+        assertEquals(3, dataList.size());
+        assertEquals(address1, ((ImDataItem) dataList.get(0)).getData());
+        assertEquals(address1, ((ImDataItem) dataList.get(1)).getData());
+        assertEquals(address2, ((ImDataItem) dataList.get(2)).getData());
+
+        assertEquals(customProtocol1, ((ImDataItem) dataList.get(0)).getCustomProtocol());
+        assertEquals(customProtocol2, ((ImDataItem) dataList.get(1)).getCustomProtocol());
+        assertEquals(Im.PROTOCOL_AIM, (int) ((ImDataItem) dataList.get(2)).getProtocol());
+    }
+
+    public void testDataItemCollapsing_nickname() {
+        final String nickname1 = "nickname 1";
+        final String nickname2 = "nickname 2";
+
+        mValues1.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
+        mValues2.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
+        mValues3.put(Data.MIMETYPE, Nickname.CONTENT_ITEM_TYPE);
+
+        mValues1.put(Nickname.NAME, nickname1);
+        mValues2.put(Nickname.NAME, nickname1);
+        mValues3.put(Nickname.NAME, nickname2);
+
+        final DataKind kind = mGoogleAccountType.getKindForMimetype(Nickname.CONTENT_ITEM_TYPE);
+
+        final List<DataItem> dataList =
+                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+        assertEquals(2, dataList.size());
+        assertEquals(nickname1, ((NicknameDataItem) dataList.get(0)).getName());
+        assertEquals(nickname2, ((NicknameDataItem) dataList.get(1)).getName());
+    }
+
+    public void testDataItemCollapsing_note() {
+        final String note1 = "note 1";
+        final String note2 = "note 2";
+
+        mValues1.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
+        mValues2.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
+        mValues3.put(Data.MIMETYPE, Note.CONTENT_ITEM_TYPE);
+
+        mValues1.put(Note.NOTE, note1);
+        mValues2.put(Note.NOTE, note1);
+        mValues3.put(Note.NOTE, note2);
+
+        DataKind kind = mGoogleAccountType.getKindForMimetype(Note.CONTENT_ITEM_TYPE);
+
+        final List<DataItem> dataList =
+                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+        assertEquals(2, dataList.size());
+        assertEquals(note1, ((NoteDataItem) dataList.get(0)).getNote());
+        assertEquals(note2, ((NoteDataItem) dataList.get(1)).getNote());
+    }
+
+    public void testDataItemCollapsing_organization() {
+        final String company1 = "company1";
+        final String company2 = "company2";
+        final String title1 = "title1";
+        final String title2 = "title2";
+
+        mValues1.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+        mValues2.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+        mValues3.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+        mValues4.put(Data.MIMETYPE, Organization.CONTENT_ITEM_TYPE);
+
+        mValues1.put(Organization.COMPANY, company1);
+        mValues2.put(Organization.COMPANY, company1);
+        mValues3.put(Organization.COMPANY, company1);
+        mValues4.put(Organization.COMPANY, company2);
+
+        mValues1.put(Organization.TITLE, title1);
+        mValues2.put(Organization.TITLE, title1);
+        mValues3.put(Organization.TITLE, title2);
+        mValues4.put(Organization.TITLE, title1);
+
+        final DataKind kind =
+                mGoogleAccountType.getKindForMimetype(Organization.CONTENT_ITEM_TYPE);
+
+        final List<DataItem> dataList =
+                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
+
+        assertEquals(3, dataList.size());
+        assertEquals(company1, ((OrganizationDataItem) dataList.get(0)).getCompany());
+        assertEquals(company1, ((OrganizationDataItem) dataList.get(1)).getCompany());
+        assertEquals(company2, ((OrganizationDataItem) dataList.get(2)).getCompany());
+
+        assertEquals(title1, ((OrganizationDataItem) dataList.get(0)).getTitle());
+        assertEquals(title2, ((OrganizationDataItem) dataList.get(1)).getTitle());
+    }
+
+    public void testDataItemCollapsing_phone() {
+        final String phone1 = "111-111-1111";
+        final String phone1a = "1111111111";
+        final String phone2 = "222-222-2222";
+
+        mValues1.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        mValues2.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+        mValues3.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+
+        mValues1.put(Phone.NUMBER, phone1);
+        mValues2.put(Phone.NUMBER, phone1a);
+        mValues3.put(Phone.NUMBER, phone2);
+
+        mValues1.put(Phone.TYPE, Phone.TYPE_MOBILE);
+        mValues2.put(Phone.TYPE, Phone.TYPE_HOME);
+        mValues3.put(Phone.TYPE, Phone.TYPE_WORK);
+
+        final DataKind kind = mGoogleAccountType.getKindForMimetype(Phone.CONTENT_ITEM_TYPE);
+
+        final List<DataItem> dataList =
+                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+        assertEquals(2, dataList.size());
+        assertEquals(phone1, ((PhoneDataItem) dataList.get(0)).getNumber());
+        assertEquals(phone2, ((PhoneDataItem) dataList.get(1)).getNumber());
+        assertEquals(Phone.TYPE_MOBILE,
+                ((PhoneDataItem) dataList.get(0)).getKindTypeColumn(kind));
+    }
+
+    public void testDataItemCollapsing_relation() {
+        final String name1 = "name1";
+        final String name2 = "name2";
+        final String customRelation1 = "custom relation 1";
+        final String customRelation2 = "custom relation 2";
+
+        mValues1.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
+        mValues2.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
+        mValues3.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
+        mValues4.put(Data.MIMETYPE, Relation.CONTENT_ITEM_TYPE);
+
+        mValues1.put(Relation.NAME, name1);
+        mValues2.put(Relation.NAME, name1);
+        mValues3.put(Relation.NAME, name1);
+        mValues4.put(Relation.NAME, name2);
+
+        mValues1.put(Relation.TYPE, Relation.TYPE_CUSTOM);
+        mValues2.put(Relation.TYPE, Relation.TYPE_CUSTOM);
+        mValues3.put(Relation.TYPE, Relation.TYPE_CUSTOM);
+        mValues4.put(Relation.TYPE, Relation.TYPE_BROTHER);
+
+        mValues1.put(Relation.LABEL, customRelation1);
+        mValues2.put(Relation.LABEL, customRelation1);
+        mValues3.put(Relation.LABEL, customRelation2);
+
+        final DataKind kind = mGoogleAccountType.getKindForMimetype(Relation.CONTENT_ITEM_TYPE);
+
+        final List<DataItem> dataList =
+                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3, mValues4);
+
+        assertEquals(3, dataList.size());
+        assertEquals(name1, ((RelationDataItem) dataList.get(0)).getName());
+        assertEquals(name2, ((RelationDataItem) dataList.get(2)).getName());
+
+        assertEquals(customRelation1, ((RelationDataItem) dataList.get(0)).getLabel());
+        assertEquals(customRelation2, ((RelationDataItem) dataList.get(1)).getLabel());
+    }
+
+    public void testDataItemCollapsing_sip() {
+        final String sip1 = "sip 1";
+        final String sip2 = "sip 2";
+
+        mValues1.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
+        mValues2.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
+        mValues3.put(Data.MIMETYPE, SipAddress.CONTENT_ITEM_TYPE);
+
+        mValues1.put(SipAddress.SIP_ADDRESS, sip1);
+        mValues2.put(SipAddress.SIP_ADDRESS, sip1);
+        mValues3.put(SipAddress.SIP_ADDRESS, sip2);
+
+        mValues1.put(SipAddress.TYPE, SipAddress.TYPE_WORK);
+        mValues2.put(SipAddress.TYPE, SipAddress.TYPE_HOME);
+        mValues3.put(SipAddress.TYPE, SipAddress.TYPE_WORK);
+
+        final DataKind kind = mGoogleAccountType.getKindForMimetype(SipAddress.CONTENT_ITEM_TYPE);
+
+        final List<DataItem> dataList =
+                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+        assertEquals(2, dataList.size());
+        assertEquals(sip1, ((SipAddressDataItem) dataList.get(0)).getSipAddress());
+        assertEquals(sip2, ((SipAddressDataItem) dataList.get(1)).getSipAddress());
+    }
+
+    public void testDataItemCollapsing_structuredName() {
+        final String displayName1 = "Display Name 1";
+        final String displayName2 = "Display Name 2";
+
+        mValues1.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+        mValues2.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+        mValues3.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+
+        mValues1.put(StructuredName.DISPLAY_NAME, displayName1);
+        mValues2.put(StructuredName.DISPLAY_NAME, displayName1);
+        mValues3.put(StructuredName.DISPLAY_NAME, displayName2);
+
+        final DataKind kind =
+                mGoogleAccountType.getKindForMimetype(StructuredName.CONTENT_ITEM_TYPE);
+
+        final List<DataItem> dataList =
+                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+        assertEquals(2, dataList.size());
+        assertEquals(displayName1, ((StructuredNameDataItem) dataList.get(0)).getDisplayName());
+        assertEquals(displayName2, ((StructuredNameDataItem) dataList.get(1)).getDisplayName());
+    }
+
+    public void testDataItemCollapsing_structuredPostal() {
+        final String formattedAddress1 = "Formatted Address 1";
+        final String formattedAddress2 = "Formatted Address 2";
+
+        mValues1.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
+        mValues2.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
+        mValues3.put(Data.MIMETYPE, StructuredPostal.CONTENT_ITEM_TYPE);
+
+        mValues1.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1);
+        mValues2.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress1);
+        mValues3.put(StructuredPostal.FORMATTED_ADDRESS, formattedAddress2);
+
+        final DataKind kind =
+                mGoogleAccountType.getKindForMimetype(StructuredPostal.CONTENT_ITEM_TYPE);
+
+        final List<DataItem> dataList =
+                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+        assertEquals(2, dataList.size());
+        assertEquals(formattedAddress1,
+                ((StructuredPostalDataItem) dataList.get(0)).getFormattedAddress());
+        assertEquals(formattedAddress2,
+                ((StructuredPostalDataItem) dataList.get(1)).getFormattedAddress());
+    }
+
+    public void testDataItemCollapsing_website() {
+        final String url1 = "www.url1.com";
+        final String url2 = "www.url2.com";
+
+        mValues1.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
+        mValues2.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
+        mValues3.put(Data.MIMETYPE, Website.CONTENT_ITEM_TYPE);
+
+        mValues1.put(Website.URL, url1);
+        mValues2.put(Website.URL, url1);
+        mValues3.put(Website.URL, url2);
+
+        final DataKind kind = mGoogleAccountType.getKindForMimetype(Website.CONTENT_ITEM_TYPE);
+
+        final List<DataItem> dataList =
+                createDataItemsAndCollapse(kind, mValues1, mValues2, mValues3);
+
+        assertEquals(2, dataList.size());
+        assertEquals(url1, ((WebsiteDataItem) dataList.get(0)).getUrl());
+        assertEquals(url2, ((WebsiteDataItem) dataList.get(1)).getUrl());
+    }
+}
diff --git a/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java b/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
new file mode 100644
index 0000000..7da9099
--- /dev/null
+++ b/tests/src/com/android/contacts/preference/ContactsPreferencesTest.java
@@ -0,0 +1,200 @@
+/*
+ * 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.preference;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.support.test.InstrumentationRegistry;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import junit.framework.Assert;
+
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Arrays;
+
+@SmallTest
+public class ContactsPreferencesTest extends InstrumentationTestCase {
+
+    private static final String ACCOUNT_KEY = "ACCOUNT_KEY";
+
+    @Mock private Context mContext;
+    @Mock private Resources mResources;
+    @Mock private SharedPreferences mSharedPreferences;
+
+    private ContactsPreferences mContactsPreferences;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        System.setProperty("dexmaker.dexcache",
+                getInstrumentation().getTargetContext().getCacheDir().getPath());
+        MockitoAnnotations.initMocks(this);
+
+        Mockito.when(mContext.getResources()).thenReturn(mResources);
+        Mockito.when(mResources.getString(Mockito.anyInt()))
+                .thenReturn(ACCOUNT_KEY); // contact_editor_default_account_key
+
+        Mockito.when(mContext.getSharedPreferences(Mockito.anyString(), Mockito.anyInt()))
+                .thenReturn(mSharedPreferences);
+        Mockito.when(mSharedPreferences.contains(ContactsPreferences.SORT_ORDER_KEY))
+                .thenReturn(true);
+        Mockito.when(mSharedPreferences.contains(ContactsPreferences.DISPLAY_ORDER_KEY))
+                .thenReturn(true);
+
+        InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() {
+            @Override
+            public void run() {
+                mContactsPreferences = new ContactsPreferences(mContext);
+            }
+        });
+    }
+
+    public void testGetSortOrderDefault() {
+        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+                false, // R.bool.config_sort_order_user_changeable
+                true // R.bool.config_default_sort_order_primary
+        );
+        Assert.assertEquals(ContactsPreferences.SORT_ORDER_PRIMARY,
+                mContactsPreferences.getSortOrder());
+    }
+
+    public void testGetSortOrder() {
+        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+                true // R.bool.config_sort_order_user_changeable
+        );
+        Mockito.when(mSharedPreferences.getInt(Mockito.eq(ContactsPreferences.SORT_ORDER_KEY),
+                Mockito.anyInt())).thenReturn(ContactsPreferences.SORT_ORDER_PRIMARY);
+        Assert.assertEquals(ContactsPreferences.SORT_ORDER_PRIMARY,
+                mContactsPreferences.getSortOrder());
+    }
+
+    public void testGetDisplayOrderDefault() {
+        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+                false, // R.bool.config_display_order_user_changeable
+                true // R.bool.config_default_display_order_primary
+        );
+        Assert.assertEquals(ContactsPreferences.DISPLAY_ORDER_PRIMARY,
+                mContactsPreferences.getDisplayOrder());
+    }
+
+    public void testGetDisplayOrder() {
+        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+                true // R.bool.config_display_order_user_changeable
+        );
+        Mockito.when(mSharedPreferences.getInt(Mockito.eq(ContactsPreferences.DISPLAY_ORDER_KEY),
+                Mockito.anyInt())).thenReturn(ContactsPreferences.DISPLAY_ORDER_PRIMARY);
+        Assert.assertEquals(ContactsPreferences.DISPLAY_ORDER_PRIMARY,
+                mContactsPreferences.getDisplayOrder());
+    }
+
+    public void testRefreshSortOrder() throws InterruptedException {
+        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+                true // R.bool.config_sort_order_user_changeable
+        );
+        Mockito.when(mSharedPreferences.getInt(Mockito.eq(ContactsPreferences.SORT_ORDER_KEY),
+                Mockito.anyInt())).thenReturn(ContactsPreferences.SORT_ORDER_PRIMARY,
+                ContactsPreferences.SORT_ORDER_ALTERNATIVE);
+
+        Assert.assertEquals(ContactsPreferences.SORT_ORDER_PRIMARY,
+                mContactsPreferences.getSortOrder());
+        mContactsPreferences.refreshValue(ContactsPreferences.SORT_ORDER_KEY);
+
+        Assert.assertEquals(ContactsPreferences.SORT_ORDER_ALTERNATIVE,
+                mContactsPreferences.getSortOrder());
+    }
+
+    public void testRefreshDisplayOrder() throws InterruptedException {
+        Mockito.when(mResources.getBoolean(Mockito.anyInt())).thenReturn(
+                true // R.bool.config_display_order_user_changeable
+        );
+        Mockito.when(mSharedPreferences.getInt(Mockito.eq(ContactsPreferences.DISPLAY_ORDER_KEY),
+                Mockito.anyInt())).thenReturn(ContactsPreferences.DISPLAY_ORDER_PRIMARY,
+                ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
+
+        Assert.assertEquals(ContactsPreferences.DISPLAY_ORDER_PRIMARY,
+                mContactsPreferences.getDisplayOrder());
+        mContactsPreferences.refreshValue(ContactsPreferences.DISPLAY_ORDER_KEY);
+
+        Assert.assertEquals(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE,
+                mContactsPreferences.getDisplayOrder());
+    }
+
+    public void testRefreshDefaultAccount() throws InterruptedException {
+        mContactsPreferences = new ContactsPreferences(mContext,
+                /* isDefaultAccountUserChangeable */ true);
+
+        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
+                .thenReturn(new AccountWithDataSet("name1", "type1", "dataset1").stringify(),
+                        new AccountWithDataSet("name2", "type2", "dataset2").stringify());
+
+        Assert.assertEquals(new AccountWithDataSet("name1", "type1", "dataset1"),
+                mContactsPreferences.getDefaultAccount());
+        mContactsPreferences.refreshValue(ACCOUNT_KEY);
+
+        Assert.assertEquals(new AccountWithDataSet("name2", "type2", "dataset2"),
+                mContactsPreferences.getDefaultAccount());
+    }
+
+    public void testShouldShowAccountChangedNotificationIfAccountNotSaved() {
+        mContactsPreferences = new ContactsPreferences(mContext,
+                /* isDefaultAccountUserChangeable */ true);
+        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
+                .thenReturn(null);
+
+        assertTrue("Should prompt to change default if no default is saved",
+                mContactsPreferences.shouldShowAccountChangedNotification(Arrays.asList(
+                        new AccountWithDataSet("name1", "type1", "dataset1"),
+                        new AccountWithDataSet("name2", "type2", "dataset2"))));
+    }
+
+    public void testShouldShowAccountChangedNotification() {
+        mContactsPreferences = new ContactsPreferences(mContext,
+                /* isDefaultAccountUserChangeable */ true);
+        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
+                .thenReturn(new AccountWithDataSet("name", "type", "dataset").stringify());
+
+        assertFalse("Should not prompt to change default if current default exists",
+                mContactsPreferences.shouldShowAccountChangedNotification(Arrays.asList(
+                        new AccountWithDataSet("name", "type", "dataset"),
+                        new AccountWithDataSet("name1", "type1", "dataset1"))));
+
+        assertTrue("Should prompt to change default if current default does not exist",
+                mContactsPreferences.shouldShowAccountChangedNotification(Arrays.asList(
+                        new AccountWithDataSet("name1", "type1", "dataset1"),
+                        new AccountWithDataSet("name2", "type2", "dataset2"))));
+    }
+
+    public void testShouldShowAccountChangedNotificationWhenThereIsOneAccount() {
+        mContactsPreferences = new ContactsPreferences(mContext,
+                /* isDefaultAccountUserChangeable */ true);
+        Mockito.when(mSharedPreferences.getString(Mockito.eq(ACCOUNT_KEY), Mockito.anyString()))
+                .thenReturn(null);
+
+        // Normally we would prompt because there is no default set but if there is just one
+        // account we should just use it.
+        assertFalse("Should not prompt to change default if there is only one account available",
+                mContactsPreferences.shouldShowAccountChangedNotification(Arrays.asList(
+                        new AccountWithDataSet("name", "type", "dataset"))));
+    }
+}
diff --git a/tests/src/com/android/contacts/test/FragmentTestActivity.java b/tests/src/com/android/contacts/test/FragmentTestActivity.java
new file mode 100644
index 0000000..d58dc8f
--- /dev/null
+++ b/tests/src/com/android/contacts/test/FragmentTestActivity.java
@@ -0,0 +1,47 @@
+/*
+ * 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.test;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.Window;
+import android.view.WindowManager;
+import android.widget.FrameLayout;
+
+/**
+ * An activity that is used for testing fragments.  A unit test starts this
+ * activity, adds a fragment and then tests the fragment.
+ */
+public class FragmentTestActivity extends Activity {
+
+    public final static int LAYOUT_ID = 1;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Normally fragment/activity onStart() methods will not be called when screen is locked.
+        // Use the following flags to ensure that activities can be show for testing.
+        final Window window = getWindow();
+        window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
+                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
+
+        final FrameLayout layout = new FrameLayout(this);
+        layout.setId(LAYOUT_ID);
+        setContentView(layout);
+    }
+}
diff --git a/tests/src/com/android/contacts/test/IntegrationTestUtils.java b/tests/src/com/android/contacts/test/IntegrationTestUtils.java
new file mode 100644
index 0000000..60bb65b
--- /dev/null
+++ b/tests/src/com/android/contacts/test/IntegrationTestUtils.java
@@ -0,0 +1,192 @@
+/*
+ * 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.test;
+
+import android.app.Activity;
+import android.app.Instrumentation;
+import android.content.Context;
+import android.os.PowerManager;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.google.common.base.Preconditions;
+
+import junit.framework.Assert;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.FutureTask;
+
+import javax.annotation.concurrent.GuardedBy;
+import javax.annotation.concurrent.ThreadSafe;
+
+/** Some utility methods for making integration testing smoother. */
+@ThreadSafe
+public class IntegrationTestUtils {
+    private static final String TAG = "IntegrationTestUtils";
+
+    private final Instrumentation mInstrumentation;
+    private final Object mLock = new Object();
+    @GuardedBy("mLock") private PowerManager.WakeLock mWakeLock;
+
+    public IntegrationTestUtils(Instrumentation instrumentation) {
+        mInstrumentation = instrumentation;
+    }
+
+    /**
+     * Find a view by a given resource id, from the given activity, and click it, iff it is
+     * enabled according to {@link View#isEnabled()}.
+     */
+    public void clickButton(final Activity activity, final int buttonResourceId) throws Throwable {
+        runOnUiThreadAndGetTheResult(new Callable<Void>() {
+            @Override
+            public Void call() throws Exception {
+                View view = activity.findViewById(buttonResourceId);
+                Assert.assertNotNull(view);
+                if (view.isEnabled()) {
+                    view.performClick();
+                }
+                return null;
+            }
+        });
+    }
+
+    /** Returns the result of running {@link TextView#getText()} on the ui thread. */
+    public CharSequence getText(final TextView view) throws Throwable {
+        return runOnUiThreadAndGetTheResult(new Callable<CharSequence>() {
+            @Override
+            public CharSequence call() {
+                return view.getText();
+            }
+        });
+    }
+
+    // TODO: Move this class and the appropriate documentation into a test library, having checked
+    // first to see if exactly this code already exists or not.
+    /**
+     * Execute a callable on the ui thread, returning its result synchronously.
+     * <p>
+     * Waits for an idle sync on the main thread (see {@link Instrumentation#waitForIdle(Runnable)})
+     * before executing this callable.
+     */
+    public <T> T runOnUiThreadAndGetTheResult(Callable<T> callable) throws Throwable {
+        FutureTask<T> future = new FutureTask<T>(callable);
+        mInstrumentation.waitForIdle(future);
+        try {
+            return future.get();
+        } catch (ExecutionException e) {
+            // Unwrap the cause of the exception and re-throw it.
+            throw e.getCause();
+        }
+    }
+
+    /**
+     * Wake up the screen, useful in tests that want or need the screen to be on.
+     * <p>
+     * This is usually called from setUp() for tests that require it.  After calling this method,
+     * {@link #releaseScreenWakeLock()} must be called, this is usually done from tearDown().
+     */
+    public void acquireScreenWakeLock(Context context) {
+        synchronized (mLock) {
+            Preconditions.checkState(mWakeLock == null, "mWakeLock was already held");
+            mWakeLock = ((PowerManager) context.getSystemService(Context.POWER_SERVICE))
+                    .newWakeLock(
+                            PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE | PowerManager.FULL_WAKE_LOCK, TAG);
+            mWakeLock.acquire();
+        }
+    }
+
+    /** Release the wake lock previously acquired with {@link #acquireScreenWakeLock(Context)}. */
+    public void releaseScreenWakeLock() {
+        synchronized (mLock) {
+            // We don't use Preconditions to force you to have acquired before release.
+            // This is because we don't want unnecessary exceptions in tearDown() since they'll
+            // typically mask the actual exception that happened during the test.
+            // The other reason is that this method is most likely to be called from tearDown(),
+            // which is invoked within a finally block, so it's not infrequently the case that
+            // the setUp() method fails before getting the lock, at which point we don't want
+            // to fail in tearDown().
+            if (mWakeLock != null) {
+                mWakeLock.release();
+                mWakeLock = null;
+            }
+        }
+    }
+
+    /**
+     * Gets all {@link TextView} objects whose {@link TextView#getText()} contains the given text as
+     * a substring.
+     */
+    public List<TextView> getTextViewsWithString(final Activity activity, final String text)
+            throws Throwable {
+        return getTextViewsWithString(getRootView(activity), text);
+    }
+
+    /**
+     * Gets all {@link TextView} objects whose {@link TextView#getText()} contains the given text as
+     * a substring for the given root view.
+     */
+    public List<TextView> getTextViewsWithString(final View rootView, final String text)
+            throws Throwable {
+        return runOnUiThreadAndGetTheResult(new Callable<List<TextView>>() {
+            @Override
+            public List<TextView> call() throws Exception {
+                List<TextView> matchingViews = new ArrayList<TextView>();
+                for (TextView textView : getAllViews(TextView.class, rootView)) {
+                    if (textView.getText().toString().contains(text)) {
+                        matchingViews.add(textView);
+                    }
+                }
+                return matchingViews;
+            }
+        });
+    }
+
+    /** Find the root view for a given activity. */
+    public static View getRootView(Activity activity) {
+        return activity.findViewById(android.R.id.content).getRootView();
+    }
+
+    /**
+     * Gets a list of all views of a given type, rooted at the given parent.
+     * <p>
+     * This method will recurse down through all {@link ViewGroup} instances looking for
+     * {@link View} instances of the supplied class type. Specifically it will use the
+     * {@link Class#isAssignableFrom(Class)} method as the test for which views to add to the list,
+     * so if you provide {@code View.class} as your type, you will get every view. The parent itself
+     * will be included also, should it be of the right type.
+     * <p>
+     * This call manipulates the ui, and as such should only be called from the application's main
+     * thread.
+     */
+    private static <T extends View> List<T> getAllViews(final Class<T> clazz, final View parent) {
+        List<T> results = new ArrayList<T>();
+        if (parent.getClass().equals(clazz)) {
+            results.add(clazz.cast(parent));
+        }
+        if (parent instanceof ViewGroup) {
+            ViewGroup viewGroup = (ViewGroup) parent;
+            for (int i = 0; i < viewGroup.getChildCount(); ++i) {
+                results.addAll(getAllViews(clazz, viewGroup.getChildAt(i)));
+            }
+        }
+        return results;
+    }
+}
diff --git a/tests/src/com/android/contacts/test/LaunchPerformanceBase.java b/tests/src/com/android/contacts/test/LaunchPerformanceBase.java
new file mode 100644
index 0000000..8feb604
--- /dev/null
+++ b/tests/src/com/android/contacts/test/LaunchPerformanceBase.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.test;
+
+import android.app.Instrumentation;
+import android.content.Intent;
+import android.os.Bundle;
+
+
+/**
+ * Base class for all launch performance Instrumentation classes.
+ */
+public class LaunchPerformanceBase extends Instrumentation {
+
+    public static final String LOG_TAG = "Launch Performance";
+
+    protected Bundle mResults;
+    protected Intent mIntent;
+
+    public LaunchPerformanceBase() {
+        mResults = new Bundle();
+        mIntent = new Intent(Intent.ACTION_MAIN);
+        mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        setAutomaticPerformanceSnapshots();
+    }
+
+    /**
+     * Launches intent, and waits for idle before returning.
+     *
+     * @hide
+     */
+    protected void LaunchApp() {
+        startActivitySync(mIntent);
+        waitForIdleSync();
+    }
+}
diff --git a/tests/src/com/android/contacts/test/mocks/ContactsMockContext.java b/tests/src/com/android/contacts/test/mocks/ContactsMockContext.java
new file mode 100644
index 0000000..293f8e7
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/ContactsMockContext.java
@@ -0,0 +1,95 @@
+/*
+ * 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.test.mocks;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.ContextWrapper;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.provider.ContactsContract;
+import android.provider.Settings;
+import android.test.mock.MockContentResolver;
+
+/**
+ * A mock context for contacts unit tests. Forwards everything to
+ * a supplied context, except content resolver operations, which are sent
+ * to mock content providers.
+ */
+public class ContactsMockContext extends ContextWrapper {
+    private ContactsMockPackageManager mPackageManager;
+    private MockContentResolver mContentResolver;
+    private MockContentProvider mContactsProvider;
+    private MockContentProvider mSettingsProvider;
+    private Intent mIntentForStartActivity;
+
+    public ContactsMockContext(Context base) {
+        this(base, ContactsContract.AUTHORITY);
+    }
+
+    public ContactsMockContext(Context base, String authority) {
+        super(base);
+        mPackageManager = new ContactsMockPackageManager();
+        mContentResolver = new MockContentResolver();
+        mContactsProvider = new MockContentProvider();
+        mContentResolver.addProvider(authority, mContactsProvider);
+        mSettingsProvider = new MockContentProvider();
+        mContentResolver.addProvider(Settings.AUTHORITY, mSettingsProvider);
+    }
+
+    @Override
+    public ContentResolver getContentResolver() {
+        return mContentResolver;
+    }
+
+    public MockContentProvider getContactsProvider() {
+        return mContactsProvider;
+    }
+
+    public MockContentProvider getSettingsProvider() {
+        return mSettingsProvider;
+    }
+
+    @Override
+    public PackageManager getPackageManager() {
+        return mPackageManager;
+    }
+
+    @Override
+    public Context getApplicationContext() {
+        return this;
+    }
+
+    /**
+     * Instead of actually sending Intent, this method just remembers what Intent was supplied last.
+     * You can check the content via {@link #getIntentForStartActivity()} for verification.
+     */
+    @Override
+    public void startActivity(Intent intent) {
+        mIntentForStartActivity = intent;
+    }
+
+    public Intent getIntentForStartActivity() {
+        return mIntentForStartActivity;
+    }
+
+    public void verify() {
+        mContactsProvider.verify();
+        mSettingsProvider.verify();
+    }
+
+}
diff --git a/tests/src/com/android/contacts/test/mocks/ContactsMockPackageManager.java b/tests/src/com/android/contacts/test/mocks/ContactsMockPackageManager.java
new file mode 100644
index 0000000..275b8b7
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/ContactsMockPackageManager.java
@@ -0,0 +1,45 @@
+/*
+ * 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.test.mocks;
+
+import android.content.ComponentName;
+import android.content.pm.ApplicationInfo;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.test.mock.MockPackageManager;
+
+/**
+ */
+public class ContactsMockPackageManager extends MockPackageManager {
+    public ContactsMockPackageManager() {
+    }
+
+    @Override
+    public Drawable getActivityLogo(ComponentName activityName) throws NameNotFoundException {
+        return new ColorDrawable();
+    }
+
+    @Override
+    public Drawable getActivityIcon(ComponentName activityName) {
+        return new ColorDrawable();
+    }
+
+    @Override
+    public Drawable getDrawable(String packageName, int resid, ApplicationInfo appInfo) {
+        // TODO: make programmable
+        return new ColorDrawable();
+    }
+}
diff --git a/tests/src/com/android/contacts/test/mocks/ForwardingContentProvider.java b/tests/src/com/android/contacts/test/mocks/ForwardingContentProvider.java
new file mode 100644
index 0000000..b6ca983
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/ForwardingContentProvider.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.test.mocks;
+
+import android.content.ContentProviderClient;
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderResult;
+import android.content.ContentValues;
+import android.content.OperationApplicationException;
+import android.content.res.AssetFileDescriptor;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
+import android.support.annotation.Nullable;
+
+import java.io.FileNotFoundException;
+import java.util.ArrayList;
+
+/**
+ * Forwards calls to a {@link ContentProviderClient}
+ *
+ * <p>This allows mixing use of the system content providers in a
+ * {@link android.test.mock.MockContentResolver}
+ * </p>
+ */
+public class ForwardingContentProvider extends android.test.mock.MockContentProvider {
+
+    private final ContentProviderClient mClient;
+
+    public ForwardingContentProvider(ContentProviderClient client) {
+        mClient = client;
+    }
+
+    @Override
+    public synchronized Cursor query(Uri url, String[] projection, String selection,
+            String[] selectionArgs, String sortOrder) {
+        try {
+            return mClient.query(url, projection, selection, selectionArgs, sortOrder);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Nullable
+    @Override
+    public synchronized Cursor query(Uri url, String[] projection, String selection,
+            String[] selectionArgs, String sortOrder, CancellationSignal cancellationSignal) {
+        try {
+            return mClient.query(url, projection, selection, selectionArgs, sortOrder,
+                    cancellationSignal);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public synchronized String getType(Uri url) {
+        try {
+            return mClient.getType(url);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public synchronized String[] getStreamTypes(Uri url, String mimeTypeFilter) {
+        try {
+            return mClient.getStreamTypes(url, mimeTypeFilter);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public synchronized Uri insert(Uri url, ContentValues initialValues) {
+        try {
+            return mClient.insert(url, initialValues);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public synchronized int bulkInsert(Uri url, ContentValues[] initialValues) {
+        try {
+            return mClient.bulkInsert(url, initialValues);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public synchronized int delete(Uri url, String selection, String[] selectionArgs) {
+        try {
+            return mClient.delete(url, selection, selectionArgs);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public synchronized int update(Uri url, ContentValues values,
+            String selection, String[] selectionArgs) {
+        try {
+            return mClient.update(url, values, selection, selectionArgs);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Nullable
+    @Override
+    public synchronized ParcelFileDescriptor openFile(Uri url, String mode) {
+        try {
+            return mClient.openFile(url, mode);
+        } catch (RemoteException|FileNotFoundException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Nullable
+    @Override
+    public synchronized ParcelFileDescriptor openFile(Uri url, String mode,
+            CancellationSignal signal) {
+        try {
+            return mClient.openFile(url, mode, signal);
+        } catch (RemoteException|FileNotFoundException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Nullable
+    @Override
+    public synchronized AssetFileDescriptor openAssetFile(Uri url, String mode) {
+        try {
+            return mClient.openAssetFile(url, mode);
+        } catch (RemoteException|FileNotFoundException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Nullable
+    @Override
+    public synchronized AssetFileDescriptor openAssetFile(Uri url, String mode,
+            CancellationSignal signal) {
+        try {
+            return mClient.openAssetFile(url, mode, signal);
+        } catch (RemoteException|FileNotFoundException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public synchronized AssetFileDescriptor openTypedAssetFileDescriptor(Uri uri, String mimeType,
+            Bundle opts) {
+        try {
+            return mClient.openTypedAssetFileDescriptor(uri, mimeType, opts);
+        } catch (RemoteException|FileNotFoundException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public synchronized AssetFileDescriptor openTypedAssetFileDescriptor(Uri uri, String mimeType,
+            Bundle opts, CancellationSignal signal) {
+        try {
+            return mClient.openTypedAssetFileDescriptor(uri, mimeType, opts, signal);
+        } catch (RemoteException|FileNotFoundException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Override
+    public synchronized ContentProviderResult[] applyBatch(
+            ArrayList<ContentProviderOperation> operations) {
+        try {
+            return mClient.applyBatch(operations);
+        } catch (RemoteException|OperationApplicationException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    @Nullable
+    @Override
+    public synchronized Bundle call(String method, String arg, Bundle extras) {
+        try {
+            return mClient.call(method, arg, extras);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/tests/src/com/android/contacts/test/mocks/MockAccountTypeManager.java b/tests/src/com/android/contacts/test/mocks/MockAccountTypeManager.java
new file mode 100644
index 0000000..956f775
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/MockAccountTypeManager.java
@@ -0,0 +1,97 @@
+/*
+ * 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.test.mocks;
+
+import android.accounts.Account;
+
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountInfo;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountTypeWithDataSet;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.BaseAccountType;
+import com.google.common.base.Objects;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.Lists;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * A mock {@link AccountTypeManager} class.
+ */
+public class MockAccountTypeManager extends AccountTypeManager {
+
+    public AccountType[] mTypes;
+    public AccountWithDataSet[] mAccounts;
+
+    public MockAccountTypeManager(AccountType[] types, AccountWithDataSet[] accounts) {
+        this.mTypes = types;
+        this.mAccounts = accounts;
+    }
+
+    @Override
+    public AccountType getAccountType(AccountTypeWithDataSet accountTypeWithDataSet) {
+        // Add fallback accountType to mimic the behavior of AccountTypeManagerImpl
+        AccountType mFallbackAccountType = new BaseAccountType() {
+            @Override
+            public boolean areContactsWritable() {
+                return false;
+            }
+        };
+        mFallbackAccountType.accountType = "fallback";
+        for (AccountType type : mTypes) {
+            if (Objects.equal(accountTypeWithDataSet.accountType, type.accountType)
+                    && Objects.equal(accountTypeWithDataSet.dataSet, type.dataSet)) {
+                return type;
+            }
+        }
+        return mFallbackAccountType;
+    }
+
+    @Override
+    public List<AccountWithDataSet> getAccounts(boolean writableOnly) {
+        return Arrays.asList(mAccounts);
+    }
+
+    @Override
+    public ListenableFuture<List<AccountInfo>> getAccountsAsync() {
+        throw new UnsupportedOperationException("not implemented");
+    }
+
+    @Override
+    public ListenableFuture<List<AccountInfo>> filterAccountsAsync(Predicate<AccountInfo> filter) {
+        throw new UnsupportedOperationException("not implemented");
+    }
+
+    @Override
+    public AccountInfo getAccountInfoForAccount(AccountWithDataSet account) {
+        throw new UnsupportedOperationException("not implemented");
+    }
+
+    @Override
+    public List<AccountWithDataSet> getGroupWritableAccounts() {
+        return Arrays.asList(mAccounts);
+    }
+
+    @Override
+    public Account getDefaultGoogleAccount() {
+        return null;
+    }
+}
diff --git a/tests/src/com/android/contacts/test/mocks/MockContactPhotoManager.java b/tests/src/com/android/contacts/test/mocks/MockContactPhotoManager.java
new file mode 100644
index 0000000..e0bd425
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/MockContactPhotoManager.java
@@ -0,0 +1,72 @@
+/*
+ * 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.test.mocks;
+
+import android.graphics.Bitmap;
+import android.net.Uri;
+import android.view.View;
+import android.widget.ImageView;
+
+import com.android.contacts.ContactPhotoManager;
+
+/**
+ * A photo preloader that always uses the "no contact" picture and never executes any real
+ * db queries
+ */
+public class MockContactPhotoManager extends ContactPhotoManager {
+    @Override
+    public void loadThumbnail(ImageView view, long photoId, boolean darkTheme, boolean isCircular,
+            DefaultImageRequest defaultImageRequest, DefaultImageProvider defaultProvider) {
+        defaultProvider.applyDefaultImage(view, -1, darkTheme, null);
+    }
+
+    @Override
+    public void loadPhoto(ImageView view, Uri photoUri, int requestedExtent, boolean darkTheme,
+            boolean isCircular, DefaultImageRequest defaultImageRequest,
+            DefaultImageProvider defaultProvider) {
+        defaultProvider.applyDefaultImage(view, requestedExtent, darkTheme, null);
+    }
+
+    @Override
+    public void removePhoto(ImageView view) {
+        view.setImageDrawable(null);
+    }
+
+    @Override
+    public void cancelPendingRequests(View fragmentRootView) {
+    }
+
+    @Override
+    public void pause() {
+    }
+
+    @Override
+    public void resume() {
+    }
+
+    @Override
+    public void refreshCache() {
+    }
+
+    @Override
+    public void cacheBitmap(Uri photoUri, Bitmap bitmap, byte[] photoBytes) {
+    }
+
+    @Override
+    public void preloadPhotosInBackground() {
+    }
+}
diff --git a/tests/src/com/android/contacts/test/mocks/MockContentProvider.java b/tests/src/com/android/contacts/test/mocks/MockContentProvider.java
new file mode 100644
index 0000000..77eb1c9
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/MockContentProvider.java
@@ -0,0 +1,699 @@
+/*
+ * 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.test.mocks;
+
+import android.content.ContentValues;
+import android.content.UriMatcher;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.net.Uri;
+import android.support.annotation.Nullable;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Maps;
+
+import junit.framework.Assert;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * A programmable mock content provider.
+ */
+public class MockContentProvider extends android.test.mock.MockContentProvider {
+    private static final String TAG = "MockContentProvider";
+
+    public static class Query {
+
+        private final Uri mUri;
+        private UriMatcher mMatcher;
+
+        private String[] mProjection;
+        private String[] mDefaultProjection;
+        private String mSelection;
+        private String[] mSelectionArgs;
+        private String mSortOrder;
+        private List<Object> mRows = new ArrayList<>();
+        private boolean mAnyProjection;
+        private boolean mAnySelection;
+        private boolean mAnySortOrder;
+        private boolean mAnyNumberOfTimes;
+
+        private boolean mExecuted;
+
+        private Query() {
+            mUri = null;
+        }
+
+        private Query(UriMatcher matcher) {
+            mUri = null;
+            mMatcher = matcher;
+        }
+
+        public Query(Uri uri) {
+            mUri = uri;
+        }
+
+        @Override
+        public String toString() {
+            return queryToString(mUri, mProjection, mSelection, mSelectionArgs, mSortOrder);
+        }
+
+        public Query withProjection(String... projection) {
+            mProjection = projection;
+            return this;
+        }
+
+        public Query withDefaultProjection(String... projection) {
+            mDefaultProjection = projection;
+            return this;
+        }
+
+        public Query withAnyProjection() {
+            mAnyProjection = true;
+            return this;
+        }
+
+        public Query withSelection(String selection, String... selectionArgs) {
+            mSelection = selection;
+            mSelectionArgs = selectionArgs;
+            return this;
+        }
+
+        public Query withAnySelection() {
+            mAnySelection = true;
+            return this;
+        }
+
+        public Query withSortOrder(String sortOrder) {
+            mSortOrder = sortOrder;
+            return this;
+        }
+
+        public Query withAnySortOrder() {
+            mAnySortOrder = true;
+            return this;
+        }
+
+        public Query returnRow(ContentValues values) {
+            mRows.add(values);
+            return this;
+        }
+
+        public Query returnRow(Object... row) {
+            mRows.add(row);
+            return this;
+        }
+
+        public Query returnEmptyCursor() {
+            mRows.clear();
+            return this;
+        }
+
+        public Query anyNumberOfTimes() {
+            mAnyNumberOfTimes = true;
+            return this;
+        }
+
+        public boolean equals(Uri uri, String[] projection, String selection,
+                String[] selectionArgs, String sortOrder) {
+            if (mUri == null) {
+                if (mMatcher != null && mMatcher.match(uri) == UriMatcher.NO_MATCH) {
+                    return false;
+                }
+            } else if (!uri.equals(mUri)) {
+                return false;
+            }
+
+            if (!mAnyProjection && !Arrays.equals(projection, mProjection)) {
+                return false;
+            }
+
+            if (!mAnySelection && !Objects.equals(selection, mSelection)) {
+                return false;
+            }
+
+            if (!mAnySelection && !Arrays.equals(selectionArgs, mSelectionArgs)) {
+                return false;
+            }
+
+            if (!mAnySortOrder && !Objects.equals(sortOrder, mSortOrder)) {
+                return false;
+            }
+
+            return true;
+        }
+
+        public Cursor getResult(String[] projection) {
+            String[] columnNames;
+            if (mAnyProjection) {
+                columnNames = projection != null ? projection : mDefaultProjection;
+            } else {
+                columnNames = mProjection != null ? mProjection : mDefaultProjection;
+            }
+
+            MatrixCursor cursor = new MatrixCursor(columnNames);
+            for (Object row : mRows) {
+                if (row instanceof Object[]) {
+                    cursor.addRow((Object[]) row);
+                } else {
+                    ContentValues values = (ContentValues) row;
+                    Object[] columns = new Object[columnNames.length];
+                    for (int i = 0; i < columnNames.length; i++) {
+                        columns[i] = values.get(columnNames[i]);
+                    }
+                    cursor.addRow(columns);
+                }
+            }
+            return cursor;
+        }
+
+        public static Query forAnyUri() {
+            return new Query();
+        }
+
+        public static Query forUrisMatching(UriMatcher matcher) {
+            return new Query(matcher);
+        }
+
+        public static Query forUrisMatching(String authority, String... paths) {
+            final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);
+            for (int i = 0; i < paths.length; i++) {
+                matcher.addURI(authority, paths[i], i);
+            }
+            return new Query(matcher);
+        }
+
+    }
+
+    public static class TypeQuery {
+        private final Uri mUri;
+        private final String mType;
+
+        public TypeQuery(Uri uri, String type) {
+            mUri = uri;
+            mType = type;
+        }
+
+        public Uri getUri() {
+            return mUri;
+        }
+
+        public String getType() {
+            return mType;
+        }
+
+        @Override
+        public String toString() {
+            return mUri + " --> " + mType;
+        }
+
+        public boolean equals(Uri uri) {
+            return getUri().equals(uri);
+        }
+    }
+
+    public static class Insert {
+        private final Uri mUri;
+        private final ContentValues mContentValues;
+        private final Uri mResultUri;
+        private boolean mAnyNumberOfTimes;
+        private boolean mIsExecuted;
+
+        /**
+         * Creates a new Insert to expect.
+         *
+         * @param uri the uri of the insertion request.
+         * @param contentValues the ContentValues to insert.
+         * @param resultUri the {@link Uri} for the newly inserted item.
+         * @throws NullPointerException if any parameter is {@code null}.
+         */
+        public Insert(Uri uri, ContentValues contentValues, Uri resultUri) {
+            mUri = Preconditions.checkNotNull(uri);
+            mContentValues = Preconditions.checkNotNull(contentValues);
+            mResultUri = Preconditions.checkNotNull(resultUri);
+        }
+
+        /**
+         * Causes this insert expectation to be useable for mutliple calls to insert, rather than
+         * just one.
+         *
+         * @return this
+         */
+        public Insert anyNumberOfTimes() {
+            mAnyNumberOfTimes = true;
+            return this;
+        }
+
+        private boolean equals(Uri uri, ContentValues contentValues) {
+            return mUri.equals(uri) && mContentValues.equals(contentValues);
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) {
+                return true;
+            }
+            if (o == null || getClass() != o.getClass()) {
+                return false;
+            }
+            Insert insert = (Insert) o;
+            return mAnyNumberOfTimes == insert.mAnyNumberOfTimes &&
+                    mIsExecuted == insert.mIsExecuted &&
+                    Objects.equals(mUri, insert.mUri) &&
+                    Objects.equals(mContentValues, insert.mContentValues) &&
+                    Objects.equals(mResultUri, insert.mResultUri);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(mUri, mContentValues, mResultUri, mAnyNumberOfTimes, mIsExecuted);
+        }
+
+        @Override
+        public String toString() {
+            return "Insert{" +
+                    "mUri=" + mUri +
+                    ", mContentValues=" + mContentValues +
+                    ", mResultUri=" + mResultUri +
+                    ", mAnyNumberOfTimes=" + mAnyNumberOfTimes +
+                    ", mIsExecuted=" + mIsExecuted +
+                    '}';
+        }
+    }
+
+    public static class Delete {
+        private final Uri mUri;
+
+        private boolean mAnyNumberOfTimes;
+        private boolean mAnySelection;
+        @Nullable private String mSelection;
+        @Nullable private String[] mSelectionArgs;
+        private boolean mIsExecuted;
+        private int mRowsAffected;
+
+        /**
+         * Creates a new Delete to expect.
+         * @param uri the uri of the delete request.
+         * @throws NullPointerException if uri is {@code null}.
+         */
+        public Delete(Uri uri) {
+            mUri = Preconditions.checkNotNull(uri);
+        }
+
+        /**
+         * Sets the given information as expected selection arguments.
+         *
+         * @param selection The selection to expect.
+         * @param selectionArgs The selection args to expect.
+         * @return this.
+         */
+        public Delete withSelection(String selection, @Nullable String[] selectionArgs) {
+            mSelection = Preconditions.checkNotNull(selection);
+            mSelectionArgs = selectionArgs;
+            mAnySelection = false;
+            return this;
+        }
+
+        /**
+         * Sets this delete to expect any selection arguments.
+         *
+         * @return this.
+         */
+        public Delete withAnySelection() {
+            mAnySelection = true;
+            return this;
+        }
+
+        /**
+         * Sets this delete to return the given number of rows affected.
+         *
+         * @param rowsAffected The value to return when this expected delete is executed.
+         * @return this.
+         */
+        public Delete returnRowsAffected(int rowsAffected) {
+            mRowsAffected = rowsAffected;
+            return this;
+        }
+
+        /**
+         * Causes this delete expectation to be useable for multiple calls to delete, rather than
+         * just one.
+         *
+         * @return this.
+         */
+        public Delete anyNumberOfTimes() {
+            mAnyNumberOfTimes = true;
+            return this;
+        }
+
+        private boolean equals(Uri uri, String selection, String[] selectionArgs) {
+            return mUri.equals(uri) && Objects.equals(mSelection, selection)
+                    && Arrays.equals(mSelectionArgs, selectionArgs);
+        }
+    }
+
+    public static class Update {
+        private final Uri mUri;
+        private final ContentValues mContentValues;
+        @Nullable private String mSelection;
+        @Nullable private String[] mSelectionArgs;
+        private boolean mAnyNumberOfTimes;
+        private boolean mIsExecuted;
+        private int mRowsAffected;
+
+        /**
+         * Creates a new Update to expect.
+         *
+         * @param uri the uri of the update request.
+         * @param contentValues the ContentValues to update.
+         *
+         * @throws NullPointerException if any parameter is {@code null}.
+         */
+        public Update(Uri uri,
+                      ContentValues contentValues,
+                      @Nullable String selection,
+                      @Nullable String[] selectionArgs) {
+            mUri = Preconditions.checkNotNull(uri);
+            mContentValues = Preconditions.checkNotNull(contentValues);
+            mSelection = selection;
+            mSelectionArgs = selectionArgs;
+        }
+
+        /**
+         * Causes this update expectation to be useable for mutliple calls to update, rather than
+         * just one.
+         *
+         * @return this
+         */
+        public Update anyNumberOfTimes() {
+            mAnyNumberOfTimes = true;
+            return this;
+        }
+
+        /**
+         * Sets this update to return the given number of rows affected.
+         *
+         * @param rowsAffected The value to return when this expected update is executed.
+         * @return this.
+         */
+        public Update returnRowsAffected(int rowsAffected) {
+            mRowsAffected = rowsAffected;
+            return this;
+        }
+
+        private boolean equals(Uri uri,
+                               ContentValues contentValues,
+                               @Nullable String selection,
+                               @Nullable String[] selectionArgs) {
+            return mUri.equals(uri) && mContentValues.equals(contentValues) &&
+                    Objects.equals(mSelection, selection) &&
+                    Objects.equals(mSelectionArgs, selectionArgs);
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) {
+                return true;
+            }
+            if (o == null || getClass() != o.getClass()) {
+                return false;
+            }
+            Update update = (Update) o;
+            return mAnyNumberOfTimes == update.mAnyNumberOfTimes &&
+                    mIsExecuted == update.mIsExecuted &&
+                    Objects.equals(mUri, update.mUri) &&
+                    Objects.equals(mContentValues, update.mContentValues) &&
+                    Objects.equals(mSelection, update.mSelection) &&
+                    Objects.equals(mSelectionArgs, update.mSelectionArgs);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(mUri, mContentValues, mAnyNumberOfTimes, mIsExecuted, mSelection,
+                    mSelectionArgs);
+        }
+
+        @Override
+        public String toString() {
+            return "Update{" +
+                    "mUri=" + mUri +
+                    ", mContentValues=" + mContentValues +
+                    ", mAnyNumberOfTimes=" + mAnyNumberOfTimes +
+                    ", mIsExecuted=" + mIsExecuted +
+                    ", mSelection=" + mSelection +
+                    ", mSelectionArgs=" + mSelectionArgs +
+                    '}';
+        }
+    }
+
+    private List<Query> mExpectedQueries = new ArrayList<>();
+    private Map<Uri, String> mExpectedTypeQueries = Maps.newHashMap();
+    private List<Insert> mExpectedInserts = new ArrayList<>();
+    private List<Delete> mExpectedDeletes = new ArrayList<>();
+    private List<Update> mExpectedUpdates = new ArrayList<>();
+
+    @Override
+    public boolean onCreate() {
+        return true;
+    }
+
+    public Query expect(Query query) {
+        mExpectedQueries.add(query);
+        return query;
+    }
+
+    public Query expectQuery(Uri contentUri) {
+        return expect(new Query(contentUri));
+    }
+
+    public Query expectQuery(String contentUri) {
+        return expectQuery(Uri.parse(contentUri));
+    }
+
+    public void expectTypeQuery(Uri uri, String type) {
+        mExpectedTypeQueries.put(uri, type);
+    }
+
+    public void expectInsert(Uri contentUri, ContentValues contentValues, Uri resultUri) {
+        mExpectedInserts.add(new Insert(contentUri, contentValues, resultUri));
+    }
+
+    public Update expectUpdate(Uri contentUri,
+                               ContentValues contentValues,
+                               @Nullable String selection,
+                               @Nullable String[] selectionArgs) {
+        Update update = new Update(contentUri, contentValues, selection, selectionArgs);
+        mExpectedUpdates.add(update);
+        return update;
+    }
+
+    public Delete expectDelete(Uri contentUri) {
+        Delete delete = new Delete(contentUri);
+        mExpectedDeletes.add(delete);
+        return delete;
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+            String sortOrder) {
+        if (mExpectedQueries.isEmpty()) {
+            Assert.fail("Unexpected query: Actual:"
+                    + queryToString(uri, projection, selection, selectionArgs, sortOrder));
+        }
+
+        for (Iterator<Query> iterator = mExpectedQueries.iterator(); iterator.hasNext();) {
+            Query query = iterator.next();
+            if (query.equals(uri, projection, selection, selectionArgs, sortOrder)) {
+                query.mExecuted = true;
+                if (!query.mAnyNumberOfTimes) {
+                    iterator.remove();
+                }
+                return query.getResult(projection);
+            }
+        }
+
+        Assert.fail("Incorrect query. Expected one of: " + mExpectedQueries + ". Actual: " +
+                queryToString(uri, projection, selection, selectionArgs, sortOrder));
+        return null;
+    }
+
+    @Override
+    public String getType(Uri uri) {
+        if (mExpectedTypeQueries.isEmpty()) {
+            Assert.fail("Unexpected getType query: " + uri);
+        }
+
+        String mimeType = mExpectedTypeQueries.get(uri);
+        if (mimeType != null) {
+            return mimeType;
+        }
+
+        Assert.fail("Unknown mime type for: " + uri);
+        return null;
+    }
+
+    @Override
+    public Uri insert(Uri uri, ContentValues values) {
+        if (mExpectedInserts.isEmpty()) {
+            Assert.fail("Unexpected insert. Actual: " + insertToString(uri, values));
+        }
+        for (Iterator<Insert> iterator = mExpectedInserts.iterator(); iterator.hasNext(); ) {
+            Insert insert = iterator.next();
+            if (insert.equals(uri, values)) {
+                insert.mIsExecuted = true;
+                if (!insert.mAnyNumberOfTimes) {
+                    iterator.remove();
+                }
+                return insert.mResultUri;
+            }
+        }
+
+        Assert.fail("Incorrect insert. Expected one of: " + mExpectedInserts + ". Actual: "
+                + insertToString(uri, values));
+        return null;
+    }
+
+    private String insertToString(Uri uri, ContentValues contentValues) {
+        return "Insert { uri=" + uri + ", contentValues=" + contentValues + '}';
+    }
+
+    @Override
+    public int update(Uri uri,
+                      ContentValues values,
+                      @Nullable String selection,
+                      @Nullable String[] selectionArgs) {
+        if (mExpectedUpdates.isEmpty()) {
+            Assert.fail("Unexpected update. Actual: "
+                    + updateToString(uri, values, selection, selectionArgs));
+        }
+        for (Iterator<Update> iterator = mExpectedUpdates.iterator(); iterator.hasNext(); ) {
+            Update update = iterator.next();
+            if (update.equals(uri, values, selection, selectionArgs)) {
+                update.mIsExecuted = true;
+                if (!update.mAnyNumberOfTimes) {
+                    iterator.remove();
+                }
+                return update.mRowsAffected;
+            }
+        }
+
+        Assert.fail("Incorrect update. Expected one of: " + mExpectedUpdates + ". Actual: "
+                + updateToString(uri, values, selection, selectionArgs));
+        return - 1;
+    }
+
+    private String updateToString(Uri uri,
+                                  ContentValues contentValues,
+                                  @Nullable String selection,
+                                  @Nullable String[] selectionArgs) {
+        return "Update { uri=" + uri + ", contentValues=" + contentValues + ", selection=" +
+                selection + ", selectionArgs" + Arrays.toString(selectionArgs) + '}';
+    }
+
+    @Override
+    public int delete(Uri uri, String selection, String[] selectionArgs) {
+        if (mExpectedDeletes.isEmpty()) {
+            Assert.fail("Unexpected delete. Actual: " + deleteToString(uri, selection,
+                    selectionArgs));
+        }
+        for (Iterator<Delete> iterator = mExpectedDeletes.iterator(); iterator.hasNext(); ) {
+            Delete delete = iterator.next();
+            if (delete.equals(uri, selection, selectionArgs)) {
+                delete.mIsExecuted = true;
+                if (!delete.mAnyNumberOfTimes) {
+                    iterator.remove();
+                }
+                return delete.mRowsAffected;
+            }
+        }
+        Assert.fail("Incorrect delete. Expected one of: " + mExpectedDeletes + ". Actual: "
+                + deleteToString(uri, selection, selectionArgs));
+        return -1;
+    }
+
+    private String deleteToString(Uri uri, String selection, String[] selectionArgs) {
+        return "Delete { uri=" + uri + ", selection=" + selection + ", selectionArgs"
+                + Arrays.toString(selectionArgs) + '}';
+    }
+
+    private static String queryToString(Uri uri, String[] projection, String selection,
+            String[] selectionArgs, String sortOrder) {
+        StringBuilder sb = new StringBuilder();
+        sb.append(uri == null ? "<Any Uri>" : uri).append(" ");
+        if (projection != null) {
+            sb.append(Arrays.toString(projection));
+        } else {
+            sb.append("[]");
+        }
+        if (selection != null) {
+            sb.append(" selection: '").append(selection).append("'");
+            if (selectionArgs != null) {
+                sb.append(Arrays.toString(selectionArgs));
+            } else {
+                sb.append("[]");
+            }
+        }
+        if (sortOrder != null) {
+            sb.append(" sort: '").append(sortOrder).append("'");
+        }
+        return sb.toString();
+    }
+
+    public void verify() {
+        verifyQueries();
+        verifyInserts();
+        verifyDeletes();
+    }
+
+    private void verifyQueries() {
+        List<Query> missedQueries = new ArrayList<>();
+        for (Query query : mExpectedQueries) {
+            if (!query.mExecuted) {
+                missedQueries.add(query);
+            }
+        }
+        Assert.assertTrue("Not all expected queries have been called: " + missedQueries,
+                missedQueries.isEmpty());
+    }
+
+    private void verifyInserts() {
+        List<Insert> missedInserts = new ArrayList<>();
+        for (Insert insert : mExpectedInserts) {
+            if (!insert.mIsExecuted) {
+                missedInserts.add(insert);
+            }
+        }
+        Assert.assertTrue("Not all expected inserts have been called: " + missedInserts,
+                missedInserts.isEmpty());
+    }
+
+    private void verifyDeletes() {
+        List<Delete> missedDeletes = new ArrayList<>();
+        for (Delete delete : mExpectedDeletes) {
+            if (!delete.mIsExecuted) {
+                missedDeletes.add(delete);
+            }
+        }
+        Assert.assertTrue("Not all expected deletes have been called: " + missedDeletes,
+                missedDeletes.isEmpty());
+    }
+}
diff --git a/tests/src/com/android/contacts/test/mocks/MockSharedPreferences.java b/tests/src/com/android/contacts/test/mocks/MockSharedPreferences.java
new file mode 100644
index 0000000..787b905
--- /dev/null
+++ b/tests/src/com/android/contacts/test/mocks/MockSharedPreferences.java
@@ -0,0 +1,149 @@
+/*
+ * 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.test.mocks;
+
+import android.content.SharedPreferences;
+
+import com.google.common.collect.Maps;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+
+/**
+ * A programmable mock content provider.
+ */
+public class MockSharedPreferences implements SharedPreferences, SharedPreferences.Editor {
+
+    private HashMap<String, Object> mValues = Maps.newHashMap();
+    private HashMap<String, Object> mTempValues = Maps.newHashMap();
+
+    public Editor edit() {
+        return this;
+    }
+
+    public boolean contains(String key) {
+        return mValues.containsKey(key);
+    }
+
+    public Map<String, ?> getAll() {
+        return new HashMap<String, Object>(mValues);
+    }
+
+    public boolean getBoolean(String key, boolean defValue) {
+        if (mValues.containsKey(key)) {
+            return ((Boolean)mValues.get(key)).booleanValue();
+        }
+        return defValue;
+    }
+
+    public float getFloat(String key, float defValue) {
+        if (mValues.containsKey(key)) {
+            return ((Float)mValues.get(key)).floatValue();
+        }
+        return defValue;
+    }
+
+    public int getInt(String key, int defValue) {
+        if (mValues.containsKey(key)) {
+            return ((Integer)mValues.get(key)).intValue();
+        }
+        return defValue;
+    }
+
+    public long getLong(String key, long defValue) {
+        if (mValues.containsKey(key)) {
+            return ((Long)mValues.get(key)).longValue();
+        }
+        return defValue;
+    }
+
+    public String getString(String key, String defValue) {
+        if (mValues.containsKey(key))
+            return (String)mValues.get(key);
+        return defValue;
+    }
+
+    @SuppressWarnings("unchecked")
+    public Set<String> getStringSet(String key, Set<String> defValues) {
+        if (mValues.containsKey(key)) {
+            return (Set<String>) mValues.get(key);
+        }
+        return defValues;
+    }
+
+    public void registerOnSharedPreferenceChangeListener(
+            OnSharedPreferenceChangeListener listener) {
+        throw new UnsupportedOperationException();
+    }
+
+    public void unregisterOnSharedPreferenceChangeListener(
+            OnSharedPreferenceChangeListener listener) {
+        throw new UnsupportedOperationException();
+    }
+
+    public Editor putBoolean(String key, boolean value) {
+        mTempValues.put(key, Boolean.valueOf(value));
+        return this;
+    }
+
+    public Editor putFloat(String key, float value) {
+        mTempValues.put(key, value);
+        return this;
+    }
+
+    public Editor putInt(String key, int value) {
+        mTempValues.put(key, value);
+        return this;
+    }
+
+    public Editor putLong(String key, long value) {
+        mTempValues.put(key, value);
+        return this;
+    }
+
+    public Editor putString(String key, String value) {
+        mTempValues.put(key, value);
+        return this;
+    }
+
+    public Editor putStringSet(String key, Set<String> values) {
+        mTempValues.put(key, values);
+        return this;
+    }
+
+    public Editor remove(String key) {
+        mTempValues.remove(key);
+        return this;
+    }
+
+    public Editor clear() {
+        mTempValues.clear();
+        return this;
+    }
+
+    @SuppressWarnings("unchecked")
+    public boolean commit() {
+        mValues = (HashMap<String, Object>)mTempValues.clone();
+        return true;
+    }
+
+    public void apply() {
+        commit();
+    }
+}
diff --git a/tests/src/com/android/contacts/tests/AccountsTestHelper.java b/tests/src/com/android/contacts/tests/AccountsTestHelper.java
index 123d538..be0a985 100644
--- a/tests/src/com/android/contacts/tests/AccountsTestHelper.java
+++ b/tests/src/com/android/contacts/tests/AccountsTestHelper.java
@@ -15,6 +15,9 @@
  */
 package com.android.contacts.tests;
 
+import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
+
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.content.ContentResolver;
@@ -25,10 +28,11 @@
 import android.support.annotation.RequiresApi;
 import android.support.test.InstrumentationRegistry;
 
-import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.AccountWithDataSet;
 
-import static junit.framework.Assert.assertNotNull;
-import static junit.framework.Assert.assertTrue;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 @SuppressWarnings("MissingPermission")
 public class AccountsTestHelper {
@@ -40,6 +44,7 @@
     private final AccountManager mAccountManager;
     private final ContentResolver mResolver;
 
+    private List<Account> mAddedAccounts;
     private Account mTestAccount;
 
     public AccountsTestHelper() {
@@ -52,12 +57,27 @@
         mContext = context;
         mAccountManager = AccountManager.get(mContext);
         mResolver = mContext.getContentResolver();
+        mAddedAccounts = new ArrayList<>();
+    }
+
+    public void addTestAccount(AccountWithDataSet account) {
+        mTestAccount = new Account(account.name, TEST_ACCOUNT_TYPE);
+        assertTrue(mAccountManager.addAccountExplicitly(mTestAccount, null, null));
+        mAddedAccounts.add(mTestAccount);
     }
 
     public AccountWithDataSet addTestAccount() {
         return addTestAccount(generateAccountName());
     }
 
+    public AccountWithDataSet addTestAccount(@NonNull String name) {
+        // remember the most recent one. If the caller wants to add multiple accounts they will
+        // have to keep track of them themselves.
+        final AccountWithDataSet account = new AccountWithDataSet(name, TEST_ACCOUNT_TYPE, null);
+        addTestAccount(account);
+        return account;
+    }
+
     public String generateAccountName(String prefix) {
         return prefix + "_t" + System.nanoTime();
     }
@@ -66,26 +86,33 @@
         return generateAccountName("test");
     }
 
-    public AccountWithDataSet addTestAccount(@NonNull String name) {
-        // remember the most recent one. If the caller wants to add multiple accounts they will
-        // have to keep track of them themselves.
-        mTestAccount = new Account(name, TEST_ACCOUNT_TYPE);
-        assertTrue(mAccountManager.addAccountExplicitly(mTestAccount, null, null));
-        return convertTestAccount();
-    }
-
     @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
     public void removeTestAccount(AccountWithDataSet account) {
         final Account remove = account.getAccountOrNull();
         mAccountManager.removeAccountExplicitly(remove);
+        mAddedAccounts.remove(remove);
+    }
+
+    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
+    public void removeTestAccount(String accountName) {
+        removeTestAccount(new AccountWithDataSet(accountName, TEST_ACCOUNT_TYPE, null));
+    }
+
+    public boolean hasTestAccount(String name) {
+        final List<Account> accounts = Arrays.asList(
+                mAccountManager.getAccountsByType(TEST_ACCOUNT_TYPE));
+        return accounts.contains(new Account(name, TEST_ACCOUNT_TYPE));
     }
 
     public void removeContactsForAccount() {
-        // Not sure if this is necessary or if contacts are automatically cleaned up when the
-        // account is removed.
+        removeContactsForAccount(
+                new AccountWithDataSet(mTestAccount.name, mTestAccount.type, null));
+    }
+
+    public void removeContactsForAccount(AccountWithDataSet account) {
         mResolver.delete(RawContacts.CONTENT_URI,
                 RawContacts.ACCOUNT_NAME + "=? AND " + RawContacts.ACCOUNT_TYPE + "=?",
-                new String[] { mTestAccount.name, mTestAccount.type });
+                new String[] { account.name, account.type });
     }
 
     @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP_MR1)
@@ -98,7 +125,11 @@
         // is removed so if multiple tests are using the same account name then the data should
         // be manually deleted after each test run.
 
-        mAccountManager.removeAccountExplicitly(mTestAccount);
+        for (Account account : mAddedAccounts) {
+            mAccountManager.removeAccountExplicitly(account);
+        }
+        mAddedAccounts.clear();
+
         mTestAccount = null;
     }
 
diff --git a/tests/src/com/android/contacts/tests/AdbHelpers.java b/tests/src/com/android/contacts/tests/AdbHelpers.java
index 163d7cc..240dbbb 100644
--- a/tests/src/com/android/contacts/tests/AdbHelpers.java
+++ b/tests/src/com/android/contacts/tests/AdbHelpers.java
@@ -16,14 +16,16 @@
 package com.android.contacts.tests;
 
 import android.content.Context;
+import android.content.OperationApplicationException;
 import android.os.Build;
 import android.os.Bundle;
+import android.os.RemoteException;
 import android.support.annotation.RequiresApi;
 import android.support.test.InstrumentationRegistry;
 import android.util.Log;
 
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.preference.ContactsPreferences;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.preference.ContactsPreferences;
 import com.android.contacts.util.SharedPreferenceUtil;
 
 /**
@@ -85,6 +87,11 @@
                 getAppContext().getPackageName(), Context.MODE_PRIVATE).getAll());
     }
 
+    public static void clearSimCard(Context context)
+            throws RemoteException, OperationApplicationException {
+        new SimContactsTestHelper(context).deleteAllSimContacts();
+    }
+
     private static Context getAppContext() {
         return InstrumentationRegistry.getTargetContext();
     }
diff --git a/tests/src/com/android/contacts/tests/ContactsMatchers.java b/tests/src/com/android/contacts/tests/ContactsMatchers.java
new file mode 100644
index 0000000..77aed11
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/ContactsMatchers.java
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.tests;
+
+import static org.hamcrest.Matchers.allOf;
+
+import android.database.Cursor;
+import android.provider.ContactsContract;
+
+import com.android.contacts.model.SimContact;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+
+
+/**
+ * Has useful {@link org.hamcrest.Matchers}s for the Contacts app
+ */
+public class ContactsMatchers {
+
+    private ContactsMatchers() {
+    }
+
+    /**
+     * Matchers for {@link Cursor}s returned by queries to
+     * {@link android.provider.ContactsContract.Data#CONTENT_URI}
+     */
+    public static class DataCursor {
+
+        public static Matcher<Cursor> hasMimeType(String type) {
+            return hasValueForColumn(ContactsContract.Data.MIMETYPE, type);
+        }
+
+        public static Matcher<Cursor> hasName(final String name) {
+            return hasRowMatching(allOf(
+                    hasMimeType(ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE),
+                    hasValueForColumn(
+                            ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)));
+        }
+
+        public static Matcher<Cursor> hasPhone(final String phone) {
+            return hasRowMatching(allOf(
+                    hasMimeType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE),
+                    hasValueForColumn(
+                            ContactsContract.CommonDataKinds.Phone.NUMBER, phone)));
+        }
+
+        public static Matcher<Cursor> hasEmail(final String email) {
+            return hasRowMatching(allOf(
+                    hasMimeType(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE),
+                    hasValueForColumn(
+                            ContactsContract.CommonDataKinds.Email.ADDRESS, email)));
+        }
+    }
+
+    public static Matcher<Cursor> hasCount(final int count) {
+        return new BaseMatcher<Cursor>() {
+            @Override
+            public boolean matches(Object o) {
+                if (!(o instanceof Cursor)) return false;
+                return ((Cursor)o).getCount() == count;
+            }
+
+            @Override
+            public void describeTo(Description description) {
+                description.appendText("Cursor with " + count + " rows");
+            }
+        };
+    }
+
+    public static Matcher<Cursor> hasValueForColumn(final String column, final String value) {
+        return new BaseMatcher<Cursor>() {
+
+            @Override
+            public boolean matches(Object o) {
+                if (!(o instanceof Cursor)) return false;
+                final Cursor cursor = (Cursor)o;
+
+                final int index = cursor.getColumnIndexOrThrow(column);
+                return value.equals(cursor.getString(index));
+            }
+
+            @Override
+            public void describeTo(Description description) {
+                description.appendText("Cursor with " + column + "=" + value);
+            }
+        };
+    }
+
+    public static Matcher<Cursor> hasRowMatching(final Matcher<Cursor> rowMatcher) {
+        return new BaseMatcher<Cursor>() {
+            @Override
+            public boolean matches(Object o) {
+                if (!(o instanceof Cursor)) return false;
+                final Cursor cursor = (Cursor)o;
+
+                cursor.moveToPosition(-1);
+                while (cursor.moveToNext()) {
+                    if (rowMatcher.matches(cursor)) return true;
+                }
+
+                return false;
+            }
+
+            @Override
+            public void describeTo(Description description) {
+                description.appendText("Cursor with row matching ");
+                rowMatcher.describeTo(description);
+            }
+        };
+    }
+
+    public static Matcher<SimContact> isSimContactWithNameAndPhone(final String name,
+            final String phone) {
+        return new BaseMatcher<SimContact>() {
+            @Override
+            public boolean matches(Object o) {
+                if (!(o instanceof SimContact))  return false;
+
+                SimContact other = (SimContact) o;
+
+                return name.equals(other.getName())
+                        && phone.equals(other.getPhone());
+            }
+
+            @Override
+            public void describeTo(Description description) {
+                description.appendText("SimContact with name=" + name + " and phone=" +
+                        phone);
+            }
+        };
+    }
+}
diff --git a/tests/src/com/android/contacts/tests/FakeAccountType.java b/tests/src/com/android/contacts/tests/FakeAccountType.java
index 59327d8..966c29f 100644
--- a/tests/src/com/android/contacts/tests/FakeAccountType.java
+++ b/tests/src/com/android/contacts/tests/FakeAccountType.java
@@ -21,8 +21,8 @@
 import android.graphics.PixelFormat;
 import android.graphics.drawable.Drawable;
 
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
 
 public class FakeAccountType extends AccountType {
     public boolean areContactsWritable = false;
diff --git a/tests/src/com/android/contacts/tests/FakeDeviceAccountTypeFactory.java b/tests/src/com/android/contacts/tests/FakeDeviceAccountTypeFactory.java
index 65f8014..9ed9595 100644
--- a/tests/src/com/android/contacts/tests/FakeDeviceAccountTypeFactory.java
+++ b/tests/src/com/android/contacts/tests/FakeDeviceAccountTypeFactory.java
@@ -15,8 +15,8 @@
  */
 package com.android.contacts.tests;
 
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.util.DeviceLocalAccountTypeFactory;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.util.DeviceLocalAccountTypeFactory;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/tests/src/com/android/contacts/tests/FakeSimContactDao.java b/tests/src/com/android/contacts/tests/FakeSimContactDao.java
new file mode 100644
index 0000000..c40ab25
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/FakeSimContactDao.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.tests;
+
+import android.content.ContentProviderResult;
+import android.content.OperationApplicationException;
+import android.os.RemoteException;
+
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
+import com.android.contacts.model.account.AccountWithDataSet;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Fake implementation of SimContactDao for testing
+ */
+public class FakeSimContactDao extends SimContactDao {
+
+    public boolean canReadSimContacts = true;
+    public List<SimCard> simCards;
+    public Map<SimCard, ArrayList<SimContact>> simContacts;
+    public ContentProviderResult[] importResult;
+    public Map<AccountWithDataSet, Set<SimContact>> existingSimContacts;
+
+    public FakeSimContactDao() {
+        simCards = new ArrayList<>();
+        simContacts = new HashMap<>();
+        importResult = new ContentProviderResult[0];
+        existingSimContacts = new HashMap<>();
+    }
+
+    @Override
+    public boolean canReadSimContacts() {
+        return canReadSimContacts;
+    }
+
+    @Override
+    public List<SimCard> getSimCards() {
+        return simCards;
+    }
+
+    @Override
+    public ArrayList<SimContact> loadContactsForSim(SimCard sim) {
+        return simContacts.get(sim);
+    }
+
+    @Override
+    public ContentProviderResult[] importContacts(List<SimContact> contacts,
+            AccountWithDataSet targetAccount)
+            throws RemoteException, OperationApplicationException {
+        return importResult;
+    }
+
+    @Override
+    public void persistSimStates(List<SimCard> simCards) {
+        this.simCards = simCards;
+    }
+
+    @Override
+    public SimCard getSimBySubscriptionId(int subscriptionId) {
+        if (subscriptionId == SimCard.NO_SUBSCRIPTION_ID) {
+            return simCards.get(0);
+        }
+        for (SimCard sim : simCards) {
+            if (sim.getSubscriptionId() == subscriptionId) {
+                return sim;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Map<AccountWithDataSet, Set<SimContact>> findAccountsOfExistingSimContacts(
+            List<SimContact> contacts) {
+        return existingSimContacts;
+    }
+
+    public FakeSimContactDao addSim(SimCard sim, SimContact... contacts) {
+        simCards.add(sim);
+        simContacts.put(sim, new ArrayList<>(Arrays.asList(contacts)));
+        return this;
+    }
+
+    public static FakeSimContactDao singleSimWithContacts(SimCard sim, SimContact... contacts) {
+        return new FakeSimContactDao().addSim(sim, contacts);
+    }
+
+    public static FakeSimContactDao noSim() {
+        FakeSimContactDao result = new FakeSimContactDao();
+        result.canReadSimContacts = false;
+        return result;
+    }
+
+}
diff --git a/tests/src/com/android/contacts/tests/PhoneNumberTestService.java b/tests/src/com/android/contacts/tests/PhoneNumberTestService.java
index d5fee92..d8ba9b2 100644
--- a/tests/src/com/android/contacts/tests/PhoneNumberTestService.java
+++ b/tests/src/com/android/contacts/tests/PhoneNumberTestService.java
@@ -17,12 +17,12 @@
 package com.android.contacts.tests;
 
 import android.app.IntentService;
-import android.content.Context;
 import android.content.Intent;
 import android.telephony.PhoneNumberUtils;
 import android.util.Log;
 
-import com.android.contacts.common.GeoUtil;
+import com.android.contacts.GeoUtil;
+
 import com.google.i18n.phonenumbers.NumberParseException;
 import com.google.i18n.phonenumbers.PhoneNumberUtil;
 import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
diff --git a/tests/src/com/android/contacts/tests/SimContactsTestHelper.java b/tests/src/com/android/contacts/tests/SimContactsTestHelper.java
index c2ffead..ab10ed5 100644
--- a/tests/src/com/android/contacts/tests/SimContactsTestHelper.java
+++ b/tests/src/com/android/contacts/tests/SimContactsTestHelper.java
@@ -15,7 +15,10 @@
  */
 package com.android.contacts.tests;
 
-import android.content.ContentProvider;
+import static org.hamcrest.Matchers.equalTo;
+import static org.junit.Assume.assumeThat;
+import static org.junit.Assume.assumeTrue;
+
 import android.content.ContentProviderOperation;
 import android.content.ContentProviderResult;
 import android.content.ContentResolver;
@@ -29,17 +32,14 @@
 import android.support.test.InstrumentationRegistry;
 import android.telephony.TelephonyManager;
 
-import com.android.contacts.common.model.SimContact;
-import com.android.contacts.common.database.SimContactDao;
-import com.android.contacts.common.test.mocks.MockContentProvider;
+import com.android.contacts.database.SimContactDao;
+import com.android.contacts.database.SimContactDaoImpl;
+import com.android.contacts.model.SimCard;
+import com.android.contacts.model.SimContact;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import static org.hamcrest.Matchers.equalTo;
-import static org.junit.Assume.assumeThat;
-import static org.junit.Assume.assumeTrue;
-
 public class SimContactsTestHelper {
 
     private final Context mContext;
@@ -59,7 +59,7 @@
     }
 
     public int getSimContactCount() {
-        Cursor cursor = mContext.getContentResolver().query(SimContactDao.ICC_CONTENT_URI,
+        Cursor cursor = mContext.getContentResolver().query(SimContactDaoImpl.ICC_CONTENT_URI,
                 null, null, null, null);
         try {
             return cursor.getCount();
@@ -68,32 +68,6 @@
         }
     }
 
-    public ContentValues iccRow(long id, String name, String number, String emails) {
-        ContentValues values = new ContentValues();
-        values.put(SimContactDao._ID, id);
-        values.put(SimContactDao.NAME, name);
-        values.put(SimContactDao.NUMBER, number);
-        values.put(SimContactDao.EMAILS, emails);
-        return values;
-    }
-
-    public ContentProvider iccProviderExpectingNoQueries() {
-        return new MockContentProvider();
-    }
-
-    public ContentProvider emptyIccProvider() {
-        final MockContentProvider provider = new MockContentProvider();
-        provider.expectQuery(SimContactDao.ICC_CONTENT_URI)
-                .withDefaultProjection(
-                        SimContactDao._ID, SimContactDao.NAME,
-                        SimContactDao.NUMBER, SimContactDao.EMAILS)
-                .withAnyProjection()
-                .withAnySelection()
-                .withAnySortOrder()
-                .returnEmptyCursor();
-        return provider;
-    }
-
     public Uri addSimContact(String name, String number) {
         ContentValues values = new ContentValues();
         // Oddly even though it's called name when querying we have to use "tag" for it to work
@@ -102,23 +76,26 @@
             values.put("tag", name);
         }
         if (number != null) {
-            values.put(SimContactDao.NUMBER, number);
+            values.put(SimContactDaoImpl.NUMBER, number);
         }
-        return mResolver.insert(SimContactDao.ICC_CONTENT_URI, values);
+        return mResolver.insert(SimContactDaoImpl.ICC_CONTENT_URI, values);
     }
 
     public ContentProviderResult[] deleteAllSimContacts()
             throws RemoteException, OperationApplicationException {
-        SimContactDao dao = SimContactDao.create(mContext);
-        List<SimContact> contacts = dao.loadSimContacts();
+        final List<SimCard> sims = mSimDao.getSimCards();
+        if (sims.isEmpty()) {
+            throw new IllegalStateException("Expected SIM card");
+        }
+        final List<SimContact> contacts = mSimDao.loadContactsForSim(sims.get(0));
         ArrayList<ContentProviderOperation> ops = new ArrayList<>();
         for (SimContact contact : contacts) {
             ops.add(ContentProviderOperation
-                    .newDelete(SimContactDao.ICC_CONTENT_URI)
+                    .newDelete(SimContactDaoImpl.ICC_CONTENT_URI)
                     .withSelection(getWriteSelection(contact), null)
                     .build());
         }
-        return mResolver.applyBatch(SimContactDao.ICC_CONTENT_URI.getAuthority(), ops);
+        return mResolver.applyBatch(SimContactDaoImpl.ICC_CONTENT_URI.getAuthority(), ops);
     }
 
     public ContentProviderResult[] restore(ArrayList<ContentProviderOperation> restoreOps)
@@ -128,13 +105,17 @@
         // Remove SIM contacts because we assume that caller wants the data to be in the exact
         // state as when the restore ops were captured.
         deleteAllSimContacts();
-        return mResolver.applyBatch(SimContactDao.ICC_CONTENT_URI.getAuthority(), restoreOps);
+        return mResolver.applyBatch(SimContactDaoImpl.ICC_CONTENT_URI.getAuthority(), restoreOps);
     }
 
     public ArrayList<ContentProviderOperation> captureRestoreSnapshot() {
-        ArrayList<SimContact> contacts = mSimDao.loadSimContacts();
+        final List<SimCard> sims = mSimDao.getSimCards();
+        if (sims.isEmpty()) {
+            throw new IllegalStateException("Expected SIM card");
+        }
+        final ArrayList<SimContact> contacts = mSimDao.loadContactsForSim(sims.get(0));
 
-        ArrayList<ContentProviderOperation> ops = new ArrayList<>();
+        final ArrayList<ContentProviderOperation> ops = new ArrayList<>();
         for (SimContact contact : contacts) {
             final String[] emails = contact.getEmails();
             if (emails != null && emails.length > 0) {
@@ -142,7 +123,7 @@
                         " Please manually remove SIM contacts with emails.");
             }
             ops.add(ContentProviderOperation
-                    .newInsert(SimContactDao.ICC_CONTENT_URI)
+                    .newInsert(SimContactDaoImpl.ICC_CONTENT_URI)
                     .withValue("tag", contact.getName())
                     .withValue("number", contact.getPhone())
                     .build());
@@ -151,15 +132,15 @@
     }
 
     public String getWriteSelection(SimContact simContact) {
-        return "tag='" + simContact.getName() + "' AND " + SimContactDao.NUMBER + "='" +
+        return "tag='" + simContact.getName() + "' AND " + SimContactDaoImpl.NUMBER + "='" +
                 simContact.getPhone() + "'";
     }
 
     public int deleteSimContact(@NonNull  String name, @NonNull  String number) {
         // IccProvider doesn't use the selection args.
         final String selection = "tag='" + name + "' AND " +
-                SimContactDao.NUMBER + "='" + number + "'";
-        return mResolver.delete(SimContactDao.ICC_CONTENT_URI, selection, null);
+                SimContactDaoImpl.NUMBER + "='" + number + "'";
+        return mResolver.delete(SimContactDaoImpl.ICC_CONTENT_URI, selection, null);
     }
 
     public boolean isSimReady() {
diff --git a/tests/src/com/android/contacts/tests/StringableCursor.java b/tests/src/com/android/contacts/tests/StringableCursor.java
new file mode 100644
index 0000000..dbe3fca
--- /dev/null
+++ b/tests/src/com/android/contacts/tests/StringableCursor.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.contacts.tests;
+
+import android.database.Cursor;
+import android.database.CursorWrapper;
+import android.database.DatabaseUtils;
+
+/**
+ * Wrapper around a cursor with a custom toString that dumps the entire cursor data
+ *
+ * This is for providing more useful info during debugging and testing.
+ */
+public class StringableCursor extends CursorWrapper {
+    public StringableCursor(Cursor cursor) {
+        super(cursor);
+    }
+
+    @Override
+    public String toString() {
+        final Cursor wrapped = getWrappedCursor();
+
+        if (wrapped.getCount() == 0) {
+            return "Empty Cursor";
+        }
+
+        return DatabaseUtils.dumpCursorToString(wrapped);
+    }
+}
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index 32930f9..ba18d6f 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -44,7 +44,6 @@
 import android.widget.ListView;
 import android.widget.Toast;
 
-import com.android.contacts.GroupListLoader;
 import com.android.contacts.group.GroupUtil;
 import com.android.contacts.list.UiIntentActions;
 import com.android.contacts.tests.R;
diff --git a/tests/src/com/android/contacts/util/AccountDisplayInfoFactoryTests.java b/tests/src/com/android/contacts/util/AccountDisplayInfoFactoryTests.java
index 875f40e..ca6d165 100644
--- a/tests/src/com/android/contacts/util/AccountDisplayInfoFactoryTests.java
+++ b/tests/src/com/android/contacts/util/AccountDisplayInfoFactoryTests.java
@@ -22,13 +22,12 @@
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.contacts.common.model.AccountTypeManager;
-import com.android.contacts.common.model.account.AccountDisplayInfo;
-import com.android.contacts.common.model.account.AccountDisplayInfoFactory;
-import com.android.contacts.common.model.account.AccountType;
-import com.android.contacts.common.model.account.AccountWithDataSet;
-import com.android.contacts.common.test.mocks.MockAccountTypeManager;
-import com.android.contacts.common.util.DeviceLocalAccountTypeFactory;
+import com.android.contacts.model.AccountTypeManager;
+import com.android.contacts.model.account.AccountDisplayInfo;
+import com.android.contacts.model.account.AccountDisplayInfoFactory;
+import com.android.contacts.model.account.AccountType;
+import com.android.contacts.model.account.AccountWithDataSet;
+import com.android.contacts.test.mocks.MockAccountTypeManager;
 import com.android.contacts.tests.FakeAccountType;
 import com.android.contacts.tests.FakeDeviceAccountTypeFactory;
 
diff --git a/tests/src/com/android/contacts/util/BitmapUtilTests.java b/tests/src/com/android/contacts/util/BitmapUtilTests.java
new file mode 100644
index 0000000..ee7ebc0
--- /dev/null
+++ b/tests/src/com/android/contacts/util/BitmapUtilTests.java
@@ -0,0 +1,121 @@
+/*
+ * 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.util;
+
+import android.graphics.Bitmap;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+/**
+ * Tests for {@link com.android.contacts.util.BitmapUtil}.
+ */
+@SmallTest
+public class BitmapUtilTests extends AndroidTestCase {
+    public void testGetSmallerExtentFromBytes1() throws Exception {
+        assertEquals(100, BitmapUtil.getSmallerExtentFromBytes(createJpegRawData(100, 100)));
+        assertEquals(100, BitmapUtil.getSmallerExtentFromBytes(createPngRawData(100, 100)));
+    }
+
+    public void testGetSmallerExtentFromBytes2() throws Exception {
+        assertEquals(50, BitmapUtil.getSmallerExtentFromBytes(createJpegRawData(200, 50)));
+        assertEquals(50, BitmapUtil.getSmallerExtentFromBytes(createPngRawData(200, 50)));
+    }
+
+    public void testGetSmallerExtentFromBytes3() throws Exception {
+        assertEquals(40, BitmapUtil.getSmallerExtentFromBytes(createJpegRawData(40, 150)));
+        assertEquals(40, BitmapUtil.getSmallerExtentFromBytes(createPngRawData(40, 150)));
+    }
+
+    public void testFindOptimalSampleSizeExact() throws Exception {
+        assertEquals(1, BitmapUtil.findOptimalSampleSize(512, 512));
+    }
+
+    public void testFindOptimalSampleSizeBigger() throws Exception {
+        assertEquals(1, BitmapUtil.findOptimalSampleSize(512, 1024));
+    }
+
+    public void testFindOptimalSampleSizeSmaller1() throws Exception {
+        assertEquals(2, BitmapUtil.findOptimalSampleSize(512, 256));
+    }
+
+    public void testFindOptimalSampleSizeSmaller2() throws Exception {
+        assertEquals(2, BitmapUtil.findOptimalSampleSize(512, 230));
+    }
+
+    public void testFindOptimalSampleSizeSmaller3() throws Exception {
+        assertEquals(4, BitmapUtil.findOptimalSampleSize(512, 129));
+    }
+
+    public void testFindOptimalSampleSizeSmaller4() throws Exception {
+        assertEquals(4, BitmapUtil.findOptimalSampleSize(512, 128));
+    }
+
+    public void testFindOptimalSampleSizeUnknownOriginal() throws Exception {
+        assertEquals(1, BitmapUtil.findOptimalSampleSize(-1, 128));
+    }
+
+    public void testFindOptimalSampleSizeUnknownTarget() throws Exception {
+        assertEquals(1, BitmapUtil.findOptimalSampleSize(128, -1));
+    }
+
+    public void testDecodeWithSampleSize1() throws IOException {
+        assertBitmapSize(128, 64, BitmapUtil.decodeBitmapFromBytes(createJpegRawData(128, 64), 1));
+        assertBitmapSize(128, 64, BitmapUtil.decodeBitmapFromBytes(createPngRawData(128, 64), 1));
+    }
+
+    public void testDecodeWithSampleSize2() throws IOException {
+        assertBitmapSize(64, 32, BitmapUtil.decodeBitmapFromBytes(createJpegRawData(128, 64), 2));
+        assertBitmapSize(64, 32, BitmapUtil.decodeBitmapFromBytes(createPngRawData(128, 64), 2));
+    }
+
+    public void testDecodeWithSampleSize2a() throws IOException {
+        assertBitmapSize(25, 20, BitmapUtil.decodeBitmapFromBytes(createJpegRawData(50, 40), 2));
+        assertBitmapSize(25, 20, BitmapUtil.decodeBitmapFromBytes(createPngRawData(50, 40), 2));
+    }
+
+    public void testDecodeWithSampleSize4() throws IOException {
+        assertBitmapSize(32, 16, BitmapUtil.decodeBitmapFromBytes(createJpegRawData(128, 64), 4));
+        assertBitmapSize(32, 16, BitmapUtil.decodeBitmapFromBytes(createPngRawData(128, 64), 4));
+    }
+
+    private void assertBitmapSize(int expectedWidth, int expectedHeight, Bitmap bitmap) {
+        assertEquals(expectedWidth, bitmap.getWidth());
+        assertEquals(expectedHeight, bitmap.getHeight());
+    }
+
+    private byte[] createJpegRawData(int sourceWidth, int sourceHeight) throws IOException {
+        return createRawData(Bitmap.CompressFormat.JPEG, sourceWidth, sourceHeight);
+    }
+
+    private byte[] createPngRawData(int sourceWidth, int sourceHeight) throws IOException {
+        return createRawData(Bitmap.CompressFormat.PNG, sourceWidth, sourceHeight);
+    }
+
+    private byte[] createRawData(Bitmap.CompressFormat format, int sourceWidth,
+            int sourceHeight) throws IOException {
+        // Create a temp bitmap as our source
+        Bitmap b = Bitmap.createBitmap(sourceWidth, sourceHeight, Bitmap.Config.ARGB_8888);
+        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+        b.compress(format, 50, outputStream);
+        final byte[] data = outputStream.toByteArray();
+        outputStream.close();
+        return data;
+    }
+}
diff --git a/tests/src/com/android/contacts/util/ContactDisplayUtilTests.java b/tests/src/com/android/contacts/util/ContactDisplayUtilTests.java
new file mode 100644
index 0000000..88c9e29
--- /dev/null
+++ b/tests/src/com/android/contacts/util/ContactDisplayUtilTests.java
@@ -0,0 +1,202 @@
+/*
+ * 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.util;
+
+import static android.provider.ContactsContract.CommonDataKinds.Phone;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.contacts.R;
+import com.android.contacts.preference.ContactsPreferences;
+
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Unit tests for (@link ContactDisplayUtils}
+ */
+@SmallTest
+public class ContactDisplayUtilTests extends AndroidTestCase {
+
+    private static final String NAME_PRIMARY = "Name Primary";
+    private static final String NAME_ALTERNATIVE = "Name Alternative";
+
+    @Mock private ContactsPreferences mContactsPreferences;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        MockitoAnnotations.initMocks(this);
+    }
+
+    public void testIsCustomPhoneTypeReturnsTrue() {
+        assertTrue(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_CUSTOM));
+        assertTrue(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_ASSISTANT));
+    }
+
+    public void testIsCustomPhoneTypeReturnsFalse() {
+        assertFalse(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_HOME));
+        assertFalse(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_FAX_WORK));
+        assertFalse(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_MOBILE));
+        assertFalse(ContactDisplayUtils.isCustomPhoneType(Phone.TYPE_OTHER));
+    }
+
+    public void testGetLabelForCallOrSmsReturnsCustomLabel() {
+        final CharSequence smsResult = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_CUSTOM,
+                "expected sms label", ContactDisplayUtils.INTERACTION_SMS, getContext());
+        assertEquals("expected sms label", smsResult);
+
+        final CharSequence callResult = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_CUSTOM,
+                "expected call label", ContactDisplayUtils.INTERACTION_CALL, getContext());
+        assertEquals("expected call label", callResult);
+    }
+
+    public void testGetLabelForCallOrSmsReturnsCallLabels() {
+        CharSequence result = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_HOME, "",
+                ContactDisplayUtils.INTERACTION_CALL, getContext());
+        CharSequence expected = getContext().getResources().getText(R.string.call_home);
+        assertEquals(expected, result);
+
+        result = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_MOBILE, "",
+                ContactDisplayUtils.INTERACTION_CALL, getContext());
+        expected = getContext().getResources().getText(R.string.call_mobile);
+        assertEquals(expected, result);
+    }
+
+    public void testGetLabelForCallOrSmsReturnsSmsLabels() {
+        CharSequence result = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_HOME, "",
+                ContactDisplayUtils.INTERACTION_SMS, getContext());
+        CharSequence expected = getContext().getResources().getText(R.string.sms_home);
+        assertEquals(expected, result);
+
+        result = ContactDisplayUtils.getLabelForCallOrSms(Phone.TYPE_MOBILE, "",
+                ContactDisplayUtils.INTERACTION_SMS, getContext());
+        expected = getContext().getResources().getText(R.string.sms_mobile);
+        assertEquals(expected, result);
+    }
+
+    public void testGetPhoneLabelResourceIdReturnsOther() {
+        assertEquals(R.string.call_other, ContactDisplayUtils.getPhoneLabelResourceId(null));
+    }
+
+    public void testGetPhoneLabelResourceIdReturnsMatchHome() {
+        assertEquals(R.string.call_home, ContactDisplayUtils.getPhoneLabelResourceId(
+                Phone.TYPE_HOME));
+    }
+
+    public void testGetSmsLabelResourceIdReturnsOther() {
+        assertEquals(R.string.sms_other, ContactDisplayUtils.getSmsLabelResourceId(null));
+    }
+
+    public void testGetSmsLabelResourceIdReturnsMatchHome() {
+        assertEquals(R.string.sms_home, ContactDisplayUtils.getSmsLabelResourceId(Phone.TYPE_HOME));
+    }
+
+    public void testGetPreferredDisplayName_NullContactsPreferences() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, null));
+    }
+
+    public void testGetPreferredDisplayName_NullContactsPreferences_NullAlternative() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY, null,
+                null));
+    }
+
+    public void testGetPreferredDisplayName_NullContactsPreferences_NullPrimary() {
+        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredDisplayName(null,
+                NAME_ALTERNATIVE, null));
+    }
+
+    public void testGetPreferredDisplayName_NullContactsPreferences_BothNull() {
+        assertNull(ContactDisplayUtils.getPreferredDisplayName(null, null, null));
+    }
+
+    public void testGetPreferredDisplayName_EmptyAlternative() {
+        Mockito.when(mContactsPreferences.getDisplayOrder())
+                .thenReturn(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY, "",
+                mContactsPreferences));
+    }
+
+    public void testGetPreferredDisplayName_InvalidPreference() {
+        Mockito.when(mContactsPreferences.getDisplayOrder()).thenReturn(-1);
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, mContactsPreferences));
+    }
+
+    public void testGetPreferredDisplayName_Primary() {
+        Mockito.when(mContactsPreferences.getDisplayOrder())
+                .thenReturn(ContactsPreferences.DISPLAY_ORDER_PRIMARY);
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, mContactsPreferences));
+    }
+
+    public void testGetPreferredDisplayName_Alternative() {
+        Mockito.when(mContactsPreferences.getDisplayOrder())
+                .thenReturn(ContactsPreferences.DISPLAY_ORDER_ALTERNATIVE);
+        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredDisplayName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, mContactsPreferences));
+    }
+
+    public void testGetPreferredSortName_NullContactsPreferences() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, null));
+    }
+
+    public void testGetPreferredSortName_NullContactsPreferences_NullAlternative() {
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY, null,
+                null));
+    }
+
+    public void testGetPreferredSortName_NullContactsPreferences_NullPrimary() {
+        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredSortName(null,
+                NAME_ALTERNATIVE, null));
+    }
+
+    public void testGetPreferredSortName_NullContactsPreferences_BothNull() {
+        assertNull(ContactDisplayUtils.getPreferredSortName(null, null, null));
+    }
+
+    public void testGetPreferredSortName_EmptyAlternative() {
+        Mockito.when(mContactsPreferences.getSortOrder())
+                .thenReturn(ContactsPreferences.SORT_ORDER_ALTERNATIVE);
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY, "",
+                mContactsPreferences));
+    }
+
+    public void testGetPreferredSortName_InvalidPreference() {
+        Mockito.when(mContactsPreferences.getSortOrder()).thenReturn(-1);
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, mContactsPreferences));
+    }
+
+    public void testGetPreferredSortName_Primary() {
+        Mockito.when(mContactsPreferences.getSortOrder())
+                .thenReturn(ContactsPreferences.SORT_ORDER_PRIMARY);
+        assertEquals(NAME_PRIMARY, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, mContactsPreferences));
+    }
+
+    public void testGetPreferredSortName_Alternative() {
+        Mockito.when(mContactsPreferences.getSortOrder())
+                .thenReturn(ContactsPreferences.SORT_ORDER_ALTERNATIVE);
+        assertEquals(NAME_ALTERNATIVE, ContactDisplayUtils.getPreferredSortName(NAME_PRIMARY,
+                NAME_ALTERNATIVE, mContactsPreferences));
+    }
+}
diff --git a/tests/src/com/android/contacts/util/SearchUtilTest.java b/tests/src/com/android/contacts/util/SearchUtilTest.java
new file mode 100644
index 0000000..e2156ca
--- /dev/null
+++ b/tests/src/com/android/contacts/util/SearchUtilTest.java
@@ -0,0 +1,114 @@
+/*
+ * 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.util;
+
+import android.test.suitebuilder.annotation.SmallTest;
+
+import junit.framework.TestCase;
+
+/**
+ * Unit tests for {@link SearchUtil}.
+ */
+@SmallTest
+public class SearchUtilTest extends TestCase {
+
+    public void testFindMatchingLine() {
+        final String actual = "this is a long test string.\nWith potentially many lines.\n" +
+                "test@google.com\nhello\nblah\n'leading punc";
+
+        SearchUtil.MatchedLine matched = SearchUtil.findMatchingLine(actual, "poten");
+        assertEquals("With potentially many lines.", matched.line);
+        assertEquals(5, matched.startIndex);
+
+        // Full line match.
+        matched = SearchUtil.findMatchingLine(actual, "hello");
+        assertEquals("hello", matched.line);
+        assertEquals(0, matched.startIndex);
+
+        // First line match
+        matched = SearchUtil.findMatchingLine(actual, "this");
+        assertEquals("this is a long test string.", matched.line);
+        assertEquals(0, matched.startIndex);
+
+        // Last line match
+        matched = SearchUtil.findMatchingLine(actual, "punc");
+        assertEquals("'leading punc", matched.line);
+        assertEquals(9, matched.startIndex);
+    }
+
+    public void testContains() {
+        final String actual = "this is a long test string.\nWith potentially many lines.\n" +
+                "test@google.com\nhello\nblah\n'leading punc";
+        assertEquals(0, SearchUtil.contains(actual, "this"));
+        assertEquals(10, SearchUtil.contains(actual, "lon"));
+
+        assertEquals(1, SearchUtil.contains("'leading punc", "lead"));
+        assertEquals(9, SearchUtil.contains("'leading punc", "punc"));
+
+    }
+
+    public void testContainsNotFound() {
+        final String actual = "this is a long test string.\nWith potentially many lines.\n" +
+                "test@google.com\nhello\nblah\n'leading punc";
+
+        // Non-prefix
+        assertEquals(-1, SearchUtil.contains(actual, "ith"));
+        assertEquals(-1, SearchUtil.contains(actual, "ing"));
+
+        // Complete misses
+        assertEquals(-1, SearchUtil.contains(actual, "thisx"));
+        assertEquals(-1, SearchUtil.contains(actual, "manyx"));
+        assertEquals(-1, SearchUtil.contains(actual, "hellox"));
+
+        // Test for partial match of start of query to end of line
+        assertEquals(-1, SearchUtil.contains(actual, "punctual"));
+    }
+
+    public void testFindNextTokenStart() {
+        final String actual = "....hello.kitty";
+        //                     012345678901234
+
+        // Find first token.
+        assertEquals(4, SearchUtil.findNextTokenStart(actual, 0));
+        assertEquals(4, SearchUtil.findNextTokenStart(actual, 1));
+        assertEquals(4, SearchUtil.findNextTokenStart(actual, 2));
+        assertEquals(4, SearchUtil.findNextTokenStart(actual, 3));
+
+        // Find second token.
+        assertEquals(10, SearchUtil.findNextTokenStart(actual, 4));
+        assertEquals(10, SearchUtil.findNextTokenStart(actual, 5));
+        assertEquals(10, SearchUtil.findNextTokenStart(actual, 6));
+        assertEquals(10, SearchUtil.findNextTokenStart(actual, 7));
+        assertEquals(10, SearchUtil.findNextTokenStart(actual, 8));
+        assertEquals(10, SearchUtil.findNextTokenStart(actual, 9));
+
+        // No token.
+        assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 10));
+        assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 11));
+        assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 12));
+        assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 13));
+        assertEquals(actual.length(), SearchUtil.findNextTokenStart(actual, 14));
+    }
+
+    public void testCleanStartAndEndOfSearchQuery() {
+        assertEquals("test", SearchUtil.cleanStartAndEndOfSearchQuery("...test..."));
+        assertEquals("test", SearchUtil.cleanStartAndEndOfSearchQuery(" test "));
+        assertEquals("test", SearchUtil.cleanStartAndEndOfSearchQuery(" ||test"));
+        assertEquals("test", SearchUtil.cleanStartAndEndOfSearchQuery("test.."));
+    }
+
+}
diff --git a/tests/src/com/android/contacts/util/SyncUtilTests.java b/tests/src/com/android/contacts/util/SyncUtilTests.java
index 372a652..508ff04 100644
--- a/tests/src/com/android/contacts/util/SyncUtilTests.java
+++ b/tests/src/com/android/contacts/util/SyncUtilTests.java
@@ -19,9 +19,6 @@
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import java.util.ArrayList;
-import java.util.List;
-
 /**
  * Tests for SyncUtil.
  */
